��\u000bMN\u0011W(kVMc\u000f\u0001O\u0007\u000e\u0019/9X7\\�C\u0007NO\u0004\u0013,?iBHK��\u0001\u0012\b;I\u001d,\u0018\u0015\u0006\u0007\u0002���\u0012�@G\u0000\u0001\u0000d\u0000f\u0003�\u0004�\u0000H\u0000\u0000\u0001\u0017\u000e\u0002#\"&\u0007\u000e\u0001\u000f\u0001'>\u00057>\u0001'#53&'.\u0001>\u00017632\u0016\u0015#4.\u0001#\"\u0006\u0007\u0006\u0015\u0014\u001e\u0006\u00173\u0015#\u0016\u0006\u0007\u0006\u0007>\u000136\u001632\u0003b2)O'*\u0017�2'V\u0017\u00187\u0006\u0015\n\u0011\f\u0011\t0\f$ݦ\u0018\u0014\n\t\u0003/-a��ʙDP$%T\u0014)\u0005\u0006\r\b\u0014\b\u0017\u0002��\b\u0015\u0015):#b\u0015 �\"L\u0001,�\u0019\u0017\u0003B\u0004\u0004\u001a\f\u000b�\u0004\u000e\u0006\r\u000b\u0011\n7�Gd17\u001a;V^(X�w4K\u001c\u001d\u0015,9\u000b\u001b\u0015 \u0012%\u000e(\u0004d2�\u001d;6\u000b\u000e\u0001\"\u0000\u0000\u0000\u0000\u0002\u0000\u0002\u0000\u0000\u0004�\u0004�\u0000\u0006\u0000\r\u0000\u0000!\u0001#\u0011#\u0011#\t\u0001#\u0011#\u0011#\u0001,\u0001*���\u0003�\u0001*���\u0001,\u0003��|\u0003����|\u0003�\u0000\u0000\u0000\u0005\u0000\u0002\u0000\u0000\u0003�\u0004�\u0000\u0006\u0000\u000e\u0000\u0012\u0000\u001c\u0000\"\u0000\u0000\u00013\t\u00013\u00113!\u0011#5#\u0015#\u0011\u0017#\u00153\u0003!\u0015#\u0015#535#\u00133\u0015!53\u0001��������\u0002Xddd�dd�\u0001,cdc�d���d\u0001,��\u0001,\u0003��\fdd\u0001�d��p�ddd��d�\u0000\u0005\u0000\u0002\u0000\u0000\u0003�\u0004�\u0000\u0006\u0000\u0010\u0000\u0016\u0000\u001e\u0000\"\u0000\u0000\u00013\t\u00013\u00113!\u0015#\u0015#535#5\u00133\u0015!53\u0003!\u0011#5#\u0015#735#\u0001��������\u0002Xcdc�d���dd\u0001,dddedd\u0001,��\u0001,\u0003��dddd�pd��p�\fdd��\u0000\u0000\u0004\u0000\u0002\u0000\u0000\u0004L\u0004�\u0000\u0006\u0000\f\u0000\u0012\u0000\u0016\u0000\u0000!\u0001#\u0011#\u0011#\u0001#53\u0011#\u0017\u0011#5#\u0011\u0017#\u00153\u0001,\u0001*���\u0003�d�d�d��dd\u0001,\u0003��|\u0003 d�\f��\fd\u0001�d�\u0000\u0004\u0000\u0002\u0000\u0000\u0004L\u0004�\u0000\u0006\u0000\f\u0000\u0010\u0000\u0016\u0000\u0000!\u0001#\u0011#\u0011#\u0001\u0011#5#\u0011\u0017#\u00153\u0003#53\u0011#\u0001,\u0001*���\u0004Jd��dded�d\u0001,\u0003��|\u0003��\fd\u0001�d��\fd�\f\u0000\u0000\u0000\u0000\u0005\u0000\u0002\u0000\u0000\u0004�\u0004�\u0000\u0006\u0000\n\u0000\u000e\u0000\u0012\u0000\u0016\u0000\u0000!\u0001#\u0011#\u0011#\u0001#53\u0013!5!\u0013!5!\u0013!5!\u0001,\u0001*���\u0003���d��\u0001,d�p\u0001�d�\f\u0001�\u0001,\u0003��|\u0002���\f��\f��\f�\u0000\u0000\u0000\u0000\u0005\u0000\u0002\u0000\u0000\u0004�\u0004�\u0000\u0006\u0000\n\u0000\u000e\u0000\u0012\u0000\u0016\u0000\u0000!\u0001#\u0011#\u0011#\u0001!5!\u0003!5!\u0003!5!\u0003#53\u0001,\u0001*���\u0004��\f\u0001�d�p\u0001�d��\u0001,d��\u0001,\u0003��|\u0002���\f��\f��\f�\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0004L\u0004L\u0000\u000f\u0000\u001f\u0000\u0000\u0001!2\u0016\u0015\u0011\u0014\u0006#!\"&5\u001146\u0005!\"\u0006\u0015\u0011\u0014\u00163!265\u00114&\u0001�\u0001,�����ԥ��\u00025�\f);;)\u0001�);;\u0004L���ԥ���\u0001,���;)�\f);;)\u0001�);\u0000\u0000\u0000\u0000\u0003\u0000\u0000\u0000\u0000\u0004L\u0004L\u0000\u000f\u0000\u001f\u0000\"\u0000\u0000)\u0001\"&5\u0011463!2\u0016\u0015\u0011\u0014\u0006\u0003!\"\u0006\u0015\u0011\u0014\u00163!265\u00114&\u0005\u0011%\u0002��ԣ���\u0001,���A�\f);;)\u0001�);;�G\u0001M��\u0001,�����ԥ�\u0003�;)�\f);;)\u0001�);d�\f�\u0000\u0003\u0000\u0000\u0000\u0000\u0004L\u0004L\u0000\u000f\u0000\u001f\u0000\"\u0000\u0000\u0019\u0001463!2\u0016\u0015\u0011\u0014\u0006#!\"&%\u00114!\"\u0006\u0015\u0011\u0014\u00163!26\u0003!\u0013��\u0001,�����ԥ�\u0003�;)�\f);;)\u0001�);d�\f�\u0001�\u0001,�����ԥ��A\u0001�);;)�\f);;\u0001���\u0000\u0003\u0000\u0000\u0000\u0000\u0004L\u0004L\u0000\u000f\u0000\u001f\u0000\"\u0000\u0000\u0001\u0011\u0014\u0006#!\"&5\u0011463!2\u0016\u0003\u00114!\"\u0006\u0015\u0011\u0014\u00163!26\u0001\u0003!\u0004L���ԥ���\u0001,���;)�\f);;)\u0001�);���\u0001�\u0002��Ԣ���\u0001,�����\u0001�);;)�\f);;\u0001���\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0005\u0014\u0004L\u0000\u0013\u0000\u001a\u0000\u0000\u0001!2\u0016\u0015\u0011\u0014\u0006#!5!265\u00114!\u0013\u00015!\u0011!5\u0001�\u0001������p\u0001�);;)�\f��p��\u0001,\u0004L���ԥ��;)\u0001�);�����\u0001,�\u0000\u0000\u0001\u0000�\u0000\u0001\u0003�\u0004�\u0000\u001f\u0000\u0000%\u001727\u00016'&\u0007!6\u001276/\u0001#\"\u0007\u000e\u0001\u0000\u0007\u0006\u0017\u00163!\u0002\u0007\u0006\u0017\u0001�\t\r\r\u0002\u001a\u000f\t\b\u0018��\u0001�\u0002\u0002\b\b\t\u0010\t\u0004���L\u0011\n\n\u0016\u0001.�\u0005\u0005\t\u0002\u0001\u0010\u0002v\u0013\u0011\u0012\u0002\u0004\u0001�\f\u0011\n\b\u000f\u0005���X\u0013\u0015\u0013�J\u0014\u0015\u000b\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0005\u0014\u0004L\u0000\u0018\u0000\u001f\u0000\u0000%!\"&5\u0011463!5.\u0001/\u0001\"\u0006\u0015\u0011\u0014\u00163!2?\u00015!\u0011!5\u0001\u0003 �\f);;)\u0001�\u000e�]]����\u0001,/5d��\u0001,\u0001��;)\u0001�);�\u0004\u0007\u0002\u0002���ԥ�\u000f��\u0001,���\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0004�\u0004�\u0000\u0006\u0000$\u0000\u0000\u0001'\u0001'\u0001'!\u0003\u0007\u0015\u0014\u0006#!\"&5\u001146;\u00017'#\"\u0006\u0015\u0011\u0014\u00163!26=\u0001\u0004�����\u0001a�\u0001��z;)�\f);;)�vJd����\u0001,��\u0002�����\u0001V���{�);;)\u0001�);zN���ԥ���b\u0000\u0000\u0000\u0003\u0000\u0004\u0000\u0004\u0004�\u0004�\u0000\u000b\u0000\u0013\u0000\u001b\u0000\u0000\u0000 \u0004\u0012\u0010\u0002\u0004 $\u0002\u0010\u0012\u0004 \u0006\u0010\u0016 6\u0010$2\u0016\u0014\u0006\"&4\u0001�\u0001D\u0001\u0012�������\u0002_����\u0001V��\u0012�rr�r\u0004�������\u0001\u0012\u0001D\u0001\u0012\u0016�����\u0001V\u0017r�rr�\u0000\u0000\u0000\u0000\u0003\u0000\u0000\u0000\u0000\u0004L\u0004�\u0000\u0006\u0000\u0010\u0000\u0014\u0000\u0000\u0001\u0011!\u0011!\t\u0002!2\u0016\u0015\u0011!\u001146\u0005#\u00153\u0002�����\u0001�\u0001��6\u0004\u0018\u000b\u0010��\u000e\u0003�dd\u0003 \u0001��p�\f\u0001��\f\u000f\n��\u0001\u0013\u000b\u000ed2\u0000\u0000\u0003\u0000\u0000\u0000\u0000\u0004L\u0004�\u0000\u0006\u0000\u0010\u0000\u0014\u0000\u0000\u0001\u0011!\u0011!\t\u0001\u0003!2\u0016\u0015\u0011!\u001146\u0005#\u00153\u0001�\u0001,\u0001'�C�>K\u0004\u0018\u000b\u0010��\u000e\u0003�dd\u0002���\u0001,\u0001��\f�p\u000f\n��\u0001\u0013\u000b\u000ed2\u0000\u0000\u0003\u0000\u0000\u0000\u0000\u0004L\u0004\u0000\u0005\u0000\u000f\u0000\u0013\u0000\u0000\t\u0001'\u0001'\u0007\u0003!2\u0016\u0015\u0011!\u001146\u0005#\u00153\u0001�\u0002T��F��K\u0004\u0018\u000b\u0010��\u000e\u0003�dd\u0001�\u0002T��F���k\u000f\n��\u0001\u0013\u000b\u000ed2\u0000\u0004\u0000\u0000\u0000\u0000\u0004L\u0004�\u0000\u0003\u0000\n\u0000\u0014\u0000\u0018\u0000\u0000\u0001'\u0007\u0017\u0005'\u0007\u0017\u0007!\u0011\u0001!2\u0016\u0015\u0011!\u001146\u0005#\u00153\u0001�a�a\u0001ŕԕ�\u0002���\u0004\u0018\u000b\u0010��\u000e\u0003�dd\u0004Oa�b\u001d�ԕ�\u0002���\u000f\n��\u0001\u0013\u000b\u000ed2\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0004L\u0004�\u0000\u0006\u0000\n\u0000\u0014\u0000\u0018\u0000\u0000\u0001\u0007\u00177\u0017\u0011!\u0003\u0007\u00177\u0005!2\u0016\u0015\u0011!\u001146\u0005#\u00153\u0002\u001b�ԕ��E\u0003a�b�\u001b\u0004\u0018\u000b\u0010��\u000e\u0003�dd\u0003��Ԕ�\u0002��\u0015a�a�\u000f\n��\u0001\u0013\u000b\u000ed2\u0000\u0000\u0000\u0002\u0000\u0017��\u0004�\u0004�\u0000\u0005\u0000\b\u0000\u0000\u0001\u0011\t\u0001\u0011!\t\u0001\u0015\u0004��%���x\u0004w�`\u0004���\u0001\u0010�w\u0001�\u0002��8�\u0000\u0002\u0000\u0000\u0000d\u0004L\u0004�\u0000\u0015\u0000\u0019\u0000\u0000\u0001\u0011\u0014\u0006+\u0001\u0011!\u0011#\"&5\u001146;\u0001\u0011!\u00113+\u0001\u00153\u0004L\u001e\u0014��D�\u0015\u001d\u001d\u0015�\u0001�d�dd\u0003���\u0015\u001d\u0001��p\u001d\u0015\u0003�\u0014\u001e��\u0001,�\u0000\u0000\u0000\u0003\u0000\u0000\u0000>\u0005\u0014\u0004�\u0000\u0013\u0000\u0017\u0000\u001d\u0000\u0000\u0001!\u0011#\"&5\u001146;\u0001\u0011!\u00113\u0017\u0015\u0001'\u0003#\u00153\t\u0001'7\u0017\u0001\u0002B���\u0015\u001d\u001d\u0015�\u0001�d���x\u0004dd\u0002X�%�{x\u0001a\u0001��p\u001d\u0015\u0003�\u0014\u001e��\u0001,����x\u0002=��2�$�{x\u0001`\u0000\u0003\u0000\u0000\u0000\u0006\u0005\u000e\u0004�\u0000\u0013\u0000\u0017\u0000#\u0000\u0000\u0001!\u0011#\"&5\u001146;\u0001\u0011!\u00113\u0017\u0011\u0007'\u0003#\u00153\u0001'\u0007'7'7\u00177\u0017\u0007\u0017\u0002\u0011���\u0015\u001d\u001d\u0015�\u0001�d�g�dd\u0001Ӫ�������\u0001��p\u001d\u0015\u0003�\u0014\u001e��\u0001,���g�\u0001���\u001e���������\u0000\u0000\u0000\u0000\u0003\u0000\u0000\u0000\u0000\u0004�\u0004�\u0000\u0012\u0000\u0016\u0000\u001d\u0000\u0000\u0001!\u0011#\"&5\u001146;\u0001\u0011!\u00113\u0017\u0011!\u0011#53\u0001#\u0011#\t\u0001#\u0002��\f�\u0015\u001d\u001d\u0015�\u0001�d��pdd\u0001,��\u0001,\u0001,�\u0001��p\u001d\u0015\u0003�\u0014\u001e��\u0001,���\u0001,�������\u0001,\u0000\u0000\u0003\u0000\u0000\u0000\u0000\u0004�\u0004�\u0000\u0012\u0000\u0016\u0000\u001d\u0000\u0000\u0001!\u0011#\"&5\u001146;\u0001\u0011!\u00113\u0017\u0011/\u0001#53\u00013\t\u00013\u00113\u0002Z�n�\u0015\u001d\u001d\u0015�\u0001�d���dd\u0001,�������\u0001��p\u001d\u0015\u0003�\u0014\u001e��\u0001,��n����|\u0001,����\u0000\u0000\u0003\u0000\u0000\u0000�\u0004�\u0004L\u0000\t\u0000\u0013\u0000\u0017\u0000\u0000\u000154!\"\u0006\u001d\u0002\u0011\u0014\u00163!265\u0011\u0001!\u0015!\u0004�\u001d\u0015��\u0015\u001d\u001d\u0015\u0004L\u0015\u001d��\u0001��p\u0003��\u0015\u001d\u001d\u0015�d��\u0015\u001d\u001d\u0015\u0002&���\u0000\u0000\u0000\u0000\u0006\u0000\u0000\u0000f\u0004�\u0004�\u0000\u0006\u0000\n\u0000\u000e\u0000\u0015\u0000\u0019\u0000\u001d\u0000\u0000\u0001!5\t\u00015)\u000153\u00153#53\u0001!\u0015\t\u0001\u0015!;\u0001\u0015#7\u001535\u0001�\u0001�\u0001,���p�pd�dd\u0001,�p��\u0001,\u0001�ddd�d\u0003�����������D�\u0001*\u0001*�����\u0000\u0002\u0000d\u0000\u0000\u0004�\u0004�\u0000\u0016\u0000/\u0000\u0000%\u00114&\u0007\u0005\u000e\u0001\u0015\u0011\u0014\u001e\u0002\u001f\u0001\u0011\u0014\u0016;\u000126\u0001\u0017\u0011\u0007\u0011\u0014\u0006+\u0001\"&5\u0011'\u00117\u0017\u00113\u00117\u0017\u00113\u0011\u0004�$\u001a��\u0019%\u0015\u001d\u001d\u000b\n\u001d\u0015�\u0015\u001d�v2d\u001d\u0015�\u0015\u001dd22d22d2\u0004R\u001f\u0013\u0011u\u0010E\u001f��\u001d5!\u0018\u0006\u0005�s\u0015\u001d\u001d\u0004�d�p��A\u0015\u001d\u001d\u0015\u0001��\u0001�dd��\u0001,dd��\u0001,\u0000\u0000\u0000\u0000\u0001\u0000d\u0000\u0000\u0004�\u0004L\u00003\u0000\u0000%\u001146?\u00015!\u00152\u0016\u0015\u0011!\u00114635!\u00152\u001e\u0003\u0015\u0011\u0014\u0006\u000f\u0001\u0015!5\"&5\u0011!\u0011\u0014\u0006#\u0015!5\".\u0003\u0004L2\u0019\u0019�pK\u0019�\f\u0019K�p\u0004\u000e\"\u001a\u00162\u0019\u0019\u0001�K\u0019\u0001�\u0019K\u0001�\u0004\u000e\"\u001a\u0016j\u0003x\u0016\u0019\u0001\u000288\f&�v\u0001�&\f88\u0001\u0005\t\u0015\u000e��\u0016\u0019\u0001\u000288\f&\u0001��v&\f88\u0001\u0005\t\u0015\u0000\u0000\u0000\u0006\u0000\u0000\u0000\u0000\u0004L\u0004L\u0000\t\u0000\u0019\u0000\u001d\u0000!\u0000%\u0000.\u0000\u0000\u0001'!\u0007!\u0017\u0015%35\u0001\u00114!\"\u0006\u0015\u0011\u0014\u00163!26\u0001!\u0015!\u0005%\u0015\u0005%!\u0015)\u0001%\u0011!\u0007!'!7\u0002�d��d\u0001��\u0001'i��;)��);;)\u0001,);�p\u0001,��\u0002X\u0001��p��\u0001,��\u0002�\u0001'�Wd��d\u0001��\u0003�dd�bb��D\u0001�);;)�\f);;\u0002\u001d�#���b�b��dd�\u0000\u0001\u0000\u0010\u0000\u0010\u0004�\u0004�\u0000!\u0000\u0000\u0013\u0007\u0006\u001e\u0003\u0017\u001e\u00033?\u00016&/\u0001&\u0006\u000f\u0001&'&'7>\u0001/\u0001.\u0001��\u0001\u0001\u001f>�fgї{\u001f\u001f�\u0010\u0006\u0013�\u00134\u0010w�|~ev\u0011\u0006\u000e�\u000e-\u0004��\u000b+���fg�=!\u0001�\u0011/\u000e�\u000e\u0004\u0011vg|~�v\u00111\u0014�\u0013\u0006\u0000\u0002\u0000\u0000\u0000\u0000\u0004�\u0004L\u0000\"\u0000@\u0000\u0000\u00015.\u0004#\"\u000e\u0004\u000f\u0001\u0015\u0014\u0016?\u0001>\u0001=\u00016 \u0017\u0015\u0014\u0016\u001f\u0001\u00166\u0005\u0001\u001e\u0001\u001d\u0001\u0014\u0006#!\"&=\u0001467\u000154>\u00032\u001e\u0002\u001f\u0001\u0004�\u0006\u001ad|�~\\�ud?,\t\t\u001d\u0014�\u0014\u001d�\u0001>�\u001d\u0014�\u0014\u001d�p\u0001m\u000e\u0015\u001e\u0014��\u0015\u001d\u0015\u000e\u0001m\u0002\u0016&RpR&\u0016\u0001\u0001\u0002��\b\u0019A1)\u0015!((!\u000b\n�\u0015\u0019\u0004!\u0004\"\u0015�\u0018\u0018�\u0015\"\u0004!\u0004\u0019)��\u000e3\u0014�\u0015\u001d\u001d\u0015�\u00143\u000e\u0001/2\u0004\r \u0019\u0015\u0014\u001b\u001c\n\n\u0000\u0000\u0000\u0000\u0002\u0000d\u0000\u0000\u0004�\u0004L\u0000\u0015\u0000\u0019\u0000\u00007!'57\u0011#\u0015#5#\u0015#5#\u0015#5#\u0011\u0017\u0015\u0005\u0015!5�\u0003�}ddd�d�ddd\u0003���Ȗ�d\u0001��������pd��dd\u0000\u0000\u0000\u0003\u0000d\u0000\u0000\u0004�\u0004L\u0000\t\u0000\u0013\u0000\u001d\u0000\u0000\u000132\u0016\u0015\u0011!\u001146\u000132\u0016\u0015\u0011!\u001146\u0001\u00114&+\u0001\"\u0006\u0015\u0011\u0002Xd);��;\u0001�d);��;��;)d);\u0004L;)�\u0018\u0003�);��;)�D\u0002�);��\u0001�);;)�p\u0000\u0000\u0000\u0000\u0005��\u0000\u0000\u0004�\u0004L\u0000\u000f\u0000\u0013\u0000\u001f\u0000'\u0000+\u0000\u0000\u0001\u0011\u0014\u0006#!\"&5\u0011463!2\u0016\u0007!\u0011!\u0001\u00113\u0015#\u0015!\u0011#535!#\u0011353\u0011#1\u0011#\u0011\u0004��|�D|��|\u0002�|���|\u0003�����\u0001,��\u0001,��ddd\u0003 �\f|��|\u0001�|��\u0018�D\u0002X��dd\u0001,dd�\fd\u0001,��\u0001,\u0000\u0000\u0005��\u0000\u0000\u0004�\u0004L\u0000\u000f\u0000\u0013\u0000\u001f\u0000'\u0000+\u0000\u0000\u0001\u0011\u0014\u0006#!\"&5\u0011463!2\u0016\u0007!\u0011!\u0001#5#\u0011353\u00153\u0011#!#\u0011353\u0011#1\u0011#\u0011\u0004��|�D|��|\u0002�|���|\u0003���dddddd\u0001���ddd\u0003 �\f|��|\u0001�|��\u0018�D\u0001���\f��\u0001��\fd\u0001,��\u0001,\u0000\u0000\u0000\u0004��\u0000\u0000\u0004�\u0004L\u0000\u000f\u0000\u0013\u0000\u001b\u0000#\u0000\u0000\u0001\u0011\u0014\u0006#!\"&5\u0011463!2\u0016\u0007!\u0011!\u0001\u0011!5#\u0011353\u0011!5#\u001135\u0004��|�D|��|\u0002�|���|\u0003���\u0001,��d\u0001,��\u0003 �\f|��|\u0001�|��\u0018�D\u0002X�\fd\u0001,d�\fd\u0001,d\u0000\u0004��\u0000\u0000\u0004�\u0004L\u0000\u000f\u0000\u0013\u0000\u0016\u0000\u0019\u0000\u0000\u0001\u0011\u0014\u0006#!\"&5\u0011463!2\u0016\u0007!\u0011!\u0001\r\u00013-\u0001\u0004��|�D|��|\u0002�|���|\u0003��\f��\u0001,d\u0001,��\u0003 �\f|��|\u0001�|��\u0018�D\u0001�\u0000\u0000\u0000\u0005��\u0000\u0000\u0004�\u0004L\u0000\u000f\u0000\u0013\u0000\u0017\u0000\u001f\u0000'\u0000\u0000\u0001\u0011\u0014\u0006#!\"&5\u0011463!2\u0016\u0007!\u0011!\u0003\u0011!\u0011\u00133264&+\u0001!#\"\u0006\u0014\u0016;\u0001\u0004��|�D|��|\u0002�|���|\u0003�d�Dd�)69&�\u0001��&96)�\u0003 �\f|��|\u0001�|��\u0018�D\u0002X�\f\u0001��pT�VV�T\u0000\u0000\u0000\u0000\u0005��\u0000\u0000\u0004�\u0004L\u0000\u000f\u0000\u0013\u0000\u001f\u0000%\u0000)\u0000\u0000\u0001\u0011\u0014\u0006#!\"&5\u0011463!2\u0016\u0007!\u0011!\u0001\u00113\u0015#\u0015!\u0011#535\u00013\u0011#\u00153\u000335#\u0004��|�D|��|\u0002�|���|\u0003�����\u0001,��\u0001,d�d�dd\u0003 �\f|��|\u0001�|��\u0018�D\u0002X��dd\u0001,dd�\f\u0001�d�pd\u0000\u0000\u0000\u0000\u0006��\u0000\u0000\u0004�\u0004L\u0000\u000f\u0000\u0013\u0000\u0019\u0000\u001f\u0000#\u0000'\u0000\u0000\u0001\u0011\u0014\u0006#!\"&5\u0011463!2\u0016\u0007!\u0011!\u00015#\u0011!\u0011\u00013\u0011#\u00153\u0001#53\u001335#\u0004��|�D|��|\u0002�|���|\u0003��Dd\u0001,\u0001,d�d�qdd�dd\u0003 �\f|��|\u0001�|��\u0018�D\u0001�d�\f\u0001��p\u0001�d�����d\u0000\u0000\u0000\u0006��\u0000\u0000\u0004�\u0004L\u0000\u000f\u0000\u0013\u0000\u001d\u0000#\u0000'\u0000+\u0000\u0000\u0013!2\u0016\u0015\u0011\u0014\u0006#!\"&5\u001146\u0005!\u0011!\u0001#5!\u0011#\u0015#53%#53\u0011#%3\u0015#!#53�\u0002�|��|�D|��\u0003��|\u0003����\u0001,cdc\u0001�d�d��dd\u0001�dd\u0004L�|�\f|��|\u0001�|���D\u0001�d��dd�d�\fddd\u0000\u0000\u0000\u0003\u0000\u0004\u0000\u0004\u0004�\u0004�\u0000\u000b\u0000\u0013\u0000\u001d\u0000\u0000\u0000 \u0004\u0012\u0010\u0002\u0004 $\u0002\u0010\u0012\u0004 \u0006\u0010\u0016 6\u0010\u0007!\u0015!\u0015!'57!\u0001�\u0001D\u0001\u0012�������\u0002_����\u0001V����\u0001,��dd\u0001,\u0004�������\u0001\u0012\u0001D\u0001\u0012\u0016�����\u0001VG�dd�d\u0000\u0000\u0004\u0000\u0000\u0000\u0004\u0004�\u0004�\u0000\u000b\u0000\u0013\u0000 \u0000$\u0000\u0000\u0000 \u0004\u0012\u0010\u0002\u0004 $\u0002\u0010\u0012\u0004 \u0006\u0010\u0016 6\u0010\u0007\u0015#5#\u00153\u0015#\u0015#\u0011!\u0013#53\u0001�\u0001D\u0001\u0012�������\u0002_����\u0001V��d���d\u0001,ddd\u0004�������\u0001\u0012\u0001D\u0001\u0012\u0016�����\u0001VGddddd\u0001��pd\u0000\u0000\u0000\u0000\u0002����\u0004�\u0004A\u0000\u001a\u0000!\u0000\u0000\u000132654\"\u0007.\u0001#\"\u0006\u0015\u0014\u0017\u000e\u0001\u0015\u0014\u0016;\u0001\u0011!\u00033\t\u00013\u00113\u0003 �x��x.,,�n��\u0002BUqO�\u0001�d�������\u0001,�zx�\u000eawי\u0019\f\u000ekEPr\u0001,�p��\u0001,\u0001,\u0000\u0002����\u0004�\u0004A\u0000\u0018\u0000\u001f\u0000\u0000\t\u0001>\u000154\"\u0007.\u0001#\"\u0006\u0015\u0014\u0017\u000e\u0001\u0015\u0014\u0016;\u0001\u0001#\u0011#\t\u0001#\u0002X\u0001�^y�x.,,�n��\u0002BUqO\b\u0002\u0002��\u0001,\u0001,�\u0002��m\u001a�dy�\u000eawי\u0019\f\u000ekEPr�p\u0001,\u0001,��\u0000\u0000\u0001\u0000d\u0000\u0000\u0004L\u0004m\u0000\u0010\u0000\u0000%!\u00013\u00013\t\u00013\u00013\u0001!\u0015\u0007!'\u0002�\u0001����������Ԫ�����\u0001�K\u0001^K�\u0001,\u0001,\u0001M�����ԛ--\u0000\u0000\u0000\u0000\u0001\u0000y\u0000\u0000\u00047\u0004�\u0000)\u0000\u0000%\u0011\u001632654'>\u000154&'.\u0001#\"\u0006\u0015\u0014\u0016\u0015\"\u0006\u0015\u0014\u0016\u0017\u0006\u0015\u0014\u0016327\u0011\u0007!\u0002�.6Ji\t2;{Y\u001a�^t�\u0002\u000e\tJi9/\u0004iJ8,K\u0001^-\u00012\u001eiJ\u0018\u001f f=Z�\u0006Yq�t\u0004\u0010\u0003\u0002iJ5X\u0015\u0010\u0016Ji\u001e��-\u0000\u0000\u0000\u0003\u0000\u0000\u0000d\u0004�\u0004�\u0000\u0017\u0000\u001b\u0000%\u0000\u0000\u0001!2\u0016\u0015\u0011!5#\u0015!\u0011463!546;\u00012\u0016\u0015\u000535#\u0001\u0015\u0014\u0006#!\"&=\u0001\u0003 \u0001,);�\f��\f;)\u0001,;)�);����\u0002�;)�\u0018);\u0003�;)�pdd\u0001�);d);;)dd�D�);;)�\u0000\u0000\u0011\u0000\u0000\u0000\u0000\u0004L\u0004�\u0000\u0011\u0000\u001b\u0000\u001f\u0000#\u0000'\u0000+\u0000/\u00003\u00007\u0000;\u0000?\u0000C\u0000G\u0000K\u0000O\u0000S\u0000W\u0000\u0000\u000154&+\u00015#\u0015!5#\u0015#\"\u0006\u001d\u0002\u0011\u0014\u00163!265\u0011\u00053\u0015#73\u0015#73\u0015#73\u0015#73\u0015#\u00053\u0015#73\u0015#73\u0015#73\u0015#73\u0015#\u00053\u0015#73\u0015#73\u0015#73\u0015#73\u0015#\u0004L\u001d\u0015�d�\fd�\u0015\u001d\u001d\u0015\u0003�\u0015\u001d�\u0018dd�dd�dd�dd�dd��dd�dd�dd�dd�dd��dd�dd�dd�dd�dd\u0003��\u0015\u001ddddd\u001d\u0015�d�\u0012\u0014\u001e\u001e\u0014\u0002��ddddddddddddddddddddddddddddd\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0004�\u0004�\u0000\u0018\u0000\u0000\t\u0001\u0016\u0014\u0007\u0006\"/\u0001\u0001\u0011'\u0007\t\u00017'!\u0001'&4762\u0003�\u0001\u001b\u000f\u000f\u000e*\u000e$������\u0001/��\u0001,\u0001\u000b#\u000f\u000f\u000e*\u0004���\u000f*\u000e\u000f\u000f#��������\u0001|��\u0001\u0017$\u000e*\u000e\u000f\u0000\u0000\u0000\u0000\u0001��\u0000;\u0004�\u0004�\u0000O\u0000\u0000%\u0017\u0001>\u0001'.\u0001'\"\u0007\u0006\u0007\u0001\u000e\u0001\u0017\u001e\u0001327>\u0002767\u0001>\u0001'&'\"\u0006\u0007\u0001\u0007\u0017\u000167632\u0017\u0016\u0007\u0001\u0006#\"&'&>\u0002767\u0001>\u000232\u0017\u001e\u0001\u0007\u0006\u000f\u0001\u0003\u0002\u0006E\u0002\u0005C8\u0011\u0010fOESkZ(G�\u0000D\u001a0#vF?8!@)'(\u0011\u0001�#\u0018\u000f\u001bZ\u0014\t.C\"�|\u0007E\u0001y\u0014\u0013\u0017\u001b&\u000f\u0010$��4I7Z\t\u0005\u000f0$&\u0018\u0014\u0001\\4=k6\u0019\u0017_v\b\u0007[��w<\u0001�C�]W�$!7\u0018G�\u0000D�N9@\u001c\u00101*+,\u0011\u0001�#b/W\u0011\u0002\"\"�t\u0007C\u0001u\u0016\u0010\u0017$'$��4B?#>@$$\u0015\u0014\u0001\\475\u0004\u0011�be[��\u0000\u0000\u0000\u0004\u0000\u0000\u0000d\u0004�\u0004L\u0000\u001d\u0000!\u0000)\u00001\u0000\u0000%\u00114&+\u0001.\u0004+\u0001\"\u000e\u0002\u000f\u0001#\"\u0006\u0015\u0011\u0014\u00163!26\u0003#53\u0006\u0014\u0006\"&462\u00124&\"\u0006\u0014\u00162\u0004�;)�\u0004\u000f37S*�)R:.\u000b\f�);;)\u0003�);�dd��Ȑ��\u0006>X>>X�\u0002X);\b\u001bE5+);;\u0015\u0014;)��);;\u0002\u001dd�Ȑ�Ȑ��X>>X>\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0004L\u0004�\u0000\u0019\u0000#\u0000\u0000\u000132\u0016\u0015\u0011\u0014\u0006#!\"&5\u001146;\u00015463!2\u0016\u0015\u0005!54&+\u0001\"\u0006\u0015\u0003�d);;)�|);;)dvR\u0001,Rv�\f\u0001,\u001d\u0015�\u0015\u001d\u0003 ;)��);;)\u0002X);�RvvRȖ\u0015\u001d\u001d\u0015\u0000\u0000\u0000\u0002\u0000J\u0000\u0000\u0004f\u0004�\u0000'\u0000/\u0000\u0000\u000132\u0016\u0015\u0014\u0006\u0007\u000e\u0002\"&/\u0001.\u0001546;\u00017\u0013>\u00017'&6;\u00012\u0016\u000f\u0001\u001e\u0001\u0017\u0013\u0000\"'\u001e\u0001267\u0004&\u0011\u0014\u001b\u001a\u0012\u0016R���::\u0012\u001a\u001b\u0014\u0011v?\u000fzS\u0012\u0006\u0012\u0014^\u0014\u0012\u0006\u0012Sz\u000f?��l1\f8F8\u000b\u0001�\u001d\u0015\u0014(\u0007\t\u001c.)\u0015\u0014\u0007)\u0014\u0015\u001d�\u0001GM~\u0014 \u0013\u001a\u0015\u0013%\u0013M���+\u00061==1\u0000\u0000\u0001\u0000�\u0000\u0000\u0004L\u0004�\u0000\n\u0000\u00003\t\u0001\u00114!\"\u0006\u0015�\u0001�\u0001�\u001d\u0015��\u0015\u001d\u0001��E\u0004~\u0014\u001e\u001e\u0014\u0000\u0000\u0000\u0001\u0000o\u0000\f\u0004D\u0004�\u0000H\u0000\u0000\u0001\u001e\u0003\u000e\u0004\u0007\u0006.\u00027\u000e\u0002\u0014\u0017\u001e\u0001\u0017\u0016>\u00037>\u0001'\u001e\u0001\u0007\u000e\u0001\u0007\u000e\u0004\u001e\u0001>\u00017>\u000476\u0002'\u0016\u0017\u0016'&'.\u00027\u000e\u0004\u0001�\u0002\f\u0004\b\u0001\u0001\u000b\u0010\u001a\u0012&:\u0017\u0007\u000e4?\u000f\u0005\tFF\u001fB:8(\u000f \u000e\u0014OV\u0011\u0005\u001f\u0016\n\t\u000f\u0003\u0003\b\u000e\u0019$\u00189DkC@\u000f&��\u0016\u0015'G\u000f\u0012OS\u00053\r*gJ.\u0002�\f;\u001b4\u001b(\u0017\u0019\u0010\u0004\n.MV .nhB\u001e8-\u0015\n%>=\u001eB�'P�d!I,\u0013\u0014 \u000f\u0017\b\u000b\u0001\u0004\u0006\u0014\u001c=CnC�\u0001Sm,U�\u0005\u0002\u0007!�ٕ\b\u001ffm�\u0000\u0001\u0000\u0000\u0000\u0002\u0004�\u0004�\u0000\u0014\u0000\u0000\u00017\u0016\u0007\u0006'\u0001\u0006\"/\u0001&47\u0001&676\u0017\u0005\u0003��\r�{���\u000f+\u000fo\u000f\u000f\u0002X!N`����\u0003\n~�\\F/��\u0010\u0010n\u000f+\u0010\u0002We�6\\e�\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000A\u0002(��_\u000f<�\u0000\u001f\u0004�\u0000\u0000\u0000\u0000����\u0000\u0000\u0000\u0000�����:��\u0005�\u0005\u0018\u0000\u0000\u0000\b\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0005���\u0000\u0000\u0005\u0018�:��\u0005�\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000�\u0001�\u0000(\u0004�\u0000\u0000\u0004�\u0000\u0000\u0004�\u0000\u0000\u0004�\u0000d\u0004�\u0000\u0000\u0004�\u0000\u0000\u0002�\u0000\u0000\u0005\u0018\u0000\u0000\u0002�\u0000\u0000\u0005\u0018\u0000\u0000\u0001�\u0000\u0000\u0001F\u0000\u0000\u0000�\u0000\u0000\u0000�\u0000\u0000\u0000�\u0000\u0000\u0001\u0004\u0000\u0000\u0000H\u0000\u0000\u0001\u0004\u0000\u0000\u0001F\u0000\u0000\u0004�\u0000d\u0004�\u0000�\u0004���\u0004�\u0000\u0000\u0004���\u0001�\u0000\u0000\u0004�\u0000\u0000\u0004�\u0000\u000e\u0004�\u0000\u0017\u0004�\u0000d\u0004���\u0004���\u0004�\u0000\u0000\u0004�\u0000\u0000\u0004�\u0000\u0000\u0004�\u0000\u0000\u0004�\u0000\u0000\u0004�\u0000\u001d\u0004�\u0000j\u0004�\u0000\u0017\u0004�\u0000\u0017\u0004�\u0000\u0017\u0004�\u0000d\u0004�\u0000\u001a\u0004�\u0000d\u0004�\u0000\u0001\u0004�\u0000d\u0004�\u0000\u0004\u0004���\u0004�\u0000\u0000\u0004�\u0000\u0001\u0004�\u0000\u0004\u0004�\u0000\u0000\u0004�\u0000\u0004\u0004�\u0000\u0017\u0004�\u0000\u0017\u0004�\u0000d\u0004�\u0000d\u0004�\u0000\u0000\u0004�\u0000\u0000\u0004�\u0000\u0000\u0004�\u0000\u0000\u0004�\u0000\u0000\u0004�\u0000\u0000\u0004�\u0000\u0001\u0004�\u0000\u0002\u0004�\u0000d\u0004�\u0000\u0000\u0004�\u00005\u0004�\u0000d\u0004�\u0000�\u0004���\u0004�\u0000!\u0004�\u0000\u0000\u0004�\u0000\u0000\u0004�\u0000\u0000\u0004�\u0000\u0000\u0004�\u0000\u0000\u0004���\u0004�\u0000\u0001\u0004�\u0000\u0000\u0004�\u0000\u0000\u0004�\u0000�\u0004�\u0000\u0001\u0004�\u0000u\u0004�\u0000\u0000\u0004�\u0000\u0000\u0004�\u0000\u0000\u0004�\u0000\u0000\u0004�\u0000�\u0004�\u0000\u0000\u0004�\u0000�\u0004�\u0000�\u0004�\u0000�\u0004�\u0000�\u0004�\u0000\u0000\u0004�\u0000\u0000\u0004�\u0001,\u0004�\u0000d\u0004�\u0000�\u0004�\u0001\u0010\u0004�\u0000\u0003\u0004�\u0000\u0003\u0004�\u0000\u0003\u0004�\u0000\u0003\u0004�\u0000\u0003\u0004�\u0000\u0003\u0004�\u0000\u0000\u0004�\u0000\u0004\u0004�\u0000\u0004\u0004�\u0000\u0004\u0004�\u0000\u0000\u0004�\u0000\u0000\u0004�\u0000�\u0004�\u0000h\u0004�\u0000\u0000\u0004�\u0000\u0000\u0004�\u0000\"\u0004�\u0000\u0017\u0004�\u0000\u0000\u0004�\u0000\u0000\u0004���\u0004���\u0004���\u0004�\u0000d\u0004�\u0000\u0000\u0004�\u0000\u0000\u0004�\u0000d\u0004���\u0004�\u0000F\u0004��:\u0004�\u0000\u0012\u0004�\u0000\u0000\u0004�\u0000\u0001\u0004�\u0001.\u0004�\u0000\u0000\u0004�\u0000\u0000\u0004���\u0004�\u0000\u0015\u0004�\u0000\u0000\u0004�\u0000\u0000\u0004�\u0000\b\u0004���\u0004�\u0000a\u0004�\u0000\u0001\u0004�\u0000\u0005\u0004�\u0000\u0000\u0004�\u0000\u0005\u0004�\u0000\u0005\u0004�\u0000\u0005\u0004�\u0000\u0000\u0004�\u0000d\u0000\u0000\u0000\u0000\u0000P\u00009\u0000�\u0001'\u0000d\u0000\u0002\u0000\u0002\u0000\u0002\u0000\u0002\u0000\u0002\u0000\u0002\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000�\u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0017\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000d\u0000d\u0000\u0000\u0000\u0010\u0000\u0000\u0000d\u0000d����������������\u0000\u0004\u0000\u0000����\u0000d\u0000y\u0000\u0000\u0000\u0000\u0000\u0000��\u0000\u0000\u0000\u0000\u0000J\u0000�\u0000o\u0000\u0000\u0000\u0000\u0000\u0000\u0000*\u0000*\u0000*\u0000*\u0000V\u0000p\u0000p\u0000p\u0000p\u0000p\u0000p\u0000p\u0000p\u0000p\u0000p\u0000p\u0000p\u0000p\u0000p\u0000p\u0000�\u0000�\u0000�\u0001\u001a\u0001B\u0001J\u0001b\u0001�\u0001�\u0001�\u0002\u001c\u0002N\u0002n\u0002�\u0003&\u0003�\u0004f\u0004z\u0004�\u0004�\u0005\u001c\u0005^\u0005�\u0005�\u0006P\u0006j\u0006�\u0006�\u0006�\u0007\u0006\u0007<\u0007r\u0007�\u0007�\u0007�\b0\bz\b�\t\u0000\t&\tF\t|\t�\n8\n^\n�\n�\n�\u000b.\u000bx\u000b�\u000b�\f\u001a\fv\f�\r.\r�\u000e2\u000e�\u000f\b\u000f.\u000ff\u000f�\u000f�\u000f�\u0010>\u0010�\u0010�\u0010�\u0011\u000e\u00118\u0011N\u0011\\\u0011�\u0011�\u0011�\u0011�\u0012\u000e\u00120\u0012D\u0012\\\u0012�\u0012�\u0012�\u0013\n\u0013b\u0013�\u0013�\u0014\u001a\u0014P\u0014�\u0014�\u0014�\u0014�\u0014�\u0014�\u0015\u001c\u0015>\u0015x\u0015�\u0016&\u0016�\u0016�\u0017$\u0017f\u0017�\u0017�\u0018\u0000\u0018\u0014\u0018(\u0018P\u0018�\u0018�\u0018�\u0018�\u0019\n\u0019B\u0019�\u0019�\u001a\u0004\u001aL\u001a�\u001b\n\u001bd\u001b�\u001b�\u001c\u0018\u001cD\u001cr\u001dX\u001d�\u001d�\u001e\u0002\u001ex\u001e�\u001f\u001c\u001fN\u001f� \u0016 4 l � � �!$!R!�!�!�\"0\"^\"�\"�#\b#@#j#�#�#�$\u001c$6$`$�$�%\b%<%f%�%�&2&�&�'\u001c'D'x'�(\u0000(:(l(�(�)6)|)�)�*.*d*�*�+\u0002+�+�,2,|,�,�-\u0016-�-�\u0000\u0001\u0000\u0000\u0000�\u0000�\u0000\u0011\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0001\u0000\u0000\u0000@\u0000.\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000f\u0000�\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0013\u0000\u0012\u0000\u0000\u0000\u0003\u0000\u0001\u0004\t\u0000\u0000\u0000j\u0000\u0012\u0000\u0003\u0000\u0001\u0004\t\u0000\u0001\u0000(\u0000|\u0000\u0003\u0000\u0001\u0004\t\u0000\u0002\u0000\u000e\u0000�\u0000\u0003\u0000\u0001\u0004\t\u0000\u0003\u0000L\u0000�\u0000\u0003\u0000\u0001\u0004\t\u0000\u0004\u00008\u0000�\u0000\u0003\u0000\u0001\u0004\t\u0000\u0005\u0000x\u00016\u0000\u0003\u0000\u0001\u0004\t\u0000\u0006\u00006\u0001�\u0000\u0003\u0000\u0001\u0004\t\u0000\b\u0000\u0016\u0001�\u0000\u0003\u0000\u0001\u0004\t\u0000\t\u0000\u0016\u0001�\u0000\u0003\u0000\u0001\u0004\t\u0000\u000b\u0000$\u0002\u0010\u0000\u0003\u0000\u0001\u0004\t\u0000\f\u0000$\u00024\u0000\u0003\u0000\u0001\u0004\t\u0000\u0013\u0000$\u0002X\u0000\u0003\u0000\u0001\u0004\t\u0000�\u0000\u0016\u0002|\u0000\u0003\u0000\u0001\u0004\t\u0000�\u00000\u0002�www.glyphicons.com\u0000C\u0000o\u0000p\u0000y\u0000r\u0000i\u0000g\u0000h\u0000t\u0000 \u0000�\u0000 \u00002\u00000\u00001\u00003\u0000 \u0000b\u0000y\u0000 \u0000J\u0000a\u0000n\u0000 \u0000K\u0000o\u0000v\u0000a\u0000r\u0000i\u0000k\u0000.\u0000 \u0000A\u0000l\u0000l\u0000 \u0000r\u0000i\u0000g\u0000h\u0000t\u0000s\u0000 \u0000r\u0000e\u0000s\u0000e\u0000r\u0000v\u0000e\u0000d\u0000.\u0000G\u0000L\u0000Y\u0000P\u0000H\u0000I\u0000C\u0000O\u0000N\u0000S\u0000 \u0000H\u0000a\u0000l\u0000f\u0000l\u0000i\u0000n\u0000g\u0000s\u0000R\u0000e\u0000g\u0000u\u0000l\u0000a\u0000r\u00001\u0000.\u00000\u00000\u00001\u0000;\u0000U\u0000K\u0000W\u0000N\u0000;\u0000G\u0000L\u0000Y\u0000P\u0000H\u0000I\u0000C\u0000O\u0000N\u0000S\u0000H\u0000a\u0000l\u0000f\u0000l\u0000i\u0000n\u0000g\u0000s\u0000-\u0000R\u0000e\u0000g\u0000u\u0000l\u0000a\u0000r\u0000G\u0000L\u0000Y\u0000P\u0000H\u0000I\u0000C\u0000O\u0000N\u0000S\u0000 \u0000H\u0000a\u0000l\u0000f\u0000l\u0000i\u0000n\u0000g\u0000s\u0000 \u0000R\u0000e\u0000g\u0000u\u0000l\u0000a\u0000r\u0000V\u0000e\u0000r\u0000s\u0000i\u0000o\u0000n\u0000 \u00001\u0000.\u00000\u00000\u00001\u0000;\u0000P\u0000S\u0000 \u00000\u00000\u00001\u0000.\u00000\u00000\u00001\u0000;\u0000h\u0000o\u0000t\u0000c\u0000o\u0000n\u0000v\u0000 \u00001\u0000.\u00000\u0000.\u00007\u00000\u0000;\u0000m\u0000a\u0000k\u0000e\u0000o\u0000t\u0000f\u0000.\u0000l\u0000i\u0000b\u00002\u0000.\u00005\u0000.\u00005\u00008\u00003\u00002\u00009\u0000G\u0000L\u0000Y\u0000P\u0000H\u0000I\u0000C\u0000O\u0000N\u0000S\u0000H\u0000a\u0000l\u0000f\u0000l\u0000i\u0000n\u0000g\u0000s\u0000-\u0000R\u0000e\u0000g\u0000u\u0000l\u0000a\u0000r\u0000J\u0000a\u0000n\u0000 \u0000K\u0000o\u0000v\u0000a\u0000r\u0000i\u0000k\u0000J\u0000a\u0000n\u0000 \u0000K\u0000o\u0000v\u0000a\u0000r\u0000i\u0000k\u0000w\u0000w\u0000w\u0000.\u0000g\u0000l\u0000y\u0000p\u0000h\u0000i\u0000c\u0000o\u0000n\u0000s\u0000.\u0000c\u0000o\u0000m\u0000w\u0000w\u0000w\u0000.\u0000g\u0000l\u0000y\u0000p\u0000h\u0000i\u0000c\u0000o\u0000n\u0000s\u0000.\u0000c\u0000o\u0000m\u0000w\u0000w\u0000w\u0000.\u0000g\u0000l\u0000y\u0000p\u0000h\u0000i\u0000c\u0000o\u0000n\u0000s\u0000.\u0000c\u0000o\u0000m\u0000W\u0000e\u0000b\u0000f\u0000o\u0000n\u0000t\u0000 \u00001\u0000.\u00000\u0000M\u0000o\u0000n\u0000 \u0000J\u0000u\u0000l\u0000 \u0000 \u00001\u0000 \u00000\u00005\u0000:\u00002\u00006\u0000:\u00000\u00000\u0000 \u00002\u00000\u00001\u00003\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000��\u00002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000�\u0000\u0000\u0001\u0002\u0001\u0003\u0000\u0003\u0000\r\u0000\u000e\u0001\u0004\u0001\u0005\u0001\u0006\u0001\u0007\u0001\b\u0001\t\u0001\n\u0001\u000b\u0001\f\u0001\r\u0001\u000e\u0001\u000f\u0001\u0010\u0001\u0011\u0001\u0012\u0000�\u0001\u0013\u0001\u0014\u0001\u0015\u0001\u0016\u0001\u0017\u0001\u0018\u0001\u0019\u0001\u001a\u0001\u001b\u0001\u001c\u0001\u001d\u0001\u001e\u0001\u001f\u0001 \u0001!\u0001\"\u0001#\u0001$\u0001%\u0001&\u0001'\u0001(\u0001)\u0001*\u0001+\u0001,\u0001-\u0001.\u0001/\u00010\u00011\u00012\u00013\u00014\u00015\u00016\u00017\u00018\u00019\u0001:\u0001;\u0001<\u0001=\u0001>\u0001?\u0001@\u0001A\u0001B\u0001C\u0001D\u0001E\u0001F\u0001G\u0001H\u0001I\u0001J\u0001K\u0001L\u0001M\u0001N\u0001O\u0001P\u0001Q\u0001R\u0001S\u0001T\u0001U\u0001V\u0001W\u0001X\u0001Y\u0001Z\u0001[\u0001\\\u0001]\u0001^\u0001_\u0001`\u0001a\u0001b\u0001c\u0001d\u0001e\u0001f\u0001g\u0001h\u0001i\u0001j\u0001k\u0001l\u0001m\u0001n\u0001o\u0001p\u0001q\u0001r\u0001s\u0001t\u0001u\u0001v\u0001w\u0001x\u0001y\u0001z\u0001{\u0001|\u0001}\u0001~\u0001\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0001�\u0006glyph1\u0006glyph2\u0007uni00A0\u0007uni2000\u0007uni2001\u0007uni2002\u0007uni2003\u0007uni2004\u0007uni2005\u0007uni2006\u0007uni2007\u0007uni2008\u0007uni2009\u0007uni200A\u0007uni202F\u0007uni205F\u0004Euro\u0007uni2601\u0007uni2709\u0007uni270F\u0007uniE000\u0007uniE001\u0007uniE002\u0007uniE003\u0007uniE005\u0007uniE006\u0007uniE007\u0007uniE008\u0007uniE009\u0007uniE010\u0007uniE011\u0007uniE012\u0007uniE013\u0007uniE014\u0007uniE015\u0007uniE016\u0007uniE017\u0007uniE018\u0007uniE019\u0007uniE020\u0007uniE021\u0007uniE022\u0007uniE023\u0007uniE024\u0007uniE025\u0007uniE026\u0007uniE027\u0007uniE028\u0007uniE029\u0007uniE030\u0007uniE031\u0007uniE032\u0007uniE034\u0007uniE035\u0007uniE036\u0007uniE037\u0007uniE038\u0007uniE039\u0007uniE040\u0007uniE041\u0007uniE042\u0007uniE043\u0007uniE045\u0007uniE047\u0007uniE048\u0007uniE049\u0007uniE050\u0007uniE051\u0007uniE052\u0007uniE053\u0007uniE054\u0007uniE055\u0007uniE056\u0007uniE057\u0007uniE058\u0007uniE059\u0007uniE060\u0007uniE062\u0007uniE063\u0007uniE064\u0007uniE065\u0007uniE066\u0007uniE067\u0007uniE068\u0007uniE069\u0007uniE070\u0007uniE071\u0007uniE072\u0007uniE073\u0007uniE074\u0007uniE075\u0007uniE076\u0007uniE077\u0007uniE078\u0007uniE079\u0007uniE080\u0007uniE081\u0007uniE082\u0007uniE083\u0007uniE084\u0007uniE085\u0007uniE086\u0007uniE087\u0007uniE088\u0007uniE089\u0007uniE090\u0007uniE091\u0007uniE092\u0007uniE093\u0007uniE094\u0007uniE095\u0007uniE096\u0007uniE097\u0007uniE101\u0007uniE102\u0007uniE103\u0007uniE105\u0007uniE106\u0007uniE107\u0007uniE108\u0007uniE110\u0007uniE111\u0007uniE112\u0007uniE113\u0007uniE114\u0007uniE115\u0007uniE116\u0007uniE117\u0007uniE118\u0007uniE119\u0007uniE120\u0007uniE121\u0007uniE122\u0007uniE124\u0007uniE125\u0007uniE126\u0007uniE127\u0007uniE128\u0007uniE129\u0007uniE130\u0007uniE131\u0007uniE132\u0007uniE133\u0007uniE134\u0007uniE135\u0007uniE137\u0007uniE138\u0007uniE140\u0007uniE141\u0007uniE143\u0007uniE144\u0007uniE145\u0007uniE148\u0007uniE149\u0007uniE150\u0007uniE151\u0007uniE152\u0007uniE153\u0007uniE154\u0007uniE155\u0007uniE156\u0007uniE157\u0007uniE158\u0007uniE159\u0007uniE160\u0007uniE161\u0007uniE162\u0007uniE163\u0007uniE164\u0007uniE165\u0007uniE166\u0007uniE167\u0007uniE168\u0007uniE169\u0007uniE170\u0007uniE171\u0007uniE172\u0007uniE173\u0007uniE174\u0007uniE175\u0007uniE176\u0007uniE177\u0007uniE178\u0007uniE179\u0007uniE180\u0007uniE181\u0007uniE182\u0007uniE183\u0007uniE184\u0007uniE185\u0007uniE186\u0007uniE187\u0007uniE188\u0007uniE189\u0007uniE190\u0007uniE191\u0007uniE192\u0007uniE193\u0007uniE194\u0007uniE195\u0007uniE197\u0007uniE198\u0007uniE199\u0007uniE200\u0006u1F4BC\u0006u1F4C5\u0006u1F4CC\u0006u1F4CE\u0006u1F4F7\u0006u1F512\u0006u1F514\u0006u1F516\u0006u1F525\u0006u1F527\u0000\u0000\u0000\u0000\u0001Q�K(\u0000\u0000", "glyphicons-halflings-regular.woff": "wOFF\u0000\u0001\u0000\u0000\u0000\u0000@@\u0000\u000f\u0000\u0000\u0000\u0000sH\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000FFTM\u0000\u0000\u0001X\u0000\u0000\u0000\u001c\u0000\u0000\u0000\u001ch+�\rGDEF\u0000\u0000\u0001t\u0000\u0000\u0000\u001e\u0000\u0000\u0000 \u0001\b\u0000\u0004OS/2\u0000\u0000\u0001�\u0000\u0000\u0000F\u0000\u0000\u0000`i\u001el�cmap\u0000\u0000\u0001�\u0000\u0000\u0002~\u0000\u0000\u0005.�/V�cvt \u0000\u0000\u0004\\\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0004\u0000(\u0002�gasp\u0000\u0000\u0004`\u0000\u0000\u0000\b\u0000\u0000\u0000\b��\u0000\u0003glyf\u0000\u0000\u0004h\u0000\u00003�\u0000\u0000[X\u0001��\u0016head\u0000\u00008,\u0000\u0000\u00004\u0000\u0000\u00006\u00008=�hhea\u0000\u00008`\u0000\u0000\u0000\u001f\u0000\u0000\u0000$\n�\u0004xhmtx\u0000\u00008�\u0000\u0000\u0001\u0013\u0000\u0000\u0002��\u000e\u0012ploca\u0000\u00009�\u0000\u0000\u0001�\u0000\u0000\u0001����@maxp\u0000\u0000;@\u0000\u0000\u0000 \u0000\u0000\u0000 \u0001.\u0000�name\u0000\u0000;`\u0000\u0000\u0001�\u0000\u0000\u0003|Ԗ��post\u0000\u0000<�\u0000\u0000\u0003R\u0000\u0000\by�cQwwebf\u0000\u0000@8\u0000\u0000\u0000\u0006\u0000\u0000\u0000\u0006K)Q�\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000�=��\u0000\u0000\u0000\u0000��\u0017�\u0000\u0000\u0000\u0000����x�c`d``�\u0003b\t\u0006\u0010`b`\u0004�[@�\u0002�1\u0000\u0000\r�\u0001\r\u0000\u0000x�c`fid��������t���!\nB3.a0b�\u0001�\u0003�\u0010�\t�\u001d�\u001d�������?k��/\f2�S\u0018x�HJ\u0014\u0018\u0018\u0001A�\u000b�\u0000\u0000x�͓?LSQ\u0018�ϣ-PB���t�{� \u00150�\u0010�0\u0018K*�N��\u0011\\h�A\u00194\fj����`\u001cX\u00101\u001aYM�t�Ѹ����\u0000�\u0007NN�h����n]�\\L|ɯ��n��;}�+�\u0018�\b9J���\u001e\u0002&D�p5\b�#��h0��q�xM\u000b,:�b�l�����d[��g\u001a$\"qII��Ƞ�eX\n2!E����˒F�VS��v��\u0001\u001d�a-���hI�uQ��P.�\u000e\u0016\u001d�\u0019{v��$!V��Wr�yDƸ���ʜ,h�1M��V�֬�4��:�E��9]�%�sy��^������Ǜ\u00177\"�Mk���6e[l���j\u001b3e���4�f�|3_�\u0017�a��+撹`�M�L�qs֜1'M���1�5��^���O�z�Qu�r�\u0017>\u0019�{_\u001d�ӽ(�R���\u0015�/��]\u001e$�I\u000f�ӫ\u001e4\u0002��\u0007M@[�A3��{p�n���C(q�Oќ\u001dq�9H'\bא�YB��LI7�a��{� 3�\u001c�3\u001f��=์�\u0002�\tz�L0���\u0007��)2�|��LJ��\u001c=G����\u000bd��2��M�:_��Yk�y������ivVv�\r����7i�W�칟f�\u0000�m��u��\u000e����ߥG���fu�\u001f�쮮�C���u~D����Oiw�E��4��2�K`\u000b\u001epھ?\t\u0001���B����\u0010�\u001d�*\u0004xO��\u0000\u001f\u0010�H�\u0000\u001f��\u0010�\u0013�\u001c\u0002|�\u000f�\u0000kt&\u0004X�����gԃ*7�{�5�c��h\f��Q�w��o��\r�\u0014�H\u0000\u0000\u0000(\u0002�\u0000\u0000\u0000\u0001��\u0000\u0002xڵ|\t`Tչ�=w��Y2���m&���L\u0002�\u0004f23@H�a\u0013\b�\u0016Q\u0011pD\u0001��\u001a@\u0010\u0015qm� \u0005�`��\n\u0005�HQ�`_��^Զj�U�����V���k+d.���;�L\u0016���{���9�;���wη�˰L%Ð[�2�cD&�\u001ca�G\u001c\u0015y�|�9���#�r,\\2�q�X��GE\u0003�\u001cq����Cq\u0004b\u000e%\u0019����_���\u000f*��\u0019¤�\u0014��712�Vd1��;�PR�+����9����MZ��M/���҄�\\\u0012�\\����c�\u001f�\u0003�kF����\u0000�E��ZH\u001b\tï-{��P\\\u0004���a&����X����\f��_\u001e���?\u0019�I�!�LĢ�G��DX��\u0015\u0015Q1H\nW�u\u0018\u0007\u000f\u001b\u0015��\u0013�b�K\u0017,���U\u0015��wS+�3��\u0002\u0013�<�i�\b����\t��a�\u001b\\dmJ�0�\u001d�;\u001a\u0007ڊ\u0006ω\u001fZr�7\"\u0007W����}s7�t��d��Bwxn}*�\u0000�T��7�ǁ��O|S�:n#{\\�`��OI�?�_�x\u0018ƥD\u0013\\�\u0010�Ar�V\"�=G�OV\u001f8�:\u0012\u000e?���ﰍ�V����V?k]���;\u000b-֥c���d�_�o\u0007ڱ���1��\u001a\t\u0010 \u001f\u0011�J��/Me���\u001d|�֑\"m���6�oJ�f��mN�'�\u0014�Ue\u0018��g�?�_�_b�\u0000�\u000e����j\u0012,�\u0011#\t\u0011.\u0010�'ݘ���Va��\u0015���N?��I���\\�\u001f����_й�>�����k\\���dǹ�o\u0007�L@��o\u001c�\"{��;? a�\u0002\u0018ZR�\u0014\u001bd��3X���\u0001_\u001ca���\u0011\u0014�D��d=�;j��\u0000t��2��s#'L��t<2e�\f�)m7Y����)W5sϤ�a��V&�U���$��d�^�\\��\u0014GA���UE��\u0001�<��|�c���N��\u00143��x�6b(\u000f\u0011�) G\u0019#�\u0019��,a\u000f�q[IX\u0014������U�U�\u000f�\u0004X����\u0013�����'\u0004h\r��D��'�e�\u001f��ģ����P��o3�\u001f�\u0014B��Y\u001f+���\u0018��5pC�G\u0006�]}gsbԚ�����m\\3j��U��pϏ��\u001f4�u��5��st֬��ܻf���\u0019���@Z����q�v����\u0000T����⊹\u0014����ڽچǴu䷏���w:],k�\u001a�K;O��\u0014��J�\b�@7\f7�g.�P�\u001f\u0012����\u0007�6{��\u001fM��_?\u001d�c��>������~���_�n#9|�\u0002>\u00006 ��`\u001d�ID=^�6�%�Y�\u0016hh�g{C`˖-�����u������\u0014�8}���mf�\u0006pd\u0018�R�τ��L5\u0013C~Q\u001c�_�\u0005`���,�u��\u000f�I�gخ\n�w<��m���u�\u0014���������\u000f��K��&`[�E��?�\tg.�\u001c��7\u001b�X�4 v�O�<\b���)Q����K�/x%�E�z%�&y��ܻ��+��E�Ͻ�mW(\u0000ԍ}���������l��Hn�@��_-\u0001L�����~�+��=\u001cH[�ם\u001f���ዲW�\u001e�k�'�\fc���\\��Kq�\r���\u0001�\u0004�\r0�ۺ������if�V�˗�v�\r:��K\u0012R�8#Y�fy\\���\u0018W$A�\n�Z���b�?n#q�lV���f��D\\�U$\\U�Be��X[�\u001e\r7:W�?��f���Vs�dKU��Vaa�\u0007U#FT�H\u001d���s\u0015�\u000b\u0012�\u001e�\u0019\f�����ᑊ�aL�6�\u001a�NAy`�ٍ\f\u001dS�\u0018��7���jչB\u0011n�f�f5w\u001eF\u001c�o��\u000eh�z��כ�(���x��\u000f\\�{1e����e\u0015���Ü�\u0019%�$\u0005x�\u00052�8���>юk����ޠ\u001d��32�3m!���\u000fu�\u0010'��|��\u001f\u0004%\u001bt��\f#�\u0001Wʿ��)$������}����\u001fɑ7����ɑ��h��b�+*�$\f��\u0005P�;�Ϻ���A2\u0011��b\u0004�\u0016T>�_��U\u0012V���]G�tYI\u00174\u000b`\t\u0014�>\u0003�A�<\u0002\u0010d�\u0007O�>V��5����f\u0000\u001c#�_x�\r7�ɜXV;���d槚����\u001d*��\bO�}�\u0017\u001f@�����[�?}E?\u0018�~�\u0015\t��\u001d�ؕ��m���#-��2\u000e���eY�(\\LV�1�+�\u0019\u0001\u000e�`�r\u000f��.P�$\u001cU�\u0005dD-����R������]b\n���Y�D�qE���~�\u000f�\u0007�F�\u000e>{�l��Ȯ�%�\u0015nCYЎ\u0016��8� \u001a�n\u001f\u000b�,�s�E�\u001b� >��1Ҷ��S��\u0012�T�\u0019VJXS�a�]��p�k7Ca�\u0019\u0005�� \u001a�~0(��$�\u0006&�1\u0018y��E\u0007{|[�C�]܁k��'������ʶM��\u001c6{�V��[�\u0019���\f����\u0019\u0017p(\u0007�*�l\u0014��#��������B�\u0018�j�R-�Bz�\u0017]�2\u000f�c�F\u0015���܃�>P=���cb(/\u001cV\u0012�\f�����z���^�vc�Cw�u�xh���K\u0000\u0003\u0004��Hۘۖ����1,�Б�<�X��c:\u001d�/��\u0001��\u000b$\u0013\u0013H��%�\f l�\u0004\u001c`�u��~a��f�!�]%�� h@�G\u0014�\u000f��~x�h�ȼ�_~iG\u001e\u001b\u0000ᢒ6l��\u0003���n�v�s|\f\u0012��\n\u0013`\u00061��=�\u0002]`\"�ЌK\u0001�\reN,�P$X�\u001c\n(q @�\b�|��\nhv`\u001d��Lʨx�8� \u0005�]\u0019�a\r�\u0013~�_Sh�i\u0016`%�T\\�;�Q��cc\u001dړ�\u0014-��R�\u0012k����\u0003n,�/\"ww`5\u0012��T��b�`\bHgpdSz�❊Ej����h��G��w�f�'��A�\u001c0������\u001f�\u00059iSU<�\bb���|{g\u0001w.�w�X*e����y�d�\u0017Ѫ7�T&s��P�\\4�eO\u0014�;�1�F�9���f���B\n��\u001b�M;������\u0000=\u0000�\u0013ޣ��QFg�Q�>Fra>�0aV���i�(9\u0001��V���C\u0016��\n�=\u0016��s�!]k\u0018� \u000eѡ���$��Tڙb?�\\w\u0004���Υ:\u000bxr��Y\u0013P\u001e˸�\u0011.B@�\u0018DNV\u0002\u000e�\u0011`\u001a�<�졒���\u0013T����c�&��dg�U�SI-2�\n\u0003�Z\u0015dͦ�~��\r�.\u0013�`rqud.Nv��u7�G�*{\\U�m_7Y�&<���S<���l�>:���\u0017�-`\u0003}a��\u0012�Q�\u000f%�\u0017�Mwuw�\u0011�\u001e�\u0011Ep\b\u0016f��f�\u0015�d\u001fʹy�X\u0006��/����A_\u0002r7�\u0012��\u0013���/)G�0���\u0002�u�Ig\u0001�q�$�\n7\u001fЛ2(\n{�K���o���\u000b�)����s_r�/���\u0012������a����W,����\u0012��0�Zk��]_R�~A��Nu�E��NuU��Nu�\u0006������ގ^x������+��\u0016�y����I�F�\f�@M-�\u000f}�/˻}&8\u0001z\u000e��^I\u000e���Q���!��pyW�\u001f�\u0005z�\u0000f83�Z���>���Q�\u001a�,|���\n\b\tw�J�|n�B}�\u0017ܾӧ�a��G\u001d�Q\u0018*@��z���u�?��|bj���\u0015&�\u0001u\u0019A����/Wo�*zH��\u000b�D���u��K�\u0000���^����Kt�^�����c���R�t{�\u001dtx\u001b��\u001b0���pi�Y\u001a\u000e�����\u001a}�{2�J�<\n�t�nuw�@MԟP�\u0017\u001a�QI!D\\\fz�j\u0012��\u0015�.�w\u0016\u00159�fW!(S� \u0003&������-�'��e�\u0016,�.�qB����w�z�\u0003\u0012��Ɉ��.Ɨ�/��\u000f]!Q\u001fqS%'�q0�\\�DM\u0010c�\u001e�y��kƏ���a��\u001b��}`Ú7�,}���w<ο����o_���Fc����L���u��/=\u0006��,}���Y\u001f���CB\u001c�\u0006���c�4�_���\u001b�y=7\u001b�v*��dx��P��3��$�۴��\"l(�h 4�)�\u0003��S�Lj\bL^�Ĕ�?�w���o\u001f#z\"&\u001bk4^��Y��V���Һ��;\u001f\u001cs��T-o����y����';�\u0018<\u0013*�o��-�1m��Eٱ9��\u0002���\u0004�\u000b\u0000��K�\u0019 ^\u0016\u0015ݣ��XG�$\t\u0011~�\n��\u0015�?������>�6Y^�\u0003�4��ȅ�Zm�7����R��\u0015�JVhw��V\t�#C�\u000fj�P���{f��^�-e�~���\u001f%LD�Wts�l\u0010�ݭ�A��ʭ�Xϕ\u0012���y�}`��l�s�-�N���Q�G\r3�n��\u0006����gq�Z֜��~2�Կ�Z�بe��5.#!L\u0017>�\u0000\u001f/ZC=����\u0006�/��\u0012\u001e1���t\u0017)γ�����\u001ef�}'���\\\u0016�1\u0012�|D���a\u001a��}ؘ+\u0011�K10]�\u0004݅�\u0011#�q�mT�����A�\u0003���~���S��Sp]yJ�٨�����s7B_��RH/\u0007��\u0000��%G\u000e\\ ��\tY��+i\u0013ɟ���4�\u0003`�\u0003�A�\\�\u0005\ta\u0015���\u0015R�\u000fg`\u001a(Lc\u0006D�5�F\u0011�����\u0007��a1����\b,�t\f�JeR�F�N��\u0012�\u0015�}��N��\u001d��/W\u0010zi�`�S�\u0014�?g����W�`�\u0002�Ӭ2�?$���yI.@��w|\u0013�\r�\u0016���%1$h��$��&�\u0017e)�tF�zi�T=&/PBg���y�\u000b�����>�}��$���0����(\u001c���,�+�ʉ#��\f\u000eD=���3�o�P����vd�#.��\u0019����\u000e��%i~����Sd�_���_�\u0002�8�8�/��O��@-L��\u001c�E�%#\u000b���Ǝ�H$S��\u0007g+\u000b+\u0018�?�?K��\u001e\u001eXA�I\u0003�\u0006%,u������kǵ�{��i*����~��\u001a���jO���p]���\u000b�#ls\u001fX�\u0011\u001a\u001f�\"~.Y��r2�\f����fn��֦Mom�c_��d�:6mfz����\u0006,MH��g�a�&���\u0005�p�a�#���.���&@��\t9V������\u0019X\u000b$j�0�2�� Zy\u0019�D\u0017���K�CF\u000f)^�`\u001bo\u0013\r��\u001ay+��\\��3~~3�9\u0003��/C�B���L_\rm�\u001c\u000e��w7�\u0010{f\u0003�\u001aڤ��Z6h�n\"!�]�1��T��{kӮ\u0004\u0015���GP�c�\u0016������kw�o\u000e�\u000b�_�\u000b���ߝp�������t�)�'\u0012q{�n�M8ޗB)���\u0019D�h�� �j���6b\u0010�\u0012��\u0006z���\u0012�z�c����W�r��9�Q�\"g�Ʋ���P���< >Q��:��eoCg8�*��W\u0004k��M���+w:��qjel�������{WM�&|��$�Ç�����=�h�8jе3�.\u001d�xq���6W�*�̜?��z���s*1Z��^k��]W{���\u000f�\u0019^8�\u001a�\u0016�5~�A���yC�o��\u001b��`~\u0005�C_\u0018�K;�e\u0011f(F�@\u0019\u0007�ig0N\n��E�N\u0006CIX�\t���ȉ\u001dj\u0000f\nq�j��\u0016�����!SW_��\u001b\u0011 �(\u0012\u0003so�6>�\u0019T]>�UM\u0016\f\f��/���\u0004�n�.��\u0004t�Z�\r�a s�t��k�ںz��_i�Y�pQ�V[0\u001al(\u0018��3��Ė�n��M�}˱?�Yr\u001c:S=�dz1\u001d�o�^��\u000f�:�D��\u000fzl\b�\u0014��\u0013\u0000�C1�~��T\u000b�@��^�\u001e�N���9���#/���} \nǕ�e�����e�1��W�A�B\n\r\u0010��H$:���R>��b(��\u001e�j�\u0017\r�4&\u001d\u0002='���������6O�Cۙ*r�{��(��t\u0014xldi��f�g�\u000f�C�U�|�����zFJv���F�4�s-\u0011?��C�\u0010+\u0019Cf�77�S��\u0013V��\u0019\u0013c�� �!�X�H�B2�H�\u0000W~�K1���~� �����lK\u000f��<�r���o�o��)�,�_e�O��u�����W���������LL��5�ï�F)�\u001c\u001ay�C�����7��~0\t�P�UlsUm66B�50\u000e7H�\tT.��/���#���=��To\b��\u0011=ȇ��$l(\bM���\u001f?yӤP�\u0001n\u001d�B�@mU��\f�\u0011,,�+���\u0003��_�bj,6uŒ��\u0007�\u0017W�]Wh6�K���H�#�\"4{�����[�����L�\u0007��Q���d��>dG�_��,��\u001d˜�_��Ln�����l�ﵧ�=\u001f�aG}�*��\u0018\u0003\u0019Τ�V��y4�ơ�d�\u001by?��\u000fw�����Sd \u0019��O�\u0018~�����\u000fH\u001b۬j-�\u001fI1\b�b폀;JCl\u0017h�\u001f\u0000:Eu[\u0006-\u0019��\u000e$t\r�T�g�=\u001a%I0OB\\0����/�����i6��,�\u000e@��\u0000o��������\u0006\t)�f-��\r\n�|;�u6���(�\u0014Տ>��U\u0007x�o\n���\u000e)G\u0017l��ڀf\u0019��I\t�����z\nTz4�7;��iNj�\u0007z�Sx\u000f`漋sd_U$�(䴚yUO��4��1T�\\\u0003\u0000R4+��\b0�\u0006=?\u001e#>F�J%�S��\u00002��)�m�\u0015(c��}\u0004P�\u001a��\r�~\\A炂^\u0005\u001a��5I�ɓ�J��o����8S��N�.�W�\u0018f\u0017%�WzH�p�{\\\u0001�Х_�\u0013��\u0000���Ll���\u0013\u001a$�+R�Uz�\u0017M\n�yG�we�&�3!��\u000e��%3�ʃ\u0018���f\u0000�~���������\"�J@?�~��8Q�8��h 1\u0002�\b{��n|p��\u0007��n�*�=��\u0016]\u001f�`\u001d��Y�O\u001dͩ\t\u0000K�\u0012�\t�d�\u0001���%e���ꩢH}�\u0003X���\u0000�(�z+Yb5;,ˬ�Y$2k鲙K7��6���L�ux�\u0004�7\u0014�^�;�v-I̼�\u0013y�\u0015L�fc\u0007��g\r�\u0016��i]��6Y{�\u0013ڛ��;\u0002��5�5d�T���^BXN�,y��\u0017gt��.^��7��6\u001b�0�\u0019\u0001}\u0010|�������\u000e�$dE�\u0012:G�\\D�0\u0000z����R��\u0000��7d��R\u000e�i\u0007lņ���\\~+��l]�o7_��$\u0010\u0001\u00106�f�U��5H`�v�=\u000b��Գ|~ȑ�4���\u0012�1�����ۥ�\u0015�o}�l3\u001b94�I�ʭ={\r��y\u001dq�Y��I���I���\r\u0005��w�\b\u0005A3F��EW��pI�\u0003J�\b\f�'�9<�P�\u000b\f�T)i�B�kl\u0001k��N1a�����\u0019?����Po<\u001aE��^z����n�,�͙\u0016���S�m7�J�i$3f?���Y\bQQ�~�^lؠ�A�(�]4q��\u0002�*\u0005��:G\u0002�\u001e ��a��\u0014�\u0012���\u001e`\u0012�\u0010�TI\u0001�\u0019��Z�FB.�\f�\u0014\u001b2�]�7?�\u0019�����Ӓ\u001f��!��&Òz�]\u0019�r�����\u0019��?����y\u0016���F^�i;J=���\u0019�p���\u0000��\u0006C��\u0015���!�Y��q���f�\u0019\f݉�s� c�X\u0002�f-[\\�\\���`O^���_���\u001b��w']��c�r��\u001e����b�]���As�>A�d@��:\b��t���ơ.��\u0006�f\u0014gg�[Y(\u0000\\�\u0018�ֈ��\u001f������N?��9q�d\u000e����0G*\u0006H��p��~^E�u�P1G���\u0012�.]����B'xX�\u000b\u0018u5=���%ݰ\u001ffv��.��l�\u001db`.e�n�\u0018�\u0011P�|l�c���J��Y�T�\u000fw\b\u001aB�\u0004�\u0012�D�u2�f����P��$�b�$:Ȓ\u0011.�\b!�A͐At\u0003`x\u0004��'ZߗV��\u0006\u0016����lR=ǹ\b7D�+6�\u0013�� �`��~�7/�\r\u0018d ¢U�r?g��[�:�ue\u0011{��\u0013C\u0015��\u0015\u0016�.��`7T\u0016\u001b,�V���\u0003�`\u0012\u000b<\u0006{^�S6���\r\u0016��4i1\u001b\"�m�2��\u0018�%\u0015\u0016��39�ξ\u0004�gq\u001aL\u0004�$�lfY,_!+�J�c\u000b�.��˫���\t�q` �,�JoE})臢�LX��/��l~\u001e�\t:���\u0012��@�hr\u0005�*\u001d/�\u0003M�\u0001�B���\u0019�rH*\u0013��|N�+�\u001e\u000bw�sH�g\r�%�R!�,���{]��X\u001e��\\C�\u0005��G+飩�\u0001�ϳT���;`:\u0017�x�.�ޏ�i�C�z�zśl>zF�7����`\u001e\u0019��Y\u0010�6j{AR�k��\r�2G�Bߊ\u001b�^\u0004\u0014\r�\u0001V\u0013u�QoKR\u0016�\u000e\u0005����U������p��/�Q7�͙��z1��[��Ko�\u0017G�<\\/��\u001f�����̥ �\u001a��+e5\u0007P�R�%$�ƭ߇ĬQ�H&2U�5\u0015�-����+8\u0002�oy��\u0019v�S~\u0015�#�\r�\u001d\u0019G\u001a�\u0002\u0019���P�\u0014X�`\u0015rh\u0015&\t�t\u001b\u0012e\u0002,\u0001g(!��Z�A\u001e��\r�H�ןl��x�\r#�?66v�+R�ظ�\".���b\u0015o���p�\u0017�;#q������F��#o��Q�\u0006\\�\u001b?�W\u0004|��78\u0007\rM6^?O�\u0011��=\u0016\u000e�\u0019/�$\u001d��F��\u001b��Y����\u0011�v\u001fx\"5\\���m��wf��ͮKqߗ�\u0011�/\u0012�:ǡ��lz�V�E\u0000��\u0018'�5�c�a�Ӽj\u0019\u0013\u0007\r�x��z1XJ\u001d!�\u0019�P\u000f�#�s�v#\u001fPIv�[�F�����<�+��Y���W�9\u0013�#�����\rSR�1�G\f���K\u001c�\u001bow\fp���\u001ch�\u0005��V�\u0015\u001eqS�W\u000e�'Mv̩\\:{ҍ62E�\u0016V\u000fkN^��(q�\u0014�\u0015nX�x�D�\u0012q�Վ��\u000b$�Ⱦ��v>0r\u001c��,���?�\\Ms\rY�\b�/\u0017�\u0017�M��ǰ\u0017�:e=\r�ٍ��3�1���k\u0011��\u0004�6�0Z5%4@~3\u001a�-\u0017$\r��aq\u0018\u0007[*�{��m2rՃ\u0016و���\u0002��^\u0004��U9mi��$l���z�\bn��.\u0006J^��^!�n\u000b{�;��S\\_\f\u0012����N^E��k��k���^�|,�W{�S��d�ދ�?J�@b���_�m�\f4���হ\bE�c\u0017��Я��\u0018q(q��6l\u0007�!\u0003\u0004�\u0017jZ�\u001c\u001b5�,�K���o�\u001d�po�O�\f\u0010\u0019%b((*\tg2Q\r+),��\b�{L\u0001�.�m��|��f�+\u0000�O�l^��n�_����a2yHd� \u0018Ybg[]\u000e'˓#\u0016�)�&�����%��\tn��ŋ�?\u0005��.��1���t\r�>qeYzY�����X\u001dO�VO�C��E�ջh�>ݠ��g��\u0002��a��99I��\u0014�sS����ځ�Ȃ���ѻ�#��uBJo�������So����_Y���0�59�´�a�8ޚ��V���J�\u0015w>:��\\�g�\u0015���J,ϝs�:���\\4��O\u0014���#�\u0001�^\"':\u0013|��~阕;��b�'#p���f��\u0013�ٚ�^\u0011&ps.P\u001a�\ri����90u�:�\u0014��\u001f�{��&ܹB��z����|B\u001b�cW.D���ܥ�}|��4\u0007 ߅#G��Q�c,�\u0002�D��I\u000f�;\u0017t, '�wl��==\u00076?eA�B/\u0014���a�\u0007���94��Ǵ\u0013\u0007���\u0014z��\u0018!��p\u0000L+�%�\u000b�;�\u0006\\�I���\\��\u001b(���\u0012��\fC\u0013���\u0012߮\u0005�W�����|�ȥ�Į�\"{���COy:Eq���\u000b���;����;�\u0006\u0012ܭ�s�H�ށ�ڋ(�\u0001�s��1uKOUw�h�[����\u000b����q�\u001e�d��8�V\u0017Jʄm�\u001e�\u0006�}���{�\u0002\u0017֮&\u000b`�s���ίf�T-�U`�|ږA�f���ӖC�m���s��:�\u0017�[���=�\u0011�:p���_�F��n>@\u001eS;}��{�s��~\"����\u0013\t\u0019ǭ[����Yr��B�j�Β�\rvd6q�q���j�\u00152�\u0014;W[��NfK\u0018ݔ֧���+��n�=��yư�\u001a)5�wb�]\u0002��qη�&�_:�G�i�;R�34�\u0013�沾�E\u0000�pF\u0007���A\u000f0\u0000XE�>�!�z�����J\u0017p!@o\u0011*tT�kїg�Ӎ;��\u0007U5=Z\u000f��D1�kO�\u0007�\u0013�!�i��cKI6�\u0010\u0018�+�.��|�\n\u000e|{E��qa\u0000�7�h\"\"n��\u0017�h����K]�;�cJ��R`\u0010�ۡ6�\r��W��h���J�\u0013�ꔉ�2]{՚�q\u0014�DRv����ǡ\u0004ַ~\u0001^tw<�\u0006��M��B�eb�f)���Ј\tY�\u0014\u0012v�PKPk%�\u0006-C�\u0012�(Y;\u001f�>&�j���Lֿ�D�:��\u0012#\u001e!ETd)\u0000c�[�@OM@\u0012\u0002�TE\u0002��.�$٧S\u0018�hSIhqz?��\u000e*� \u0011��]�4�\u0002�S\u0005�/��>'S\u001f�o�
0~9�\t�U�\u000f<��Bu��6\u0014\u0003�쌝�\u0006�\u0014F�\\�\u0001�G\u001f\u0017k \tL\u0006\u0001b\u0005��\u0006�\r�D�������\u0016����kKK��\u001b\\?v��WmY���V���\u0015� ~�^��G�t,���:��uT[\u001f���֛���\u0018�>�2��\u0010˙���\u0011�_n�m��\f�\nXG\u0012e2\\�\u0012OBȄӳN�$���(2\u001a�n(J�;���g�L5��F��\u0015�w\u0013��D/�0ˬ�ύ\u0013H��e�'8�ez�C\b��y�W\r����J�lR�B^�˥�\n\n\u001e��ᲰJ{�\u001asӝ\u0005\u001dTG���B�]\\b2u}c��O���\u0012��f\u0012����C�\u0004`�#�\u000bw�2�t)n��cꎋ��Q�\t��.^�|{ \u000bϨ����V�is���z�\u001aĀ:���9�\u0006u�a�]����*\f�V�bt�\u000e;͡\u0011�{\u000b�=\t�7\u0017ҿ^�g_�B\u001c4g\u0010�Ը�w���\u001a\u0002�\f�.=\u001a�F����U��p���������a9�\u0000�\u0002@�9kC�A\u0016�g꿎\u0007�2�k���%x��w����\u0007\u000fx�_0@ݦ\u000b\r���G1�j�RC��Ȝ��\u0002�?\u001e��\u00006��?իMOV\u0017��f>�\r\"���~R��}���\u000b;�_�q�)��m�\u0003�r��Q5�(�N���O����Ԇ�İ�\u0006raCpX�jC�D�7s���\u001bf��k\u0001̍�2^�x>�����\u000b9\r��Ͼ�ըi��r�\u0007\u001e��o/��\t����@]\u0002��\u0001�@]\u0002w��������\u0018�'F0A\b�(}��f��A���)�+t9�\u0005��\u0003������(d��v�L�R�\u0010z:R��PG\u0010(����\u0011Ru|:��xK&砇���B\u000e+�!\tW6劖��ٝ�\u0018\u0011���3.��&��y~��2���m�����Q�I:�X��;��\\�;u��3KB�\u0017�˟^�M�)YD��\u0011��q��Ǖ���\u0003�Sާ^%]�����.�)��V��e�z�o[Y���l���gSy,�Q[�W�eE�Skz4���\u001f���=M�2̪\t(DWP\tj{�=�ǁ\u0000�\u001e�?@��?\u0005��̛H��I�w�`נA�\u000e�\u0006`%�]8_\u0003\u000e=�8D�\u000feP�HzX�#�!\u0016M:D�=\u001eILXl�֮��hۼ;�f��\t��U��'\f\rCS�HԷxBAi٢���\u001b�Y��\u001d��c\u0017O�7Kvτ�>�\u0017�2z��\u0017\"gvt��\u001af�92_d�{o\u0004tVv}�\rLaT��e�:Qm��\"\u0010�\b�\u0007��s(\u0000�\u000f�j3�\\J�ViN\u0011C�\u000e趢���\u0011�=��1�����\u0003q�\u0012��g?\u0013���W�a\n�\u000e��;�;I:\u000br>\u0019�\u001fY�����U��N-\u0003'�\u0003����/���~k�@�v�h(�&\u0018g3�dH!�`M2\u0011�\u001e$�6�u��B�s���FR��7�m�~|�S;k\u001b`����k\u001do�R{��{���\u0015P�F���;L-�\u0003hc\n��`\u001a`�\u0002'�A���\u0001\u0003ճIP�0y�F�D��I棴\"~�\r\u001eg��Wz|DČ\u0006�0�\u0015F\ru�\u0017M\u00193c���q\u001a3�h��ul�PedU��A\u001e�\u0017؊纍�Q��:q\fY�v��A��\"�^���\\�`\u001b\\\u0011,p��j��&\n�\u001bZ��k;ӫF�ˣ�]?��\n%Y�@4y��\u0012��\u0001\u0003�\bra�\u001c\u0007[^��!�\"wz�rE\b�56��GVTH\b,\u0019�\u001d�\u0016�t���{|{\u0016u�*�?��ϊ����� r�X� 6d��:i�\b?\tR[���Œ3\u0006�UӇG̖\u001dȺ���\u0000�nS��TC}s}}���ry�c�\u0003����\u0003N���B\tuڴ\u000f�R=����B���zʠ���yIP2�y%P\u0002h\fx\u001d�?��Ixz+\b9�+�\\Y�-���Nom��RV�mM���2�yU�i\u000b7˰�4���褫\u001e�-H��\r�}�Ŕ�|�%=>�p\u0017\u00179=��\u0017�6|�����hm��5�ip����8�.[����C,C�\u000e5��6w�h,�TIn��-y�%�&�w���$W�u�$���@Ð��!��������r���Tr���w����\u0018~=�%:Wnc,�h�O4��㬼h��I+����\u001e=�\u001c8ӊ��>�k���\u0004\u001b��\u001e\f�BM���\u0016>�\u0010���\u0019\u001c.�֚\u0006�`\u001c;��q��J[��=e�C(���6�˳\u0016V\u0014\f\u001b�t�H[����H�q6��\u0019B,��\u0013\"�g�����J��Λ\"�f�E����\u001bz� �\u0014���5�\u000fMݟRƇ]�2��g&��]R7j��CdƲ���\u0004VT\u001e|w{^��e��\u001a��G�\u0007��0�\u0011\r!��\u0000L}\u0012�9(\u000bܱK��Z�!}�6�v���6+��k���L��\\7�:}�n_n\u001bhg��t:q�M�2��\u0003�\u0016��x�c`d```dpdҘ11���+�<�\u0006�\b��o�����V����e�\u0000r9\u0018�@�\u0000��\u000e�x�c`d``���\u000b���o��2�]\u0006�\b\n�\u0001\u0000��\u00070\u0000x�c�������\u0001\t���L=\f\f�\u0012\b�q\u0013\u0010�100܄��@>\u000b���� 9��\u0013,\u001b�����3�\u0017��|@,\u000eQ�\u0007\u0004��\rò@�\u0005U+��� \u0005�\u0019�4\u000bЌ9P=�\u0010>�͂�/\u0005�=0}LHjL���\u0015H+b��6T/Ll\n�_�E�\t(�\u0001e�@\u0012\u0003bF\u001d��;�l\u0001 ͌\u0003��Ƃ�W\u0010>\u0003�\u0019H|%��an=\f����\u0002\u0014\u000f���\u001b��\u0002�B�0a�C��(�>\u000e�X\"�ϬPqV8>\u00021�\u0001\u0004\u0002\u0018,\u0019N0�\u0003yL(\u0010\u0001n�I\u0016$\u0011q\u0006T�\u00026K\u0000��?\u0007\u0015�t����\u0013P�\u0012��?�D/�\u0013\f�\f\f\u0000t\f��\u0000x�c``Ђ�0�\u0002��\u0000�9�/�R�N�^�I��\u0018/0�b�a�c�c:Ƭ���%���e\u000e�\u0003V\u0019�8�\u0006�_l\u0001lYl=l\u0007؞���۰\u0017��b?���À��c\u0011'\u0003�\u001a�\u001bg\r�\u000f.\u000b�8�I\\k�>p�qWp/�~�#�S�s�W���ψo\u001e?\u0007�\u001e\u001a�\f�\u0003�\u0004�\u0004�\u0004\u000e\b�\u0011�\u0013�\u0010�\u0013�\u0011�\u0011\\!�O��\u0010�����P�P��\u001a�{�\\�I�S���H�\u0004�t��\u0013�\"rB���\u000fQ\u0019Q;�\n�kbjb=b_�U���g���`�\u0010�А\b��%�C���'I.I'�\t�{�X�|��IsI�H��~##!�\"S$\u001b!�I��\u001c�\\��1y\u0019y?�u\nb\n&\n9\nK\u0014�(|STQ\fRlSܧ�M�@)Ni��\u0019e\u000ee\u0007�,�)�{�ߨȨ��$�LS��ʡj���:GZ��\u001eu\u0019u\u0017�\n�=\u001a\f\u001aV\u001a9\u001a�4>i�i�hn�������եuB�I�A{���N��&��b�M�k\u0000c�yi\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000�\u0000�\u0000\u0011\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0001\u0000\u0000\u0000@\u0000.\u0000\u0000\u0000\u0000xڭ��N�@\u0014�O\u000b\u001a�F�$��p�Ʀ� �ʸ\u0010��h\u0014]\nB�\u0014Jl���\u0014>�\u001b7.\\�\u0004�\u001e>�\u000b��aD�,��ff��=�̝[\u0000��\u0019\u001a�/�\u0005�\u0011h�\u0018�K���a\t��u��^q\u0004�xR\u001cE\u0016\u001f�'p�e\u0014O\"�=*�BB{S\u001c#�+�Ƣ>�x���8N>U����U�+,�.\fC�v{��S�ھY�Z�\u000ez��\u0003\u001b\r\u00040�����$VH\u0015�5P�9�\\w��\t��\r�|�!\u0007_�j\\k\\��/�����PB\u0001�<�\u0000�8��@/\u0017u\u000e��6s\u000e��q͈8%�LK֒�1O/3/?�������o+0F�N�=|��d\u000f�k*I���;ڠ2@U껃\f\u0013k��hѵIO��3*N���&�rd��\u0014r���/5>\u001a��d�˯�aݎ��gTP��4eVYa�\"\u001a\fz��zZ��\u001b2.���:{��,z:�?~\u0002�m�{x�m�Ւ�U\u0000E�^IH�\u0004ww���ҍ'C\u000f��N\u0012\bI\b\f\u0010,����[pww��!x\u0004 �k���]]�g�3U_Mk\\k����V����_�\u0016�\u0018�\u001aߚܚ�\u0004\u0016c\"�X�%X��X��La\u0019�e9�o��\n��J��*��j��\u001a��Z��:��z��\u0006l�Fl�&l�fl�\u0016l�Vl�6�\t\u0005\u001dJ*j\u001a��ؖ�؞\u001dؑ�ؙ�Lc�]�3̮����������þ���\u001c��\u001c��\u001c¡\u001c��\u001c��\u001c��\u001cñ\u001c�������ɜ�tf0�S9�Y��l�0�3�Ǚ��\bgs\u000e�2��8�\u000b���X��\\¥\\��\\��\\��\\õ\\�������������������ý���<��<��<£<��<��<��<ó<�������˼«���,�\r��-��\u001d��=��\u0003>�#>�\u0013>�3>�\u000b��+��\u001b��;��\u0007~�'~�\u0017~�7~�\u000f��8}���32�b���������-�?[�\u001d�t+�v\u001b���ܩ�-�\u0007[\rO��̛3�����\u001f7��\u001f�}D�G�}D�G�����}/�{y����؉�؉����؋�؋��^a��W�+�\u0015�\n{���^a�c�c�c�c�c�c�c�c�c��S�)픾��Sz��|������+�W��|Oe��=���^e��W۩��vj;���Nm����i|Wc����k�5�\u001a{���^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^�^oЋ����;����\u001e�����:������:�����d�3�;���:������9z�����9z����]������9:���ߔ��qʱ�{�~���7��~���7��~���7�=\u001dG��qt\u001c\u001dG��qt\u001c\u001dG��qt\u001c\u001dG��qt\u001c\u001dG��qt\u001c\u001dG��qt\u001c\u001dG��qt\u001c\u001dG��qt\u001c\u001dG�\u0019�۳�\u001bt��o?q$�崡�\u0019�\u0006����\f7��J1�r0��\u0014�`�\u0001\n�-|\u0000\u0000\u0000\u0001Q�K(\u0000\u0000"}
diff --git a/vendor/twitter-bootstrap-3/assets/js/respond.min.js b/vendor/twitter-bootstrap-3/assets/js/respond.min.js
new file mode 100644
index 000000000..9e263d3d2
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/assets/js/respond.min.js
@@ -0,0 +1,106 @@
+/*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */
+/*! NOTE: If you're already including a window.matchMedia polyfill via Modernizr or otherwise, you don't need this part */
+window.matchMedia = window.matchMedia || function (a)
+{
+ "use strict";
+ var c, d = a.documentElement, e = d.firstElementChild || d.firstChild, f = a.createElement ("body"), g = a.createElement ("div");
+ return g.id = "mq-test-1", g.style.cssText = "position:absolute;top:-100em", f.style.background = "none", f.appendChild (g), function (a)
+ {
+ return g.innerHTML = '', d.insertBefore (f, e), c = 42 === g.offsetWidth, d.removeChild (f), {matches: c, media: a}
+ }
+} (document);
+
+/*! Respond.js v1.1.0: min/max-width media query polyfill. (c) Scott Jehl. MIT/GPLv2 Lic. j.mp/respondjs */
+(function (a)
+{
+ "use strict";
+ function x ()
+ {
+ u (!0)
+ }
+
+ var b = {};
+ a.respond = b, b.update = function ()
+ {
+ }, b.mediaQueriesSupported = a.matchMedia && a.matchMedia ("only all").matches, b.mediaQueriesSupported;
+ var q, r, t, c = a.document, d = c.documentElement, e = [], f = [], g = [], h = {}, i = 30, j = c.getElementsByTagName ("head")[0] || d, k = c.getElementsByTagName ("base")[0], l = j.getElementsByTagName ("link"), m = [], n = function ()
+ {
+ for (var b = 0; l.length > b; b++)
+ {
+ var c = l[b], d = c.href, e = c.media, f = c.rel && "stylesheet" === c.rel.toLowerCase ();
+ d && f && !h[d] && (c.styleSheet && c.styleSheet.rawCssText ? (p (c.styleSheet.rawCssText, d, e), h[d] = !0) : (!/^([a-zA-Z:]*\/\/)/.test (d) && !k || d.replace (RegExp.$1, "").split ("/")[0] === a.location.host) && m.push ({href: d, media: e}))
+ }
+ o ()
+ }, o = function ()
+ {
+ if (m.length)
+ {
+ var a = m.shift ();
+ v (a.href, function (b)
+ {
+ p (b, a.href, a.media), h[a.href] = !0, setTimeout (function ()
+ {
+ o ()
+ }, 0)
+ })
+ }
+ }, p = function (a, b, c)
+ {
+ var d = a.match (/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi), g = d && d.length || 0;
+ b = b.substring (0, b.lastIndexOf ("/"));
+ var h = function (a)
+ {
+ return a.replace (/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g, "$1" + b + "$2$3")
+ }, i = !g && c;
+ b.length && (b += "/"), i && (g = 1);
+ for (var j = 0; g > j; j++)
+ {
+ var k, l, m, n;
+ i ? (k = c, f.push (h (a))) : (k = d[j].match (/@media *([^\{]+)\{([\S\s]+?)$/) && RegExp.$1, f.push (RegExp.$2 && h (RegExp.$2))), m = k.split (","), n = m.length;
+ for (var o = 0; n > o; o++)l = m[o], e.push ({media: l.split ("(")[0].match (/(only\s+)?([a-zA-Z]+)\s?/) && RegExp.$2 || "all", rules: f.length - 1, hasquery: l.indexOf ("(") > -1, minw: l.match (/\(min\-width:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/) && parseFloat (RegExp.$1) + (RegExp.$2 || ""), maxw: l.match (/\(max\-width:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/) && parseFloat (RegExp.$1) + (RegExp.$2 || "")})
+ }
+ u ()
+ }, s = function ()
+ {
+ var a, b = c.createElement ("div"), e = c.body, f = !1;
+ return b.style.cssText = "position:absolute;font-size:1em;width:1em", e || (e = f = c.createElement ("body"), e.style.background = "none"), e.appendChild (b), d.insertBefore (e, d.firstChild), a = b.offsetWidth, f ? d.removeChild (e) : e.removeChild (b), a = t = parseFloat (a)
+ }, u = function (a)
+ {
+ var b = "clientWidth", h = d[b], k = "CSS1Compat" === c.compatMode && h || c.body[b] || h, m = {}, n = l[l.length - 1], o = (new Date).getTime ();
+ if (a && q && i > o - q)return clearTimeout (r), r = setTimeout (u, i), void 0;
+ q = o;
+ for (var p in e)if (e.hasOwnProperty (p))
+ {
+ var v = e[p], w = v.minw, x = v.maxw, y = null === w, z = null === x, A = "em";
+ w && (w = parseFloat (w) * (w.indexOf (A) > -1 ? t || s () : 1)), x && (x = parseFloat (x) * (x.indexOf (A) > -1 ? t || s () : 1)), v.hasquery && (y && z || !(y || k >= w) || !(z || x >= k)) || (m[v.media] || (m[v.media] = []), m[v.media].push (f[v.rules]))
+ }
+ for (var B in g)g.hasOwnProperty (B) && g[B] && g[B].parentNode === j && j.removeChild (g[B]);
+ for (var C in m)if (m.hasOwnProperty (C))
+ {
+ var D = c.createElement ("style"), E = m[C].join ("\n");
+ D.type = "text/css", D.media = C, j.insertBefore (D, n.nextSibling), D.styleSheet ? D.styleSheet.cssText = E : D.appendChild (c.createTextNode (E)), g.push (D)
+ }
+ }, v = function (a, b)
+ {
+ var c = w ();
+ c && (c.open ("GET", a, !0), c.onreadystatechange = function ()
+ {
+ 4 !== c.readyState || 200 !== c.status && 304 !== c.status || b (c.responseText)
+ }, 4 !== c.readyState && c.send (null))
+ }, w = function ()
+ {
+ var b = !1;
+ try
+ {
+ b = new a.XMLHttpRequest
+ } catch (c)
+ {
+ b = new a.ActiveXObject ("Microsoft.XMLHTTP")
+ }
+ return function ()
+ {
+ return b
+ }
+ } ();
+ n (), b.update = n, a.addEventListener ? a.addEventListener ("resize", x, !1) : a.attachEvent && a.attachEvent ("onresize", x)
+}) (this);
diff --git a/vendor/twitter-bootstrap-3/assets/js/uglify.js b/vendor/twitter-bootstrap-3/assets/js/uglify.js
new file mode 100644
index 000000000..0b9fd6b2a
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/assets/js/uglify.js
@@ -0,0 +1,2463 @@
+/** @license uglifyweb Copyright (c) 2011, The Dojo Foundation All Rights Reserved.
+ * The parts that are unique to this repo (not much, just some wrapper code) are
+ * released under the new BSD and MIT licenses.
+ *
+ * This file includes UglifyJS and some parts of es5-shim, both which have
+ * their own licenses:
+ *
+ * https://github.com/mishoo/UglifyJS (BSD)
+ * https://github.com/kriskowal/es5-shim (MIT)
+ *
+ * More info on the project: https://github.com/jrburke/uglifyweb
+ */
+
+(function ()
+{
+ var a = Object.prototype.toString, b = "a"[0] != "a", c = function (a)
+ {
+ if (a == null)throw new TypeError;
+ return b && typeof a == "string" && a ? a.split ("") : Object (a)
+ };
+ Array.prototype.forEach || (Array.prototype.forEach = function (a)
+ {
+ var b = c (this), d = arguments[1], e = 0, f = b.length >>> 0;
+ while (e < f)e in b && a.call (d, b[e], e, b), e++
+ }), Array.prototype.reduce || (Array.prototype.reduce = function (a)
+ {
+ var b = c (this), d = b.length >>> 0;
+ if (!d && arguments.length == 1)throw new TypeError;
+ var e = 0, f;
+ if (arguments.length < 2)
+ {
+ do {
+ if (e in b)
+ {
+ f = b[e++];
+ break
+ }
+ if (++e >= d)throw new TypeError
+ } while (!0)
+ } else f = arguments[1];
+ for (; e < d; e++)e in b && (f = a.call (void 0, f, b[e], e, b));
+ return f
+ });
+ var d, e, f;
+ (function ()
+ {
+ function g (a, b)
+ {
+ if (a && a.charAt (0) === "." && b)
+ {
+ b = b.split ("/"), b = b.slice (0, b.length - 1), a = b.concat (a.split ("/"));
+ var c, d;
+ for (c = 0; d = a[c]; c++)if (d === ".")a.splice (c, 1), c -= 1; else if (d === "..")if (c !== 1 || a[2] !== ".." && a[0] !== "..")c > 0 && (a.splice (c - 1, 2), c -= 2); else break;
+ a = a.join ("/")
+ }
+ return a
+ }
+
+ function h (a, d)
+ {
+ return function ()
+ {
+ return c.apply (null, b.call (arguments, 0).concat ([a, d]))
+ }
+ }
+
+ function i (a)
+ {
+ return function (b)
+ {
+ return g (b, a)
+ }
+ }
+
+ function j (b)
+ {
+ return function (c)
+ {
+ a[b] = c
+ }
+ }
+
+ function k (b, c)
+ {
+ var d, e, f = b.indexOf ("!");
+ return f !== -1 ? (d = g (b.slice (0, f), c), b = b.slice (f + 1), e = a[d], e && e.normalize ? b = e.normalize (b, i (c)) : b = g (b, c)) : b = g (b, c), {f: d ? d + "!" + b : b, n: b, p: e}
+ }
+
+ function l (b, c, d, e)
+ {
+ var f = [], g, i, l, m, n, o;
+ e || (e = b);
+ if (typeof d == "function")
+ {
+ if (c)for (m = 0; m < c.length; m++)o = k (c[m], e), l = o.f, l === "require" ? f[m] = h (b) : l === "exports" ? (f[m] = a[b] = {}, g = !0) : l === "module" ? i = f[m] = {id: b, uri: "", exports: a[b]} : l in a ? f[m] = a[l] : o.p && (o.p.load (o.n, h (e, !0), j (l), {}), f[m] = a[l]);
+ n = d.apply (a[b], f), b && (i && i.exports !== undefined ? a[b] = i.exports : g || (a[b] = n))
+ } else b && (a[b] = d)
+ }
+
+ var a = {}, b = [].slice, c;
+ if (typeof f == "function")return;
+ d = c = function (b, d, e, f)
+ {
+ return typeof b == "string" ? a[k (b, d).f] : (b.splice || (d.splice ? (b = d, d = arguments[2]) : b = []), f ? l (null, b, d, e) : setTimeout (function ()
+ {
+ l (null, b, d, e)
+ }, 15), c)
+ }, c.config = function ()
+ {
+ return c
+ }, e || (e = c), f = function (a, b, c)
+ {
+ b.splice || (c = b, b = []), l (a, b, c)
+ }, f.amd = {}
+ }) (), f ("almond", function ()
+ {
+ }), f ("lib/parse-js", ["require", "exports", "module"], function (a, b, c)
+ {
+ function r (a)
+ {
+ return q.letter.test (a)
+ }
+
+ function s (a)
+ {
+ return a = a.charCodeAt (0), a >= 48 && a <= 57
+ }
+
+ function t (a)
+ {
+ return s (a) || r (a)
+ }
+
+ function u (a)
+ {
+ return q.non_spacing_mark.test (a) || q.space_combining_mark.test (a)
+ }
+
+ function v (a)
+ {
+ return q.connector_punctuation.test (a)
+ }
+
+ function w (a)
+ {
+ return a == "$" || a == "_" || r (a)
+ }
+
+ function x (a)
+ {
+ return w (a) || u (a) || s (a) || v (a) || a == "" || a == ""
+ }
+
+ function y (a)
+ {
+ if (i.test (a))return parseInt (a.substr (2), 16);
+ if (j.test (a))return parseInt (a.substr (1), 8);
+ if (k.test (a))return parseFloat (a)
+ }
+
+ function z (a, b, c, d)
+ {
+ this.message = a, this.line = b, this.col = c, this.pos = d, this.stack = (new Error).stack
+ }
+
+ function A (a, b, c, d)
+ {
+ throw new z (a, b, c, d)
+ }
+
+ function B (a, b, c)
+ {
+ return a.type == b && (c == null || a.value == c)
+ }
+
+ function D (a)
+ {
+ function c ()
+ {
+ return b.text.charAt (b.pos)
+ }
+
+ function e (a, c)
+ {
+ var d = b.text.charAt (b.pos++);
+ if (a && !d)throw C;
+ return d == "\n" ? (b.newline_before = b.newline_before || !c, ++b.line, b.col = 0) : ++b.col, d
+ }
+
+ function i ()
+ {
+ return!b.peek ()
+ }
+
+ function j (a, c)
+ {
+ var d = b.text.indexOf (a, b.pos);
+ if (c && d == -1)throw C;
+ return d
+ }
+
+ function k ()
+ {
+ b.tokline = b.line, b.tokcol = b.col, b.tokpos = b.pos
+ }
+
+ function p (a, c, d)
+ {
+ b.regex_allowed = a == "operator" && !S (F, c) || a == "keyword" && S (f, c) || a == "punc" && S (n, c);
+ var e = {type: a, value: c, line: b.tokline, col: b.tokcol, pos: b.tokpos, nlb: b.newline_before};
+ return d || (e.comments_before = b.comments_before, b.comments_before = []), b.newline_before = !1, e
+ }
+
+ function q ()
+ {
+ while (S (m, c ()))e ()
+ }
+
+ function r (a)
+ {
+ var b = "", d = c (), f = 0;
+ while (d && a (d, f++))b += e (), d = c ();
+ return b
+ }
+
+ function u (a)
+ {
+ A (a, b.tokline, b.tokcol, b.tokpos)
+ }
+
+ function v (a)
+ {
+ var b = !1, c = !1, d = !1, e = a == ".", f = r (function (f, g)
+ {
+ return f == "x" || f == "X" ? d ? !1 : d = !0 : !!d || f != "E" && f != "e" ? f == "-" ? c || g == 0 && !a ? !0 : !1 : f == "+" ? c : (c = !1, f == "." ? !e && !d ? e = !0 : !1 : t (f)) : b ? !1 : b = c = !0
+ });
+ a && (f = a + f);
+ var g = y (f);
+ if (!isNaN (g))return p ("num", g);
+ u ("Invalid syntax: " + f)
+ }
+
+ function z (a)
+ {
+ var b = e (!0, a);
+ switch (b)
+ {
+ case"n":
+ return"\n";
+ case"r":
+ return"\r";
+ case"t":
+ return"\t";
+ case"b":
+ return"\b";
+ case"v":
+ return"";
+ case"f":
+ return"\f";
+ case"0":
+ return"\0";
+ case"x":
+ return String.fromCharCode (B (2));
+ case"u":
+ return String.fromCharCode (B (4));
+ case"\n":
+ return"";
+ default:
+ return b
+ }
+ }
+
+ function B (a)
+ {
+ var b = 0;
+ for (; a > 0; --a)
+ {
+ var c = parseInt (e (!0), 16);
+ isNaN (c) && u ("Invalid hex-character pattern in string"), b = b << 4 | c
+ }
+ return b
+ }
+
+ function D ()
+ {
+ return N ("Unterminated string constant", function ()
+ {
+ var a = e (), b = "";
+ for (; ;)
+ {
+ var c = e (!0);
+ if (c == "\\")
+ {
+ var d = 0, f = null;
+ c = r (function (a)
+ {
+ if (a >= "0" && a <= "7")
+ {
+ if (!f)return f = a, ++d;
+ if (f <= "3" && d <= 2)return++d;
+ if (f >= "4" && d <= 1)return++d
+ }
+ return!1
+ }), d > 0 ? c = String.fromCharCode (parseInt (c, 8)) : c = z (!0)
+ } else if (c == a)break;
+ b += c
+ }
+ return p ("string", b)
+ })
+ }
+
+ function E ()
+ {
+ e ();
+ var a = j ("\n"), c;
+ return a == -1 ? (c = b.text.substr (b.pos), b.pos = b.text.length) : (c = b.text.substring (b.pos, a), b.pos = a), p ("comment1", c, !0)
+ }
+
+ function G ()
+ {
+ return e (), N ("Unterminated multiline comment", function ()
+ {
+ var a = j ("*/", !0), c = b.text.substring (b.pos, a), d = p ("comment2", c, !0);
+ return b.pos = a + 2, b.line += c.split ("\n").length - 1, b.newline_before = c.indexOf ("\n") >= 0, /^@cc_on/i.test (c) && (T ("WARNING: at line " + b.line), T ('*** Found "conditional comment": ' + c), T ("*** UglifyJS DISCARDS ALL COMMENTS. This means your code might no longer work properly in Internet Explorer.")), d
+ })
+ }
+
+ function H ()
+ {
+ var a = !1, b = "", d;
+ while ((d = c ()) != null)if (!a)if (d == "\\")a = !0, e (); else if (x (d))b += e (); else break; else d != "u" && u ("Expecting UnicodeEscapeSequence -- uXXXX"), d = z (), x (d) || u ("Unicode char: " + d.charCodeAt (0) + " is not valid in identifier"), b += d, a = !1;
+ return b
+ }
+
+ function I (a)
+ {
+ return N ("Unterminated regular expression", function ()
+ {
+ var b = !1, c, d = !1;
+ while (c = e (!0))if (b)a += "\\" + c, b = !1; else if (c == "[")d = !0, a += c; else if (c == "]" && d)d = !1, a += c; else
+ {
+ if (c == "/" && !d)break;
+ c == "\\" ? b = !0 : a += c
+ }
+ var f = H ();
+ return p ("regexp", [a, f])
+ })
+ }
+
+ function J (a)
+ {
+ function b (a)
+ {
+ if (!c ())return a;
+ var d = a + c ();
+ return S (l, d) ? (e (), b (d)) : a
+ }
+
+ return p ("operator", b (a || e ()))
+ }
+
+ function K ()
+ {
+ e ();
+ var a = b.regex_allowed;
+ switch (c ())
+ {
+ case"/":
+ return b.comments_before.push (E ()), b.regex_allowed = a, O ();
+ case"*":
+ return b.comments_before.push (G ()), b.regex_allowed = a, O ()
+ }
+ return b.regex_allowed ? I ("") : J ("/")
+ }
+
+ function L ()
+ {
+ return e (), s (c ()) ? v (".") : p ("punc", ".")
+ }
+
+ function M ()
+ {
+ var a = H ();
+ return S (d, a) ? S (l, a) ? p ("operator", a) : S (g, a) ? p ("atom", a) : p ("keyword", a) : p ("name", a)
+ }
+
+ function N (a, b)
+ {
+ try
+ {
+ return b ()
+ } catch (c)
+ {
+ if (c === C)u (a); else throw c
+ }
+ }
+
+ function O (a)
+ {
+ if (a != null)return I (a);
+ q (), k ();
+ var b = c ();
+ if (!b)return p ("eof");
+ if (s (b))return v ();
+ if (b == '"' || b == "'")return D ();
+ if (S (o, b))return p ("punc", e ());
+ if (b == ".")return L ();
+ if (b == "/")return K ();
+ if (S (h, b))return J ();
+ if (b == "\\" || w (b))return M ();
+ u ("Unexpected character '" + b + "'")
+ }
+
+ var b = {text: a.replace (/\r\n?|[\n\u2028\u2029]/g, "\n").replace (/^\uFEFF/, ""), pos: 0, tokpos: 0, line: 0, tokline: 0, col: 0, tokcol: 0, newline_before: !1, regex_allowed: !1, comments_before: []};
+ return O.context = function (a)
+ {
+ return a && (b = a), b
+ }, O
+ }
+
+ function K (a, b, c)
+ {
+ this.name = a, this.start = b, this.end = c
+ }
+
+ function L (a, b, c)
+ {
+ function e (a, b)
+ {
+ return B (d.token, a, b)
+ }
+
+ function f ()
+ {
+ return d.peeked || (d.peeked = d.input ())
+ }
+
+ function g ()
+ {
+ return d.prev = d.token, d.peeked ? (d.token = d.peeked, d.peeked = null) : d.token = d.input (), d.token
+ }
+
+ function h ()
+ {
+ return d.prev
+ }
+
+ function i (a, b, c, e)
+ {
+ var f = d.input.context ();
+ A (a, b != null ? b : f.tokline, c != null ? c : f.tokcol, e != null ? e : f.tokpos)
+ }
+
+ function j (a, b)
+ {
+ i (b, a.line, a.col)
+ }
+
+ function k (a)
+ {
+ a == null && (a = d.token), j (a, "Unexpected token: " + a.type + " (" + a.value + ")")
+ }
+
+ function l (a, b)
+ {
+ if (e (a, b))return g ();
+ j (d.token, "Unexpected token " + d.token.type + ", expected " + a)
+ }
+
+ function m (a)
+ {
+ return l ("punc", a)
+ }
+
+ function n ()
+ {
+ return!b && (d.token.nlb || e ("eof") || e ("punc", "}"))
+ }
+
+ function o ()
+ {
+ e ("punc", ";") ? g () : n () || k ()
+ }
+
+ function p ()
+ {
+ return P (arguments)
+ }
+
+ function q ()
+ {
+ m ("(");
+ var a = bk ();
+ return m (")"), a
+ }
+
+ function r (a, b, c)
+ {
+ return a instanceof K ? a : new K (a, b, c)
+ }
+
+ function s (a)
+ {
+ return c ? function ()
+ {
+ var b = d.token, c = a.apply (this, arguments);
+ return c[0] = r (c[0], b, h ()), c
+ } : a
+ }
+
+ function u (a)
+ {
+ d.labels.push (a);
+ var c = d.token, e = t ();
+ return b && !S (I, e[0]) && k (c), d.labels.pop (), p ("label", a, e)
+ }
+
+ function v ()
+ {
+ return p ("stat", N (bk, o))
+ }
+
+ function w (a)
+ {
+ var b;
+ return n () || (b = e ("name") ? d.token.value : null), b != null ? (g (), R (b, d.labels) || i ("Label " + b + " without matching loop or statement")) : d.in_loop == 0 && i (a + " not inside a loop or switch"), o (), p (a, b)
+ }
+
+ function x ()
+ {
+ m ("(");
+ var a = null;
+ if (!e ("punc", ";"))
+ {
+ a = e ("keyword", "var") ? (g (), V (!0)) : bk (!0, !0);
+ if (e ("operator", "in"))return z (a)
+ }
+ return y (a)
+ }
+
+ function y (a)
+ {
+ m (";");
+ var b = e ("punc", ";") ? null : bk ();
+ m (";");
+ var c = e ("punc", ")") ? null : bk ();
+ return m (")"), p ("for", a, b, c, bl (t))
+ }
+
+ function z (a)
+ {
+ var b = a[0] == "var" ? p ("name", a[1][0]) : a;
+ g ();
+ var c = bk ();
+ return m (")"), p ("for-in", a, b, c, bl (t))
+ }
+
+ function L ()
+ {
+ var a = q (), b = t (), c;
+ return e ("keyword", "else") && (g (), c = t ()), p ("if", a, b, c)
+ }
+
+ function O ()
+ {
+ m ("{");
+ var a = [];
+ while (!e ("punc", "}"))e ("eof") && k (), a.push (t ());
+ return g (), a
+ }
+
+ function T ()
+ {
+ var a = O (), b, c;
+ if (e ("keyword", "catch"))
+ {
+ g (), m ("("), e ("name") || i ("Name expected");
+ var f = d.token.value;
+ g (), m (")"), b = [f, O ()]
+ }
+ return e ("keyword", "finally") && (g (), c = O ()), !b && !c && i ("Missing catch/finally blocks"), p ("try", a, b, c)
+ }
+
+ function U (a)
+ {
+ var b = [];
+ for (; ;)
+ {
+ e ("name") || k ();
+ var c = d.token.value;
+ g (), e ("operator", "=") ? (g (), b.push ([c, bk (!1, a)])) : b.push ([c]);
+ if (!e ("punc", ","))break;
+ g ()
+ }
+ return b
+ }
+
+ function V (a)
+ {
+ return p ("var", U (a))
+ }
+
+ function W ()
+ {
+ return p ("const", U ())
+ }
+
+ function X ()
+ {
+ var a = Y (!1), b;
+ return e ("punc", "(") ? (g (), b = Z (")")) : b = [], bc (p ("new", a, b), !0)
+ }
+
+ function Z (a, b, c)
+ {
+ var d = !0, f = [];
+ while (!e ("punc", a))
+ {
+ d ? d = !1 : m (",");
+ if (b && e ("punc", a))break;
+ e ("punc", ",") && c ? f.push (["atom", "undefined"]) : f.push (bk (!1))
+ }
+ return g (), f
+ }
+
+ function $ ()
+ {
+ return p ("array", Z ("]", !b, !0))
+ }
+
+ function _ ()
+ {
+ var a = !0, c = [];
+ while (!e ("punc", "}"))
+ {
+ a ? a = !1 : m (",");
+ if (!b && e ("punc", "}"))break;
+ var f = d.token.type, h = ba ();
+ f != "name" || h != "get" && h != "set" || !!e ("punc", ":") ? (m (":"), c.push ([h, bk (!1)])) : c.push ([bb (), C (!1), h])
+ }
+ return g (), p ("object", c)
+ }
+
+ function ba ()
+ {
+ switch (d.token.type)
+ {
+ case"num":
+ case"string":
+ return N (d.token.value, g)
+ }
+ return bb ()
+ }
+
+ function bb ()
+ {
+ switch (d.token.type)
+ {
+ case"name":
+ case"operator":
+ case"keyword":
+ case"atom":
+ return N (d.token.value, g);
+ default:
+ k ()
+ }
+ }
+
+ function bc (a, b)
+ {
+ return e ("punc", ".") ? (g (), bc (p ("dot", a, bb ()), b)) : e ("punc", "[") ? (g (), bc (p ("sub", a, N (bk, M (m, "]"))), b)) : b && e ("punc", "(") ? (g (), bc (p ("call", a, Z (")")), !0)) : a
+ }
+
+ function bd (a)
+ {
+ if (e ("operator") && S (E, d.token.value))return be ("unary-prefix", N (d.token.value, g), bd (a));
+ var b = Y (a);
+ while (e ("operator") && S (F, d.token.value) && !d.token.nlb)b = be ("unary-postfix", d.token.value, b), g ();
+ return b
+ }
+
+ function be (a, b, c)
+ {
+ return(b == "++" || b == "--") && !bi (c) && i ("Invalid use of " + b + " operator"), p (a, b, c)
+ }
+
+ function bf (a, b, c)
+ {
+ var f = e ("operator") ? d.token.value : null;
+ f && f == "in" && c && (f = null);
+ var h = f != null ? H[f] : null;
+ if (h != null && h > b)
+ {
+ g ();
+ var i = bf (bd (!0), h, c);
+ return bf (p ("binary", f, a, i), b, c)
+ }
+ return a
+ }
+
+ function bg (a)
+ {
+ return bf (bd (!0), 0, a)
+ }
+
+ function bh (a)
+ {
+ var b = bg (a);
+ if (e ("operator", "?"))
+ {
+ g ();
+ var c = bk (!1);
+ return m (":"), p ("conditional", b, c, bk (!1, a))
+ }
+ return b
+ }
+
+ function bi (a)
+ {
+ if (!b)return!0;
+ switch (a[0] + "")
+ {
+ case"dot":
+ case"sub":
+ case"new":
+ case"call":
+ return!0;
+ case"name":
+ return a[1] != "this"
+ }
+ }
+
+ function bj (a)
+ {
+ var b = bh (a), c = d.token.value;
+ if (e ("operator") && S (G, c))
+ {
+ if (bi (b))return g (), p ("assign", G[c], b, bj (a));
+ i ("Invalid assignment")
+ }
+ return b
+ }
+
+ function bl (a)
+ {
+ try
+ {
+ return++d.in_loop, a ()
+ } finally
+ {
+ --d.in_loop
+ }
+ }
+
+ var d = {input: typeof a == "string" ? D (a, !0) : a, token: null, prev: null, peeked: null, in_function: 0, in_loop: 0, labels: []};
+ d.token = g ();
+ var t = s (function ()
+ {
+ if (e ("operator", "/") || e ("operator", "/="))d.peeked = null, d.token = d.input (d.token.value.substr (1));
+ switch (d.token.type)
+ {
+ case"num":
+ case"string":
+ case"regexp":
+ case"operator":
+ case"atom":
+ return v ();
+ case"name":
+ return B (f (), "punc", ":") ? u (N (d.token.value, g, g)) : v ();
+ case"punc":
+ switch (d.token.value)
+ {
+ case"{":
+ return p ("block", O ());
+ case"[":
+ case"(":
+ return v ();
+ case";":
+ return g (), p ("block");
+ default:
+ k ()
+ }
+ ;
+ case"keyword":
+ switch (N (d.token.value, g))
+ {
+ case"break":
+ return w ("break");
+ case"continue":
+ return w ("continue");
+ case"debugger":
+ return o (), p ("debugger");
+ case"do":
+ return function (a)
+ {
+ return l ("keyword", "while"), p ("do", N (q, o), a)
+ } (bl (t));
+ case"for":
+ return x ();
+ case"function":
+ return C (!0);
+ case"if":
+ return L ();
+ case"return":
+ return d.in_function == 0 && i ("'return' outside of function"), p ("return", e ("punc", ";") ? (g (), null) : n () ? null : N (bk, o));
+ case"switch":
+ return p ("switch", q (), Q ());
+ case"throw":
+ return d.token.nlb && i ("Illegal newline after 'throw'"), p ("throw", N (bk, o));
+ case"try":
+ return T ();
+ case"var":
+ return N (V, o);
+ case"const":
+ return N (W, o);
+ case"while":
+ return p ("while", q (), bl (t));
+ case"with":
+ return p ("with", q (), t ());
+ default:
+ k ()
+ }
+ }
+ }), C = s (function (a)
+ {
+ var b = e ("name") ? N (d.token.value, g) : null;
+ return a && !b && k (), m ("("), p (a ? "defun" : "function", b, function (a, b)
+ {
+ while (!e ("punc", ")"))a ? a = !1 : m (","), e ("name") || k (), b.push (d.token.value), g ();
+ return g (), b
+ } (!0, []), function ()
+ {
+ ++d.in_function;
+ var a = d.in_loop;
+ d.in_loop = 0;
+ var b = O ();
+ return--d.in_function, d.in_loop = a, b
+ } ())
+ }), Q = M (bl, function ()
+ {
+ m ("{");
+ var a = [], b = null;
+ while (!e ("punc", "}"))e ("eof") && k (), e ("keyword", "case") ? (g (), b = [], a.push ([bk (), b]), m (":")) : e ("keyword", "default") ? (g (), m (":"), b = [], a.push ([null, b])) : (b || k (), b.push (t ()));
+ return g (), a
+ }), Y = s (function (a)
+ {
+ if (e ("operator", "new"))return g (), X ();
+ if (e ("punc"))
+ {
+ switch (d.token.value)
+ {
+ case"(":
+ return g (), bc (N (bk, M (m, ")")), a);
+ case"[":
+ return g (), bc ($ (), a);
+ case"{":
+ return g (), bc (_ (), a)
+ }
+ k ()
+ }
+ if (e ("keyword", "function"))return g (), bc (C (!1), a);
+ if (S (J, d.token.type))
+ {
+ var b = d.token.type == "regexp" ? p ("regexp", d.token.value[0], d.token.value[1]) : p (d.token.type, d.token.value);
+ return bc (N (b, g), a)
+ }
+ k ()
+ }), bk = s (function (a, b)
+ {
+ arguments.length == 0 && (a = !0);
+ var c = bj (b);
+ return a && e ("punc", ",") ? (g (), p ("seq", c, bk (!0, b))) : c
+ });
+ return p ("toplevel", function (a)
+ {
+ while (!e ("eof"))a.push (t ());
+ return a
+ } ([]))
+ }
+
+ function M (a)
+ {
+ var b = P (arguments, 1);
+ return function ()
+ {
+ return a.apply (this, b.concat (P (arguments)))
+ }
+ }
+
+ function N (a)
+ {
+ a instanceof Function && (a = a ());
+ for (var b = 1, c = arguments.length; --c > 0; ++b)arguments[b] ();
+ return a
+ }
+
+ function O (a)
+ {
+ var b = {};
+ for (var c = 0; c < a.length; ++c)b[a[c]] = !0;
+ return b
+ }
+
+ function P (a, b)
+ {
+ return Array.prototype.slice.call (a, b || 0)
+ }
+
+ function Q (a)
+ {
+ return a.split ("")
+ }
+
+ function R (a, b)
+ {
+ for (var c = b.length; --c >= 0;)if (b[c] === a)return!0;
+ return!1
+ }
+
+ function S (a, b)
+ {
+ return Object.prototype.hasOwnProperty.call (a, b)
+ }
+
+ var d = O (["break", "case", "catch", "const", "continue", "default", "delete", "do", "else", "finally", "for", "function", "if", "in", "instanceof", "new", "return", "switch", "throw", "try", "typeof", "var", "void", "while", "with"]), e = O (["abstract", "boolean", "byte", "char", "class", "debugger", "double", "enum", "export", "extends", "final", "float", "goto", "implements", "import", "int", "interface", "long", "native", "package", "private", "protected", "public", "short", "static", "super", "synchronized", "throws", "transient", "volatile"]), f = O (["return", "new", "delete", "throw", "else", "case"]), g = O (["false", "null", "true", "undefined"]), h = O (Q ("+-*&%=<>!?|~^")), i = /^0x[0-9a-f]+$/i, j = /^0[0-7]+$/, k = /^\d*\.?\d*(?:e[+-]?\d*(?:\d\.?|\.?\d)\d*)?$/i, l = O (["in", "instanceof", "typeof", "new", "void", "delete", "++", "--", "+", "-", "!", "~", "&", "|", "^", "*", "/", "%", ">>", "<<", ">>>", "<", ">", "<=", ">=", "==", "===", "!=", "!==", "?", "=", "+=", "-=", "/=", "*=", "%=", ">>=", "<<=", ">>>=", "|=", "^=", "&=", "&&", "||"]), m = O (Q (" \n\r\t\f ")), n = O (Q ("[{}(,.;:")), o = O (Q ("[]{}(),;:")), p = O (Q ("gmsiy")), q = {letter: new RegExp ("[\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0523\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0621-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971\\u0972\\u097B-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D28\\u0D2A-\\u0D39\\u0D3D\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC\\u0EDD\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8B\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10D0-\\u10FA\\u10FC\\u1100-\\u1159\\u115F-\\u11A2\\u11A8-\\u11F9\\u1200-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u1676\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19A9\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u2094\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2C6F\\u2C71-\\u2C7D\\u2C80-\\u2CE4\\u2D00-\\u2D25\\u2D30-\\u2D65\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31B7\\u31F0-\\u31FF\\u3400\\u4DB5\\u4E00\\u9FC3\\uA000-\\uA48C\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA65F\\uA662-\\uA66E\\uA67F-\\uA697\\uA717-\\uA71F\\uA722-\\uA788\\uA78B\\uA78C\\uA7FB-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA90A-\\uA925\\uA930-\\uA946\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAC00\\uD7A3\\uF900-\\uFA2D\\uFA30-\\uFA6A\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]"), non_spacing_mark: new RegExp ("[\\u0300-\\u036F\\u0483-\\u0487\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065E\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0900-\\u0902\\u093C\\u0941-\\u0948\\u094D\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09BC\\u09C1-\\u09C4\\u09CD\\u09E2\\u09E3\\u0A01\\u0A02\\u0A3C\\u0A41\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81\\u0A82\\u0ABC\\u0AC1-\\u0AC5\\u0AC7\\u0AC8\\u0ACD\\u0AE2\\u0AE3\\u0B01\\u0B3C\\u0B3F\\u0B41-\\u0B44\\u0B4D\\u0B56\\u0B62\\u0B63\\u0B82\\u0BC0\\u0BCD\\u0C3E-\\u0C40\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0CBC\\u0CBF\\u0CC6\\u0CCC\\u0CCD\\u0CE2\\u0CE3\\u0D41-\\u0D44\\u0D4D\\u0D62\\u0D63\\u0DCA\\u0DD2-\\u0DD4\\u0DD6\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F71-\\u0F7E\\u0F80-\\u0F84\\u0F86\\u0F87\\u0F90-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102D-\\u1030\\u1032-\\u1037\\u1039\\u103A\\u103D\\u103E\\u1058\\u1059\\u105E-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108D\\u109D\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B7-\\u17BD\\u17C6\\u17C9-\\u17D3\\u17DD\\u180B-\\u180D\\u18A9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193B\\u1A17\\u1A18\\u1A56\\u1A58-\\u1A5E\\u1A60\\u1A62\\u1A65-\\u1A6C\\u1A73-\\u1A7C\\u1A7F\\u1B00-\\u1B03\\u1B34\\u1B36-\\u1B3A\\u1B3C\\u1B42\\u1B6B-\\u1B73\\u1B80\\u1B81\\u1BA2-\\u1BA5\\u1BA8\\u1BA9\\u1C2C-\\u1C33\\u1C36\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE0\\u1CE2-\\u1CE8\\u1CED\\u1DC0-\\u1DE6\\u1DFD-\\u1DFF\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2CEF-\\u2CF1\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F\\uA67C\\uA67D\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA825\\uA826\\uA8C4\\uA8E0-\\uA8F1\\uA926-\\uA92D\\uA947-\\uA951\\uA980-\\uA982\\uA9B3\\uA9B6-\\uA9B9\\uA9BC\\uAA29-\\uAA2E\\uAA31\\uAA32\\uAA35\\uAA36\\uAA43\\uAA4C\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uABE5\\uABE8\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE26]"), space_combining_mark: new RegExp ("[\\u0903\\u093E-\\u0940\\u0949-\\u094C\\u094E\\u0982\\u0983\\u09BE-\\u09C0\\u09C7\\u09C8\\u09CB\\u09CC\\u09D7\\u0A03\\u0A3E-\\u0A40\\u0A83\\u0ABE-\\u0AC0\\u0AC9\\u0ACB\\u0ACC\\u0B02\\u0B03\\u0B3E\\u0B40\\u0B47\\u0B48\\u0B4B\\u0B4C\\u0B57\\u0BBE\\u0BBF\\u0BC1\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCC\\u0BD7\\u0C01-\\u0C03\\u0C41-\\u0C44\\u0C82\\u0C83\\u0CBE\\u0CC0-\\u0CC4\\u0CC7\\u0CC8\\u0CCA\\u0CCB\\u0CD5\\u0CD6\\u0D02\\u0D03\\u0D3E-\\u0D40\\u0D46-\\u0D48\\u0D4A-\\u0D4C\\u0D57\\u0D82\\u0D83\\u0DCF-\\u0DD1\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0F3E\\u0F3F\\u0F7F\\u102B\\u102C\\u1031\\u1038\\u103B\\u103C\\u1056\\u1057\\u1062-\\u1064\\u1067-\\u106D\\u1083\\u1084\\u1087-\\u108C\\u108F\\u109A-\\u109C\\u17B6\\u17BE-\\u17C5\\u17C7\\u17C8\\u1923-\\u1926\\u1929-\\u192B\\u1930\\u1931\\u1933-\\u1938\\u19B0-\\u19C0\\u19C8\\u19C9\\u1A19-\\u1A1B\\u1A55\\u1A57\\u1A61\\u1A63\\u1A64\\u1A6D-\\u1A72\\u1B04\\u1B35\\u1B3B\\u1B3D-\\u1B41\\u1B43\\u1B44\\u1B82\\u1BA1\\u1BA6\\u1BA7\\u1BAA\\u1C24-\\u1C2B\\u1C34\\u1C35\\u1CE1\\u1CF2\\uA823\\uA824\\uA827\\uA880\\uA881\\uA8B4-\\uA8C3\\uA952\\uA953\\uA983\\uA9B4\\uA9B5\\uA9BA\\uA9BB\\uA9BD-\\uA9C0\\uAA2F\\uAA30\\uAA33\\uAA34\\uAA4D\\uAA7B\\uABE3\\uABE4\\uABE6\\uABE7\\uABE9\\uABEA\\uABEC]"), connector_punctuation: new RegExp ("[\\u005F\\u203F\\u2040\\u2054\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFF3F]")};
+ z.prototype.toString = function ()
+ {
+ return this.message + " (line: " + this.line + ", col: " + this.col + ", pos: " + this.pos + ")" + "\n\n" + this.stack
+ };
+ var C = {}, E = O (["typeof", "void", "delete", "--", "++", "!", "~", "-", "+"]), F = O (["--", "++"]), G = function (a, b, c)
+ {
+ while (c < a.length)b[a[c]] = a[c].substr (0, a[c].length - 1), c++;
+ return b
+ } (["+=", "-=", "/=", "*=", "%=", ">>=", "<<=", ">>>=", "|=", "^=", "&="], {"=": !0}, 0), H = function (a, b)
+ {
+ for (var c = 0, d = 1; c < a.length; ++c, ++d)
+ {
+ var e = a[c];
+ for (var f = 0; f < e.length; ++f)b[e[f]] = d
+ }
+ return b
+ } ([
+ ["||"],
+ ["&&"],
+ ["|"],
+ ["^"],
+ ["&"],
+ ["==", "===", "!=", "!=="],
+ ["<", ">", "<=", ">=", "in", "instanceof"],
+ [">>", "<<", ">>>"],
+ ["+", "-"],
+ ["*", "/", "%"]
+ ], {}), I = O (["for", "do", "while", "switch"]), J = O (["atom", "num", "string", "regexp", "name"]);
+ K.prototype.toString = function ()
+ {
+ return this.name
+ };
+ var T = function ()
+ {
+ };
+ b.tokenizer = D, b.parse = L, b.slice = P, b.curry = M, b.member = R, b.array_to_hash = O, b.PRECEDENCE = H, b.KEYWORDS_ATOM = g, b.RESERVED_WORDS = e, b.KEYWORDS = d, b.ATOMIC_START_TOKEN = J, b.OPERATORS = l, b.is_alphanumeric_char = t, b.set_logger = function (a)
+ {
+ T = a
+ }
+ }), f ("lib/process", ["require", "exports", "module", "./parse-js"], function (a, b, c)
+ {
+ function i ()
+ {
+ function a (a)
+ {
+ return[this[0], K (a, function (a)
+ {
+ var b = [a[0]];
+ return a.length > 1 && (b[1] = g (a[1])), b
+ })]
+ }
+
+ function b (a)
+ {
+ var b = [this[0]];
+ return a != null && b.push (K (a, g)), b
+ }
+
+ function g (a)
+ {
+ if (a == null)return null;
+ try
+ {
+ f.push (a);
+ var b = a[0], e = d[b];
+ if (e)
+ {
+ var g = e.apply (a, a.slice (1));
+ if (g != null)return g
+ }
+ return e = c[b], e.apply (a, a.slice (1))
+ } finally
+ {
+ f.pop ()
+ }
+ }
+
+ function h (a)
+ {
+ if (a == null)return null;
+ try
+ {
+ return f.push (a), c[a[0]].apply (a, a.slice (1))
+ } finally
+ {
+ f.pop ()
+ }
+ }
+
+ function i (a, b)
+ {
+ var c = {}, e;
+ for (e in a)J (a, e) && (c[e] = d[e], d[e] = a[e]);
+ var f = b ();
+ for (e in c)J (c, e) && (c[e] ? d[e] = c[e] : delete d[e]);
+ return f
+ }
+
+ var c = {string: function (a)
+ {
+ return[this[0], a]
+ }, num: function (a)
+ {
+ return[this[0], a]
+ }, name: function (a)
+ {
+ return[this[0], a]
+ }, toplevel: function (a)
+ {
+ return[this[0], K (a, g)]
+ }, block: b, splice: b, "var": a, "const": a, "try": function (a, b, c)
+ {
+ return[this[0], K (a, g), b != null ? [b[0], K (b[1], g)] : null, c != null ? K (c, g) : null]
+ }, "throw": function (a)
+ {
+ return[this[0], g (a)]
+ }, "new": function (a, b)
+ {
+ return[this[0], g (a), K (b, g)]
+ }, "switch": function (a, b)
+ {
+ return[this[0], g (a), K (b, function (a)
+ {
+ return[a[0] ? g (a[0]) : null, K (a[1], g)]
+ })]
+ }, "break": function (a)
+ {
+ return[this[0], a]
+ }, "continue": function (a)
+ {
+ return[this[0], a]
+ }, conditional: function (a, b, c)
+ {
+ return[this[0], g (a), g (b), g (c)]
+ }, assign: function (a, b, c)
+ {
+ return[this[0], a, g (b), g (c)]
+ }, dot: function (a)
+ {
+ return[this[0], g (a)].concat (e (arguments, 1))
+ }, call: function (a, b)
+ {
+ return[this[0], g (a), K (b, g)]
+ }, "function": function (a, b, c)
+ {
+ return[this[0], a, b.slice (), K (c, g)]
+ }, defun: function (a, b, c)
+ {
+ return[this[0], a, b.slice (), K (c, g)]
+ }, "if": function (a, b, c)
+ {
+ return[this[0], g (a), g (b), g (c)]
+ }, "for": function (a, b, c, d)
+ {
+ return[this[0], g (a), g (b), g (c), g (d)]
+ }, "for-in": function (a, b, c, d)
+ {
+ return[this[0], g (a), g (b), g (c), g (d)]
+ }, "while": function (a, b)
+ {
+ return[this[0], g (a), g (b)]
+ }, "do": function (a, b)
+ {
+ return[this[0], g (a), g (b)]
+ }, "return": function (a)
+ {
+ return[this[0], g (a)]
+ }, binary: function (a, b, c)
+ {
+ return[this[0], a, g (b), g (c)]
+ }, "unary-prefix": function (a, b)
+ {
+ return[this[0], a, g (b)]
+ }, "unary-postfix": function (a, b)
+ {
+ return[this[0], a, g (b)]
+ }, sub: function (a, b)
+ {
+ return[this[0], g (a), g (b)]
+ }, object: function (a)
+ {
+ return[this[0], K (a, function (a)
+ {
+ return a.length == 2 ? [a[0], g (a[1])] : [a[0], g (a[1]), a[2]]
+ })]
+ }, regexp: function (a, b)
+ {
+ return[this[0], a, b]
+ }, array: function (a)
+ {
+ return[this[0], K (a, g)]
+ }, stat: function (a)
+ {
+ return[this[0], g (a)]
+ }, seq: function ()
+ {
+ return[this[0]].concat (K (e (arguments), g))
+ }, label: function (a, b)
+ {
+ return[this[0], a, g (b)]
+ }, "with": function (a, b)
+ {
+ return[this[0], g (a), g (b)]
+ }, atom: function (a)
+ {
+ return[this[0], a]
+ }}, d = {}, f = [];
+ return{walk: g, dive: h, with_walkers: i, parent: function ()
+ {
+ return f[f.length - 2]
+ }, stack: function ()
+ {
+ return f
+ }}
+ }
+
+ function j (a)
+ {
+ this.names = {}, this.mangled = {}, this.rev_mangled = {}, this.cname = -1, this.refs = {}, this.uses_with = !1, this.uses_eval = !1, this.parent = a, this.children = [], a ? (this.level = a.level + 1, a.children.push (this)) : this.level = 0
+ }
+
+ function l (a)
+ {
+ function f (a)
+ {
+ b = new j (b);
+ var c = b.body = a ();
+ return c.scope = b, b = b.parent, c
+ }
+
+ function g (a, c)
+ {
+ return b.define (a, c)
+ }
+
+ function h (a)
+ {
+ b.refs[a] = !0
+ }
+
+ function k (a, b, c)
+ {
+ var e = this[0] == "defun";
+ return[this[0], e ? g (a, "defun") : a, b, f (function ()
+ {
+ return e || g (a, "lambda"), K (b, function (a)
+ {
+ g (a, "arg")
+ }), K (c, d)
+ })]
+ }
+
+ function l (a)
+ {
+ return function (b)
+ {
+ K (b, function (b)
+ {
+ g (b[0], a), b[1] && h (b[0])
+ })
+ }
+ }
+
+ var b = null, c = i (), d = c.walk, e = [];
+ return f (function ()
+ {
+ function i (a, b)
+ {
+ for (b = a.children.length; --b >= 0;)i (a.children[b]);
+ for (b in a.refs)if (J (a.refs, b))for (var c = a.has (b), d = a; d; d = d.parent)
+ {
+ d.refs[b] = c;
+ if (d === c)break
+ }
+ }
+
+ var f = c.with_walkers ({"function": k, defun: k, label: function (a, b)
+ {
+ g (a, "label")
+ }, "break": function (a)
+ {
+ a && h (a)
+ }, "continue": function (a)
+ {
+ a && h (a)
+ }, "with": function (a, c)
+ {
+ for (var d = b; d; d = d.parent)d.uses_with = !0
+ }, "var": l ("var"), "const": l ("const"), "try": function (a, b, c)
+ {
+ if (b != null)return[this[0], K (a, d), [g (b[0], "catch"), K (b[1], d)], c != null ? K (c, d) : null]
+ }, name: function (a)
+ {
+ a == "eval" && e.push (b), h (a)
+ }}, function ()
+ {
+ return d (a)
+ });
+ return K (e, function (a)
+ {
+ if (!a.has ("eval"))while (a)a.uses_eval = !0, a = a.parent
+ }), i (b), f
+ })
+ }
+
+ function m (a, b)
+ {
+ function g (a, c)
+ {
+ return!b.toplevel && !e.parent ? a : b.except && f (a, b.except) ? a : e.get_mangled (a, c)
+ }
+
+ function h (a)
+ {
+ if (b.defines)return!e.has (a) && J (b.defines, a) ? b.defines[a] : null
+ }
+
+ function j (a, b, c)
+ {
+ var f = this[0] == "defun", h;
+ return a && (f ? a = g (a) : (h = {}, !e.uses_eval && !e.uses_with ? a = h[a] = e.next_mangled () : h[a] = a)), c = k (c.scope, function ()
+ {
+ return b = K (b, function (a)
+ {
+ return g (a)
+ }), K (c, d)
+ }, h), [this[0], a, b, c]
+ }
+
+ function k (a, b, c)
+ {
+ var d = e;
+ e = a;
+ if (c)for (var f in c)J (c, f) && a.set_mangle (f, c[f]);
+ for (var f in a.names)J (a.names, f) && g (f, !0);
+ var h = b ();
+ return h.scope = a, e = d, h
+ }
+
+ function m (a)
+ {
+ return[this[0], K (a, function (a)
+ {
+ return[g (a[0]), d (a[1])]
+ })]
+ }
+
+ var c = i (), d = c.walk, e;
+ return b = b || {}, c.with_walkers ({"function": j, defun: function ()
+ {
+ var a = j.apply (this, arguments);
+ switch (c.parent ()[0])
+ {
+ case"toplevel":
+ case"function":
+ case"defun":
+ return K.at_top (a)
+ }
+ return a
+ }, label: function (a, b)
+ {
+ return[this[0], g (a), d (b)]
+ }, "break": function (a)
+ {
+ if (a)return[this[0], g (a)]
+ }, "continue": function (a)
+ {
+ if (a)return[this[0], g (a)]
+ }, "var": m, "const": m, name: function (a)
+ {
+ return h (a) || [this[0], g (a)]
+ }, "try": function (a, b, c)
+ {
+ return[this[0], K (a, d), b != null ? [g (b[0]), K (b[1], d)] : null, c != null ? K (c, d) : null]
+ }, toplevel: function (a)
+ {
+ var b = this;
+ return k (b.scope, function ()
+ {
+ return[b[0], K (a, d)]
+ })
+ }}, function ()
+ {
+ return d (l (a))
+ })
+ }
+
+ function o (a, b)
+ {
+ return E (a).length > E (b[0] == "stat" ? b[1] : b).length ? b : a
+ }
+
+ function p (a)
+ {
+ return a[0] == "block" && a[1] && a[1].length > 0 ? a[1][a[1].length - 1] : a
+ }
+
+ function q (a)
+ {
+ if (a)switch (p (a)[0])
+ {
+ case"return":
+ case"break":
+ case"continue":
+ case"throw":
+ return!0
+ }
+ }
+
+ function r (a)
+ {
+ return a[0] == "unary-prefix" && f (a[1], ["!", "delete"]) || a[0] == "binary" && f (a[1], ["in", "instanceof", "==", "!=", "===", "!==", "<", "<=", ">=", ">"]) || a[0] == "binary" && f (a[1], ["&&", "||"]) && r (a[2]) && r (a[3]) || a[0] == "conditional" && r (a[2]) && r (a[3]) || a[0] == "assign" && a[1] === !0 && r (a[3]) || a[0] == "seq" && r (a[a.length - 1])
+ }
+
+ function s (a)
+ {
+ return!a || a[0] == "block" && (!a[1] || a[1].length == 0)
+ }
+
+ function t (a)
+ {
+ return a[0] == "string" || a[0] == "unary-prefix" && a[1] == "typeof" || a[0] == "binary" && a[1] == "+" && (t (a[2]) || t (a[3]))
+ }
+
+ function v (a)
+ {
+ s (a) || n ("Dropping unreachable code: " + E (a, !0))
+ }
+
+ function w (a)
+ {
+ function d (a)
+ {
+ a = K (a, c);
+ for (var b = 0; b < a.length; ++b)
+ {
+ var e = a[b];
+ if (e[0] != "if")continue;
+ if (e[3] && c (e[3]))continue;
+ var f = c (e[2]);
+ if (!q (f))continue;
+ var g = c (e[1]), h = a.slice (b + 1), i = h.length == 1 ? h[0] : ["block", h], j = a.slice (0, b).concat ([
+ [e[0], g, f, i]
+ ]);
+ return d (j)
+ }
+ return a
+ }
+
+ function e (a, b, c)
+ {
+ return c = d (c), [this[0], a, b, c]
+ }
+
+ function f (a)
+ {
+ return[this[0], a != null ? d (a) : null]
+ }
+
+ var b = i (), c = b.walk;
+ return b.with_walkers ({defun: e, "function": e, block: f, splice: f, toplevel: function (a)
+ {
+ return[this[0], d (a)]
+ }, "try": function (a, b, c)
+ {
+ return[this[0], d (a), b != null ? [b[0], d (b[1])] : null, c != null ? d (c) : null]
+ }}, function ()
+ {
+ return c (a)
+ })
+ }
+
+ function x (a, b)
+ {
+ function g ()
+ {
+ throw e
+ }
+
+ function h ()
+ {
+ throw f
+ }
+
+ function j ()
+ {
+ return b.call (this, this, c, g, h)
+ }
+
+ function k (a)
+ {
+ if (a == "++" || a == "--")return j.apply (this, arguments)
+ }
+
+ var c = i (), d = c.walk, e = {}, f = {};
+ return c.with_walkers ({"try": j, "throw": j, "return": j, "new": j, "switch": j, "break": j, "continue": j, assign: j, call: j, "if": j, "for": j, "for-in": j, "while": j, "do": j, "return": j, "unary-prefix": k, "unary-postfix": k, defun: j}, function ()
+ {
+ for (; ;)try
+ {
+ d (a);
+ break
+ } catch (b)
+ {
+ if (b === e)break;
+ if (b === f)continue;
+ throw b
+ }
+ })
+ }
+
+ function y (a)
+ {
+ function e (a, b)
+ {
+ var e = d;
+ d = b, a = K (a, c);
+ var f = {}, g = K (b.names, function (a, c)
+ {
+ return a != "var" ? K.skip : b.references (c) ? (f[c] = !0, [c]) : K.skip
+ });
+ return g.length > 0 && (x (["block", a], function (a, b, c, d)
+ {
+ if (a[0] == "assign" && a[1] === !0 && a[2][0] == "name" && J (f, a[2][1]))
+ {
+ for (var e = g.length; --e >= 0;)if (g[e][0] == a[2][1])
+ {
+ g[e][1] && c (), g[e][1] = a[3], g.push (g.splice (e, 1)[0]);
+ break
+ }
+ var h = b.parent ();
+ if (h[0] == "seq")
+ {
+ var i = h[2];
+ i.unshift (0, h.length), h.splice.apply (h, i)
+ } else h[0] == "stat" ? h.splice (0, h.length, "block") : c ();
+ d ()
+ }
+ c ()
+ }), a.unshift (["var", g])), d = e, a
+ }
+
+ function f (a)
+ {
+ var c = null;
+ for (var d = a.length; --d >= 0;)
+ {
+ var e = a[d];
+ if (!e[1])continue;
+ e = ["assign", !0, ["name", e[0]], e[1]], c == null ? c = e : c = ["seq", e, c]
+ }
+ return c == null ? b.parent ()[0] == "for-in" ? ["name", a[0][0]] : K.skip : ["stat", c]
+ }
+
+ function g (a)
+ {
+ return[this[0], e (a, this.scope)]
+ }
+
+ var b = i (), c = b.walk, d;
+ return b.with_walkers ({"function": function (a, b, c)
+ {
+ for (var d = b.length; --d >= 0 && !c.scope.references (b[d]);)b.pop ();
+ return c.scope.references (a) || (a = null), [this[0], a, b, e (c, c.scope)]
+ }, defun: function (a, b, c)
+ {
+ if (!d.references (a))return K.skip;
+ for (var f = b.length; --f >= 0 && !c.scope.references (b[f]);)b.pop ();
+ return[this[0], a, b, e (c, c.scope)]
+ }, "var": f, toplevel: g}, function ()
+ {
+ return c (l (a))
+ })
+ }
+
+ function z (a, b)
+ {
+ function h (a)
+ {
+ var c = ["unary-prefix", "!", a];
+ switch (a[0])
+ {
+ case"unary-prefix":
+ return a[1] == "!" && r (a[2]) ? a[2] : c;
+ case"seq":
+ return a = e (a), a[a.length - 1] = h (a[a.length - 1]), a;
+ case"conditional":
+ return o (c, ["conditional", a[1], h (a[2]), h (a[3])]);
+ case"binary":
+ var d = a[1], f = a[2], g = a[3];
+ if (!b.keep_comps)switch (d)
+ {
+ case"<=":
+ return["binary", ">", f, g];
+ case"<":
+ return["binary", ">=", f, g];
+ case">=":
+ return["binary", "<", f, g];
+ case">":
+ return["binary", "<=", f, g]
+ }
+ switch (d)
+ {
+ case"==":
+ return["binary", "!=", f, g];
+ case"!=":
+ return["binary", "==", f, g];
+ case"===":
+ return["binary", "!==", f, g];
+ case"!==":
+ return["binary", "===", f, g];
+ case"&&":
+ return o (c, ["binary", "||", h (f), h (g)]);
+ case"||":
+ return o (c, ["binary", "&&", h (f), h (g)])
+ }
+ }
+ return c
+ }
+
+ function j (a, b, c)
+ {
+ var d = function ()
+ {
+ return a[0] == "unary-prefix" && a[1] == "!" ? c ? ["conditional", a[2], c, b] : ["binary", "||", a[2], b] : c ? o (["conditional", a, b, c], ["conditional", h (a), c, b]) : ["binary", "&&", a, b]
+ };
+ return u (a, function (a, d)
+ {
+ return v (d ? c : b), d ? b : c
+ }, d)
+ }
+
+ function k (a, b)
+ {
+ var c = g;
+ g = a;
+ var d = b ();
+ return d.scope = a, g = c, d
+ }
+
+ function m (a)
+ {
+ return a != null && a[0] == "block" && a[1] && (a[1].length == 1 ? a = a[1][0] : a[1].length == 0 && (a = ["block"])), a
+ }
+
+ function p (a, b, c)
+ {
+ var d = this[0] == "defun";
+ return c = k (c.scope, function ()
+ {
+ var b = t (c, "lambda");
+ return!d && a && !g.references (a) && (a = null), b
+ }), [this[0], a, b, c]
+ }
+
+ function t (a, c)
+ {
+ return a = K (a, d), a = a.reduce (function (a, b)
+ {
+ return b[0] == "block" ? b[1] && a.push.apply (a, b[1]) : a.push (b), a
+ }, []), a = function (b, c)
+ {
+ return a.forEach (function (a)
+ {
+ c && (a[0] == "var" && c[0] == "var" || a[0] == "const" && c[0] == "const") ? c[1] = c[1].concat (a[1]) : (b.push (a), c = a)
+ }), b
+ } ([]), b.dead_code && (a = function (c, d)
+ {
+ return a.forEach (function (a)
+ {
+ d ? a[0] == "function" || a[0] == "defun" ? c.push (a) : a[0] == "var" || a[0] == "const" ? (b.no_warnings || n ("Variables declared in unreachable code"), a[1] = K (a[1], function (a)
+ {
+ return a[1] && !b.no_warnings && v (["assign", !0, ["name", a[0]], a[1]]), [a[0]]
+ }), c.push (a)) : b.no_warnings || v (a) : (c.push (a), f (a[0], ["return", "throw", "break", "continue"]) && (d = !0))
+ }), c
+ } ([])), b.make_seqs && (a = function (b, c)
+ {
+ return a.forEach (function (a)
+ {
+ c && c[0] == "stat" && a[0] == "stat" ? c[1] = ["seq", c[1], a[1]] : (b.push (a), c = a)
+ }), b.length >= 2 && b[b.length - 2][0] == "stat" && (b[b.length - 1][0] == "return" || b[b.length - 1][0] == "throw") && b[b.length - 1][1] && b.splice (b.length - 2, 2, [b[b.length - 1][0], ["seq", b[b.length - 2][1], b[b.length - 1][1]]]), b
+ } ([])), a
+ }
+
+ function x (a, b, c)
+ {
+ return u (a, function (a, e)
+ {
+ return e ? (b = d (b), v (c), b || ["block"]) : (c = d (c), v (b), c || ["block"])
+ }, function ()
+ {
+ return y (a, b, c)
+ })
+ }
+
+ function y (a, b, c)
+ {
+ a = d (a), b = d (b), c = d (c), s (b) ? (a = h (a), b = c, c = null) : s (c) ? c = null : function ()
+ {
+ var d = E (a), e = h (a), f = E (e);
+ if (f.length < d.length)
+ {
+ var g = b;
+ b = c, c = g, a = e
+ }
+ } ();
+ if (s (c) && s (b))return["stat", a];
+ var e = ["if", a, b, c];
+ return b[0] == "if" && s (b[3]) && s (c) ? e = o (e, d (["if", ["binary", "&&", a, b[1]], b[2]])) : b[0] == "stat" ? c ? c[0] == "stat" && (e = o (e, ["stat", j (a, b[1], c[1])])) : e = o (e, ["stat", j (a, b[1])]) : c && b[0] == c[0] && (b[0] == "return" || b[0] == "throw") && b[1] && c[1] ? e = o (e, [b[0], j (a, b[1], c[1])]) : c && q (b) ? (e = [
+ ["if", a, b]
+ ], c[0] == "block" ? c[1] && (e = e.concat (c[1])) : e.push (c), e = d (["block", e])) : b && q (c) && (e = [
+ ["if", h (a), c]
+ ], b[0] == "block" ? b[1] && (e = e.concat (b[1])) : e.push (b), e = d (["block", e])), e
+ }
+
+ function z (a, b)
+ {
+ return u (a, function (a, c)
+ {
+ return c ? ["for", null, null, null, d (b)] : (v (b), ["block"])
+ })
+ }
+
+ b = H (b, {make_seqs: !0, dead_code: !0, no_warnings: !1, keep_comps: !0});
+ var c = i (), d = c.walk, g;
+ return c.with_walkers ({sub: function (a, b)
+ {
+ if (b[0] == "string")
+ {
+ var c = b[1];
+ if (I (c))return["dot", d (a), c];
+ if (/^[1-9][0-9]*$/.test (c) || c === "0")return["sub", d (a), ["num", parseInt (c, 10)]]
+ }
+ }, "if": x, toplevel: function (a)
+ {
+ return["toplevel", k (this.scope, function ()
+ {
+ return t (a)
+ })]
+ }, "switch": function (a, b)
+ {
+ var c = b.length - 1;
+ return["switch", d (a), K (b, function (a, b)
+ {
+ var e = t (a[1]);
+ if (b == c && e.length > 0)
+ {
+ var f = e[e.length - 1];
+ f[0] == "break" && !f[1] && e.pop ()
+ }
+ return[a[0] ? d (a[0]) : null, e]
+ })]
+ }, "function": p, defun: p, block: function (a)
+ {
+ if (a)return m (["block", t (a)])
+ }, binary: function (a, b, c)
+ {
+ return u (["binary", a, d (b), d (c)], function (a)
+ {
+ return o (d (a), this)
+ }, function ()
+ {
+ return function ()
+ {
+ if (a != "==" && a != "!=")return;
+ var e = d (b), f = d (c);
+ return e && e[0] == "unary-prefix" && e[1] == "!" && e[2][0] == "num" ? b = ["num", +!e[2][1]] : f && f[0] == "unary-prefix" && f[1] == "!" && f[2][0] == "num" && (c = ["num", +!f[2][1]]), ["binary", a, b, c]
+ } () || this
+ })
+ }, conditional: function (a, b, c)
+ {
+ return j (d (a), d (b), d (c))
+ }, "try": function (a, b, c)
+ {
+ return["try", t (a), b != null ? [b[0], t (b[1])] : null, c != null ? t (c) : null]
+ }, "unary-prefix": function (a, b)
+ {
+ b = d (b);
+ var c = ["unary-prefix", a, b];
+ return a == "!" && (c = o (c, h (b))), u (c, function (a, b)
+ {
+ return d (a)
+ }, function ()
+ {
+ return c
+ })
+ }, name: function (a)
+ {
+ switch (a)
+ {
+ case"true":
+ return["unary-prefix", "!", ["num", 0]];
+ case"false":
+ return["unary-prefix", "!", ["num", 1]]
+ }
+ }, "while": z, assign: function (a, b, c)
+ {
+ b = d (b), c = d (c);
+ var e = ["+", "-", "/", "*", "%", ">>", "<<", ">>>", "|", "^", "&"];
+ return a === !0 && b[0] === "name" && c[0] === "binary" && ~e.indexOf (c[1]) && c[2][0] === "name" && c[2][1] === b[1] ? [this[0], c[1], b, c[3]] : [this[0], a, b, c]
+ }}, function ()
+ {
+ for (var b = 0; b < 2; ++b)a = w (a), a = l (a), a = d (a);
+ return a
+ })
+ }
+
+ function B (a, b)
+ {
+ var c = 0, d = 0;
+ return a = a.replace (/[\\\b\f\n\r\t\x22\x27\u2028\u2029\0]/g, function (a)
+ {
+ switch (a)
+ {
+ case"\\":
+ return"\\\\";
+ case"\b":
+ return"\\b";
+ case"\f":
+ return"\\f";
+ case"\n":
+ return"\\n";
+ case"\r":
+ return"\\r";
+ case"\t":
+ return"\\t";
+ case"\u2028":
+ return"\\u2028";
+ case"\u2029":
+ return"\\u2029";
+ case'"':
+ return++c, '"';
+ case"'":
+ return++d, "'";
+ case"\0":
+ return"\\0"
+ }
+ return a
+ }), b && (a = C (a)), c > d ? "'" + a.replace (/\x27/g, "\\'") + "'" : '"' + a.replace (/\x22/g, '\\"') + '"'
+ }
+
+ function C (a)
+ {
+ return a.replace (/[\u0080-\uffff]/g, function (a)
+ {
+ var b = a.charCodeAt (0).toString (16);
+ while (b.length < 4)b = "0" + b;
+ return"\\u" + b
+ })
+ }
+
+ function E (a, b)
+ {
+ function m (a)
+ {
+ var c = B (a, b.ascii_only);
+ return b.inline_script && (c = c.replace (/<\x2fscript([>/\t\n\f\r ])/gi, "<\\/script$1")), c
+ }
+
+ function n (a)
+ {
+ return a = a.toString (), b.ascii_only && (a = C (a)), a
+ }
+
+ function o (a)
+ {
+ return a == null && (a = ""), c && (a = G (" ", b.indent_start + j * b.indent_level) + a), a
+ }
+
+ function p (a, b)
+ {
+ b == null && (b = 1), j += b;
+ try
+ {
+ return a.apply (null, e (arguments, 1))
+ } finally
+ {
+ j -= b
+ }
+ }
+
+ function q (a)
+ {
+ if (c)return a.join (" ");
+ var b = [];
+ for (var d = 0; d < a.length; ++d)
+ {
+ var e = a[d + 1];
+ b.push (a[d]), e && (/[a-z0-9_\x24]$/i.test (a[d].toString ()) && /^[a-z0-9_\x24]/i.test (e.toString ()) || /[\+\-]$/.test (a[d].toString ()) && /^[\+\-]/.test (e.toString ())) && b.push (" ")
+ }
+ return b.join ("")
+ }
+
+ function r (a)
+ {
+ return a.join ("," + l)
+ }
+
+ function t (a)
+ {
+ var b = y (a);
+ for (var c = 1; c < arguments.length; ++c)
+ {
+ var d = arguments[c];
+ if (d instanceof Function && d (a) || a[0] == d)return"(" + b + ")"
+ }
+ return b
+ }
+
+ function u (a)
+ {
+ if (a.length == 1)return a[0];
+ if (a.length == 2)
+ {
+ var b = a[1];
+ return a = a[0], a.length > b.length ? b : a
+ }
+ return u ([a[0], u (a.slice (1))])
+ }
+
+ function v (a)
+ {
+ if (a[0] == "function" || a[0] == "object")
+ {
+ var b = e (x.stack ()), c = b.pop (), d = b.pop ();
+ while (d)
+ {
+ if (d[0] == "stat")return!0;
+ if ((d[0] == "seq" || d[0] == "call" || d[0] == "dot" || d[0] == "sub" || d[0] == "conditional") && d[1] === c || (d[0] == "binary" || d[0] == "assign" || d[0] == "unary-postfix") && d[2] === c)c = d, d = b.pop (); else return!1
+ }
+ }
+ return!J (A, a[0])
+ }
+
+ function w (a)
+ {
+ var b = a.toString (10), c = [b.replace (/^0\./, ".")], d;
+ return Math.floor (a) === a ? (a < 0 ? c.push ("-0x" + (-a).toString (16).toLowerCase (), "-0" + (-a).toString (8)) : c.push ("0x" + a.toString (16).toLowerCase (), "0" + a.toString (8)), (d = /^(.*?)(0+)$/.exec (a)) && c.push (d[1] + "e" + d[2].length)) : (d = /^0?\.(0+)(.*)$/.exec (a)) && c.push (d[2] + "e-" + (d[1].length + d[2].length), b.substr (b.indexOf ("."))), u (c)
+ }
+
+ function z (a)
+ {
+ if (a == null)return";";
+ if (a[0] == "do")return N ([a]);
+ var b = a;
+ for (; ;)
+ {
+ var c = b[0];
+ if (c == "if")
+ {
+ if (!b[3])return y (["block", [a]]);
+ b = b[3]
+ } else if (c == "while" || c == "do")b = b[2]; else if (c == "for" || c == "for-in")b = b[4]; else break
+ }
+ return y (a)
+ }
+
+ function E (a, b, c, d)
+ {
+ var e = d || "function";
+ return a && (e += " " + n (a)), e += "(" + r (K (b, n)) + ")", e = q ([e, N (c)]), v (this) ? "(" + e + ")" : e
+ }
+
+ function F (a)
+ {
+ switch (a[0])
+ {
+ case"with":
+ case"while":
+ return s (a[2]);
+ case"for":
+ case"for-in":
+ return s (a[4]);
+ case"if":
+ if (s (a[2]) && !a[3])return!0;
+ if (a[3])return s (a[3]) ? !0 : F (a[3]);
+ return F (a[2])
+ }
+ }
+
+ function L (a, b)
+ {
+ for (var d = [], e = a.length - 1, f = 0; f <= e; ++f)
+ {
+ var g = a[f], h = y (g);
+ h != ";" && (!c && f == e && !F (g) && (h = h.replace (/;+\s*$/, "")), d.push (h))
+ }
+ return b ? d : K (d, o)
+ }
+
+ function M (a)
+ {
+ var b = a.length;
+ return b == 0 ? "{}" : "{" + k + K (a,function (a, d)
+ {
+ var e = a[1].length > 0, f = p (function ()
+ {
+ return o (a[0] ? q (["case", y (a[0]) + ":"]) : "default:")
+ }, .5) + (e ? k + p (function ()
+ {
+ return L (a[1]).join (k)
+ }) : "");
+ return!c && e && d < b - 1 && (f += ";"), f
+ }).join (k) + k + o ("}")
+ }
+
+ function N (a)
+ {
+ return a ? a.length == 0 ? "{}" : "{" + k + p (function ()
+ {
+ return L (a).join (k)
+ }) + k + o ("}") : ";"
+ }
+
+ function O (a)
+ {
+ var b = a[0], c = a[1];
+ return c != null && (b = q ([n (b), "=", t (c, "seq")])), b
+ }
+
+ b = H (b, {indent_start: 0, indent_level: 4, quote_keys: !1, space_colon: !1, beautify: !1, ascii_only: !1, inline_script: !1});
+ var c = !!b.beautify, j = 0, k = c ? "\n" : "", l = c ? " " : "", x = i (), y = x.walk;
+ return x.with_walkers ({string: m, num: w, name: n, toplevel: function (a)
+ {
+ return L (a).join (k + k)
+ }, splice: function (a)
+ {
+ var b = x.parent ();
+ return J (D, b) ? N.apply (this, arguments) : K (L (a, !0),function (a, b)
+ {
+ return b > 0 ? o (a) : a
+ }).join (k)
+ }, block: N, "var": function (a)
+ {
+ return"var " + r (K (a, O)) + ";"
+ }, "const": function (a)
+ {
+ return"const " + r (K (a, O)) + ";"
+ }, "try": function (a, b, c)
+ {
+ var d = ["try", N (a)];
+ return b && d.push ("catch", "(" + b[0] + ")", N (b[1])), c && d.push ("finally", N (c)), q (d)
+ }, "throw": function (a)
+ {
+ return q (["throw", y (a)]) + ";"
+ }, "new": function (a, b)
+ {
+ return b = b.length > 0 ? "(" + r (K (b, function (a)
+ {
+ return t (a, "seq")
+ })) + ")" : "", q (["new", t (a, "seq", "binary", "conditional", "assign", function (a)
+ {
+ var b = i (), c = {};
+ try
+ {
+ b.with_walkers ({call: function ()
+ {
+ throw c
+ }, "function": function ()
+ {
+ return this
+ }}, function ()
+ {
+ b.walk (a)
+ })
+ } catch (d)
+ {
+ if (d === c)return!0;
+ throw d
+ }
+ }) + b])
+ }, "switch": function (a, b)
+ {
+ return q (["switch", "(" + y (a) + ")", M (b)])
+ }, "break": function (a)
+ {
+ var b = "break";
+ return a != null && (b += " " + n (a)), b + ";"
+ }, "continue": function (a)
+ {
+ var b = "continue";
+ return a != null && (b += " " + n (a)), b + ";"
+ }, conditional: function (a, b, c)
+ {
+ return q ([t (a, "assign", "seq", "conditional"), "?", t (b, "seq"), ":", t (c, "seq")])
+ }, assign: function (a, b, c)
+ {
+ return a && a !== !0 ? a += "=" : a = "=", q ([y (b), a, t (c, "seq")])
+ }, dot: function (a)
+ {
+ var b = y (a), c = 1;
+ a[0] == "num" ? /\./.test (a[1]) || (b += ".") : v (a) && (b = "(" + b + ")");
+ while (c < arguments.length)b += "." + n (arguments[c++]);
+ return b
+ }, call: function (a, b)
+ {
+ var c = y (a);
+ return c.charAt (0) != "(" && v (a) && (c = "(" + c + ")"), c + "(" + r (K (b, function (a)
+ {
+ return t (a, "seq")
+ })) + ")"
+ }, "function": E, defun: E, "if": function (a, b, c)
+ {
+ var d = ["if", "(" + y (a) + ")", c ? z (b) : y (b)];
+ return c && d.push ("else", y (c)), q (d)
+ }, "for": function (a, b, c, d)
+ {
+ var e = ["for"];
+ a = (a != null ? y (a) : "").replace (/;*\s*$/, ";" + l), b = (b != null ? y (b) : "").replace (/;*\s*$/, ";" + l), c = (c != null ? y (c) : "").replace (/;*\s*$/, "");
+ var f = a + b + c;
+ return f == "; ; " && (f = ";;"), e.push ("(" + f + ")", y (d)), q (e)
+ }, "for-in": function (a, b, c, d)
+ {
+ return q (["for", "(" + (a ? y (a).replace (/;+$/, "") : y (b)), "in", y (c) + ")", y (d)])
+ }, "while": function (a, b)
+ {
+ return q (["while", "(" + y (a) + ")", y (b)])
+ }, "do": function (a, b)
+ {
+ return q (["do", y (b), "while", "(" + y (a) + ")"]) + ";"
+ }, "return": function (a)
+ {
+ var b = ["return"];
+ return a != null && b.push (y (a)), q (b) + ";"
+ }, binary: function (a, d, e)
+ {
+ var h = y (d), i = y (e);
+ if (f (d[0], ["assign", "conditional", "seq"]) || d[0] == "binary" && g[a] > g[d[1]] || d[0] == "function" && v (this))h = "(" + h + ")";
+ return f (e[0], ["assign", "conditional", "seq"]) || e[0] == "binary" && g[a] >= g[e[1]] && (e[1] != a || !f (a, ["&&", "||", "*"])) ? i = "(" + i + ")" : !c && b.inline_script && (a == "<" || a == "<<") && e[0] == "regexp" && /^script/i.test (e[1]) && (i = " " + i), q ([h, a, i])
+ }, "unary-prefix": function (a, b)
+ {
+ var c = y (b);
+ return b[0] == "num" || b[0] == "unary-prefix" && !J (h, a + b[1]) || !v (b) || (c = "(" + c + ")"), a + (d.is_alphanumeric_char (a.charAt (0)) ? " " : "") + c
+ }, "unary-postfix": function (a, b)
+ {
+ var c = y (b);
+ return b[0] == "num" || b[0] == "unary-postfix" && !J (h, a + b[1]) || !v (b) || (c = "(" + c + ")"), c + a
+ }, sub: function (a, b)
+ {
+ var c = y (a);
+ return v (a) && (c = "(" + c + ")"), c + "[" + y (b) + "]"
+ }, object: function (a)
+ {
+ var d = v (this);
+ if (a.length == 0)return d ? "({})" : "{}";
+ var e = "{" + k + p (function ()
+ {
+ return K (a,function (a)
+ {
+ if (a.length == 3)return o (E (a[0], a[1][2], a[1][3], a[2]));
+ var d = a[0], e = t (a[1], "seq");
+ return b.quote_keys ? d = m (d) : (typeof d == "number" || !c && +d + "" == d) && parseFloat (d) >= 0 ? d = w (+d) : I (d) || (d = m (d)), o (q (c && b.space_colon ? [d, ":", e] : [d + ":", e]))
+ }).join ("," + k)
+ }) + k + o ("}");
+ return d ? "(" + e + ")" : e
+ }, regexp: function (a, b)
+ {
+ return"/" + a + "/" + b
+ }, array: function (a)
+ {
+ return a.length == 0 ? "[]" : q (["[", r (K (a, function (b, d)
+ {
+ return!c && b[0] == "atom" && b[1] == "undefined" ? d === a.length - 1 ? "," : "" : t (b, "seq")
+ })), "]"])
+ }, stat: function (a)
+ {
+ return y (a).replace (/;*\s*$/, ";")
+ }, seq: function ()
+ {
+ return r (K (e (arguments), y))
+ }, label: function (a, b)
+ {
+ return q ([n (a), ":", y (b)])
+ }, "with": function (a, b)
+ {
+ return q (["with", "(" + y (a) + ")", y (b)])
+ }, atom: function (a)
+ {
+ return n (a)
+ }}, function ()
+ {
+ return y (a)
+ })
+ }
+
+ function F (a, b)
+ {
+ var c = [0];
+ return d.parse (function ()
+ {
+ function h (a)
+ {
+ return a.pos - f
+ }
+
+ function i (a)
+ {
+ f = a.pos, c.push (f)
+ }
+
+ function j ()
+ {
+ var a = e.apply (this, arguments);
+ c:{
+ if (g && g.type == "keyword")break c;
+ if (h (a) > b)switch (a.type)
+ {
+ case"keyword":
+ case"atom":
+ case"name":
+ case"punc":
+ i (a);
+ break c
+ }
+ }
+ return g = a, a
+ }
+
+ var e = d.tokenizer (a), f = 0, g;
+ return j.context = function ()
+ {
+ return e.context.apply (this, arguments)
+ }, j
+ } ()), c.map (function (b, d)
+ {
+ return a.substring (b, c[d + 1] || a.length)
+ }).join ("\n")
+ }
+
+ function G (a, b)
+ {
+ if (b > 0)
+ {
+ if (b == 1)return a;
+ var c = G (a, b >> 1);
+ return c += c, b & 1 && (c += a), c
+ }
+ return""
+ }
+
+ function H (a, b)
+ {
+ var c = {};
+ a === !0 && (a = {});
+ for (var d in b)J (b, d) && (c[d] = a && J (a, d) ? a[d] : b[d]);
+ return c
+ }
+
+ function I (a)
+ {
+ return/^[a-z_$][a-z0-9_$]*$/i.test (a) && a != "this" && !J (d.KEYWORDS_ATOM, a) && !J (d.RESERVED_WORDS, a) && !J (d.KEYWORDS, a)
+ }
+
+ function J (a, b)
+ {
+ return Object.prototype.hasOwnProperty.call (a, b)
+ }
+
+ var d = a ("./parse-js"), e = d.slice, f = d.member, g = d.PRECEDENCE, h = d.OPERATORS, k = function ()
+ {
+ var a = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_";
+ return function (b)
+ {
+ var c = "";
+ do c = a.charAt (b % 54) + c, b = Math.floor (b / 54); while (b > 0);
+ return c
+ }
+ } ();
+ j.prototype = {has: function (a)
+ {
+ for (var b = this; b; b = b.parent)if (J (b.names, a))return b
+ }, has_mangled: function (a)
+ {
+ for (var b = this; b; b = b.parent)if (J (b.rev_mangled, a))return b
+ }, toJSON: function ()
+ {
+ return{names: this.names, uses_eval: this.uses_eval, uses_with: this.uses_with}
+ }, next_mangled: function ()
+ {
+ for (; ;)
+ {
+ var a = k (++this.cname), b;
+ b = this.has_mangled (a);
+ if (b && this.refs[b.rev_mangled[a]] === b)continue;
+ b = this.has (a);
+ if (b && b !== this && this.refs[a] === b && !b.has_mangled (a))continue;
+ if (J (this.refs, a) && this.refs[a] == null)continue;
+ if (!I (a))continue;
+ return a
+ }
+ }, set_mangle: function (a, b)
+ {
+ return this.rev_mangled[b] = a, this.mangled[a] = b
+ }, get_mangled: function (a, b)
+ {
+ if (this.uses_eval || this.uses_with)return a;
+ var c = this.has (a);
+ return c ? J (c.mangled, a) ? c.mangled[a] : b ? c.set_mangle (a, c.next_mangled ()) : a : a
+ }, references: function (a)
+ {
+ return a && !this.parent || this.uses_with || this.uses_eval || this.refs[a]
+ }, define: function (a, b)
+ {
+ if (a != null)
+ {
+ if (b == "var" || !J (this.names, a))this.names[a] = b || "var";
+ return a
+ }
+ }};
+ var n = function ()
+ {
+ }, u = function ()
+ {
+ function b (c)
+ {
+ switch (c[0])
+ {
+ case"string":
+ case"num":
+ return c[1];
+ case"name":
+ case"atom":
+ switch (c[1])
+ {
+ case"true":
+ return!0;
+ case"false":
+ return!1;
+ case"null":
+ return null
+ }
+ break;
+ case"unary-prefix":
+ switch (c[1])
+ {
+ case"!":
+ return!b (c[2]);
+ case"typeof":
+ return typeof b (c[2]);
+ case"~":
+ return~b (c[2]);
+ case"-":
+ return-b (c[2]);
+ case"+":
+ return+b (c[2])
+ }
+ break;
+ case"binary":
+ var d = c[2], e = c[3];
+ switch (c[1])
+ {
+ case"&&":
+ return b (d) && b (e);
+ case"||":
+ return b (d) || b (e);
+ case"|":
+ return b (d) | b (e);
+ case"&":
+ return b (d) & b (e);
+ case"^":
+ return b (d) ^ b (e);
+ case"+":
+ return b (d) + b (e);
+ case"*":
+ return b (d) * b (e);
+ case"/":
+ return b (d) / b (e);
+ case"%":
+ return b (d) % b (e);
+ case"-":
+ return b (d) - b (e);
+ case"<<":
+ return b (d) << b (e);
+ case">>":
+ return b (d) >> b (e);
+ case">>>":
+ return b (d) >>> b (e);
+ case"==":
+ return b (d) == b (e);
+ case"===":
+ return b (d) === b (e);
+ case"!=":
+ return b (d) != b (e);
+ case"!==":
+ return b (d) !== b (e);
+ case"<":
+ return b (d) < b (e);
+ case"<=":
+ return b (d) <= b (e);
+ case">":
+ return b (d) > b (e);
+ case">=":
+ return b (d) >= b (e);
+ case"in":
+ return b (d)in b (e);
+ case"instanceof":
+ return b (d)instanceof b (e)
+ }
+ }
+ throw a
+ }
+
+ var a = {};
+ return function (c, d, e)
+ {
+ try
+ {
+ var f = b (c), g;
+ switch (typeof f)
+ {
+ case"string":
+ g = ["string", f];
+ break;
+ case"number":
+ g = ["num", f];
+ break;
+ case"boolean":
+ g = ["name", String (f)];
+ break;
+ default:
+ throw new Error ("Can't handle constant of type: " + typeof f)
+ }
+ return d.call (c, g, f)
+ } catch (h)
+ {
+ if (h === a)
+ {
+ if (c[0] != "binary" || c[1] != "===" && c[1] != "!==" || !(t (c[2]) && t (c[3]) || r (c[2]) && r (c[3])))
+ {
+ if (e && c[0] == "binary" && (c[1] == "||" || c[1] == "&&"))try
+ {
+ var i = b (c[2]);
+ c = c[1] == "&&" && (i ? c[3] : i) || c[1] == "||" && (i ? i : c[3]) || c
+ } catch (j)
+ {
+ }
+ } else c[1] = c[1].substr (0, 2);
+ return e ? e.call (c, c) : null
+ }
+ throw h
+ }
+ }
+ } (), A = d.array_to_hash (["name", "array", "object", "string", "dot", "sub", "call", "regexp", "defun"]), D = d.array_to_hash (["if", "while", "do", "for", "for-in", "with"]), K;
+ (function ()
+ {
+ function b (a)
+ {
+ this.v = a
+ }
+
+ function c (a)
+ {
+ this.v = a
+ }
+
+ K = function (d, e, f)
+ {
+ function j ()
+ {
+ var j = e.call (f, d[i], i);
+ j instanceof b ? (j = j.v, j instanceof c ? h.push.apply (h, j.v) : h.push (j)) : j != a && (j instanceof c ? g.push.apply (g, j.v) : g.push (j))
+ }
+
+ var g = [], h = [], i;
+ if (d instanceof Array)for (i = 0; i < d.length; ++i)j (); else for (i in d)J (d, i) && j ();
+ return h.concat (g)
+ }, K.at_top = function (a)
+ {
+ return new b (a)
+ }, K.splice = function (a)
+ {
+ return new c (a)
+ };
+ var a = K.skip = {}
+ }) (), b.ast_walker = i, b.ast_mangle = m, b.ast_squeeze = z, b.ast_lift_variables = y, b.gen_code = E, b.ast_add_scope = l, b.set_logger = function (a)
+ {
+ n = a
+ }, b.make_string = B, b.split_lines = F, b.MAP = K
+ }), f ("uglify-js", ["require", "exports", "module", "./lib/parse-js", "./lib/process"], function (a, b, c)
+ {
+ function d (a, b)
+ {
+ b || (b = {});
+ var c = d.parser, e = d.uglify, f = c.parse (a, b.strict_semicolons);
+ f = e.ast_mangle (f, b.mangle_options), f = e.ast_squeeze (f, b.squeeze_options);
+ var g = e.gen_code (f, b.gen_options);
+ return g
+ }
+
+ d.parser = a ("./lib/parse-js"), d.uglify = a ("./lib/process"), c.exports = d
+ }), f ("lib/squeeze-more", ["require", "exports", "module", "./parse-js", "./process"], function (a, b, c)
+ {
+ function l (a)
+ {
+ function f (a, b)
+ {
+ var c = d, e;
+ return d = a, e = b (), d = c, e
+ }
+
+ function g (a, b, d)
+ {
+ return[this[0], a, b, f (d.scope, h (i, d, c))]
+ }
+
+ var b = e.ast_walker (), c = b.walk, d;
+ return b.with_walkers ({toplevel: function (a)
+ {
+ return[this[0], f (this.scope, h (i, a, c))]
+ }, "function": g, defun: g, "new": function (a, b)
+ {
+ if (a[0] == "name" && a[1] == "Array" && !d.has ("Array"))return b.length != 1 ? ["array", b] : c (["call", ["name", "Array"], b])
+ }, call: function (a, b)
+ {
+ if (a[0] == "dot" && a[2] == "toString" && b.length == 0)return["binary", "+", a[1], ["string", ""]];
+ if (a[0] == "name" && a[1] == "Array" && b.length != 1 && !d.has ("Array"))return["array", b]
+ }}, function ()
+ {
+ return c (e.ast_add_scope (a))
+ })
+ }
+
+ var d = a ("./parse-js"), e = a ("./process"), f = d.slice, g = d.member, h = d.curry, i = e.MAP, j = d.PRECEDENCE, k = d.OPERATORS;
+ b.ast_squeeze_more = l
+ });
+ if (!this.uglify)
+ {
+ var g = this;
+ e (["uglify-js", "lib/process", "lib/squeeze-more"], function (a, b, c)
+ {
+ b.ast_squeeze_more = c.ast_squeeze_more, g.uglify = a;
+ var d = g.define;
+ typeof d == "function" && d.amd && d ("uglifyweb", function ()
+ {
+ return a
+ })
+ }, null, !0)
+ }
+}) ()
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/bower.json b/vendor/twitter-bootstrap-3/bower.json
new file mode 100644
index 000000000..02611b3e6
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/bower.json
@@ -0,0 +1,11 @@
+{
+ "name": "bootstrap",
+ "version": "3.0.0",
+ "main": ["./dist/js/bootstrap.js", "./dist/css/bootstrap.css", "./dist/fonts/*"],
+ "ignore": [
+ "**/.*"
+ ],
+ "dependencies": {
+ "jquery": ">= 1.9.0"
+ }
+}
diff --git a/vendor/twitter-bootstrap-3/browserstack.json b/vendor/twitter-bootstrap-3/browserstack.json
new file mode 100644
index 000000000..b06721609
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/browserstack.json
@@ -0,0 +1,37 @@
+{
+ "username": "--secure--",
+ "key": "--secure--",
+ "test_path": "js/tests/index.html",
+ "browsers": [
+ {
+ "browser": "firefox",
+ "browser_version": "latest",
+ "os": "OS X",
+ "os_version": "Mountain Lion"
+ },
+ {
+ "browser": "safari",
+ "browser_version": "latest",
+ "os": "OS X",
+ "os_version": "Mountain Lion"
+ },
+ {
+ "browser": "chrome",
+ "browser_version": "latest",
+ "os": "OS X",
+ "os_version": "Mountain Lion"
+ },
+ {
+ "browser": "firefox",
+ "browser_version": "latest",
+ "os": "Windows",
+ "os_version": "7"
+ },
+ {
+ "browser": "chrome",
+ "browser_version": "latest",
+ "os": "Windows",
+ "os_version": "7"
+ }
+ ]
+}
diff --git a/vendor/twitter-bootstrap-3/components.html b/vendor/twitter-bootstrap-3/components.html
new file mode 100644
index 000000000..f3fb43b02
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/components.html
@@ -0,0 +1,3358 @@
+---
+layout: default
+title: Components
+slug: components
+lead: "Over a dozen reusable components built to provide iconography, dropdowns, navigation, alerts, popovers, and much more."
+base_url: "../"
+---
+
+
+
+
+
+
+
+
+
+
Toggleable, contextual menu for displaying lists of links. Made interactive with the dropdown JavaScript plugin .
+
+
Example
+
+
Wrap the dropdown's trigger and the dropdown menu within .dropdown
, or another element that declares
+ position: relative;
. Then add the menu's HTML.
+
+
+
+ {% highlight html %}
+
+
+
+
+ {% endhighlight %}
+
+
Alignment options
+
+
Add .pull-right
to a .dropdown-menu
to right align the dropdown menu.
+ {% highlight html %}
+
+ {% endhighlight %}
+
+
+
+
Add a header to label sections of actions in any dropdown menu.
+
+
+
+ {% highlight html %}
+
+ {% endhighlight %}
+
+
Disabled menu items
+
+
Add .disabled
to a <li>
in the dropdown to disable the link.
+
+
+
+ {% highlight html %}
+
+ {% endhighlight %}
+
+
+
+
+
+
+
Group a series of buttons together on a single line with the button group. Add on optional JavaScript
+ radio and checkbox style behavior with our buttons plugin .
+
+
+
Tooltips & popovers in button groups require special setting
+
+
When using tooltips or popovers on elements within a .btn-group
, you'll have to specify the option
+ container: 'body'
to avoid unwanted side effects (such as the element growing wider and/or losing
+ its rounded corners when the tooltip or popover is triggered).
+
+
+
Basic example
+
+
Wrap a series of buttons with .btn
in .btn-group
.
+
+
+
+ Left
+ Middle
+ Right
+
+
+{% highlight html %}
+
+ Left
+ Middle
+ Right
+
+{% endhighlight %}
+
+
+
+
Combine sets of <div class="btn-group">
into a <div class="btn-toolbar">
for
+ more complex components.
+
+
+{% highlight html %}
+
+{% endhighlight %}
+
+
Sizing
+
+
Instead of applying button sizing classes to every button in a group, just add .btn-group-*
to the
+ .btn-group
.
+
+
+{% highlight html %}
+
...
+
...
+
...
+
...
+{% endhighlight %}
+
+
Nesting
+
+
Place a .btn-group
within another .btn-group
when you want dropdown menus mixed with a
+ series of buttons.
+
+
+
+
1
+
2
+
+
+
+ Dropdown
+
+
+
+
+
+
+{% highlight html %}
+
+
1
+
2
+
+
+
+ Dropdown
+
+
+
+
+
+{% endhighlight %}
+
+
Vertical variation
+
+
Make a set of buttons appear vertically stacked rather than horizontally.
+
+
+
+
Button
+
Button
+
+
+ Dropdown
+
+
+
+
+
Button
+
Button
+
+
+ Dropdown
+
+
+
+
+
+
+ Dropdown
+
+
+
+
+
+
+ Dropdown
+
+
+
+
+
+
+{% highlight html %}
+
+ ...
+
+{% endhighlight %}
+
+
Justified link variation
+
+
Make a group of buttons stretch at the same size to span the entire width of its parent.
+
+
+
Element-specific usage
+
+
This only works with <a>
elements as the <button>
doesn't pick up these
+ styles.
+
+
+
+
+ Left
+ Middle
+ Right
+
+
+{% highlight html %}
+
+ ...
+
+{% endhighlight %}
+
+
+
+
+
+
+
+
Use any button to trigger a dropdown menu by placing it within a .btn-group
and providing
+ the proper menu markup.
+
+
+
Plugin dependency
+
+
Button dropdowns require the dropdown plugin to be included in your
+ version of Bootstrap.
+
+
+
Single button dropdowns
+
+
Turn a button into a dropdown toggle with some basic markup changes.
+
+
+
+ Default
+
+
+
+
+ Primary
+
+
+
+
+ Success
+
+
+
+
+ Info
+
+
+
+
+ Warning
+
+
+
+
+ Danger
+
+
+
+
+{% highlight html %}
+
+
+
+ Action
+
+
+
+{% endhighlight %}
+
+
Split button dropdowns
+
+
Similarly, create split button dropdowns with the same markup changes, only with a separate button.
+
+
+
+ Default
+
+
+
+
+
+
+ Primary
+
+
+
+
+
+
+ Success
+
+
+
+
+
+
+ Info
+
+
+
+
+
+
+ Warning
+
+
+
+
+
+
+ Danger
+
+
+
+
+
+
+{% highlight html %}
+
+
+ Action
+
+
+
+
+
+{% endhighlight %}
+
+
Sizing
+
+
Button dropdowns work with buttons of all sizes.
+
+
+
+{% highlight html %}
+
+
+
+ Large button
+
+
+
+
+
+
+
+ Small button
+
+
+
+
+
+
+
+ Extra small button
+
+
+
+{% endhighlight %}
+
+
Dropup variation
+
+
Trigger dropdown menus above elements by adding .dropup
to the parent.
+
+
+
+{% highlight html %}
+
+ Dropup
+
+
+
+
+
+{% endhighlight %}
+
+
+
+
+
+
+
+
Extend form controls by adding text or buttons before, after, or on both sides of any text-based input.
+ Use .input-group
with an .input-group-addon
to prepend or append elements to a .form-control
.
+
+
+
+
Cross-browser compatibility
+
+
Avoid using <select>
elements here as they cannot be fully styled in WebKit browsers.
+
+
+
Tooltips & popovers in input groups require special setting
+
+
When using tooltips or popovers on elements within an .input-group
, you'll have to specify the
+ option container: 'body'
to avoid unwanted side effects (such as the element growing wider and/or
+ losing its rounded corners when the tooltip or popover is triggered).
+
+
+
+
+
+{% highlight html %}
+
+ @
+
+
+
+
+
+ .00
+
+
+
+ $
+
+ .00
+
+{% endhighlight %}
+
+
+
+
+
Add the relative form sizing classes to the .input-group
itself and contents within will automatically
+ resize—no need for repeating the form control size classes on each element.
+
+
+{% highlight html %}
+
+ @
+
+
+
+
+ @
+
+
+
+
+ @
+
+
+{% endhighlight %}
+
+
+
+
+
Place any checkbox or radio option within an input group's addon instead of text.
+
+
+{% highlight html %}
+
+
+{% endhighlight %}
+
+
+
+
+
Buttons in input groups are a bit different and require one extra level of nesting. Instead of .input-group-addon
,
+ you'll need to use .input-group-btn
to wrap the buttons. This is required due to default browser styles
+ that cannot be overridden.
+
+
+{% highlight html %}
+
+
+{% endhighlight %}
+
+
+
+
+
+
+{% highlight html %}
+
+
+{% endhighlight %}
+
+
+
+
+{% highlight html %}
+
+
+
+{% endhighlight %}
+
+
+
+
+
+
+
+
+
Navs available in Bootstrap have shared markup, starting with the base .nav
class, as
+ well as shared states. Swap modifier classes to switch between each style.
+
+
Tabs
+
+
Note the .nav-tabs
class requires the .nav
base class.
+
+
+ {% highlight html %}
+
+ {% endhighlight %}
+
+
Pills
+
+
Take that same HTML, but use .nav-pills
instead:
+
+
+ {% highlight html %}
+
+ {% endhighlight %}
+
Pills are also vertically stackable. Just add .nav-stacked
.
+
+
+ {% highlight html %}
+
+ {% endhighlight %}
+
+
+
Justified
+
+
Easily make tabs or pills equal widths of their parent with .nav-justified
.
+
+
+ {% highlight html %}
+
+
+ {% endhighlight %}
+
+
+
Disabled links
+
+
For any nav component (tabs, pills, or list), add .disabled
for gray links and no hover
+ effects .
+
+
+
Link functionality not impacted
+
+
This class will only change the <a>
's appearance, not its functionality. Use custom
+ JavaScript to disable links here.
+
+
+
+ {% highlight html %}
+
+ {% endhighlight %}
+
+
+
Using dropdowns
+
+
Add dropdown menus with a little extra HTML and the dropdowns JavaScript
+ plugin .
+
+
Tabs with dropdowns
+
+
+ {% highlight html %}
+
+ {% endhighlight %}
+
+
Pills with dropdowns
+
+
+
+ {% highlight html %}
+
+ {% endhighlight %}
+
+
+
+
+
+
+
+
+
Default navbar
+
+
Navbars are responsive meta components that serve as navigation headers for your application or site. They begin
+ collapsed (and are toggleable) in mobile views and become horizontal as the available viewport width increases.
+
+
+
Customize the collapsing point
+
+
Depending on the content in your navbar, you might need to change the point at which your navbar switches between
+ collapsed and horizontal mode. Customize the @grid-float-breakpoint
variable or add your own media
+ query.
+
+
+
+{% highlight html %}
+
+
+
+
+
+
+
+
+{% endhighlight %}
+
+
+
Plugin dependency
+
+
The responsive navbar requires the collapse plugin to be included in your
+ version of Bootstrap.
+
+
+
+
Make navbars accessible
+
+
Be sure to add a role="navigation"
to every navbar to help with accessibility.
+
+
+
+
+
+
For buttons not residing in a <form>
, add this class to vertically center buttons within a navbar.
+
+
+
+{% highlight html %}
+
Sign in
+{% endhighlight %}
+
+
+
Text
+
+
Wrap strings of text in an element with .navbar-text
, usually on a <p>
tag for proper
+ leading and color.
+
+
+
+
+
+
Signed in as Mark Otto
+
+
+
+{% highlight html %}
+
Signed in as Mark Otto
+{% endhighlight %}
+
+
+
Non-nav links
+
+
For folks using standard links that are not within the regular navbar navigation component, use the .navbar-link
+ class to add the proper colors for the default and inverse navbar options.
+
+
+{% highlight html %}
+
Signed in as Mark Otto
+{% endhighlight %}
+
+
+
Component alignment
+
+
Align nav links, forms, buttons, or text, using the .navbar-left
or .navbar-right
utility
+ classes. Both classes will add a CSS float in the specified direction. For example, to align nav links, put them in
+ a separate <ul>
with the respective utility class applied.
+
+
These classes are mixin-ed versions of .pull-left
and .pull-right
, but they're scoped to
+ media queries for easier handling of navbar components across device sizes.
+
+
+
Fixed to top
+
+
Add .navbar-fixed-top
.
+
+
+
+{% highlight html %}
+
+ ...
+
+{% endhighlight %}
+
+
+
Body padding required
+
+
The fixed navbar will overlay your other content, unless you add padding
to the top of the
+ <body>
. Try out your own values or use our snippet below. Tip: By default, the navbar is 50px high.
+
+ {% highlight css %}
+ body { padding-top: 70px; }
+ {% endhighlight %}
+
Make sure to include this after the core Bootstrap CSS.
+
+
+
+
Fixed to bottom
+
+
Add .navbar-fixed-bottom
instead.
+
+
+
+{% highlight html %}
+
+ ...
+
+{% endhighlight %}
+
+
+
Body padding required
+
+
The fixed navbar will overlay your other content, unless you add padding
to the bottom of the
+ <body>
. Try out your own values or use our snippet below. Tip: By default, the navbar is 50px high.
+
+ {% highlight css %}
+ body { padding-bottom: 70px; }
+ {% endhighlight %}
+
Make sure to include this after the core Bootstrap CSS.
+
+
+
+
Static top
+
+
Create a full-width navbar that scrolls away with the page by adding .navbar-static-top
. Unlike the
+ .navbar-fixed-*
classes, you do not need to change any padding on the body
.
+
+
+
+{% highlight html %}
+
+ ...
+
+{% endhighlight %}
+
+
+
Inverted navbar
+
+
Modify the look of the navbar by adding .navbar-inverse
.
+
+
+
+{% highlight html %}
+
+ ...
+
+{% endhighlight %}
+
+
+
+
+
+
+
+
Indicate the current page's location within a navigational hierarchy.
+
+
Separators are automatically added in CSS through :before
and content
.
+
+
+ {% highlight html %}
+
+ Home
+ Library
+ Data
+
+ {% endhighlight %}
+
+
+
+
+
+
+
Provide pagination links for your site or app with the multi-page pagination component, or the
+ simpler pager alternative .
+
+
+
+
Simple pagination inspired by Rdio, great for apps and search results. The large block is hard to miss, easily
+ scalable, and provides large click areas.
+
+
+
+
+ {% highlight html %}
+
+ {% endhighlight %}
+
+
Disabled and active states
+
+
Links are customizable for different circumstances. Use .disabled
for unclickable links and .active
+ to indicate the current page.
+
+
+
+
+ {% highlight html %}
+
+ {% endhighlight %}
+
You can optionally swap out active or disabled anchors for <span>
to remove click
+ functionality while retaining intended styles.
+ {% highlight html %}
+
+ {% endhighlight %}
+
+
+
Sizing
+
+
Fancy larger or smaller pagination? Add .pagination-lg
or .pagination-sm
for additional
+ sizes.
+
+
+ {% highlight html %}
+
+
+
+ {% endhighlight %}
+
+
+
+
+
Quick previous and next links for simple pagination implementations with light markup and styles. It's great for
+ simple sites like blogs or magazines.
+
+
Default example
+
+
By default, the pager centers links.
+
+
+
+
+ {% highlight html %}
+
+ {% endhighlight %}
+
+
Aligned links
+
+
Alternatively, you can align each link to the sides:
+
+
+
+
+ {% highlight html %}
+
+ {% endhighlight %}
+
+
+
Optional disabled state
+
+
Pager links also use the general .disabled
utility class from the pagination.
+
+
+
+
+ {% highlight html %}
+
+ {% endhighlight %}
+
+
+
+
+
+
+
+
+
Example
+
+
+
Example heading New
+
+ Example heading New
+
+ Example heading New
+ Example heading New
+ Example heading New
+ Example heading New
+
+ {% highlight html %}
+
Example heading New
+ {% endhighlight %}
+
+
Available variations
+
+
Add any of the below mentioned modifier classes to change the appearance of a label.
+
+
+ Default
+ Primary
+ Success
+ Info
+ Warning
+ Danger
+
+ {% highlight html %}
+
Default
+
Primary
+
Success
+
Info
+
Warning
+
Danger
+ {% endhighlight %}
+
+
+
+
+
+
+
+
Easily highlight new or unread items by adding a <span class="badge">
to links,
+ Bootstrap navs, and more.
+
+
+ {% highlight html %}
+
Inbox 42
+ {% endhighlight %}
+
+
Self collapsing
+
+
When there are no new or unread items, badges will simply collapse (via CSS's :empty
selector)
+ provided no content exists within.
+
+
+
Cross-browser compatibility
+
+
Badges won't self collapse in Internet Explorer 8 because it lacks support for the :empty
+ selector.
+
+
+
Adapts to active nav states
+
+
Built-in styles are included for placing badges in active states in pill and list navigations.
+
+
+ {% highlight html %}
+
+ {% endhighlight %}
+
+
+
+
+
+
+
A lightweight, flexible component that can optional extend the entire viewport to showcase key content on your
+ site. To make the jumbotron full width, don't include it within a .container
. Placing it within a
+ container will keep it at the width of the rest of your content and provide rounded corners.
+
+
+
+
+
Hello, world!
+
+
This is a simple hero unit, a simple jumbotron-style component for calling extra attention to
+ featured content or information.
+
+
Learn more
+
+
+
+ {% highlight html %}
+
+ {% endhighlight %}
+
+
+
+
+
+
+
A simple shell for an h1
to appropriately space out and segment sections of content on a page. It
+ can utilize the h1
's default small
element, as well as most other components (with
+ additional styles).
+
+
+
+
+ {% highlight html %}
+
+ {% endhighlight %}
+
+
+
+
+
+
+
Extend Bootstrap's grid system with the thumbnail component to easily
+ display grids of images, videos, text, and more.
+
+
Default example
+
+
By default, Bootstrap's thumbnails are designed to showcase linked images with minimal required markup.
+
+
+
+ {% highlight html %}
+
+ {% endhighlight %}
+
+
Custom content
+
+
With a bit of extra markup, it's possible to add any kind of HTML content like headings, paragraphs, or buttons
+ into thumbnails.
+
+
+
+
+
+
+
+
+
Thumbnail label
+
+
Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta
+ gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.
+
+
Button Button
+
+
+
+
+
+
+
+
+
Thumbnail label
+
+
Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta
+ gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.
+
+
Button Button
+
+
+
+
+
+
+
+
+
Thumbnail label
+
+
Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta
+ gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.
+
+
Button Button
+
+
+
+
+
+
+ {% highlight html %}
+
+
+
+
+
+
+
+
+
+ {% endhighlight %}
+
+
+
+
+
+
+
Provide contextual feedback messages for typical user actions with the handful of available and
+ flexible alert messages. For inline dismissal, use the alerts jQuery
+ plugin .
+
+
Examples
+
+
Wrap any text and an optional dismiss button in .alert
and one of the four contextual classes (e.g.,
+ .alert-success
) for basic alert messages.
+
+
+
No default class
+
+
Alerts don't have default classes, only base and modifier classes. A default gray alert doesn't make too much
+ sense, so you're required to specify a type via contextual class. Choose from success, info, warning, or
+ danger.
+
+
+
+
+ Well done! You successfully read this important alert message.
+
+
+ Heads up! This alert needs your attention, but it's not super important.
+
+
+ Warning! Best check yo self, you're not looking too good.
+
+
+ Oh snap! Change a few things up and try submitting again.
+
+
+ {% highlight html %}
+
...
+
...
+
...
+
...
+ {% endhighlight %}
+
+
Dismissable alerts
+
+
Build on any alert by adding an optional .alert-dismissable
and close button.
+
+
+
+ ×
+ Warning! Best check yo self, you're not looking too good.
+
+
+ {% highlight html %}
+
+ ×
+ Warning! Best check yo self, you're not looking too good.
+
+ {% endhighlight %}
+
+
+
Ensure proper behavior across all devices
+
+
Be sure to use the <button>
element with the data-dismiss="alert"
data
+ attribute.
+
+
+
Links in alerts
+
+
Use the .alert-link
utility class to quickly provide matching colored links within any alert.
+
+
+ {% highlight html %}
+
+
+
+
+ {% endhighlight %}
+
+
+
+
+
+
+
Provide up-to-date feedback on the progress of a workflow or action with simple yet flexible
+ progress bars.
+
+
+
Cross-browser compatibility
+
+
Progress bars use CSS3 transitions and animations to achieve some of their effects. These features are not
+ supported in Internet Explorer 9 and below or older versions of Firefox. Opera 12 does not support
+ animations.
+
+
+
Basic example
+
+
Default progress bar.
+
+
+ {% highlight html %}
+
+ {% endhighlight %}
+
+
Contextual alternatives
+
+
Progress bars use some of the same button and alert classes for consistent styles.
+
+
+
+
+ 40% Complete (success)
+
+
+
+
+
+ 60% Complete (warning)
+
+
+
+
+ 80% Complete (danger)
+
+
+
+ {% highlight html %}
+
+
+ 40% Complete (success)
+
+
+
+
+
+ 60% Complete (warning)
+
+
+
+ {% endhighlight %}
+
+
Striped
+
+
Uses a gradient to create a striped effect. Not available in IE8.
+
+
+
+
+ 40% Complete (success)
+
+
+
+
+
+ 60% Complete (warning)
+
+
+
+
+ 80% Complete (danger)
+
+
+
+ {% highlight html %}
+
+
+ 40% Complete (success)
+
+
+
+
+
+ 60% Complete (warning)
+
+
+
+
+ 80% Complete (danger)
+
+
+ {% endhighlight %}
+
+
Animated
+
+
Add .active
to .progress-striped
to animate the stripes right to left. Not available in
+ all versions of IE.
+
+
+ {% highlight html %}
+
+ {% endhighlight %}
+
+
Stacked
+
+
Place multiple bars into the same .progress
to stack them.
+
+
+
+
+ 35% Complete (success)
+
+
+ 20% Complete (warning)
+
+
+ 10% Complete (danger)
+
+
+
+ {% highlight html %}
+
+
+ 35% Complete (success)
+
+
+ 20% Complete (warning)
+
+
+ 10% Complete (danger)
+
+
+ {% endhighlight %}
+
+
+
+
+
+
+
Abstract object styles for building various types of components (like blog comments, Tweets, etc)
+ that feature a left- or right-aligned image alongside textual content.
+
+
+
+
The default media allow to float a media object (images, video, audio) to the left or right of a content
+ block.
+
+
+
+ {% highlight html %}
+
+ {% endhighlight %}
+
+
+
+
With a bit of extra markup, you can use media inside list (useful for comment threads or articles lists).
+
+
+ {% highlight html %}
+
+ {% endhighlight %}
+
+
+
+
+
+
+
List groups are a flexible and powerful component for displaying not only simple lists of elements,
+ but complex ones with custom content.
+
+
Basic example
+
+
The most basic list group is simply an unordered list with list items, and the proper classes. Build upon it with
+ the options that follow, or your own CSS as needed.
+
+
+
+ Cras justo odio
+ Dapibus ac facilisis in
+ Morbi leo risus
+ Porta ac consectetur ac
+ Vestibulum at eros
+
+
+ {% highlight html %}
+
+ Cras justo odio
+ Dapibus ac facilisis in
+ Morbi leo risus
+ Porta ac consectetur ac
+ Vestibulum at eros
+
+ {% endhighlight %}
+
+
Badges
+
+
Add the badges component to any list group item and it will automatically be positioned on the right.
+
+
+
+
+ 14
+ Cras justo odio
+
+
+ 2
+ Dapibus ac facilisis in
+
+
+ 1
+ Morbi leo risus
+
+
+
+ {% highlight html %}
+
+
+ 14
+ Cras justo odio
+
+
+ {% endhighlight %}
+
+
Linked items
+
+
Linkify list group items by using anchor tags instead of list items (that also means a parent
+ <div>
instead of an <ul>
). No need for individual parents around each element.
+
+
+
+ {% highlight html %}
+
+ {% endhighlight %}
+
+
Custom content
+
+
Add nearly any HTML within, even for linked list groups like the one below.
+
+
+ {% highlight html %}
+
+ {% endhighlight %}
+
+
+
+
+
+
+
While not always necessary, sometimes you need to put your DOM in a box. For those situations, try the
+ panel component.
+
+
Basic example
+
+
By default, all the .panel
does is apply some basic border and padding to contain some content.
+
+
+
+
+ Basic panel example
+
+
+
+{% highlight html %}
+
+
+ Basic panel example
+
+
+{% endhighlight %}
+
+
Panel with heading
+
+
Easily add a heading container to your panel with .panel-heading
. You may also include any <h1>
-
+ <h6>
with a .panel-title
class to add a pre-styled heading.
+
+
+
+
Panel heading without title
+
+ Panel content
+
+
+
+
+
Panel title
+
+
+ Panel content
+
+
+
+{% highlight html %}
+
+
Panel heading without title
+
+ Panel content
+
+
+
+
+
+
Panel title
+
+
+ Panel content
+
+
+{% endhighlight %}
+
+
+
+
Wrap buttons or secondary text in .panel-footer
. Note that panel footers do not inherit
+ colors and borders when using contextual variations as they are not meant to be in the foreground.
+
+
+{% highlight html %}
+
+{% endhighlight %}
+
+
Contextual alternatives
+
+
Like other components, easily make a panel more meaningful to a particular context by adding any of the contextual
+ state classes.
+
+
+
+
+
Panel title
+
+
+ Panel content
+
+
+
+
+
Panel title
+
+
+ Panel content
+
+
+
+
+
Panel title
+
+
+ Panel content
+
+
+
+
+
Panel title
+
+
+ Panel content
+
+
+
+
+
Panel title
+
+
+ Panel content
+
+
+
+{% highlight html %}
+
...
+
...
+
...
+
...
+
...
+{% endhighlight %}
+
+
With tables
+
+
Add any non-bordered .table
within a panel for a seamless design. If there is a .panel-body
,
+ we add an extra border to the top of the table for separation.
+
+
+
+
+
Panel heading
+
+
Some default panel content here. Nulla vitae elit libero, a pharetra augue. Aenean lacinia bibendum nulla
+ sed consectetur. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Nullam
+ id dolor id nibh ultricies vehicula ut id elit.
+
+
+
+
+
+
+ #
+ First Name
+ Last Name
+ Username
+
+
+
+
+ 1
+ Mark
+ Otto
+ @mdo
+
+
+ 2
+ Jacob
+ Thornton
+ @fat
+
+
+ 3
+ Larry
+ the Bird
+ @twitter
+
+
+
+
+
+{% highlight html %}
+
+
+
Panel heading
+
+
+
+
+ ...
+
+
+{% endhighlight %}
+
+
If there is no panel body, the component moves from panel header to table without interruption.
+
+
+
+
+
Panel heading
+
+
+
+
+
+ #
+ First Name
+ Last Name
+ Username
+
+
+
+
+ 1
+ Mark
+ Otto
+ @mdo
+
+
+ 2
+ Jacob
+ Thornton
+ @fat
+
+
+ 3
+ Larry
+ the Bird
+ @twitter
+
+
+
+
+
+{% highlight html %}
+
+
+
Panel heading
+
+
+
+ ...
+
+
+{% endhighlight %}
+
+
+
With list groups
+
+
Easily include full-width list groups within any panel.
+
+
+
+
+
Panel heading
+
+
Some default panel content here. Nulla vitae elit libero, a pharetra augue. Aenean lacinia bibendum nulla
+ sed consectetur. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Nullam
+ id dolor id nibh ultricies vehicula ut id elit.
+
+
+
+
+ Cras justo odio
+ Dapibus ac facilisis in
+ Morbi leo risus
+ Porta ac consectetur ac
+ Vestibulum at eros
+
+
+
+{% highlight html %}
+
+
+
Panel heading
+
+
+
+
+ Cras justo odio
+ Dapibus ac facilisis in
+ Morbi leo risus
+ Porta ac consectetur ac
+ Vestibulum at eros
+
+
+{% endhighlight %}
+
+
+
+
+
+
+
+
+
Default well
+
+
Use the well as a simple effect on an element to give it an inset effect.
+
+
+
+ Look, I'm in a well!
+
+
+ {% highlight html %}
+
...
+ {% endhighlight %}
+
Optional classes
+
+
Control padding and rounded corners with two optional modifier classes.
+
+
+
+ Look, I'm in a large well!
+
+
+ {% highlight html %}
+
...
+ {% endhighlight %}
+
+
+
+ Look, I'm in a small well!
+
+
+ {% highlight html %}
+
...
+ {% endhighlight %}
+
+
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/composer.json b/vendor/twitter-bootstrap-3/composer.json
new file mode 100644
index 000000000..85fa5784a
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/composer.json
@@ -0,0 +1,14 @@
+{
+ "name": "twbs/bootstrap", "description": "Sleek, intuitive, and powerful mobile first front-end framework for faster and easier web development.", "keywords": ["bootstrap", "css"], "homepage": "http://getbootstrap.com", "authors": [
+ {
+ "name": "Mark Otto",
+ "email": "markdotto@gmail.com"
+ },
+ {
+ "name": "Jacob Thornton",
+ "email": "jacobthornton@gmail.com"
+ }
+], "support": {
+ "issues": "https://github.com/twbs/bootstrap/issues"
+}, "license": "Apache-2.0"
+}
diff --git a/vendor/twitter-bootstrap-3/css.html b/vendor/twitter-bootstrap-3/css.html
new file mode 100644
index 000000000..c50ea82ff
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/css.html
@@ -0,0 +1,2937 @@
+---
+layout: default
+title: CSS
+slug: css
+lead: "Global CSS settings, fundamental HTML elements styled and enhanced with extensible classes, and an advanced grid system."
+base_url: "../"
+---
+
+
+
+
+
+
Get the lowdown on the key pieces of Bootstrap's infrastructure, including our approach to better,
+ faster, stronger web development.
+
+
HTML5 doctype
+
+
Bootstrap makes use of certain HTML elements and CSS properties that require the use of the HTML5 doctype.
+ Include it at the beginning of all your projects.
+ {% highlight html %}
+
+
+ ...
+
+ {% endhighlight %}
+
+
Mobile first
+
+
With Bootstrap 2, we added optional mobile friendly styles for key aspects of the framework. With Bootstrap 3,
+ we've rewritten the project to be mobile friendly from the start. Instead of adding on optional mobile styles,
+ they're baked right into the core. In fact, Bootstrap is mobile first . Mobile first styles can
+ be found throughout the entire library instead of in separate files.
+
+
To ensure proper rendering and touch zooming, add the viewport meta tag to your <head>
.
+
+ {% highlight html %}
+
+ {% endhighlight %}
+
You can disable zooming capabilities on mobile devices by adding user-scalable=no
to the viewport
+ meta tag. This disables zooming, meaning users are only able to scroll, and results in your site feeling a bit
+ more like a native application. Overall we don't recommend this on every site, so use caution!
+ {% highlight html %}
+
+ {% endhighlight %}
+
+
Responsive images
+
+
Images in Bootstrap 3 can be made responsive-friendly via the addition of the .img-responsive
class.
+ This applies max-width: 100%;
and height: auto;
to the image so that it scales nicely
+ to the parent element.
+ {% highlight html %}
+
+ {% endhighlight %}
+
+
Typography and links
+
+
Bootstrap sets basic global display, typography, and link styles. Specifically, we:
+
+ Remove margin
on the body
+ Set background-color: white;
on the body
+ Use the @font-family-base
, @font-size-base
, and @line-height-base
+ attributes as our typographic base
+
+ Set the global link color via @link-color
and apply link underlines only on :hover
+
+
+
These styles can be found within scaffolding.less
.
+
+
Normalize
+
+
For improved cross-browser rendering, we use Normalize ,
+ a project by Nicolas Gallagher and Jonathan Neal .
+
+
Containers
+
+
Easily center a page's contents by wrapping its contents in a .container
. Containers set max-width
+ at various media query breakpoints to match our grid system.
+ {% highlight html %}
+
+ ...
+
+ {% endhighlight %}
+
+
+
+
+
+
+
Bootstrap includes a responsive, mobile first fluid grid system that appropriately scales up to 12
+ columns as the device or viewport size increases. It includes predefined classes
+ for easy layout options, as well as powerful mixins for generating more semantic layouts .
+
+
+
+
+
We use the following media queries to create the key breakpoints in our grid system.
+{% highlight css %}
+/* Extra small devices (phones, less than 768px) */
+/* No media query since this is the default in Bootstrap */
+
+/* Small devices (tablets, 768px and up) */
+@media (min-width: @screen-sm-min) { ... }
+
+/* Medium devices (desktops, 992px and up) */
+@media (min-width: @screen-md-min) { ... }
+
+/* Large devices (large desktops, 1200px and up) */
+@media (min-width: @screen-lg-min) { ... }
+{% endhighlight %}
+
We occasionally expand on these media queries to include a max-width
to limit CSS to a narrower set of
+ devices.
+{% highlight css %}
+@media (max-width: @screen-xs-max) { ... }
+@media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) { ... }
+@media (min-width: @screen-md-min) and (max-width: @screen-md-max) { ... }
+@media (min-width: @screen-lg-min) { ... }
+{% endhighlight %}
+
+
Grid options
+
+
See how aspects of the Bootstrap grid system work across multiple devices with a handy table.
+
+
+
+
+
+
+
+ Extra small devices
+ Phones (<768px)
+
+
+ Small devices
+ Tablets (≥768px)
+
+
+ Medium devices
+ Desktops (≥992px)
+
+
+ Large devices
+ Desktops (≥1200px)
+
+
+
+
+
+ Grid behavior
+ Horizontal at all times
+ Collapsed to start, horizontal above breakpoints
+
+
+ Max container width
+ None (auto)
+ 750px
+ 970px
+ 1170px
+
+
+ Class prefix
+ .col-xs-
+ .col-sm-
+ .col-md-
+ .col-lg-
+
+
+ # of columns
+ 12
+
+
+ Max column width
+ Auto
+ 60px
+ 78px
+ 95px
+
+
+ Gutter width
+ 30px (15px on each side of a column)
+
+
+ Nestable
+ Yes
+
+
+ Offsets
+ N/A
+ Yes
+
+
+ Column ordering
+ N/A
+ Yes
+
+
+
+
+
+
Example: Stacked-to-horizontal
+
+
Using a single set of .col-md-*
grid classes, you can create a basic grid system that starts out stacked
+ on mobile devices and tablet devices (the extra small to small range) before becoming horizontal on desktop (medium)
+ devices.
+
+
+
+
.col-md-1
+
.col-md-1
+
.col-md-1
+
.col-md-1
+
.col-md-1
+
.col-md-1
+
.col-md-1
+
.col-md-1
+
.col-md-1
+
.col-md-1
+
.col-md-1
+
.col-md-1
+
+
+
.col-md-8
+
.col-md-4
+
+
+
.col-md-4
+
.col-md-4
+
.col-md-4
+
+
+
.col-md-6
+
.col-md-6
+
+
+{% highlight html %}
+
+
.col-md-1
+
.col-md-1
+
.col-md-1
+
.col-md-1
+
.col-md-1
+
.col-md-1
+
.col-md-1
+
.col-md-1
+
.col-md-1
+
.col-md-1
+
.col-md-1
+
.col-md-1
+
+
+
.col-md-8
+
.col-md-4
+
+
+
.col-md-4
+
.col-md-4
+
.col-md-4
+
+
+
.col-md-6
+
.col-md-6
+
+{% endhighlight %}
+
+
Example: Mobile and desktop
+
+
Don't want your columns to simply stack in smaller devices? Use the extra small and medium device grid classes by
+ adding .col-xs-*
.col-md-*
to your columns. See the example below for a better idea of how
+ it all works.
+
+
+
+
.col-xs-12 col-md-8
+
.col-xs-6 .col-md-4
+
+
+
.col-xs-6 .col-md-4
+
.col-xs-6 .col-md-4
+
.col-xs-6 .col-md-4
+
+
+
.col-xs-6
+
.col-xs-6
+
+
+{% highlight html %}
+
+
+
.col-xs-12 col-md-8
+
.col-xs-6 .col-md-4
+
+
+
+
+
.col-xs-6 .col-md-4
+
.col-xs-6 .col-md-4
+
.col-xs-6 .col-md-4
+
+
+
+
+
.col-xs-6
+
.col-xs-6
+
+{% endhighlight %}
+
+
Example: Mobile, tablet, desktops
+
+
Build on the previous example by creating even more dynamic and powerful layouts with tablet .col-sm-*
+ classes.
+
+
+
+
.col-xs-12 .col-sm-6 .col-md-8
+
.col-xs-6 .col-sm-6 .col-md-4
+
+
+
.col-xs-6 .col-sm-4 .col-md-4
+
.col-xs-6 .col-sm-4 .col-md-4
+
+
+
.col-xs-6 .col-sm-4 .col-md-4
+
+
+{% highlight html %}
+
+
.col-xs-12 .col-sm-6 .col-md-8
+
.col-xs-6 .col-sm-6 .col-md-4
+
+
+
.col-xs-6 .col-sm-4 .col-md-4
+
.col-xs-6 .col-sm-4 .col-md-4
+
+
+
.col-xs-6 .col-sm-4 .col-md-4
+
+{% endhighlight %}
+
+
Responsive column resets
+
+
With the four tiers of grids available you're bound to run into issues where, at certain breakpoints, your columns
+ don't clear quite right as one is taller than the other. To fix that, use a combination of a .clearfix
+ and our responsive utility classes .
+{% highlight html %}
+
+
.col-xs-6 .col-sm-3
+
.col-xs-6 .col-sm-3
+
+
+
+
+
.col-xs-6 .col-sm-3
+
.col-xs-6 .col-sm-3
+
+{% endhighlight %}
+
In addition to column clearing at responsive breakpoints, you may need to reset offsets, pushes, or
+ pulls . Those resets are available for medium and large grid tiers only, since they start only at the
+ (second) small grid tier.
+{% highlight html %}
+
+
.col-sm-5 .col-md-6
+
.col-sm-5 .col-sm-offset-2 .col-md-6
+ .col-md-offset-0
+
+
+
+
+
.col-sm-6 .col-md-5 .col-lg-6
+
.col-sm-6 .col-md-5 .col-md-offset-2
+ .col-lg-6 .col-lg-offset-0
+
+
+{% endhighlight %}
+
+
+
Offsetting columns
+
+
Move columns to the right using .col-md-offset-*
classes. These classes increase the left margin of a
+ column by *
columns. For example, .col-md-offset-4
moves .col-md-4
over four
+ columns.
+
+
+
+
.col-md-4
+
.col-md-4 .col-md-offset-4
+
+
+
.col-md-3 .col-md-offset-3
+
.col-md-3 .col-md-offset-3
+
+
+
.col-md-6 .col-md-offset-3
+
+
+{% highlight html %}
+
+
.col-md-4
+
.col-md-4 .col-md-offset-4
+
+
+
.col-md-3 .col-md-offset-3
+
.col-md-3 .col-md-offset-3
+
+
+
.col-md-6 .col-md-offset-3
+
+{% endhighlight %}
+
+
+
Nesting columns
+
+
To nest your content with the default grid, add a new .row
and set of .col-md-*
columns
+ within an existing .col-md-*
column. Nested rows should include a set of columns that add up to 12.
+
+
+
+ Level 1: .col-md-9
+
+
+ Level 2: .col-md-6
+
+
+ Level 2: .col-md-6
+
+
+
+
+{% highlight html %}
+
+
+ Level 1: .col-md-9
+
+
+ Level 2: .col-md-6
+
+
+ Level 2: .col-md-6
+
+
+
+
+{% endhighlight %}
+
+
Column ordering
+
+
Easily change the order of our built-in grid columns with .col-md-push-*
and .col-md-pull-*
+ modifier classes.
+
+
+
.col-md-9 .col-md-push-3
+
.col-md-3 .col-md-pull-9
+
+
+{% highlight html %}
+
+
.col-md-9 .col-md-push-3
+
.col-md-3 .col-md-pull-9
+
+{% endhighlight %}
+
+
LESS mixins and variables
+
+
In addition to prebuilt grid classes for fast layouts, Bootstrap includes LESS
+ variables and mixins for quickly generating your own simple, semantic layouts.
+
+
Variables
+
+
Variables determine the number of columns, the gutter width, and the media query point at which to begin floating
+ columns. We use these to generate the predefined grid classes documented above, as well as for the custom mixins
+ listed below.
+{% highlight css %}
+@grid-columns: 12;
+@grid-gutter-width: 30px;
+@grid-float-breakpoint: 768px;
+{% endhighlight %}
+
+
Mixins
+
+
Mixins are used in conjunction with the grid variables to generate semantic CSS for individual grid columns.
+{% highlight css %}
+// Creates a wrapper for a series of columns
+.make-row(@gutter: @grid-gutter-width) {
+// Then clear the floated columns
+.clearfix();
+
+@media (min-width: @screen-small) {
+margin-left: (@gutter / -2);
+margin-right: (@gutter / -2);
+}
+
+// Negative margin nested rows out to align the content of columns
+.row {
+margin-left: (@gutter / -2);
+margin-right: (@gutter / -2);
+}
+}
+
+// Generate the extra small columns
+.make-xs-column(@columns; @gutter: @grid-gutter-width) {
+position: relative;
+// Prevent columns from collapsing when empty
+min-height: 1px;
+// Inner gutter via padding
+padding-left: (@gutter / 2);
+padding-right: (@gutter / 2);
+
+// Calculate width based on number of columns available
+@media (min-width: @grid-float-breakpoint) {
+float: left;
+width: percentage((@columns / @grid-columns));
+}
+}
+
+// Generate the small columns
+.make-sm-column(@columns; @gutter: @grid-gutter-width) {
+position: relative;
+// Prevent columns from collapsing when empty
+min-height: 1px;
+// Inner gutter via padding
+padding-left: (@gutter / 2);
+padding-right: (@gutter / 2);
+
+// Calculate width based on number of columns available
+@media (min-width: @screen-small) {
+float: left;
+width: percentage((@columns / @grid-columns));
+}
+}
+
+// Generate the small column offsets
+.make-sm-column-offset(@columns) {
+@media (min-width: @screen-small) {
+margin-left: percentage((@columns / @grid-columns));
+}
+}
+.make-sm-column-push(@columns) {
+@media (min-width: @screen-small) {
+left: percentage((@columns / @grid-columns));
+}
+}
+.make-sm-column-pull(@columns) {
+@media (min-width: @screen-small) {
+right: percentage((@columns / @grid-columns));
+}
+}
+
+// Generate the medium columns
+.make-md-column(@columns; @gutter: @grid-gutter-width) {
+position: relative;
+// Prevent columns from collapsing when empty
+min-height: 1px;
+// Inner gutter via padding
+padding-left: (@gutter / 2);
+padding-right: (@gutter / 2);
+
+// Calculate width based on number of columns available
+@media (min-width: @screen-medium) {
+float: left;
+width: percentage((@columns / @grid-columns));
+}
+}
+
+// Generate the large column offsets
+.make-md-column-offset(@columns) {
+@media (min-width: @screen-medium) {
+margin-left: percentage((@columns / @grid-columns));
+}
+}
+.make-md-column-push(@columns) {
+@media (min-width: @screen-medium) {
+left: percentage((@columns / @grid-columns));
+}
+}
+.make-md-column-pull(@columns) {
+@media (min-width: @screen-medium) {
+right: percentage((@columns / @grid-columns));
+}
+}
+
+// Generate the large columns
+.make-lg-column(@columns; @gutter: @grid-gutter-width) {
+position: relative;
+// Prevent columns from collapsing when empty
+min-height: 1px;
+// Inner gutter via padding
+padding-left: (@gutter / 2);
+padding-right: (@gutter / 2);
+
+// Calculate width based on number of columns available
+@media (min-width: @screen-large) {
+float: left;
+width: percentage((@columns / @grid-columns));
+}
+}
+
+// Generate the large column offsets
+.make-lg-column-offset(@columns) {
+@media (min-width: @screen-large) {
+margin-left: percentage((@columns / @grid-columns));
+}
+}
+.make-lg-column-push(@columns) {
+@media (min-width: @screen-large) {
+left: percentage((@columns / @grid-columns));
+}
+}
+.make-lg-column-pull(@columns) {
+@media (min-width: @screen-large) {
+right: percentage((@columns / @grid-columns));
+}
+}
+{% endhighlight %}
+
+
Example usage
+
+
You can modify the variables to your own custom values, or just use the mixins with their default values. Here's an
+ example of using the default settings to create a two-column layout with a gap between.
+{% highlight css %}
+.wrapper {
+.make-row();
+}
+.content-main {
+.make-lg-column(8);
+}
+.content-secondary {
+.make-lg-column(3);
+.make-lg-column-offset(1);
+}
+{% endhighlight %}
+{% highlight html %}
+
+{% endhighlight %}
+
+
+
+
+
+
+
+
+
+
Headings
+
+
All HTML headings, <h1>
through <h6>
are available.
+
+
+
+
+
+ h1. Bootstrap heading
+ Semibold 36px
+
+
+ h2. Bootstrap heading
+ Semibold 30px
+
+
+ h3. Bootstrap heading
+ Semibold 24px
+
+
+ h4. Bootstrap heading
+ Semibold 18px
+
+
+ h5. Bootstrap heading
+ Semibold 14px
+
+
+ h6. Bootstrap heading
+ Semibold 12px
+
+
+
+
+{% highlight html %}
+
h1. Bootstrap heading
+
+
h2. Bootstrap heading
+
+
h3. Bootstrap heading
+
h4. Bootstrap heading
+
h5. Bootstrap heading
+
h6. Bootstrap heading
+{% endhighlight %}
+
+
Also included with headings is an autoscaling <small>
element. Use it for smaller, gray secondary
+ text in any heading.
+
+
+
+
+
+
+ h1. Bootstrap heading
+ Secondary text
+
+
+
+
+
+ h2. Bootstrap heading
+ Secondary text
+
+
+
+
+
+ h3. Bootstrap heading
+ Secondary text
+
+
+
+
+
+ h4. Bootstrap heading
+ Secondary text
+
+
+
+
+
+ h5. Bootstrap heading
+ Secondary text
+
+
+
+
+
+ h6. Bootstrap heading
+ Secondary text
+
+
+
+
+
+
+{% highlight html %}
+
h1. Bootstrap heading
+ Secondary text
+
+
h2. Bootstrap heading
+ Secondary text
+
+
h3. Bootstrap heading
+ Secondary text
+
+
h4. Bootstrap heading
+ Secondary text
+
+
h5. Bootstrap heading
+ Secondary text
+
+
h6. Bootstrap heading
+ Secondary text
+
+{% endhighlight %}
+
+
+
+
Body copy
+
+
Bootstrap's global default font-size
is 14px , with a line-height
of
+ 1.428 . This is applied to the <body>
and all paragraphs. In addition, <p>
+ (paragraphs) receive a bottom margin of half their computed line-height (10px by default).
+
+
+
Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis natoque penatibus et magnis dis parturient
+ montes, nascetur ridiculus mus. Nullam id dolor id nibh ultricies vehicula.
+
+
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec ullamcorper nulla non
+ metus auctor fringilla. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem
+ nec elit. Donec ullamcorper nulla non metus auctor fringilla.
+
+
Maecenas sed diam eget risus varius blandit sit amet non magna. Donec id elit non mi porta gravida at eget metus.
+ Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit.
+
+{% highlight html %}
+
...
+{% endhighlight %}
+
+
+
Lead body copy
+
+
Make a paragraph stand out by adding .lead
.
+
+
+
Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo
+ luctus.
+
+{% highlight html %}
+
...
+{% endhighlight %}
+
+
+
Built with Less
+
+
The typographic scale is based on two LESS variables in variables.less : @font-size-base
+ and @line-height-base
. The first is the base font-size used throughout and the second is the base
+ line-height. We use those variables and some simple math to create the margins, paddings, and line-heights of all
+ our type and more. Customize them and Bootstrap adapts.
+
+
+
+
Emphasis
+
+
Make use of HTML's default emphasis tags with lightweight styles.
+
+
Small text
+
+
For de-emphasizing inline or blocks of text, use the <small>
tag to set text at 85% the size of
+ the parent. Heading elements receive their own font-size
for nested <small>
+ elements.
+
+
+
+ This line of text is meant to be treated as fine print.
+
+
+{% highlight html %}
+
This line of text is meant to be treated as fine print.
+{% endhighlight %}
+
+
+
Bold
+
+
For emphasizing a snippet of text with a heavier font-weight.
+
+
+
The following snippet of text is rendered as bold text .
+
+{% highlight html %}
+
rendered as bold text
+{% endhighlight %}
+
+
Italics
+
+
For emphasizing a snippet of text with italics.
+
+
+
The following snippet of text is rendered as italicized text .
+
+{% highlight html %}
+
rendered as italicized text
+{% endhighlight %}
+
+
+
Alternate elements
+
+
Feel free to use <b>
and <i>
in HTML5. <b>
is meant to
+ highlight words or phrases without conveying additional importance while <i>
is mostly for
+ voice, technical terms, etc.
+
+
+
Alignment classes
+
+
Easily realign text to components with text alignment classes.
+
+
+
Left aligned text.
+
+
Center aligned text.
+
+
Right aligned text.
+
+{% highlight html %}
+
Left aligned text.
+
+
Center aligned text.
+
+
Right aligned text.
+{% endhighlight %}
+
+
Emphasis classes
+
+
Convey meaning through color with a handful of emphasis utility classes.
+
+
+
Fusce dapibus, tellus ac cursus commodo, tortor mauris nibh.
+
+
Nullam id dolor id nibh ultricies vehicula ut id elit.
+
+
Duis mollis, est non commodo luctus, nisi erat porttitor ligula.
+
+
Maecenas sed diam eget risus varius blandit sit amet non magna.
+
+
Etiam porta sem malesuada magna mollis euismod.
+
+
Donec ullamcorper nulla non metus auctor fringilla.
+
+{% highlight html %}
+
...
+
+
...
+
+
...
+
+
...
+
+
...
+
+
...
+{% endhighlight %}
+
+
+
+
Abbreviations
+
+
Stylized implementation of HTML's <abbr>
element for abbreviations and acronyms to show the
+ expanded version on hover. Abbreviations with a title
attribute have a light dotted bottom border and a
+ help cursor on hover, providing additional context on hover.
+
+
Basic abbreviation
+
+
For expanded text on long hover of an abbreviation, include the title
attribute with the <abbr>
+ element.
+
+
+
An abbreviation of the word attribute is attr .
+
+{% highlight html %}
+
attr
+{% endhighlight %}
+
+
Initialism
+
+
Add .initialism
to an abbreviation for a slightly smaller font-size.
+
+
+
HTML is the best thing since sliced bread.
+
+{% highlight html %}
+
HTML
+{% endhighlight %}
+
+
+
+
Addresses
+
+
Present contact information for the nearest ancestor or the entire body of work. Preserve formatting by ending all
+ lines with <br>
.
+
+
+
+ Twitter, Inc.
+ 795 Folsom Ave, Suite 600
+ San Francisco, CA 94107
+ P: (123) 456-7890
+
+
+ Full Name
+ first.last@example.com
+
+
+{% highlight html %}
+
+ Twitter, Inc.
+ 795 Folsom Ave, Suite 600
+ San Francisco, CA 94107
+ P: (123) 456-7890
+
+
+
+ Full Name
+ first.last@example.com
+
+{% endhighlight %}
+
+
+
+
Blockquotes
+
+
For quoting blocks of content from another source within your document.
+
+
Default blockquote
+
+
Wrap <blockquote>
around any HTML as the quote. For
+ straight quotes, we recommend a <p>
.
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.
+
+
+{% highlight html %}
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.
+
+{% endhighlight %}
+
+
Blockquote options
+
+
Style and content changes for simple variations on a standard <blockquote>
.
+
+
Naming a source
+
+
Add <small>
tag for identifying the source. Wrap the name of the source work in
+ <cite>
.
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.
+ Someone famous in Source Title
+
+
+{% highlight html %}
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.
+ Someone famous in Source Title
+
+{% endhighlight %}
+
+
Alternate displays
+
+
Use .pull-right
for a floated, right-aligned blockquote.
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.
+ Someone famous in Source Title
+
+
+{% highlight html %}
+
+ ...
+
+{% endhighlight %}
+
+
+
+
Lists
+
+
Unordered
+
+
A list of items in which the order does not explicitly matter.
+
+
+
+ Lorem ipsum dolor sit amet
+ Consectetur adipiscing elit
+ Integer molestie lorem at massa
+ Facilisis in pretium nisl aliquet
+ Nulla volutpat aliquam velit
+
+ Phasellus iaculis neque
+ Purus sodales ultricies
+ Vestibulum laoreet porttitor sem
+ Ac tristique libero volutpat at
+
+
+ Faucibus porta lacus fringilla vel
+ Aenean sit amet erat nunc
+ Eget porttitor lorem
+
+
+{% highlight html %}
+
+{% endhighlight %}
+
+
Ordered
+
+
A list of items in which the order does explicitly matter.
+
+
+
+ Lorem ipsum dolor sit amet
+ Consectetur adipiscing elit
+ Integer molestie lorem at massa
+ Facilisis in pretium nisl aliquet
+ Nulla volutpat aliquam velit
+ Faucibus porta lacus fringilla vel
+ Aenean sit amet erat nunc
+ Eget porttitor lorem
+
+
+{% highlight html %}
+
+ ...
+
+{% endhighlight %}
+
+
Unstyled
+
+
Remove the default list-style
and left margin on list items (immediate children only). This only
+ applies to immediate children list items , meaning you will need to add the class for any nested lists as
+ well.
+
+
+
+ Lorem ipsum dolor sit amet
+ Consectetur adipiscing elit
+ Integer molestie lorem at massa
+ Facilisis in pretium nisl aliquet
+ Nulla volutpat aliquam velit
+
+ Phasellus iaculis neque
+ Purus sodales ultricies
+ Vestibulum laoreet porttitor sem
+ Ac tristique libero volutpat at
+
+
+ Faucibus porta lacus fringilla vel
+ Aenean sit amet erat nunc
+ Eget porttitor lorem
+
+
+{% highlight html %}
+
+{% endhighlight %}
+
+
Inline
+
+
Place all list items on a single line with display: inline-block;
and some light padding.
+
+
+
+ Lorem ipsum
+ Phasellus iaculis
+ Nulla volutpat
+
+
+{% highlight html %}
+
+{% endhighlight %}
+
+
Description
+
+
A list of terms with their associated descriptions.
+
+
+
+ Description lists
+ A description list is perfect for defining terms.
+ Euismod
+ Vestibulum id ligula porta felis euismod semper eget lacinia odio sem nec elit.
+ Donec id elit non mi porta gravida at eget metus.
+ Malesuada porta
+ Etiam porta sem malesuada magna mollis euismod.
+
+
+{% highlight html %}
+
+ ...
+ ...
+
+{% endhighlight %}
+
+
Horizontal description
+
+
Make terms and descriptions in <dl>
line up side-by-side. Starts off stacked like default
+ <dl>
s, but when the navbar expands, so do these.
+
+
+
+ Description lists
+ A description list is perfect for defining terms.
+ Euismod
+ Vestibulum id ligula porta felis euismod semper eget lacinia odio sem nec elit.
+ Donec id elit non mi porta gravida at eget metus.
+ Malesuada porta
+ Etiam porta sem malesuada magna mollis euismod.
+ Felis euismod semper eget lacinia
+ Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet
+ risus.
+
+
+
+{% highlight html %}
+
+ ...
+ ...
+
+{% endhighlight %}
+
+
+
Auto-truncating
+
+
Horizontal description lists will truncate terms that are too long to fit in the left column with text-overflow
.
+ In narrower viewports, they will change to the default stacked layout.
+
+
+
+
+
+
+
+
+
Inline
+
+
Wrap inline snippets of code with <code>
.
+
+
+ For example, <section>
should be wrapped as inline.
+
+ {% highlight html %}
+ For example,
<section>
should be wrapped as inline.
+ {% endhighlight %}
+
+
Basic block
+
+
Use <pre>
for multiple lines of code. Be sure to escape any angle brackets in the code for
+ proper rendering.
+
+
+
<p>Sample text here...</p>
+
+ {% highlight html %}
+
<p>Sample text here...</p>
+ {% endhighlight %}
+
+
You may optionally add the .pre-scrollable
class, which will set a max-height of 350px and provide a
+ y-axis scrollbar.
+
+
+
+
+
+
+
+
Basic example
+
+
For basic styling—light padding and only horizontal dividers—add the base class .table
to
+ any <table>
. It may seem super redundant, but given the widespread use of tables for other
+ plugins like calendars and date pickers, we've opted to isolate our custom table styles.
+
+
+
+
+
+ #
+ First Name
+ Last Name
+ Username
+
+
+
+
+ 1
+ Mark
+ Otto
+ @mdo
+
+
+ 2
+ Jacob
+ Thornton
+ @fat
+
+
+ 3
+ Larry
+ the Bird
+ @twitter
+
+
+
+
+
+{% highlight html %}
+
+ ...
+
+{% endhighlight %}
+
+
+
Striped rows
+
+
Use .table-striped
to add zebra-striping to any table row within the <tbody>
.
+
+
+
Cross-browser compatibility
+
+
Striped tables are styled via the :nth-child
CSS selector, which is not available in Internet
+ Explorer 8.
+
+
+
+
+
+ #
+ First Name
+ Last Name
+ Username
+
+
+
+
+ 1
+ Mark
+ Otto
+ @mdo
+
+
+ 2
+ Jacob
+ Thornton
+ @fat
+
+
+ 3
+ Larry
+ the Bird
+ @twitter
+
+
+
+
+
+{% highlight html %}
+
+ ...
+
+{% endhighlight %}
+
+
+
Bordered table
+
+
Add .table-bordered
for borders on all sides of the table and cells.
+
+
+
+
+
+ #
+ First Name
+ Last Name
+ Username
+
+
+
+
+ 1
+ Mark
+ Otto
+ @mdo
+
+
+ Mark
+ Otto
+ @TwBootstrap
+
+
+ 2
+ Jacob
+ Thornton
+ @fat
+
+
+ 3
+ Larry the Bird
+ @twitter
+
+
+
+
+
+{% highlight html %}
+
+ ...
+
+{% endhighlight %}
+
+
+
Hover rows
+
+
Add .table-hover
to enable a hover state on table rows within a <tbody>
.
+
+
+
+
+
+ #
+ First Name
+ Last Name
+ Username
+
+
+
+
+ 1
+ Mark
+ Otto
+ @mdo
+
+
+ 2
+ Jacob
+ Thornton
+ @fat
+
+
+ 3
+ Larry the Bird
+ @twitter
+
+
+
+
+
+{% highlight html %}
+
+ ...
+
+{% endhighlight %}
+
+
+
Condensed table
+
+
Add .table-condensed
to make tables more compact by cutting cell padding in half.
+
+
+
+
+
+ #
+ First Name
+ Last Name
+ Username
+
+
+
+
+ 1
+ Mark
+ Otto
+ @mdo
+
+
+ 2
+ Jacob
+ Thornton
+ @fat
+
+
+ 3
+ Larry the Bird
+ @twitter
+
+
+
+
+
+{% highlight html %}
+
+ ...
+
+{% endhighlight %}
+
+
+
Contextual classes
+
+
Use contextual classes to color table rows or individual cells.
+
+
+
+
+
+
+
+
+
+ Class
+ Description
+
+
+
+
+
+ .active
+
+ Applies the hover color to a particular row or cell
+
+
+
+ .success
+
+ Indicates a successful or positive action
+
+
+
+ .warning
+
+ Indicates a warning that might need attention
+
+
+
+ .danger
+
+ Indicates a dangerous or potentially negative action
+
+
+
+
+
+
+
+
+ #
+ Column heading
+ Column heading
+ Column heading
+
+
+
+
+ 1
+ Column content
+ Column content
+ Column content
+
+
+ 2
+ Column content
+ Column content
+ Column content
+
+
+ 3
+ Column content
+ Column content
+ Column content
+
+
+ 4
+ Column content
+ Column content
+ Column content
+
+
+ 5
+ Column content
+ Column content
+ Column content
+
+
+ 6
+ Column content
+ Column content
+ Column content
+
+
+ 7
+ Column content
+ Column content
+ Column content
+
+
+
+
+
+{% highlight html %}
+
+...
+...
+...
+...
+
+
+
+ ...
+ ...
+ ...
+ ...
+
+{% endhighlight %}
+
+
+
Responsive tables
+
+
Create responsive tables by wrapping any .table
in .table-responsive
to make them scroll
+ horizontally up to small devices (under 768px). When viewing on anything larger than 768px wide, you will not see
+ any difference in these tables.
+
+
+
+
+
+
+ #
+ Table heading
+ Table heading
+ Table heading
+ Table heading
+ Table heading
+ Table heading
+
+
+
+
+ 1
+ Table cell
+ Table cell
+ Table cell
+ Table cell
+ Table cell
+ Table cell
+
+
+ 2
+ Table cell
+ Table cell
+ Table cell
+ Table cell
+ Table cell
+ Table cell
+
+
+ 3
+ Table cell
+ Table cell
+ Table cell
+ Table cell
+ Table cell
+ Table cell
+
+
+
+
+
+
+
+
+
+
+ #
+ Table heading
+ Table heading
+ Table heading
+ Table heading
+ Table heading
+ Table heading
+
+
+
+
+ 1
+ Table cell
+ Table cell
+ Table cell
+ Table cell
+ Table cell
+ Table cell
+
+
+ 2
+ Table cell
+ Table cell
+ Table cell
+ Table cell
+ Table cell
+ Table cell
+
+
+ 3
+ Table cell
+ Table cell
+ Table cell
+ Table cell
+ Table cell
+ Table cell
+
+
+
+
+
+
+
+{% highlight html %}
+
+{% endhighlight %}
+
+
+
+
+
+
+
+
+
+
+
Individual form controls automatically receive some global styling. All textual <input>
,
+ <textarea>
, and <select>
elements with .form-control
are set to width:
+ 100%;
by default. Wrap labels and controls in .form-group
for optimum spacing.
+
+
+
+{% highlight html %}
+
+{% endhighlight %}
+
+
+
+
+
Add .form-inline
for left-aligned and inline-block controls for a compact layout.
+
+
+
Requires custom widths
+
+
Inputs, selects, and textareas are 100% wide by default in Bootstrap. To use the inline form, you'll have to set
+ a width on the form controls used within.
+
+
+
Always add labels
+
+
Screen readers will have trouble with your forms if you don't include a label for every input. For these inline
+ forms, you can hide the labels using the .sr-only
class.
+
+
+
+{% highlight html %}
+
+{% endhighlight %}
+
+
+
+
+
Use Bootstrap's predefined grid classes to align labels and groups of form controls in a horizontal layout by adding
+ .form-horizontal
to the form. Doing so changes .form-group
s to behave as grid rows, so no
+ need for .row
.
+
+
+
+{% highlight html %}
+
+{% endhighlight %}
+
+
+
+
+
Examples of standard form controls supported in an example form layout.
+
+
Inputs
+
+
Most common form control, text-based input fields. Includes support for all HTML5 types: text
, password
,
+ datetime
, datetime-local
, date
, month
, time
, week
,
+ number
, email
, url
, search
, tel
, and
+ color
.
+
+
+
Type declaration required
+
+
Inputs will only be fully styled if their type
is properly declared.
+
+
+
+
+
+{% highlight html %}
+
+{% endhighlight %}
+
+
Textarea
+
+
Form control which supports multiple lines of text. Change rows
attribute as necessary.
+
+
+
+
+
+{% highlight html %}
+
+{% endhighlight %}
+
+
Checkboxes and radios
+
+
Checkboxes are for selecting one or several options in a list while radios are for selecting one option from
+ many.
+
Default (stacked)
+
+
+
+{% highlight html %}
+
+
+
+ Option one is this and that—be sure to include why it's great
+
+
+
+
+
+
+ Option one is this and that—be sure to include why it's great
+
+
+
+
+
+ Option two can be something else and selecting it will deselect option one
+
+
+{% endhighlight %}
+
+
Inline checkboxes
+
+
Use .checkbox-inline
or .radio-inline
class to a series of checkboxes or radios for
+ controls appear on the same line.
+
+
+
+
+ 1
+
+
+ 2
+
+
+ 3
+
+
+
+
+{% highlight html %}
+
+ 1
+
+
+ 2
+
+
+ 3
+
+{% endhighlight %}
+
+
Selects
+
+
Use the default option, or add multiple
to show multiple options at once.
+
+
+
+
+ 1
+ 2
+ 3
+ 4
+ 5
+
+
+
+ 1
+ 2
+ 3
+ 4
+ 5
+
+
+
+
+{% highlight html %}
+
+ 1
+ 2
+ 3
+ 4
+ 5
+
+
+
+ 1
+ 2
+ 3
+ 4
+ 5
+
+{% endhighlight %}
+
+
+
+
+
When you need to place plain text next to a form label within a horizontal form, use the
+ .form-control-static
class on a <p>
.
+
+
+
+{% highlight html %}
+
+
+
+
+{% endhighlight %}
+
+
+
+
+
Provide feedback to users or visitors with basic feedback states on form controls and labels.
+
+
+
+
We remove the default outline
styles on some form controls and apply a box-shadow
in its
+ place for :focus
.
+
+
+
+
+
+
+{% highlight html %}
+
+{% endhighlight %}
+
+
+
+
Add the disabled
attribute on an input to prevent user input and trigger a slightly different look.
+
+
+
+
+
+
+
+{% highlight html %}
+
+{% endhighlight %}
+
+
+
+
Add the disabled
attribute to a <fieldset>
to disable all the controls within the
+ <fieldset>
at once.
+
+
+
Link functionality of <a>
not impacted
+
+
This class will only change the appearance of <a class="btn btn-default">
buttons, not their
+ functionality. Use custom JavaScript to disable links here.
+
+
+
+
Cross-browser compatibility
+
+
While Bootstrap will apply these styles in all browsers, Internet Explorer 9 and below don't actually support the
+ disabled
attribute on a <fieldset>
. Use custom JavaScript to disable the
+ fieldset in these browsers.
+
+
+
+
+{% highlight html %}
+
+
+
+ Disabled input
+
+
+
+ Disabled select menu
+
+ Disabled select
+
+
+
+
+ Can't check this
+
+
+ Submit
+
+
+{% endhighlight %}
+
+
+
+
Bootstrap includes validation styles for error, warning, and success states on form controls. To use, add .has-warning
,
+ .has-error
, or .has-success
to the parent element. Any .control-label
, .form-control
,
+ and .help-block
within that element will receive the validation styles.
+
+
+
+{% highlight html %}
+
+ Input with success
+
+
+
+ Input with warning
+
+
+
+ Input with error
+
+
+{% endhighlight %}
+
+
+
+
+
Set heights using classes like .input-lg
, and set widths using grid column classes like
+ .col-lg-*
.
+
+
Height sizing
+
+
Create larger or smaller form controls that match button sizes.
+
+
+
+{% highlight html %}
+
+
+
+
+
...
+
...
+
...
+{% endhighlight %}
+
+
Column sizing
+
+
Wrap inputs in grid columns, or any custom parent element, to easily enforce desired widths.
+
+
+
+{% highlight html %}
+
+{% endhighlight %}
+
+
Help text
+
+
Block level help text for form controls.
+
+
+
+
+ A block of help text that breaks onto a new line and may extend beyond one line.
+
+
+
+{% highlight html %}
+
A block of help text that breaks onto a new line and may extend beyond one line.
+{% endhighlight %}
+
+
+
+
+
+
+
+
+
+
+
Use any of the available button classes to quickly create a styled button.
+
+
+ Default
+ Primary
+ Success
+ Info
+ Warning
+ Danger
+ Link
+
+ {% highlight html %}
+
+
Default
+
+
+
Primary
+
+
+
Success
+
+
+
Info
+
+
+
Warning
+
+
+
Danger
+
+
+
Link
+ {% endhighlight %}
+
+
+
+
Fancy larger or smaller buttons? Add .btn-lg
, .btn-sm
, or .btn-xs
for
+ additional sizes.
+
+
+
+ Large button
+ Large button
+
+
+ Default button
+ Default button
+
+
+ Small button
+ Small button
+
+
+ Extra small button
+ Extra small button
+
+
+ {% highlight html %}
+
+ Large button
+ Large button
+
+
+ Default button
+ Default button
+
+
+ Small button
+ Small button
+
+
+ Extra small button
+ Extra small button
+
+ {% endhighlight %}
+
+
Create block level buttons—those that span the full width of a parent— by adding
+ .btn-block
.
+
+
+
+ Block level button
+ Block level button
+
+
+ {% highlight html %}
+
Block level button
+
Block level button
+ {% endhighlight %}
+
+
+
+
+
Make buttons look unclickable by fading them back 50%.
+
+
Button element
+
+
Add the disabled
attribute to <button>
buttons.
+
+
+ Primary button
+ Button
+
+ {% highlight html %}
+
Primary button
+
Button
+ {% endhighlight %}
+
+
+
Cross-browser compatibility
+
+
If you add the disabled
attribute to a <button>
, Internet Explorer 9 and
+ below will render text gray with a nasty text-shadow that we cannot fix.
+
+
+
Anchor element
+
+
Add the .disabled
class to <a>
buttons.
+
+
+ Primary link
+ Link
+
+ {% highlight html %}
+
Primary link
+
Link
+ {% endhighlight %}
+
+ We use .disabled
as a utility class here, similar to the common .active
class, so no
+ prefix is required.
+
+
+
+
Link functionality not impacted
+
+
This class will only change the <a>
's appearance, not its functionality. Use custom
+ JavaScript to disable links here.
+
+
+
+
+
+
Use the button classes on an <a>
, <button>
, or <input>
+ element.
+
+
+ Link
+ Button
+
+
+
+ {% highlight html %}
+
Link
+
Button
+
+
+ {% endhighlight %}
+
+
+
Cross-browser rendering
+
+
As a best practice, we highly recommend using the <button>
element whenever
+ possible to ensure matching cross-browser rendering.
+
+
Among other things, there's a Firefox bug
+ that prevents us from setting the line-height
of <input>
-based buttons,
+ causing them to not exactly match the height of other buttons on Firefox.
+
+
+
+
+
+
+
+
+
+
Add classes to an <img>
element to easily style images in any project.
+
+
+
Cross-browser compatibility
+
+
Keep in mind that Internet Explorer 8 lacks support for rounded corners.
+
+
+ {% highlight html %}
+
+
+
+ {% endhighlight %}
+
+
+
+
+
+
+
+
+
+
+
+
Close icon
+
+
Use the generic close icon for dismissing content like modals and alerts.
+
+
+ {% highlight html %}
+
×
+ {% endhighlight %}
+
+
+
Quick floats
+
+
Float an element to the left or right with a class. !important
is included to avoid specificity
+ issues. Classes can also be used as mixins.
+ {% highlight html %}
+
...
+
...
+ {% endhighlight %}
+ {% highlight css %}
+ // Classes
+ .pull-left {
+ float: left !important;
+ }
+ .pull-right {
+ float: right !important;
+ }
+
+ // Usage as mixins
+ .element {
+ .pull-left();
+ }
+ .another-element {
+ .pull-right();
+ }
+ {% endhighlight %}
+
+
+
Not for use in navbars
+
+
To align components in navbars with utility classes, use .navbar-left
or
+ .navbar-right
instead. See the navbar
+ docs for details.
+
+
+
+
Clearfix
+
+
Clear the float
on any element with the .clearfix
class. Utilizes the micro clearfix as popularized by Nicolas
+ Gallagher. Can also be used as a mixin.
+ {% highlight html %}
+
+
...
+ {% endhighlight %}
+ {% highlight css %}
+ // Mixin itself
+ .clearfix() {
+ &:before,
+ &:after {
+ content: " ";
+ display: table;
+ }
+ &:after {
+ clear: both;
+ }
+ }
+
+ // Usage as a Mixin
+ .element {
+ .clearfix();
+ }
+ {% endhighlight %}
+
+
+
Showing and hiding content
+
+
Force an element to be shown or hidden via display
with the use of .show
and .hide
+ classes. These classes use !important
to avoid specificity conflicts, just like the quick floats . They are only available for block level toggling.
+ They can also be used as mixins.
+ {% highlight html %}
+
...
+
...
+ {% endhighlight %}
+ {% highlight css %}
+ // Classes
+ .show {
+ display: block !important;
+ }
+ .hide {
+ display: none !important;
+ }
+
+ // Usage as mixins
+ .element {
+ .show();
+ }
+ .another-element {
+ .hide();
+ }
+ {% endhighlight %}
+
+
+
Screen reader content
+
+
Hide an element to all users except screen readers with .sr-only
. Necessary for following
+ accessibility best practices . Can also be used as
+ a mixin.
+ {% highlight html %}
+
Skip to content
+ {% endhighlight %}
+ {% highlight css %}
+ // Usage as a Mixin
+ .skip-navigation {
+ .sr-only();
+ }
+ {% endhighlight %}
+
+
+
Image replacement
+
+
Utilize the .text-hide
class or mixin to help replace an element's text content with a background
+ image.
+ {% highlight html %}
+
Custom heading
+ {% endhighlight %}
+ {% highlight css %}
+ // Usage as a Mixin
+ .heading {
+ .text-hide();
+ }
+ {% endhighlight %}
+
+
+
+
+
+
+
For faster mobile-friendly development, use these utility classes for showing and hiding content by
+ device via media query. Also included are utility classes for toggling content when printed.
+
+
Try to use these on a limited basis and avoid creating entirely different versions of the same site. Instead, use
+ them to complement each device's presentation. Responsive utilities are currently only available for block
+ and table toggling. Use with inline and table elements is currently not supported.
+
+
+
Available classes
+
+
Use a single or combination of the available classes for toggling content across viewport breakpoints.
+
+
+
+
+
+
+
+ Extra small devices
+ Phones (<768px)
+
+
+ Small devices
+ Tablets (≥768px)
+
+
+ Medium devices
+ Desktops (≥992px)
+
+
+ Large devices
+ Desktops (≥1200px)
+
+
+
+
+
+ .visible-xs
+ Visible
+ Hidden
+ Hidden
+ Hidden
+
+
+ .visible-sm
+ Hidden
+ Visible
+ Hidden
+ Hidden
+
+
+ .visible-md
+ Hidden
+ Hidden
+ Visible
+ Hidden
+
+
+ .visible-lg
+ Hidden
+ Hidden
+ Hidden
+ Visible
+
+
+
+
+ .hidden-xs
+ Hidden
+ Visible
+ Visible
+ Visible
+
+
+ .hidden-sm
+ Visible
+ Hidden
+ Visible
+ Visible
+
+
+ .hidden-md
+ Visible
+ Visible
+ Hidden
+ Visible
+
+
+ .hidden-lg
+ Visible
+ Visible
+ Visible
+ Hidden
+
+
+
+
+
+
+
Print classes
+
+
Similar to the regular responsive classes, use these for toggling content for print.
+
+
+
+
+
+ Class
+ Browser
+ Print
+
+
+
+
+ .visible-print
+ Hidden
+ Visible
+
+
+ .hidden-print
+ Visible
+ Hidden
+
+
+
+
+
+
+
Test cases
+
+
Resize your browser or load on different devices to test the responsive utility classes.
+
+
Visible on...
+
+
Green checkmarks indicate the element is visible in your current viewport.
+
+
+
+ Extra small
+ ✔ Visible on x-small
+
+
+ Small
+ ✔ Visible on small
+
+
+
+ Medium
+ ✔ Visible on medium
+
+
+ Large
+ ✔ Visible on large
+
+
+
+
+ Extra small and small
+ ✔ Visible on x-small and small
+
+
+ Medium and large
+ ✔ Visible on medium and large
+
+
+
+ Extra small and medium
+ ✔ Visible on x-small and medium
+
+
+ Small and large
+ ✔ Visible on small and large
+
+
+
+ Extra small and large
+ ✔ Visible on x-small and large
+
+
+ Small and medium
+ ✔ Visible on small and medium
+
+
+
+
Hidden on...
+
+
Here, green checkmarks indicate the element is hidden in your current viewport.
+
+
+
+ Extra small
+ ✔ Hidden on x-small
+
+
+ Small
+ ✔ Hidden on small
+
+
+
+ Medium
+ ✔ Hidden on medium
+
+
+ Large
+ ✔ Hidden on large
+
+
+
+
+ Extra small and small
+ ✔ Hidden on x-small and small
+
+
+ Medium and large
+ ✔ Hidden on medium and large
+
+
+
+ Extra small and medium
+ ✔ Hidden on x-small and medium
+
+
+ Small and large
+ ✔ Hidden on small and large
+
+
+
+ Extra small and large
+ ✔ Hidden on x-small and large
+
+
+ Small and medium
+ ✔ Hidden on small and medium
+
+
+
+
+
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/customize.html b/vendor/twitter-bootstrap-3/customize.html
new file mode 100644
index 000000000..fce82c1b0
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/customize.html
@@ -0,0 +1,1653 @@
+---
+layout: default
+title: Customize and download
+slug: customize
+lead: Customize Bootstrap's components, LESS variables, and jQuery plugins to get your very own version.
+base_url: "../"
+---
+
+
+
+
+
+
Choose which LESS files to compile into your custom build of Bootstrap. Not sure which files to use?
+ Read through the CSS and Components pages in the docs
+
+
+
+
+
+
+
+
+
Choose which jQuery plugins should be included in your custom JavaScript files. Unsure what to
+ include? Read the JavaScript page in the docs.
+
+
+
+
+
Produces two files
+
+
All checked plugins will be compiled into a readable bootstrap.js
and a minified bootstrap.min.js
.
+ We recommend you use the minified version in production.
+
+
+
+
jQuery required
+
+
All plugins require the latest version of jQuery to be
+ included.
+
+
+
+
+
+
+
Customize LESS variables to define colors, sizes and more inside your custom CSS stylesheets.
+
+
Basics
+
+
Body background
+
+
+
+
@body-bg
+
+
+
Background color applied to <body>
.
+
+
+
+
Typography
+
+
+
+
Code blocks
+
+
+
+
Headings
+
+
+
+
@headings-font-family
+
+
+
Choose a separate font-family for headings.
+
@headings-font-weight
+
+
+
Choose a separate font-weight for headings.
+
+
+
@headings-line-height
+
+
+
Choose a separate line-height for headings.
+
+
+
+
Colors
+
+
+
+
Define custom colors used in several contexts.
+
@brand-primary
+
+
+
Used for primary buttons, panels and more.
+
@brand-success
+
+
+
Used to indicate success.
+
@brand-warning
+
+
+
Used to indicate a warning.
+
@brand-danger
+
+
+
Used to indicate danger.
+
@brand-info
+
+
+
Used to indicate informational content.
+
+
+
Define your preferred colors for standard text and links.
+
@text-color
+
+
+
Global color set on the body.
+
@link-color
+
+
+
Global link color for text.
+
@link-color-hover
+
+
+
Automatically darken links on hover via color function.
+
+
+
+
Media queries breakpoints
+
+
Define the breakpoints at which your layout will change, adapting to different screen sizes.
+
+
+
+
Container sizes
+
+
Define the maximum width of .container
for different screen sizes.
+
+
+
+
@container-tablet
+
+
+
For @screen-sm-min
and up.
+
+
+
@container-desktop
+
+
+
For @screen-md-min
and up.
+
+
+
+
@container-lg-desktop
+
+
+
For @screen-lg-min
and up.
+
+
+
+
Grid system
+
+
Define your custom responsive grid.
+
+
+
+
+
@grid-gutter-width
+
+
+
Padding between columns.
+
+
+
+
@grid-float-breakpoint
+
+
+
Point at which the navbar stops collapsing.
+
+
+
+
Components
+
+
Define common padding and border radius sizes and more.
+
+
+
+
+
+
For each of Bootstrap's buttons, define text, background and border color.
+
+
+
+
+
+
Define colors for form feedback states and, by default, alerts.
+
+
+
+
Alerts
+
+
Define alert colors, border radius, and padding.
+
Border radius
+
@alert-padding
+
+
@alert-border-radius
+
+
+
+
+
Navbar
+
+
+
+
+
Nav
+
+
Default nav
+
+
+
+
+
Tables
+
+
+
+
@table-bg
+
+
+
Default background color used for all tables.
+
@table-bg-accent
+
+
+
Background color used for .table-striped
.
+
+
+
@table-bg-hover
+
+
+
Background color used for .table-hover
.
+
@table-border-color
+
+
+
Border color for table and cell borders.
+
+
+
+
+
+
+
+
Inputs
+
@input-color
+
+
+
Text color for <input>
s
+
@input-bg
+
+
+
<input>
background color
+
@input-border
+
+
+
<input>
border color
+
@input-border-radius
+
+
+
<input>
border radius
+
@input-bg-disabled
+
+
+
<input disabled>
background color
+
+
+
Placeholder
+
@input-color-placeholder
+
+
+
Placeholder text color
+
+
Legend
+
@legend-color
+
+
@legend-border-color
+
+
+
Input groups
+
@input-group-addon-bg
+
+
+
Background color for textual input addons
+
@input-group-addon-border-color
+
+
+
Border color for textual input addons
+
+
+
+
Dropdowns
+
+
+
+
Dropdown menu
+
@dropdown-bg
+
+
+
Dropdown menu background color
+
@dropdown-border
+
+
+
Dropdown menu border color
+
@dropdown-fallback-border
+
+
+
Dropdown menu border color for IE8
+
@dropdown-caret-color
+
+
+
Indicator arrow for showing an element has a dropdown
+
@dropdown-divider-bg
+
+
+
Dropdown divider top border color
+
@dropdown-header-color
+
+
+
Text color for headers within dropdown menus
+
+
+
Dropdown items
+
@dropdown-link-color
+
+
+
Dropdown text color
+
+
@dropdown-link-hover-color
+
+
+
Hovered dropdown menu entry text color
+
@dropdown-link-hover-bg
+
+
+
Hovered dropdown menu entry text color
+
+
@dropdown-link-active-color
+
+
+
Active dropdown menu entry text color
+
@dropdown-link-active-bg
+
+
+
Active dropdown menu entry background color
+
+
@dropdown-link-disabled-color
+
+
+
Disabled dropdown menu entry background color
+
+
+
+
Panels and wells
+
+
Common panel styles
+
+
+
Contextual panel colors
+
+
+
+
Wells
+
@well-bg
+
+
+
Accordion
+
@accordion-border-bg
+
+
+
Badges
+
+
+
+
@badge-color
+
+
+
Badge text color
+
@badge-bg
+
+
+
Badge background color
+
@badge-link-hover-color
+
+
+
Linked badge text color on hover
+
+
+
@badge-active-color
+
+
+
Badge text color in active nav link
+
@badge-active-bg
+
+
+
Badge text color in active nav link
+
+
+
+
Breadcrumbs
+
+
+
+
@breadcrumb-color
+
+
+
Breadcrumb text color
+
+
+
@breadcrumb-bg
+
+
+
Breadcrumb background color
+
+
+
@breadcrumb-active-color
+
+
+
Text color of current page in the breadcrumb
+
+
+
+
Jumbotron
+
+
+
+
Modals
+
+
+
+
@modal-inner-padding
+
+
+
Padding applied to the modal body
+
+
+
@modal-title-padding
+
+
+
Padding applied to the modal title
+
+
+
@modal-title-line-height
+
+
+
Modal title line-height
+
+
+
@modal-content-bg
+
+
+
Background color of modal content area
+
+
+
@modal-content-border-color
+
+
+
Modal content border color
+
+
+
@modal-content-fallback-border-color
+
+
+
Modal content border color for IE8
+
+
+
@modal-backdrop-bg
+
+
+
Modal backdrop background color
+
+
+
@modal-header-border-color
+
+
+
Modal header border color
+
+
+
@modal-footer-border-color
+
+
+
Modal footer border color
+
+
+
+
Carousel
+
@carousel-text-shadow
+
+
@carousel-control-color
+
+
@carousel-indicator-border-color
+
+
@carousel-indicator-active-bg
+
+
@carousel-caption-color
+
+
+
List group
+
+
Background
+
+
+
+
@list-group-bg
+
+
+
Default background color
+
+
+
@list-group-hover-bg
+
+
+
Background color of single list elements on hover
+
+
+
@list-group-active-bg
+
+
+
Background color of active list elements
+
+
+
Borders
+
+
+
+
@list-group-border
+
+
+
Default border color
+
+
+
@list-group-border-radius
+
+
+
List group border radius
+
+
+
@list-group-active-border
+
+
+
Border color of active list elements
+
+
+
@list-group-active-color
+
+
+
Text color of active list elements
+
+
Thumbnails
+
+
+
+
@thumbnail-padding
+
+
+
Padding around the thumbnail image
+
@thumbnail-bg
+
+
+
Thumbnail background color
+
@thumbnail-border
+
+
+
Thumbnail border color
+
@thumbnail-border-radius
+
+
+
Thumbnail border radius
+
+
+
@thumbnail-caption-padding
+
+
+
Padding around the thumbnail caption
+
@thumbnail-caption-color
+
+
+
Custom text color for thumbnail captions
+
+
+
Progress bars
+
+
+
+
@progress-bg
+
+
+
Background color of the whole progress component
+
+
+
@progress-bar-bg
+
+
+
Default progress bar color
+
+
+
@progress-bar-success-bg
+
+
+
Success progress bar color
+
+
+
+
+
@progress-bar-warning-bg
+
+
+
Warning progress bar color
+
+
+
@progress-bar-danger-bg
+
+
+
Danger progress bar color
+
+
+
@progress-bar-info-bg
+
+
+
Info progress bar color
+
+
+
@progress-bar-color
+
+
+
Info progress bar text color
+
+
+
@progress-bar-text-shadow
+
+
+
Info progress bar text shadow
+
+
+
+
+
+
+
@pagination-bg
+
+
+
Background color
+
+
+
@pagination-border
+
+
+
Border color
+
+
+
@pagination-active-bg
+
+
+
Active background color
+
+
+
@pagination-active-color
+
+
+
Active text color
+
+
+
@pagination-disabled-color
+
+
+
Disabled text color
+
+
+
+
+
+
+
@pager-border-radius
+
+
+
Pager border radius
+
+
+
@pager-disabled-color
+
+
+
Pager disabled state color
+
+
+
+
Labels
+
+
+
+
@label-default-bg
+
+
+
Default label background color
+
@label-primary-bg
+
+
+
Primary label background color
+
@label-success-bg
+
+
+
Success label background color
+
+
+
@label-info-bg
+
+
+
Info label background color
+
@label-warning-bg
+
+
+
Warning label background color
+
@label-danger-bg
+
+
+
Danger label background color
+
+
+
+
+
Tooltip styles
+
+
+
+
@tooltip-color
+
+
+
Tooltip text color
+
@tooltip-bg
+
+
+
Tooltip background color
+
+
+
@tooltip-arrow-width
+
+
+
Tooltip arrow width
+
@tooltip-arrow-color
+
+
+
Tooltip arrow color
+
+
+
@tooltip-max-width
+
+
+
Tooltip max width
+
+
+
Popover styles
+
+
+
+
@popover-bg
+
+
+
Popover body background color
+
@popover-title-bg
+
+
+
Popover title background color
+
+
+
@popover-arrow-width
+
+
+
Popover arrow width
+
@popover-arrow-color
+
+
+
Popover arrow color
+
+
+
+
+
@popover-arrow-outer-width
+
+
+
Popover outer arrow width
+
+
+
@popover-arrow-outer-color
+
+
+
Popover outer arrow color
+
+
+
@popover-arrow-outer-fallback-color
+
+
+
Popover outer arrow fallback color
+
+
+
+
+
@popover-max-width
+
+
+
Popover maximum width
+
+
+
@popover-border-color
+
+
+
Popover border color
+
+
+
@popover-fallback-border-color
+
+
+
Popover fallback border color
+
+
+
+
Close button
+
+
+
+
Type
+
+
+
+
@text-muted
+
+
+
Text muted color
+
+
+
@abbr-border-color
+
+
+
Abbreviations and acronyms border color
+
+
+
@headings-small-color
+
+
+
Headings small color
+
+
+
@blockquote-small-color
+
+
+
Blockquote small color
+
+
+
@blockquote-border-color
+
+
+
Blockquote border color
+
+
+
@page-header-border-color
+
+
+
Page header border color
+
+
+
Other
+
+
+
+
@hr-border
+
+
+
Horizontal line color
+
+
+
@component-offset-horizontal
+
+
+
Horizontal offset for forms and lists
+
+
+
+
+
+
+
Hooray! Your custom version of Bootstrap is now ready to be compiled. Just click the button below to
+ finish the process.
+
+
+ Compile and
+ Download
+
+
+
+
+
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/dist/css/bootstrap-theme.css b/vendor/twitter-bootstrap-3/dist/css/bootstrap-theme.css
new file mode 100644
index 000000000..08ed2cc63
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/dist/css/bootstrap-theme.css
@@ -0,0 +1,434 @@
+.btn-default,
+.btn-primary,
+.btn-success,
+.btn-info,
+.btn-warning,
+.btn-danger {
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
+}
+
+.btn-default:active,
+.btn-primary:active,
+.btn-success:active,
+.btn-info:active,
+.btn-warning:active,
+.btn-danger:active,
+.btn-default.active,
+.btn-primary.active,
+.btn-success.active,
+.btn-info.active,
+.btn-warning.active,
+.btn-danger.active {
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+}
+
+.btn:active,
+.btn.active {
+ background-image: none;
+}
+
+.btn-default {
+ text-shadow: 0 1px 0 #fff;
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ffffff), to(#e0e0e0));
+ background-image: -webkit-linear-gradient(top, #ffffff, 0%, #e0e0e0, 100%);
+ background-image: -moz-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);
+ background-image: linear-gradient(to bottom, #ffffff 0%, #e0e0e0 100%);
+ background-repeat: repeat-x;
+ border-color: #dbdbdb;
+ border-color: #ccc;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
+}
+
+.btn-default:hover,
+.btn-default:focus {
+ background-color: #e0e0e0;
+ background-position: 0 -15px;
+}
+
+.btn-default:active,
+.btn-default.active {
+ background-color: #e0e0e0;
+ border-color: #dbdbdb;
+}
+
+.btn-primary {
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#2d6ca2));
+ background-image: -webkit-linear-gradient(top, #428bca, 0%, #2d6ca2, 100%);
+ background-image: -moz-linear-gradient(top, #428bca 0%, #2d6ca2 100%);
+ background-image: linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%);
+ background-repeat: repeat-x;
+ border-color: #2b669a;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);
+}
+
+.btn-primary:hover,
+.btn-primary:focus {
+ background-color: #2d6ca2;
+ background-position: 0 -15px;
+}
+
+.btn-primary:active,
+.btn-primary.active {
+ background-color: #2d6ca2;
+ border-color: #2b669a;
+}
+
+.btn-success {
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5cb85c), to(#419641));
+ background-image: -webkit-linear-gradient(top, #5cb85c, 0%, #419641, 100%);
+ background-image: -moz-linear-gradient(top, #5cb85c 0%, #419641 100%);
+ background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
+ background-repeat: repeat-x;
+ border-color: #3e8f3e;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
+}
+
+.btn-success:hover,
+.btn-success:focus {
+ background-color: #419641;
+ background-position: 0 -15px;
+}
+
+.btn-success:active,
+.btn-success.active {
+ background-color: #419641;
+ border-color: #3e8f3e;
+}
+
+.btn-warning {
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f0ad4e), to(#eb9316));
+ background-image: -webkit-linear-gradient(top, #f0ad4e, 0%, #eb9316, 100%);
+ background-image: -moz-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
+ background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
+ background-repeat: repeat-x;
+ border-color: #e38d13;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
+}
+
+.btn-warning:hover,
+.btn-warning:focus {
+ background-color: #eb9316;
+ background-position: 0 -15px;
+}
+
+.btn-warning:active,
+.btn-warning.active {
+ background-color: #eb9316;
+ border-color: #e38d13;
+}
+
+.btn-danger {
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9534f), to(#c12e2a));
+ background-image: -webkit-linear-gradient(top, #d9534f, 0%, #c12e2a, 100%);
+ background-image: -moz-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
+ background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
+ background-repeat: repeat-x;
+ border-color: #b92c28;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
+}
+
+.btn-danger:hover,
+.btn-danger:focus {
+ background-color: #c12e2a;
+ background-position: 0 -15px;
+}
+
+.btn-danger:active,
+.btn-danger.active {
+ background-color: #c12e2a;
+ border-color: #b92c28;
+}
+
+.btn-info {
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5bc0de), to(#2aabd2));
+ background-image: -webkit-linear-gradient(top, #5bc0de, 0%, #2aabd2, 100%);
+ background-image: -moz-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
+ background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
+ background-repeat: repeat-x;
+ border-color: #28a4c9;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
+}
+
+.btn-info:hover,
+.btn-info:focus {
+ background-color: #2aabd2;
+ background-position: 0 -15px;
+}
+
+.btn-info:active,
+.btn-info.active {
+ background-color: #2aabd2;
+ border-color: #28a4c9;
+}
+
+.thumbnail,
+.img-thumbnail {
+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
+}
+
+.dropdown-menu > li > a:hover,
+.dropdown-menu > li > a:focus,
+.dropdown-menu > .active > a,
+.dropdown-menu > .active > a:hover,
+.dropdown-menu > .active > a:focus {
+ background-color: #357ebd;
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#357ebd));
+ background-image: -webkit-linear-gradient(top, #428bca, 0%, #357ebd, 100%);
+ background-image: -moz-linear-gradient(top, #428bca 0%, #357ebd 100%);
+ background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
+}
+
+.navbar-default {
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ffffff), to(#f8f8f8));
+ background-image: -webkit-linear-gradient(top, #ffffff, 0%, #f8f8f8, 100%);
+ background-image: -moz-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);
+ background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);
+ background-repeat: repeat-x;
+ border-radius: 4px;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);
+}
+
+.navbar-default .navbar-nav > .active > a {
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ebebeb), to(#f3f3f3));
+ background-image: -webkit-linear-gradient(top, #ebebeb, 0%, #f3f3f3, 100%);
+ background-image: -moz-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%);
+ background-image: linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);
+ -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);
+ box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);
+}
+
+.navbar-brand,
+.navbar-nav > li > a {
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);
+}
+
+.navbar-inverse {
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#3c3c3c), to(#222222));
+ background-image: -webkit-linear-gradient(top, #3c3c3c, 0%, #222222, 100%);
+ background-image: -moz-linear-gradient(top, #3c3c3c 0%, #222222 100%);
+ background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
+}
+
+.navbar-inverse .navbar-nav > .active > a {
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#222222), to(#282828));
+ background-image: -webkit-linear-gradient(top, #222222, 0%, #282828, 100%);
+ background-image: -moz-linear-gradient(top, #222222 0%, #282828 100%);
+ background-image: linear-gradient(to bottom, #222222 0%, #282828 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);
+ -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);
+ box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);
+}
+
+.navbar-inverse .navbar-brand,
+.navbar-inverse .navbar-nav > li > a {
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+}
+
+.navbar-static-top,
+.navbar-fixed-top,
+.navbar-fixed-bottom {
+ border-radius: 0;
+}
+
+.alert {
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
+}
+
+.alert-success {
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#dff0d8), to(#c8e5bc));
+ background-image: -webkit-linear-gradient(top, #dff0d8, 0%, #c8e5bc, 100%);
+ background-image: -moz-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
+ background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
+ background-repeat: repeat-x;
+ border-color: #b2dba1;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
+}
+
+.alert-info {
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9edf7), to(#b9def0));
+ background-image: -webkit-linear-gradient(top, #d9edf7, 0%, #b9def0, 100%);
+ background-image: -moz-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
+ background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
+ background-repeat: repeat-x;
+ border-color: #9acfea;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
+}
+
+.alert-warning {
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#fcf8e3), to(#f8efc0));
+ background-image: -webkit-linear-gradient(top, #fcf8e3, 0%, #f8efc0, 100%);
+ background-image: -moz-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
+ background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
+ background-repeat: repeat-x;
+ border-color: #f5e79e;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
+}
+
+.alert-danger {
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f2dede), to(#e7c3c3));
+ background-image: -webkit-linear-gradient(top, #f2dede, 0%, #e7c3c3, 100%);
+ background-image: -moz-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
+ background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
+ background-repeat: repeat-x;
+ border-color: #dca7a7;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
+}
+
+.progress {
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ebebeb), to(#f5f5f5));
+ background-image: -webkit-linear-gradient(top, #ebebeb, 0%, #f5f5f5, 100%);
+ background-image: -moz-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
+ background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
+}
+
+.progress-bar {
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#3071a9));
+ background-image: -webkit-linear-gradient(top, #428bca, 0%, #3071a9, 100%);
+ background-image: -moz-linear-gradient(top, #428bca 0%, #3071a9 100%);
+ background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);
+}
+
+.progress-bar-success {
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5cb85c), to(#449d44));
+ background-image: -webkit-linear-gradient(top, #5cb85c, 0%, #449d44, 100%);
+ background-image: -moz-linear-gradient(top, #5cb85c 0%, #449d44 100%);
+ background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
+}
+
+.progress-bar-info {
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5bc0de), to(#31b0d5));
+ background-image: -webkit-linear-gradient(top, #5bc0de, 0%, #31b0d5, 100%);
+ background-image: -moz-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
+ background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
+}
+
+.progress-bar-warning {
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f0ad4e), to(#ec971f));
+ background-image: -webkit-linear-gradient(top, #f0ad4e, 0%, #ec971f, 100%);
+ background-image: -moz-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
+ background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
+}
+
+.progress-bar-danger {
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9534f), to(#c9302c));
+ background-image: -webkit-linear-gradient(top, #d9534f, 0%, #c9302c, 100%);
+ background-image: -moz-linear-gradient(top, #d9534f 0%, #c9302c 100%);
+ background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
+}
+
+.list-group {
+ border-radius: 4px;
+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
+}
+
+.list-group-item.active,
+.list-group-item.active:hover,
+.list-group-item.active:focus {
+ text-shadow: 0 -1px 0 #3071a9;
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#3278b3));
+ background-image: -webkit-linear-gradient(top, #428bca, 0%, #3278b3, 100%);
+ background-image: -moz-linear-gradient(top, #428bca 0%, #3278b3 100%);
+ background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%);
+ background-repeat: repeat-x;
+ border-color: #3278b3;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);
+}
+
+.panel {
+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+}
+
+.panel-default > .panel-heading {
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f5f5f5), to(#e8e8e8));
+ background-image: -webkit-linear-gradient(top, #f5f5f5, 0%, #e8e8e8, 100%);
+ background-image: -moz-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
+ background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
+}
+
+.panel-primary > .panel-heading {
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#357ebd));
+ background-image: -webkit-linear-gradient(top, #428bca, 0%, #357ebd, 100%);
+ background-image: -moz-linear-gradient(top, #428bca 0%, #357ebd 100%);
+ background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
+}
+
+.panel-success > .panel-heading {
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#dff0d8), to(#d0e9c6));
+ background-image: -webkit-linear-gradient(top, #dff0d8, 0%, #d0e9c6, 100%);
+ background-image: -moz-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
+ background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
+}
+
+.panel-info > .panel-heading {
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9edf7), to(#c4e3f3));
+ background-image: -webkit-linear-gradient(top, #d9edf7, 0%, #c4e3f3, 100%);
+ background-image: -moz-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
+ background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
+}
+
+.panel-warning > .panel-heading {
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#fcf8e3), to(#faf2cc));
+ background-image: -webkit-linear-gradient(top, #fcf8e3, 0%, #faf2cc, 100%);
+ background-image: -moz-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
+ background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
+}
+
+.panel-danger > .panel-heading {
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f2dede), to(#ebcccc));
+ background-image: -webkit-linear-gradient(top, #f2dede, 0%, #ebcccc, 100%);
+ background-image: -moz-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
+ background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
+}
+
+.well {
+ background-image: -webkit-gradient(linear, left 0%, left 100%, from(#e8e8e8), to(#f5f5f5));
+ background-image: -webkit-linear-gradient(top, #e8e8e8, 0%, #f5f5f5, 100%);
+ background-image: -moz-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
+ background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
+ background-repeat: repeat-x;
+ border-color: #dcdcdc;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
+ -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);
+ box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);
+}
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/dist/css/bootstrap-theme.min.css b/vendor/twitter-bootstrap-3/dist/css/bootstrap-theme.min.css
new file mode 100644
index 000000000..3bb6a6df1
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/dist/css/bootstrap-theme.min.css
@@ -0,0 +1,394 @@
+.btn-default, .btn-primary, .btn-success, .btn-info, .btn-warning, .btn-danger {
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075)
+}
+
+.btn-default:active, .btn-primary:active, .btn-success:active, .btn-info:active, .btn-warning:active, .btn-danger:active, .btn-default.active, .btn-primary.active, .btn-success.active, .btn-info.active, .btn-warning.active, .btn-danger.active {
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125)
+}
+
+.btn:active, .btn.active {
+ background-image: none
+}
+
+.btn-default {
+ text-shadow: 0 1px 0 #fff;
+ background-image: -webkit-gradient(linear, left 0, left 100%, from(#fff), to(#e0e0e0));
+ background-image: -webkit-linear-gradient(top, #fff, 0%, #e0e0e0, 100%);
+ background-image: -moz-linear-gradient(top, #fff 0, #e0e0e0 100%);
+ background-image: linear-gradient(to bottom, #fff 0, #e0e0e0 100%);
+ background-repeat: repeat-x;
+ border-color: #dbdbdb;
+ border-color: #ccc;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0)
+}
+
+.btn-default:hover, .btn-default:focus {
+ background-color: #e0e0e0;
+ background-position: 0 -15px
+}
+
+.btn-default:active, .btn-default.active {
+ background-color: #e0e0e0;
+ border-color: #dbdbdb
+}
+
+.btn-primary {
+ background-image: -webkit-gradient(linear, left 0, left 100%, from(#428bca), to(#2d6ca2));
+ background-image: -webkit-linear-gradient(top, #428bca, 0%, #2d6ca2, 100%);
+ background-image: -moz-linear-gradient(top, #428bca 0, #2d6ca2 100%);
+ background-image: linear-gradient(to bottom, #428bca 0, #2d6ca2 100%);
+ background-repeat: repeat-x;
+ border-color: #2b669a;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0)
+}
+
+.btn-primary:hover, .btn-primary:focus {
+ background-color: #2d6ca2;
+ background-position: 0 -15px
+}
+
+.btn-primary:active, .btn-primary.active {
+ background-color: #2d6ca2;
+ border-color: #2b669a
+}
+
+.btn-success {
+ background-image: -webkit-gradient(linear, left 0, left 100%, from(#5cb85c), to(#419641));
+ background-image: -webkit-linear-gradient(top, #5cb85c, 0%, #419641, 100%);
+ background-image: -moz-linear-gradient(top, #5cb85c 0, #419641 100%);
+ background-image: linear-gradient(to bottom, #5cb85c 0, #419641 100%);
+ background-repeat: repeat-x;
+ border-color: #3e8f3e;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0)
+}
+
+.btn-success:hover, .btn-success:focus {
+ background-color: #419641;
+ background-position: 0 -15px
+}
+
+.btn-success:active, .btn-success.active {
+ background-color: #419641;
+ border-color: #3e8f3e
+}
+
+.btn-warning {
+ background-image: -webkit-gradient(linear, left 0, left 100%, from(#f0ad4e), to(#eb9316));
+ background-image: -webkit-linear-gradient(top, #f0ad4e, 0%, #eb9316, 100%);
+ background-image: -moz-linear-gradient(top, #f0ad4e 0, #eb9316 100%);
+ background-image: linear-gradient(to bottom, #f0ad4e 0, #eb9316 100%);
+ background-repeat: repeat-x;
+ border-color: #e38d13;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0)
+}
+
+.btn-warning:hover, .btn-warning:focus {
+ background-color: #eb9316;
+ background-position: 0 -15px
+}
+
+.btn-warning:active, .btn-warning.active {
+ background-color: #eb9316;
+ border-color: #e38d13
+}
+
+.btn-danger {
+ background-image: -webkit-gradient(linear, left 0, left 100%, from(#d9534f), to(#c12e2a));
+ background-image: -webkit-linear-gradient(top, #d9534f, 0%, #c12e2a, 100%);
+ background-image: -moz-linear-gradient(top, #d9534f 0, #c12e2a 100%);
+ background-image: linear-gradient(to bottom, #d9534f 0, #c12e2a 100%);
+ background-repeat: repeat-x;
+ border-color: #b92c28;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0)
+}
+
+.btn-danger:hover, .btn-danger:focus {
+ background-color: #c12e2a;
+ background-position: 0 -15px
+}
+
+.btn-danger:active, .btn-danger.active {
+ background-color: #c12e2a;
+ border-color: #b92c28
+}
+
+.btn-info {
+ background-image: -webkit-gradient(linear, left 0, left 100%, from(#5bc0de), to(#2aabd2));
+ background-image: -webkit-linear-gradient(top, #5bc0de, 0%, #2aabd2, 100%);
+ background-image: -moz-linear-gradient(top, #5bc0de 0, #2aabd2 100%);
+ background-image: linear-gradient(to bottom, #5bc0de 0, #2aabd2 100%);
+ background-repeat: repeat-x;
+ border-color: #28a4c9;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0)
+}
+
+.btn-info:hover, .btn-info:focus {
+ background-color: #2aabd2;
+ background-position: 0 -15px
+}
+
+.btn-info:active, .btn-info.active {
+ background-color: #2aabd2;
+ border-color: #28a4c9
+}
+
+.thumbnail, .img-thumbnail {
+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075)
+}
+
+.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus, .dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus {
+ background-color: #357ebd;
+ background-image: -webkit-gradient(linear, left 0, left 100%, from(#428bca), to(#357ebd));
+ background-image: -webkit-linear-gradient(top, #428bca, 0%, #357ebd, 100%);
+ background-image: -moz-linear-gradient(top, #428bca 0, #357ebd 100%);
+ background-image: linear-gradient(to bottom, #428bca 0, #357ebd 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0)
+}
+
+.navbar-default {
+ background-image: -webkit-gradient(linear, left 0, left 100%, from(#fff), to(#f8f8f8));
+ background-image: -webkit-linear-gradient(top, #fff, 0%, #f8f8f8, 100%);
+ background-image: -moz-linear-gradient(top, #fff 0, #f8f8f8 100%);
+ background-image: linear-gradient(to bottom, #fff 0, #f8f8f8 100%);
+ background-repeat: repeat-x;
+ border-radius: 4px;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075)
+}
+
+.navbar-default .navbar-nav > .active > a {
+ background-image: -webkit-gradient(linear, left 0, left 100%, from(#ebebeb), to(#f3f3f3));
+ background-image: -webkit-linear-gradient(top, #ebebeb, 0%, #f3f3f3, 100%);
+ background-image: -moz-linear-gradient(top, #ebebeb 0, #f3f3f3 100%);
+ background-image: linear-gradient(to bottom, #ebebeb 0, #f3f3f3 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);
+ -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);
+ box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075)
+}
+
+.navbar-brand, .navbar-nav > li > a {
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25)
+}
+
+.navbar-inverse {
+ background-image: -webkit-gradient(linear, left 0, left 100%, from(#3c3c3c), to(#222));
+ background-image: -webkit-linear-gradient(top, #3c3c3c, 0%, #222, 100%);
+ background-image: -moz-linear-gradient(top, #3c3c3c 0, #222 100%);
+ background-image: linear-gradient(to bottom, #3c3c3c 0, #222 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0)
+}
+
+.navbar-inverse .navbar-nav > .active > a {
+ background-image: -webkit-gradient(linear, left 0, left 100%, from(#222), to(#282828));
+ background-image: -webkit-linear-gradient(top, #222, 0%, #282828, 100%);
+ background-image: -moz-linear-gradient(top, #222 0, #282828 100%);
+ background-image: linear-gradient(to bottom, #222 0, #282828 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);
+ -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);
+ box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25)
+}
+
+.navbar-inverse .navbar-brand, .navbar-inverse .navbar-nav > li > a {
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25)
+}
+
+.navbar-static-top, .navbar-fixed-top, .navbar-fixed-bottom {
+ border-radius: 0
+}
+
+.alert {
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05)
+}
+
+.alert-success {
+ background-image: -webkit-gradient(linear, left 0, left 100%, from(#dff0d8), to(#c8e5bc));
+ background-image: -webkit-linear-gradient(top, #dff0d8, 0%, #c8e5bc, 100%);
+ background-image: -moz-linear-gradient(top, #dff0d8 0, #c8e5bc 100%);
+ background-image: linear-gradient(to bottom, #dff0d8 0, #c8e5bc 100%);
+ background-repeat: repeat-x;
+ border-color: #b2dba1;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0)
+}
+
+.alert-info {
+ background-image: -webkit-gradient(linear, left 0, left 100%, from(#d9edf7), to(#b9def0));
+ background-image: -webkit-linear-gradient(top, #d9edf7, 0%, #b9def0, 100%);
+ background-image: -moz-linear-gradient(top, #d9edf7 0, #b9def0 100%);
+ background-image: linear-gradient(to bottom, #d9edf7 0, #b9def0 100%);
+ background-repeat: repeat-x;
+ border-color: #9acfea;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0)
+}
+
+.alert-warning {
+ background-image: -webkit-gradient(linear, left 0, left 100%, from(#fcf8e3), to(#f8efc0));
+ background-image: -webkit-linear-gradient(top, #fcf8e3, 0%, #f8efc0, 100%);
+ background-image: -moz-linear-gradient(top, #fcf8e3 0, #f8efc0 100%);
+ background-image: linear-gradient(to bottom, #fcf8e3 0, #f8efc0 100%);
+ background-repeat: repeat-x;
+ border-color: #f5e79e;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0)
+}
+
+.alert-danger {
+ background-image: -webkit-gradient(linear, left 0, left 100%, from(#f2dede), to(#e7c3c3));
+ background-image: -webkit-linear-gradient(top, #f2dede, 0%, #e7c3c3, 100%);
+ background-image: -moz-linear-gradient(top, #f2dede 0, #e7c3c3 100%);
+ background-image: linear-gradient(to bottom, #f2dede 0, #e7c3c3 100%);
+ background-repeat: repeat-x;
+ border-color: #dca7a7;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0)
+}
+
+.progress {
+ background-image: -webkit-gradient(linear, left 0, left 100%, from(#ebebeb), to(#f5f5f5));
+ background-image: -webkit-linear-gradient(top, #ebebeb, 0%, #f5f5f5, 100%);
+ background-image: -moz-linear-gradient(top, #ebebeb 0, #f5f5f5 100%);
+ background-image: linear-gradient(to bottom, #ebebeb 0, #f5f5f5 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0)
+}
+
+.progress-bar {
+ background-image: -webkit-gradient(linear, left 0, left 100%, from(#428bca), to(#3071a9));
+ background-image: -webkit-linear-gradient(top, #428bca, 0%, #3071a9, 100%);
+ background-image: -moz-linear-gradient(top, #428bca 0, #3071a9 100%);
+ background-image: linear-gradient(to bottom, #428bca 0, #3071a9 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0)
+}
+
+.progress-bar-success {
+ background-image: -webkit-gradient(linear, left 0, left 100%, from(#5cb85c), to(#449d44));
+ background-image: -webkit-linear-gradient(top, #5cb85c, 0%, #449d44, 100%);
+ background-image: -moz-linear-gradient(top, #5cb85c 0, #449d44 100%);
+ background-image: linear-gradient(to bottom, #5cb85c 0, #449d44 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0)
+}
+
+.progress-bar-info {
+ background-image: -webkit-gradient(linear, left 0, left 100%, from(#5bc0de), to(#31b0d5));
+ background-image: -webkit-linear-gradient(top, #5bc0de, 0%, #31b0d5, 100%);
+ background-image: -moz-linear-gradient(top, #5bc0de 0, #31b0d5 100%);
+ background-image: linear-gradient(to bottom, #5bc0de 0, #31b0d5 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0)
+}
+
+.progress-bar-warning {
+ background-image: -webkit-gradient(linear, left 0, left 100%, from(#f0ad4e), to(#ec971f));
+ background-image: -webkit-linear-gradient(top, #f0ad4e, 0%, #ec971f, 100%);
+ background-image: -moz-linear-gradient(top, #f0ad4e 0, #ec971f 100%);
+ background-image: linear-gradient(to bottom, #f0ad4e 0, #ec971f 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0)
+}
+
+.progress-bar-danger {
+ background-image: -webkit-gradient(linear, left 0, left 100%, from(#d9534f), to(#c9302c));
+ background-image: -webkit-linear-gradient(top, #d9534f, 0%, #c9302c, 100%);
+ background-image: -moz-linear-gradient(top, #d9534f 0, #c9302c 100%);
+ background-image: linear-gradient(to bottom, #d9534f 0, #c9302c 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0)
+}
+
+.list-group {
+ border-radius: 4px;
+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075)
+}
+
+.list-group-item.active, .list-group-item.active:hover, .list-group-item.active:focus {
+ text-shadow: 0 -1px 0 #3071a9;
+ background-image: -webkit-gradient(linear, left 0, left 100%, from(#428bca), to(#3278b3));
+ background-image: -webkit-linear-gradient(top, #428bca, 0%, #3278b3, 100%);
+ background-image: -moz-linear-gradient(top, #428bca 0, #3278b3 100%);
+ background-image: linear-gradient(to bottom, #428bca 0, #3278b3 100%);
+ background-repeat: repeat-x;
+ border-color: #3278b3;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0)
+}
+
+.panel {
+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05)
+}
+
+.panel-default > .panel-heading {
+ background-image: -webkit-gradient(linear, left 0, left 100%, from(#f5f5f5), to(#e8e8e8));
+ background-image: -webkit-linear-gradient(top, #f5f5f5, 0%, #e8e8e8, 100%);
+ background-image: -moz-linear-gradient(top, #f5f5f5 0, #e8e8e8 100%);
+ background-image: linear-gradient(to bottom, #f5f5f5 0, #e8e8e8 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0)
+}
+
+.panel-primary > .panel-heading {
+ background-image: -webkit-gradient(linear, left 0, left 100%, from(#428bca), to(#357ebd));
+ background-image: -webkit-linear-gradient(top, #428bca, 0%, #357ebd, 100%);
+ background-image: -moz-linear-gradient(top, #428bca 0, #357ebd 100%);
+ background-image: linear-gradient(to bottom, #428bca 0, #357ebd 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0)
+}
+
+.panel-success > .panel-heading {
+ background-image: -webkit-gradient(linear, left 0, left 100%, from(#dff0d8), to(#d0e9c6));
+ background-image: -webkit-linear-gradient(top, #dff0d8, 0%, #d0e9c6, 100%);
+ background-image: -moz-linear-gradient(top, #dff0d8 0, #d0e9c6 100%);
+ background-image: linear-gradient(to bottom, #dff0d8 0, #d0e9c6 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0)
+}
+
+.panel-info > .panel-heading {
+ background-image: -webkit-gradient(linear, left 0, left 100%, from(#d9edf7), to(#c4e3f3));
+ background-image: -webkit-linear-gradient(top, #d9edf7, 0%, #c4e3f3, 100%);
+ background-image: -moz-linear-gradient(top, #d9edf7 0, #c4e3f3 100%);
+ background-image: linear-gradient(to bottom, #d9edf7 0, #c4e3f3 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0)
+}
+
+.panel-warning > .panel-heading {
+ background-image: -webkit-gradient(linear, left 0, left 100%, from(#fcf8e3), to(#faf2cc));
+ background-image: -webkit-linear-gradient(top, #fcf8e3, 0%, #faf2cc, 100%);
+ background-image: -moz-linear-gradient(top, #fcf8e3 0, #faf2cc 100%);
+ background-image: linear-gradient(to bottom, #fcf8e3 0, #faf2cc 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0)
+}
+
+.panel-danger > .panel-heading {
+ background-image: -webkit-gradient(linear, left 0, left 100%, from(#f2dede), to(#ebcccc));
+ background-image: -webkit-linear-gradient(top, #f2dede, 0%, #ebcccc, 100%);
+ background-image: -moz-linear-gradient(top, #f2dede 0, #ebcccc 100%);
+ background-image: linear-gradient(to bottom, #f2dede 0, #ebcccc 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0)
+}
+
+.well {
+ background-image: -webkit-gradient(linear, left 0, left 100%, from(#e8e8e8), to(#f5f5f5));
+ background-image: -webkit-linear-gradient(top, #e8e8e8, 0%, #f5f5f5, 100%);
+ background-image: -moz-linear-gradient(top, #e8e8e8 0, #f5f5f5 100%);
+ background-image: linear-gradient(to bottom, #e8e8e8 0, #f5f5f5 100%);
+ background-repeat: repeat-x;
+ border-color: #dcdcdc;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
+ -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);
+ box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1)
+}
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/dist/css/bootstrap.css b/vendor/twitter-bootstrap-3/dist/css/bootstrap.css
new file mode 100644
index 000000000..cb1f7ec3e
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/dist/css/bootstrap.css
@@ -0,0 +1,7090 @@
+/*!
+ * Bootstrap v3.0.0
+ *
+ * Copyright 2013 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world by @mdo and @fat.
+ */
+
+/*! normalize.css v2.1.0 | MIT License | git.io/normalize */
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+nav,
+section,
+summary {
+ display: block;
+}
+
+audio,
+canvas,
+video {
+ display: inline-block;
+}
+
+audio:not([controls]) {
+ display: none;
+ height: 0;
+}
+
+[hidden] {
+ display: none;
+}
+
+html {
+ font-family: sans-serif;
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+}
+
+body {
+ margin: 0;
+}
+
+a:focus {
+ outline: thin dotted;
+}
+
+a:active,
+a:hover {
+ outline: 0;
+}
+
+h1 {
+ margin: 0.67em 0;
+ font-size: 2em;
+}
+
+abbr[title] {
+ border-bottom: 1px dotted;
+}
+
+b,
+strong {
+ font-weight: bold;
+}
+
+dfn {
+ font-style: italic;
+}
+
+hr {
+ height: 0;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+}
+
+mark {
+ color: #000;
+ background: #ff0;
+}
+
+code,
+kbd,
+pre,
+samp {
+ font-family: monospace, serif;
+ font-size: 1em;
+}
+
+pre {
+ white-space: pre-wrap;
+}
+
+q {
+ quotes: "\201C" "\201D" "\2018" "\2019";
+}
+
+small {
+ font-size: 80%;
+}
+
+sub,
+sup {
+ position: relative;
+ font-size: 75%;
+ line-height: 0;
+ vertical-align: baseline;
+}
+
+sup {
+ top: -0.5em;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+img {
+ border: 0;
+}
+
+svg:not(:root) {
+ overflow: hidden;
+}
+
+figure {
+ margin: 0;
+}
+
+fieldset {
+ padding: 0.35em 0.625em 0.75em;
+ margin: 0 2px;
+ border: 1px solid #c0c0c0;
+}
+
+legend {
+ padding: 0;
+ border: 0;
+}
+
+button,
+input,
+select,
+textarea {
+ margin: 0;
+ font-family: inherit;
+ font-size: 100%;
+}
+
+button,
+input {
+ line-height: normal;
+}
+
+button,
+select {
+ text-transform: none;
+}
+
+button,
+html input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+ cursor: pointer;
+ -webkit-appearance: button;
+}
+
+button[disabled],
+html input[disabled] {
+ cursor: default;
+}
+
+input[type="checkbox"],
+input[type="radio"] {
+ padding: 0;
+ box-sizing: border-box;
+}
+
+input[type="search"] {
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ -webkit-appearance: textfield;
+}
+
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+ padding: 0;
+ border: 0;
+}
+
+textarea {
+ overflow: auto;
+ vertical-align: top;
+}
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+@media print {
+ * {
+ color: #000 !important;
+ text-shadow: none !important;
+ background: transparent !important;
+ box-shadow: none !important;
+ }
+
+ a,
+ a:visited {
+ text-decoration: underline;
+ }
+
+ a[href]:after {
+ content: " (" attr(href) ")";
+ }
+
+ abbr[title]:after {
+ content: " (" attr(title) ")";
+ }
+
+ .ir a:after,
+ a[href^="javascript:"]:after,
+ a[href^="#"]:after {
+ content: "";
+ }
+
+ pre,
+ blockquote {
+ border: 1px solid #999;
+ page-break-inside: avoid;
+ }
+
+ thead {
+ display: table-header-group;
+ }
+
+ tr,
+ img {
+ page-break-inside: avoid;
+ }
+
+ img {
+ max-width: 100% !important;
+ }
+
+ @page {
+ margin: 2cm .5cm;
+ }
+
+ p,
+ h2,
+ h3 {
+ orphans: 3;
+ widows: 3;
+ }
+
+ h2,
+ h3 {
+ page-break-after: avoid;
+ }
+
+ .navbar {
+ display: none;
+ }
+
+ .table td,
+ .table th {
+ background-color: #fff !important;
+ }
+
+ .btn > .caret,
+ .dropup > .btn > .caret {
+ border-top-color: #000 !important;
+ }
+
+ .label {
+ border: 1px solid #000;
+ }
+
+ .table {
+ border-collapse: collapse !important;
+ }
+
+ .table-bordered th,
+ .table-bordered td {
+ border: 1px solid #ddd !important;
+ }
+}
+
+*,
+*:before,
+*:after {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+html {
+ font-size: 62.5%;
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+
+body {
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 14px;
+ line-height: 1.428571429;
+ color: #333333;
+ background-color: #ffffff;
+}
+
+input,
+button,
+select,
+textarea {
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+}
+
+button,
+input,
+select[multiple],
+textarea {
+ background-image: none;
+}
+
+a {
+ color: #428bca;
+ text-decoration: none;
+}
+
+a:hover,
+a:focus {
+ color: #2a6496;
+ text-decoration: underline;
+}
+
+a:focus {
+ outline: thin dotted #333;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+
+img {
+ vertical-align: middle;
+}
+
+.img-responsive {
+ display: block;
+ height: auto;
+ max-width: 100%;
+}
+
+.img-rounded {
+ border-radius: 6px;
+}
+
+.img-thumbnail {
+ display: inline-block;
+ height: auto;
+ max-width: 100%;
+ padding: 4px;
+ line-height: 1.428571429;
+ background-color: #ffffff;
+ border: 1px solid #dddddd;
+ border-radius: 4px;
+ -webkit-transition: all 0.2s ease-in-out;
+ transition: all 0.2s ease-in-out;
+}
+
+.img-circle {
+ border-radius: 50%;
+}
+
+hr {
+ margin-top: 20px;
+ margin-bottom: 20px;
+ border: 0;
+ border-top: 1px solid #eeeeee;
+}
+
+.sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ margin: -1px;
+ overflow: hidden;
+ clip: rect(0 0 0 0);
+ border: 0;
+}
+
+p {
+ margin: 0 0 10px;
+}
+
+.lead {
+ margin-bottom: 20px;
+ font-size: 16.099999999999998px;
+ font-weight: 200;
+ line-height: 1.4;
+}
+
+@media (min-width: 768px) {
+ .lead {
+ font-size: 21px;
+ }
+}
+
+small {
+ font-size: 85%;
+}
+
+cite {
+ font-style: normal;
+}
+
+.text-muted {
+ color: #999999;
+}
+
+.text-primary {
+ color: #428bca;
+}
+
+.text-warning {
+ color: #c09853;
+}
+
+.text-danger {
+ color: #b94a48;
+}
+
+.text-success {
+ color: #468847;
+}
+
+.text-info {
+ color: #3a87ad;
+}
+
+.text-left {
+ text-align: left;
+}
+
+.text-right {
+ text-align: right;
+}
+
+.text-center {
+ text-align: center;
+}
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+.h1,
+.h2,
+.h3,
+.h4,
+.h5,
+.h6 {
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-weight: 500;
+ line-height: 1.1;
+}
+
+h1 small,
+h2 small,
+h3 small,
+h4 small,
+h5 small,
+h6 small,
+.h1 small,
+.h2 small,
+.h3 small,
+.h4 small,
+.h5 small,
+.h6 small {
+ font-weight: normal;
+ line-height: 1;
+ color: #999999;
+}
+
+h1,
+h2,
+h3 {
+ margin-top: 20px;
+ margin-bottom: 10px;
+}
+
+h1 small,
+h2 small,
+h3 small {
+ font-size: 65%;
+}
+
+h4,
+h5,
+h6 {
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+
+h4 small,
+h5 small,
+h6 small {
+ font-size: 75%;
+}
+
+h1,
+.h1 {
+ font-size: 36px;
+}
+
+h2,
+.h2 {
+ font-size: 30px;
+}
+
+h3,
+.h3 {
+ font-size: 24px;
+}
+
+h4,
+.h4 {
+ font-size: 18px;
+}
+
+h5,
+.h5 {
+ font-size: 14px;
+}
+
+h6,
+.h6 {
+ font-size: 12px;
+}
+
+.page-header {
+ padding-bottom: 9px;
+ margin: 40px 0 20px;
+ border-bottom: 1px solid #eeeeee;
+}
+
+ul,
+ol {
+ margin-top: 0;
+ margin-bottom: 10px;
+}
+
+ul ul,
+ol ul,
+ul ol,
+ol ol {
+ margin-bottom: 0;
+}
+
+.list-unstyled {
+ padding-left: 0;
+ list-style: none;
+}
+
+.list-inline {
+ padding-left: 0;
+ list-style: none;
+}
+
+.list-inline > li {
+ display: inline-block;
+ padding-right: 5px;
+ padding-left: 5px;
+}
+
+dl {
+ margin-bottom: 20px;
+}
+
+dt,
+dd {
+ line-height: 1.428571429;
+}
+
+dt {
+ font-weight: bold;
+}
+
+dd {
+ margin-left: 0;
+}
+
+@media (min-width: 768px) {
+ .dl-horizontal dt {
+ float: left;
+ width: 160px;
+ overflow: hidden;
+ clear: left;
+ text-align: right;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+
+ .dl-horizontal dd {
+ margin-left: 180px;
+ }
+
+ .dl-horizontal dd:before,
+ .dl-horizontal dd:after {
+ display: table;
+ content: " ";
+ }
+
+ .dl-horizontal dd:after {
+ clear: both;
+ }
+
+ .dl-horizontal dd:before,
+ .dl-horizontal dd:after {
+ display: table;
+ content: " ";
+ }
+
+ .dl-horizontal dd:after {
+ clear: both;
+ }
+}
+
+abbr[title],
+abbr[data-original-title] {
+ cursor: help;
+ border-bottom: 1px dotted #999999;
+}
+
+abbr.initialism {
+ font-size: 90%;
+ text-transform: uppercase;
+}
+
+blockquote {
+ padding: 10px 20px;
+ margin: 0 0 20px;
+ border-left: 5px solid #eeeeee;
+}
+
+blockquote p {
+ font-size: 17.5px;
+ font-weight: 300;
+ line-height: 1.25;
+}
+
+blockquote p:last-child {
+ margin-bottom: 0;
+}
+
+blockquote small {
+ display: block;
+ line-height: 1.428571429;
+ color: #999999;
+}
+
+blockquote small:before {
+ content: '\2014 \00A0';
+}
+
+blockquote.pull-right {
+ padding-right: 15px;
+ padding-left: 0;
+ border-right: 5px solid #eeeeee;
+ border-left: 0;
+}
+
+blockquote.pull-right p,
+blockquote.pull-right small {
+ text-align: right;
+}
+
+blockquote.pull-right small:before {
+ content: '';
+}
+
+blockquote.pull-right small:after {
+ content: '\00A0 \2014';
+}
+
+q:before,
+q:after,
+blockquote:before,
+blockquote:after {
+ content: "";
+}
+
+address {
+ display: block;
+ margin-bottom: 20px;
+ font-style: normal;
+ line-height: 1.428571429;
+}
+
+code,
+pre {
+ font-family: Monaco, Menlo, Consolas, "Courier New", monospace;
+}
+
+code {
+ padding: 2px 4px;
+ font-size: 90%;
+ color: #c7254e;
+ white-space: nowrap;
+ background-color: #f9f2f4;
+ border-radius: 4px;
+}
+
+pre {
+ display: block;
+ padding: 9.5px;
+ margin: 0 0 10px;
+ font-size: 13px;
+ line-height: 1.428571429;
+ color: #333333;
+ word-break: break-all;
+ word-wrap: break-word;
+ background-color: #f5f5f5;
+ border: 1px solid #cccccc;
+ border-radius: 4px;
+}
+
+pre.prettyprint {
+ margin-bottom: 20px;
+}
+
+pre code {
+ padding: 0;
+ font-size: inherit;
+ color: inherit;
+ white-space: pre-wrap;
+ background-color: transparent;
+ border: 0;
+}
+
+.pre-scrollable {
+ max-height: 340px;
+ overflow-y: scroll;
+}
+
+.container {
+ padding-right: 15px;
+ padding-left: 15px;
+ margin-right: auto;
+ margin-left: auto;
+}
+
+.container:before,
+.container:after {
+ display: table;
+ content: " ";
+}
+
+.container:after {
+ clear: both;
+}
+
+.container:before,
+.container:after {
+ display: table;
+ content: " ";
+}
+
+.container:after {
+ clear: both;
+}
+
+.row {
+ margin-right: -15px;
+ margin-left: -15px;
+}
+
+.row:before,
+.row:after {
+ display: table;
+ content: " ";
+}
+
+.row:after {
+ clear: both;
+}
+
+.row:before,
+.row:after {
+ display: table;
+ content: " ";
+}
+
+.row:after {
+ clear: both;
+}
+
+.col-xs-1,
+.col-xs-2,
+.col-xs-3,
+.col-xs-4,
+.col-xs-5,
+.col-xs-6,
+.col-xs-7,
+.col-xs-8,
+.col-xs-9,
+.col-xs-10,
+.col-xs-11,
+.col-xs-12,
+.col-sm-1,
+.col-sm-2,
+.col-sm-3,
+.col-sm-4,
+.col-sm-5,
+.col-sm-6,
+.col-sm-7,
+.col-sm-8,
+.col-sm-9,
+.col-sm-10,
+.col-sm-11,
+.col-sm-12,
+.col-md-1,
+.col-md-2,
+.col-md-3,
+.col-md-4,
+.col-md-5,
+.col-md-6,
+.col-md-7,
+.col-md-8,
+.col-md-9,
+.col-md-10,
+.col-md-11,
+.col-md-12,
+.col-lg-1,
+.col-lg-2,
+.col-lg-3,
+.col-lg-4,
+.col-lg-5,
+.col-lg-6,
+.col-lg-7,
+.col-lg-8,
+.col-lg-9,
+.col-lg-10,
+.col-lg-11,
+.col-lg-12 {
+ position: relative;
+ min-height: 1px;
+ padding-right: 15px;
+ padding-left: 15px;
+}
+
+.col-xs-1,
+.col-xs-2,
+.col-xs-3,
+.col-xs-4,
+.col-xs-5,
+.col-xs-6,
+.col-xs-7,
+.col-xs-8,
+.col-xs-9,
+.col-xs-10,
+.col-xs-11 {
+ float: left;
+}
+
+.col-xs-1 {
+ width: 8.333333333333332%;
+}
+
+.col-xs-2 {
+ width: 16.666666666666664%;
+}
+
+.col-xs-3 {
+ width: 25%;
+}
+
+.col-xs-4 {
+ width: 33.33333333333333%;
+}
+
+.col-xs-5 {
+ width: 41.66666666666667%;
+}
+
+.col-xs-6 {
+ width: 50%;
+}
+
+.col-xs-7 {
+ width: 58.333333333333336%;
+}
+
+.col-xs-8 {
+ width: 66.66666666666666%;
+}
+
+.col-xs-9 {
+ width: 75%;
+}
+
+.col-xs-10 {
+ width: 83.33333333333334%;
+}
+
+.col-xs-11 {
+ width: 91.66666666666666%;
+}
+
+.col-xs-12 {
+ width: 100%;
+}
+
+@media (min-width: 768px) {
+ .container {
+ max-width: 750px;
+ }
+
+ .col-sm-1,
+ .col-sm-2,
+ .col-sm-3,
+ .col-sm-4,
+ .col-sm-5,
+ .col-sm-6,
+ .col-sm-7,
+ .col-sm-8,
+ .col-sm-9,
+ .col-sm-10,
+ .col-sm-11 {
+ float: left;
+ }
+
+ .col-sm-1 {
+ width: 8.333333333333332%;
+ }
+
+ .col-sm-2 {
+ width: 16.666666666666664%;
+ }
+
+ .col-sm-3 {
+ width: 25%;
+ }
+
+ .col-sm-4 {
+ width: 33.33333333333333%;
+ }
+
+ .col-sm-5 {
+ width: 41.66666666666667%;
+ }
+
+ .col-sm-6 {
+ width: 50%;
+ }
+
+ .col-sm-7 {
+ width: 58.333333333333336%;
+ }
+
+ .col-sm-8 {
+ width: 66.66666666666666%;
+ }
+
+ .col-sm-9 {
+ width: 75%;
+ }
+
+ .col-sm-10 {
+ width: 83.33333333333334%;
+ }
+
+ .col-sm-11 {
+ width: 91.66666666666666%;
+ }
+
+ .col-sm-12 {
+ width: 100%;
+ }
+
+ .col-sm-push-1 {
+ left: 8.333333333333332%;
+ }
+
+ .col-sm-push-2 {
+ left: 16.666666666666664%;
+ }
+
+ .col-sm-push-3 {
+ left: 25%;
+ }
+
+ .col-sm-push-4 {
+ left: 33.33333333333333%;
+ }
+
+ .col-sm-push-5 {
+ left: 41.66666666666667%;
+ }
+
+ .col-sm-push-6 {
+ left: 50%;
+ }
+
+ .col-sm-push-7 {
+ left: 58.333333333333336%;
+ }
+
+ .col-sm-push-8 {
+ left: 66.66666666666666%;
+ }
+
+ .col-sm-push-9 {
+ left: 75%;
+ }
+
+ .col-sm-push-10 {
+ left: 83.33333333333334%;
+ }
+
+ .col-sm-push-11 {
+ left: 91.66666666666666%;
+ }
+
+ .col-sm-pull-1 {
+ right: 8.333333333333332%;
+ }
+
+ .col-sm-pull-2 {
+ right: 16.666666666666664%;
+ }
+
+ .col-sm-pull-3 {
+ right: 25%;
+ }
+
+ .col-sm-pull-4 {
+ right: 33.33333333333333%;
+ }
+
+ .col-sm-pull-5 {
+ right: 41.66666666666667%;
+ }
+
+ .col-sm-pull-6 {
+ right: 50%;
+ }
+
+ .col-sm-pull-7 {
+ right: 58.333333333333336%;
+ }
+
+ .col-sm-pull-8 {
+ right: 66.66666666666666%;
+ }
+
+ .col-sm-pull-9 {
+ right: 75%;
+ }
+
+ .col-sm-pull-10 {
+ right: 83.33333333333334%;
+ }
+
+ .col-sm-pull-11 {
+ right: 91.66666666666666%;
+ }
+
+ .col-sm-offset-1 {
+ margin-left: 8.333333333333332%;
+ }
+
+ .col-sm-offset-2 {
+ margin-left: 16.666666666666664%;
+ }
+
+ .col-sm-offset-3 {
+ margin-left: 25%;
+ }
+
+ .col-sm-offset-4 {
+ margin-left: 33.33333333333333%;
+ }
+
+ .col-sm-offset-5 {
+ margin-left: 41.66666666666667%;
+ }
+
+ .col-sm-offset-6 {
+ margin-left: 50%;
+ }
+
+ .col-sm-offset-7 {
+ margin-left: 58.333333333333336%;
+ }
+
+ .col-sm-offset-8 {
+ margin-left: 66.66666666666666%;
+ }
+
+ .col-sm-offset-9 {
+ margin-left: 75%;
+ }
+
+ .col-sm-offset-10 {
+ margin-left: 83.33333333333334%;
+ }
+
+ .col-sm-offset-11 {
+ margin-left: 91.66666666666666%;
+ }
+}
+
+@media (min-width: 992px) {
+ .container {
+ max-width: 970px;
+ }
+
+ .col-md-1,
+ .col-md-2,
+ .col-md-3,
+ .col-md-4,
+ .col-md-5,
+ .col-md-6,
+ .col-md-7,
+ .col-md-8,
+ .col-md-9,
+ .col-md-10,
+ .col-md-11 {
+ float: left;
+ }
+
+ .col-md-1 {
+ width: 8.333333333333332%;
+ }
+
+ .col-md-2 {
+ width: 16.666666666666664%;
+ }
+
+ .col-md-3 {
+ width: 25%;
+ }
+
+ .col-md-4 {
+ width: 33.33333333333333%;
+ }
+
+ .col-md-5 {
+ width: 41.66666666666667%;
+ }
+
+ .col-md-6 {
+ width: 50%;
+ }
+
+ .col-md-7 {
+ width: 58.333333333333336%;
+ }
+
+ .col-md-8 {
+ width: 66.66666666666666%;
+ }
+
+ .col-md-9 {
+ width: 75%;
+ }
+
+ .col-md-10 {
+ width: 83.33333333333334%;
+ }
+
+ .col-md-11 {
+ width: 91.66666666666666%;
+ }
+
+ .col-md-12 {
+ width: 100%;
+ }
+
+ .col-md-push-0 {
+ left: auto;
+ }
+
+ .col-md-push-1 {
+ left: 8.333333333333332%;
+ }
+
+ .col-md-push-2 {
+ left: 16.666666666666664%;
+ }
+
+ .col-md-push-3 {
+ left: 25%;
+ }
+
+ .col-md-push-4 {
+ left: 33.33333333333333%;
+ }
+
+ .col-md-push-5 {
+ left: 41.66666666666667%;
+ }
+
+ .col-md-push-6 {
+ left: 50%;
+ }
+
+ .col-md-push-7 {
+ left: 58.333333333333336%;
+ }
+
+ .col-md-push-8 {
+ left: 66.66666666666666%;
+ }
+
+ .col-md-push-9 {
+ left: 75%;
+ }
+
+ .col-md-push-10 {
+ left: 83.33333333333334%;
+ }
+
+ .col-md-push-11 {
+ left: 91.66666666666666%;
+ }
+
+ .col-md-pull-0 {
+ right: auto;
+ }
+
+ .col-md-pull-1 {
+ right: 8.333333333333332%;
+ }
+
+ .col-md-pull-2 {
+ right: 16.666666666666664%;
+ }
+
+ .col-md-pull-3 {
+ right: 25%;
+ }
+
+ .col-md-pull-4 {
+ right: 33.33333333333333%;
+ }
+
+ .col-md-pull-5 {
+ right: 41.66666666666667%;
+ }
+
+ .col-md-pull-6 {
+ right: 50%;
+ }
+
+ .col-md-pull-7 {
+ right: 58.333333333333336%;
+ }
+
+ .col-md-pull-8 {
+ right: 66.66666666666666%;
+ }
+
+ .col-md-pull-9 {
+ right: 75%;
+ }
+
+ .col-md-pull-10 {
+ right: 83.33333333333334%;
+ }
+
+ .col-md-pull-11 {
+ right: 91.66666666666666%;
+ }
+
+ .col-md-offset-0 {
+ margin-left: 0;
+ }
+
+ .col-md-offset-1 {
+ margin-left: 8.333333333333332%;
+ }
+
+ .col-md-offset-2 {
+ margin-left: 16.666666666666664%;
+ }
+
+ .col-md-offset-3 {
+ margin-left: 25%;
+ }
+
+ .col-md-offset-4 {
+ margin-left: 33.33333333333333%;
+ }
+
+ .col-md-offset-5 {
+ margin-left: 41.66666666666667%;
+ }
+
+ .col-md-offset-6 {
+ margin-left: 50%;
+ }
+
+ .col-md-offset-7 {
+ margin-left: 58.333333333333336%;
+ }
+
+ .col-md-offset-8 {
+ margin-left: 66.66666666666666%;
+ }
+
+ .col-md-offset-9 {
+ margin-left: 75%;
+ }
+
+ .col-md-offset-10 {
+ margin-left: 83.33333333333334%;
+ }
+
+ .col-md-offset-11 {
+ margin-left: 91.66666666666666%;
+ }
+}
+
+@media (min-width: 1200px) {
+ .container {
+ max-width: 1170px;
+ }
+
+ .col-lg-1,
+ .col-lg-2,
+ .col-lg-3,
+ .col-lg-4,
+ .col-lg-5,
+ .col-lg-6,
+ .col-lg-7,
+ .col-lg-8,
+ .col-lg-9,
+ .col-lg-10,
+ .col-lg-11 {
+ float: left;
+ }
+
+ .col-lg-1 {
+ width: 8.333333333333332%;
+ }
+
+ .col-lg-2 {
+ width: 16.666666666666664%;
+ }
+
+ .col-lg-3 {
+ width: 25%;
+ }
+
+ .col-lg-4 {
+ width: 33.33333333333333%;
+ }
+
+ .col-lg-5 {
+ width: 41.66666666666667%;
+ }
+
+ .col-lg-6 {
+ width: 50%;
+ }
+
+ .col-lg-7 {
+ width: 58.333333333333336%;
+ }
+
+ .col-lg-8 {
+ width: 66.66666666666666%;
+ }
+
+ .col-lg-9 {
+ width: 75%;
+ }
+
+ .col-lg-10 {
+ width: 83.33333333333334%;
+ }
+
+ .col-lg-11 {
+ width: 91.66666666666666%;
+ }
+
+ .col-lg-12 {
+ width: 100%;
+ }
+
+ .col-lg-push-0 {
+ left: auto;
+ }
+
+ .col-lg-push-1 {
+ left: 8.333333333333332%;
+ }
+
+ .col-lg-push-2 {
+ left: 16.666666666666664%;
+ }
+
+ .col-lg-push-3 {
+ left: 25%;
+ }
+
+ .col-lg-push-4 {
+ left: 33.33333333333333%;
+ }
+
+ .col-lg-push-5 {
+ left: 41.66666666666667%;
+ }
+
+ .col-lg-push-6 {
+ left: 50%;
+ }
+
+ .col-lg-push-7 {
+ left: 58.333333333333336%;
+ }
+
+ .col-lg-push-8 {
+ left: 66.66666666666666%;
+ }
+
+ .col-lg-push-9 {
+ left: 75%;
+ }
+
+ .col-lg-push-10 {
+ left: 83.33333333333334%;
+ }
+
+ .col-lg-push-11 {
+ left: 91.66666666666666%;
+ }
+
+ .col-lg-pull-0 {
+ right: auto;
+ }
+
+ .col-lg-pull-1 {
+ right: 8.333333333333332%;
+ }
+
+ .col-lg-pull-2 {
+ right: 16.666666666666664%;
+ }
+
+ .col-lg-pull-3 {
+ right: 25%;
+ }
+
+ .col-lg-pull-4 {
+ right: 33.33333333333333%;
+ }
+
+ .col-lg-pull-5 {
+ right: 41.66666666666667%;
+ }
+
+ .col-lg-pull-6 {
+ right: 50%;
+ }
+
+ .col-lg-pull-7 {
+ right: 58.333333333333336%;
+ }
+
+ .col-lg-pull-8 {
+ right: 66.66666666666666%;
+ }
+
+ .col-lg-pull-9 {
+ right: 75%;
+ }
+
+ .col-lg-pull-10 {
+ right: 83.33333333333334%;
+ }
+
+ .col-lg-pull-11 {
+ right: 91.66666666666666%;
+ }
+
+ .col-lg-offset-0 {
+ margin-left: 0;
+ }
+
+ .col-lg-offset-1 {
+ margin-left: 8.333333333333332%;
+ }
+
+ .col-lg-offset-2 {
+ margin-left: 16.666666666666664%;
+ }
+
+ .col-lg-offset-3 {
+ margin-left: 25%;
+ }
+
+ .col-lg-offset-4 {
+ margin-left: 33.33333333333333%;
+ }
+
+ .col-lg-offset-5 {
+ margin-left: 41.66666666666667%;
+ }
+
+ .col-lg-offset-6 {
+ margin-left: 50%;
+ }
+
+ .col-lg-offset-7 {
+ margin-left: 58.333333333333336%;
+ }
+
+ .col-lg-offset-8 {
+ margin-left: 66.66666666666666%;
+ }
+
+ .col-lg-offset-9 {
+ margin-left: 75%;
+ }
+
+ .col-lg-offset-10 {
+ margin-left: 83.33333333333334%;
+ }
+
+ .col-lg-offset-11 {
+ margin-left: 91.66666666666666%;
+ }
+}
+
+table {
+ max-width: 100%;
+ background-color: transparent;
+}
+
+th {
+ text-align: left;
+}
+
+.table {
+ width: 100%;
+ margin-bottom: 20px;
+}
+
+.table thead > tr > th,
+.table tbody > tr > th,
+.table tfoot > tr > th,
+.table thead > tr > td,
+.table tbody > tr > td,
+.table tfoot > tr > td {
+ padding: 8px;
+ line-height: 1.428571429;
+ vertical-align: top;
+ border-top: 1px solid #dddddd;
+}
+
+.table thead > tr > th {
+ vertical-align: bottom;
+ border-bottom: 2px solid #dddddd;
+}
+
+.table caption + thead tr:first-child th,
+.table colgroup + thead tr:first-child th,
+.table thead:first-child tr:first-child th,
+.table caption + thead tr:first-child td,
+.table colgroup + thead tr:first-child td,
+.table thead:first-child tr:first-child td {
+ border-top: 0;
+}
+
+.table tbody + tbody {
+ border-top: 2px solid #dddddd;
+}
+
+.table .table {
+ background-color: #ffffff;
+}
+
+.table-condensed thead > tr > th,
+.table-condensed tbody > tr > th,
+.table-condensed tfoot > tr > th,
+.table-condensed thead > tr > td,
+.table-condensed tbody > tr > td,
+.table-condensed tfoot > tr > td {
+ padding: 5px;
+}
+
+.table-bordered {
+ border: 1px solid #dddddd;
+}
+
+.table-bordered > thead > tr > th,
+.table-bordered > tbody > tr > th,
+.table-bordered > tfoot > tr > th,
+.table-bordered > thead > tr > td,
+.table-bordered > tbody > tr > td,
+.table-bordered > tfoot > tr > td {
+ border: 1px solid #dddddd;
+}
+
+.table-bordered > thead > tr > th,
+.table-bordered > thead > tr > td {
+ border-bottom-width: 2px;
+}
+
+.table-striped > tbody > tr:nth-child(odd) > td,
+.table-striped > tbody > tr:nth-child(odd) > th {
+ background-color: #f9f9f9;
+}
+
+.table-hover > tbody > tr:hover > td,
+.table-hover > tbody > tr:hover > th {
+ background-color: #f5f5f5;
+}
+
+table col[class*="col-"] {
+ display: table-column;
+ float: none;
+}
+
+table td[class*="col-"],
+table th[class*="col-"] {
+ display: table-cell;
+ float: none;
+}
+
+.table > thead > tr > td.active,
+.table > tbody > tr > td.active,
+.table > tfoot > tr > td.active,
+.table > thead > tr > th.active,
+.table > tbody > tr > th.active,
+.table > tfoot > tr > th.active,
+.table > thead > tr.active > td,
+.table > tbody > tr.active > td,
+.table > tfoot > tr.active > td,
+.table > thead > tr.active > th,
+.table > tbody > tr.active > th,
+.table > tfoot > tr.active > th {
+ background-color: #f5f5f5;
+}
+
+.table > thead > tr > td.success,
+.table > tbody > tr > td.success,
+.table > tfoot > tr > td.success,
+.table > thead > tr > th.success,
+.table > tbody > tr > th.success,
+.table > tfoot > tr > th.success,
+.table > thead > tr.success > td,
+.table > tbody > tr.success > td,
+.table > tfoot > tr.success > td,
+.table > thead > tr.success > th,
+.table > tbody > tr.success > th,
+.table > tfoot > tr.success > th {
+ background-color: #dff0d8;
+ border-color: #d6e9c6;
+}
+
+.table-hover > tbody > tr > td.success:hover,
+.table-hover > tbody > tr > th.success:hover,
+.table-hover > tbody > tr.success:hover > td,
+.table-hover > tbody > tr.success:hover > th {
+ background-color: #d0e9c6;
+ border-color: #c9e2b3;
+}
+
+.table > thead > tr > td.danger,
+.table > tbody > tr > td.danger,
+.table > tfoot > tr > td.danger,
+.table > thead > tr > th.danger,
+.table > tbody > tr > th.danger,
+.table > tfoot > tr > th.danger,
+.table > thead > tr.danger > td,
+.table > tbody > tr.danger > td,
+.table > tfoot > tr.danger > td,
+.table > thead > tr.danger > th,
+.table > tbody > tr.danger > th,
+.table > tfoot > tr.danger > th {
+ background-color: #f2dede;
+ border-color: #eed3d7;
+}
+
+.table-hover > tbody > tr > td.danger:hover,
+.table-hover > tbody > tr > th.danger:hover,
+.table-hover > tbody > tr.danger:hover > td,
+.table-hover > tbody > tr.danger:hover > th {
+ background-color: #ebcccc;
+ border-color: #e6c1c7;
+}
+
+.table > thead > tr > td.warning,
+.table > tbody > tr > td.warning,
+.table > tfoot > tr > td.warning,
+.table > thead > tr > th.warning,
+.table > tbody > tr > th.warning,
+.table > tfoot > tr > th.warning,
+.table > thead > tr.warning > td,
+.table > tbody > tr.warning > td,
+.table > tfoot > tr.warning > td,
+.table > thead > tr.warning > th,
+.table > tbody > tr.warning > th,
+.table > tfoot > tr.warning > th {
+ background-color: #fcf8e3;
+ border-color: #fbeed5;
+}
+
+.table-hover > tbody > tr > td.warning:hover,
+.table-hover > tbody > tr > th.warning:hover,
+.table-hover > tbody > tr.warning:hover > td,
+.table-hover > tbody > tr.warning:hover > th {
+ background-color: #faf2cc;
+ border-color: #f8e5be;
+}
+
+@media (max-width: 768px) {
+ .table-responsive {
+ width: 100%;
+ margin-bottom: 15px;
+ overflow-x: scroll;
+ overflow-y: hidden;
+ border: 1px solid #dddddd;
+ -ms-overflow-style: -ms-autohiding-scrollbar;
+ -webkit-overflow-scrolling: touch;
+ }
+
+ .table-responsive > .table {
+ margin-bottom: 0;
+ background-color: #fff;
+ }
+
+ .table-responsive > .table > thead > tr > th,
+ .table-responsive > .table > tbody > tr > th,
+ .table-responsive > .table > tfoot > tr > th,
+ .table-responsive > .table > thead > tr > td,
+ .table-responsive > .table > tbody > tr > td,
+ .table-responsive > .table > tfoot > tr > td {
+ white-space: nowrap;
+ }
+
+ .table-responsive > .table-bordered {
+ border: 0;
+ }
+
+ .table-responsive > .table-bordered > thead > tr > th:first-child,
+ .table-responsive > .table-bordered > tbody > tr > th:first-child,
+ .table-responsive > .table-bordered > tfoot > tr > th:first-child,
+ .table-responsive > .table-bordered > thead > tr > td:first-child,
+ .table-responsive > .table-bordered > tbody > tr > td:first-child,
+ .table-responsive > .table-bordered > tfoot > tr > td:first-child {
+ border-left: 0;
+ }
+
+ .table-responsive > .table-bordered > thead > tr > th:last-child,
+ .table-responsive > .table-bordered > tbody > tr > th:last-child,
+ .table-responsive > .table-bordered > tfoot > tr > th:last-child,
+ .table-responsive > .table-bordered > thead > tr > td:last-child,
+ .table-responsive > .table-bordered > tbody > tr > td:last-child,
+ .table-responsive > .table-bordered > tfoot > tr > td:last-child {
+ border-right: 0;
+ }
+
+ .table-responsive > .table-bordered > thead > tr:last-child > th,
+ .table-responsive > .table-bordered > tbody > tr:last-child > th,
+ .table-responsive > .table-bordered > tfoot > tr:last-child > th,
+ .table-responsive > .table-bordered > thead > tr:last-child > td,
+ .table-responsive > .table-bordered > tbody > tr:last-child > td,
+ .table-responsive > .table-bordered > tfoot > tr:last-child > td {
+ border-bottom: 0;
+ }
+}
+
+fieldset {
+ padding: 0;
+ margin: 0;
+ border: 0;
+}
+
+legend {
+ display: block;
+ width: 100%;
+ padding: 0;
+ margin-bottom: 20px;
+ font-size: 21px;
+ line-height: inherit;
+ color: #333333;
+ border: 0;
+ border-bottom: 1px solid #e5e5e5;
+}
+
+label {
+ display: inline-block;
+ margin-bottom: 5px;
+ font-weight: bold;
+}
+
+input[type="search"] {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+input[type="radio"],
+input[type="checkbox"] {
+ margin: 4px 0 0;
+ margin-top: 1px \9;
+ /* IE8-9 */
+
+ line-height: normal;
+}
+
+input[type="file"] {
+ display: block;
+}
+
+select[multiple],
+select[size] {
+ height: auto;
+}
+
+select optgroup {
+ font-family: inherit;
+ font-size: inherit;
+ font-style: inherit;
+}
+
+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[type="number"]::-webkit-outer-spin-button,
+input[type="number"]::-webkit-inner-spin-button {
+ height: auto;
+}
+
+output {
+ display: block;
+ padding-top: 7px;
+ font-size: 14px;
+ line-height: 1.428571429;
+ color: #555555;
+ vertical-align: middle;
+}
+
+.form-control:-moz-placeholder {
+ color: #999999;
+}
+
+.form-control::-moz-placeholder {
+ color: #999999;
+}
+
+.form-control:-ms-input-placeholder {
+ color: #999999;
+}
+
+.form-control::-webkit-input-placeholder {
+ color: #999999;
+}
+
+.form-control {
+ display: block;
+ width: 100%;
+ height: 34px;
+ padding: 6px 12px;
+ font-size: 14px;
+ line-height: 1.428571429;
+ color: #555555;
+ vertical-align: middle;
+ background-color: #ffffff;
+ border: 1px solid #cccccc;
+ border-radius: 4px;
+ -webkit-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-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
+ transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
+}
+
+.form-control:focus {
+ border-color: #66afe9;
+ outline: 0;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);
+}
+
+.form-control[disabled],
+.form-control[readonly],
+fieldset[disabled] .form-control {
+ cursor: not-allowed;
+ background-color: #eeeeee;
+}
+
+textarea.form-control {
+ height: auto;
+}
+
+.form-group {
+ margin-bottom: 15px;
+}
+
+.radio,
+.checkbox {
+ display: block;
+ min-height: 20px;
+ padding-left: 20px;
+ margin-top: 10px;
+ margin-bottom: 10px;
+ vertical-align: middle;
+}
+
+.radio label,
+.checkbox label {
+ display: inline;
+ margin-bottom: 0;
+ font-weight: normal;
+ cursor: pointer;
+}
+
+.radio input[type="radio"],
+.radio-inline input[type="radio"],
+.checkbox input[type="checkbox"],
+.checkbox-inline input[type="checkbox"] {
+ float: left;
+ margin-left: -20px;
+}
+
+.radio + .radio,
+.checkbox + .checkbox {
+ margin-top: -5px;
+}
+
+.radio-inline,
+.checkbox-inline {
+ display: inline-block;
+ padding-left: 20px;
+ margin-bottom: 0;
+ font-weight: normal;
+ vertical-align: middle;
+ cursor: pointer;
+}
+
+.radio-inline + .radio-inline,
+.checkbox-inline + .checkbox-inline {
+ margin-top: 0;
+ margin-left: 10px;
+}
+
+input[type="radio"][disabled],
+input[type="checkbox"][disabled],
+.radio[disabled],
+.radio-inline[disabled],
+.checkbox[disabled],
+.checkbox-inline[disabled],
+fieldset[disabled] input[type="radio"],
+fieldset[disabled] input[type="checkbox"],
+fieldset[disabled] .radio,
+fieldset[disabled] .radio-inline,
+fieldset[disabled] .checkbox,
+fieldset[disabled] .checkbox-inline {
+ cursor: not-allowed;
+}
+
+.input-sm {
+ height: 30px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+
+select.input-sm {
+ height: 30px;
+ line-height: 30px;
+}
+
+textarea.input-sm {
+ height: auto;
+}
+
+.input-lg {
+ height: 45px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.33;
+ border-radius: 6px;
+}
+
+select.input-lg {
+ height: 45px;
+ line-height: 45px;
+}
+
+textarea.input-lg {
+ height: auto;
+}
+
+.has-warning .help-block,
+.has-warning .control-label {
+ color: #c09853;
+}
+
+.has-warning .form-control {
+ border-color: #c09853;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+}
+
+.has-warning .form-control:focus {
+ border-color: #a47e3c;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;
+}
+
+.has-warning .input-group-addon {
+ color: #c09853;
+ background-color: #fcf8e3;
+ border-color: #c09853;
+}
+
+.has-error .help-block,
+.has-error .control-label {
+ color: #b94a48;
+}
+
+.has-error .form-control {
+ border-color: #b94a48;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+}
+
+.has-error .form-control:focus {
+ border-color: #953b39;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;
+}
+
+.has-error .input-group-addon {
+ color: #b94a48;
+ background-color: #f2dede;
+ border-color: #b94a48;
+}
+
+.has-success .help-block,
+.has-success .control-label {
+ color: #468847;
+}
+
+.has-success .form-control {
+ border-color: #468847;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+}
+
+.has-success .form-control:focus {
+ border-color: #356635;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;
+}
+
+.has-success .input-group-addon {
+ color: #468847;
+ background-color: #dff0d8;
+ border-color: #468847;
+}
+
+.form-control-static {
+ padding-top: 7px;
+ margin-bottom: 0;
+}
+
+.help-block {
+ display: block;
+ margin-top: 5px;
+ margin-bottom: 10px;
+ color: #737373;
+}
+
+@media (min-width: 768px) {
+ .form-inline .form-group {
+ display: inline-block;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+
+ .form-inline .form-control {
+ display: inline-block;
+ }
+
+ .form-inline .radio,
+ .form-inline .checkbox {
+ display: inline-block;
+ padding-left: 0;
+ margin-top: 0;
+ margin-bottom: 0;
+ }
+
+ .form-inline .radio input[type="radio"],
+ .form-inline .checkbox input[type="checkbox"] {
+ float: none;
+ margin-left: 0;
+ }
+}
+
+.form-horizontal .control-label,
+.form-horizontal .radio,
+.form-horizontal .checkbox,
+.form-horizontal .radio-inline,
+.form-horizontal .checkbox-inline {
+ padding-top: 7px;
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+.form-horizontal .form-group {
+ margin-right: -15px;
+ margin-left: -15px;
+}
+
+.form-horizontal .form-group:before,
+.form-horizontal .form-group:after {
+ display: table;
+ content: " ";
+}
+
+.form-horizontal .form-group:after {
+ clear: both;
+}
+
+.form-horizontal .form-group:before,
+.form-horizontal .form-group:after {
+ display: table;
+ content: " ";
+}
+
+.form-horizontal .form-group:after {
+ clear: both;
+}
+
+@media (min-width: 768px) {
+ .form-horizontal .control-label {
+ text-align: right;
+ }
+}
+
+.btn {
+ display: inline-block;
+ padding: 6px 12px;
+ margin-bottom: 0;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 1.428571429;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: middle;
+ cursor: pointer;
+ border: 1px solid transparent;
+ border-radius: 4px;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ -o-user-select: none;
+ user-select: none;
+}
+
+.btn:focus {
+ outline: thin dotted #333;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+
+.btn:hover,
+.btn:focus {
+ color: #333333;
+ text-decoration: none;
+}
+
+.btn:active,
+.btn.active {
+ background-image: none;
+ outline: 0;
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+}
+
+.btn.disabled,
+.btn[disabled],
+fieldset[disabled] .btn {
+ pointer-events: none;
+ cursor: not-allowed;
+ opacity: 0.65;
+ filter: alpha(opacity=65);
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.btn-default {
+ color: #333333;
+ background-color: #ffffff;
+ border-color: #cccccc;
+}
+
+.btn-default:hover,
+.btn-default:focus,
+.btn-default:active,
+.btn-default.active,
+.open .dropdown-toggle.btn-default {
+ color: #333333;
+ background-color: #ebebeb;
+ border-color: #adadad;
+}
+
+.btn-default:active,
+.btn-default.active,
+.open .dropdown-toggle.btn-default {
+ background-image: none;
+}
+
+.btn-default.disabled,
+.btn-default[disabled],
+fieldset[disabled] .btn-default,
+.btn-default.disabled:hover,
+.btn-default[disabled]:hover,
+fieldset[disabled] .btn-default:hover,
+.btn-default.disabled:focus,
+.btn-default[disabled]:focus,
+fieldset[disabled] .btn-default:focus,
+.btn-default.disabled:active,
+.btn-default[disabled]:active,
+fieldset[disabled] .btn-default:active,
+.btn-default.disabled.active,
+.btn-default[disabled].active,
+fieldset[disabled] .btn-default.active {
+ background-color: #ffffff;
+ border-color: #cccccc;
+}
+
+.btn-primary {
+ color: #ffffff;
+ background-color: #428bca;
+ border-color: #357ebd;
+}
+
+.btn-primary:hover,
+.btn-primary:focus,
+.btn-primary:active,
+.btn-primary.active,
+.open .dropdown-toggle.btn-primary {
+ color: #ffffff;
+ background-color: #3276b1;
+ border-color: #285e8e;
+}
+
+.btn-primary:active,
+.btn-primary.active,
+.open .dropdown-toggle.btn-primary {
+ background-image: none;
+}
+
+.btn-primary.disabled,
+.btn-primary[disabled],
+fieldset[disabled] .btn-primary,
+.btn-primary.disabled:hover,
+.btn-primary[disabled]:hover,
+fieldset[disabled] .btn-primary:hover,
+.btn-primary.disabled:focus,
+.btn-primary[disabled]:focus,
+fieldset[disabled] .btn-primary:focus,
+.btn-primary.disabled:active,
+.btn-primary[disabled]:active,
+fieldset[disabled] .btn-primary:active,
+.btn-primary.disabled.active,
+.btn-primary[disabled].active,
+fieldset[disabled] .btn-primary.active {
+ background-color: #428bca;
+ border-color: #357ebd;
+}
+
+.btn-warning {
+ color: #ffffff;
+ background-color: #f0ad4e;
+ border-color: #eea236;
+}
+
+.btn-warning:hover,
+.btn-warning:focus,
+.btn-warning:active,
+.btn-warning.active,
+.open .dropdown-toggle.btn-warning {
+ color: #ffffff;
+ background-color: #ed9c28;
+ border-color: #d58512;
+}
+
+.btn-warning:active,
+.btn-warning.active,
+.open .dropdown-toggle.btn-warning {
+ background-image: none;
+}
+
+.btn-warning.disabled,
+.btn-warning[disabled],
+fieldset[disabled] .btn-warning,
+.btn-warning.disabled:hover,
+.btn-warning[disabled]:hover,
+fieldset[disabled] .btn-warning:hover,
+.btn-warning.disabled:focus,
+.btn-warning[disabled]:focus,
+fieldset[disabled] .btn-warning:focus,
+.btn-warning.disabled:active,
+.btn-warning[disabled]:active,
+fieldset[disabled] .btn-warning:active,
+.btn-warning.disabled.active,
+.btn-warning[disabled].active,
+fieldset[disabled] .btn-warning.active {
+ background-color: #f0ad4e;
+ border-color: #eea236;
+}
+
+.btn-danger {
+ color: #ffffff;
+ background-color: #d9534f;
+ border-color: #d43f3a;
+}
+
+.btn-danger:hover,
+.btn-danger:focus,
+.btn-danger:active,
+.btn-danger.active,
+.open .dropdown-toggle.btn-danger {
+ color: #ffffff;
+ background-color: #d2322d;
+ border-color: #ac2925;
+}
+
+.btn-danger:active,
+.btn-danger.active,
+.open .dropdown-toggle.btn-danger {
+ background-image: none;
+}
+
+.btn-danger.disabled,
+.btn-danger[disabled],
+fieldset[disabled] .btn-danger,
+.btn-danger.disabled:hover,
+.btn-danger[disabled]:hover,
+fieldset[disabled] .btn-danger:hover,
+.btn-danger.disabled:focus,
+.btn-danger[disabled]:focus,
+fieldset[disabled] .btn-danger:focus,
+.btn-danger.disabled:active,
+.btn-danger[disabled]:active,
+fieldset[disabled] .btn-danger:active,
+.btn-danger.disabled.active,
+.btn-danger[disabled].active,
+fieldset[disabled] .btn-danger.active {
+ background-color: #d9534f;
+ border-color: #d43f3a;
+}
+
+.btn-success {
+ color: #ffffff;
+ background-color: #5cb85c;
+ border-color: #4cae4c;
+}
+
+.btn-success:hover,
+.btn-success:focus,
+.btn-success:active,
+.btn-success.active,
+.open .dropdown-toggle.btn-success {
+ color: #ffffff;
+ background-color: #47a447;
+ border-color: #398439;
+}
+
+.btn-success:active,
+.btn-success.active,
+.open .dropdown-toggle.btn-success {
+ background-image: none;
+}
+
+.btn-success.disabled,
+.btn-success[disabled],
+fieldset[disabled] .btn-success,
+.btn-success.disabled:hover,
+.btn-success[disabled]:hover,
+fieldset[disabled] .btn-success:hover,
+.btn-success.disabled:focus,
+.btn-success[disabled]:focus,
+fieldset[disabled] .btn-success:focus,
+.btn-success.disabled:active,
+.btn-success[disabled]:active,
+fieldset[disabled] .btn-success:active,
+.btn-success.disabled.active,
+.btn-success[disabled].active,
+fieldset[disabled] .btn-success.active {
+ background-color: #5cb85c;
+ border-color: #4cae4c;
+}
+
+.btn-info {
+ color: #ffffff;
+ background-color: #5bc0de;
+ border-color: #46b8da;
+}
+
+.btn-info:hover,
+.btn-info:focus,
+.btn-info:active,
+.btn-info.active,
+.open .dropdown-toggle.btn-info {
+ color: #ffffff;
+ background-color: #39b3d7;
+ border-color: #269abc;
+}
+
+.btn-info:active,
+.btn-info.active,
+.open .dropdown-toggle.btn-info {
+ background-image: none;
+}
+
+.btn-info.disabled,
+.btn-info[disabled],
+fieldset[disabled] .btn-info,
+.btn-info.disabled:hover,
+.btn-info[disabled]:hover,
+fieldset[disabled] .btn-info:hover,
+.btn-info.disabled:focus,
+.btn-info[disabled]:focus,
+fieldset[disabled] .btn-info:focus,
+.btn-info.disabled:active,
+.btn-info[disabled]:active,
+fieldset[disabled] .btn-info:active,
+.btn-info.disabled.active,
+.btn-info[disabled].active,
+fieldset[disabled] .btn-info.active {
+ background-color: #5bc0de;
+ border-color: #46b8da;
+}
+
+.btn-link {
+ font-weight: normal;
+ color: #428bca;
+ cursor: pointer;
+ border-radius: 0;
+}
+
+.btn-link,
+.btn-link:active,
+.btn-link[disabled],
+fieldset[disabled] .btn-link {
+ background-color: transparent;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.btn-link,
+.btn-link:hover,
+.btn-link:focus,
+.btn-link:active {
+ border-color: transparent;
+}
+
+.btn-link:hover,
+.btn-link:focus {
+ color: #2a6496;
+ text-decoration: underline;
+ background-color: transparent;
+}
+
+.btn-link[disabled]:hover,
+fieldset[disabled] .btn-link:hover,
+.btn-link[disabled]:focus,
+fieldset[disabled] .btn-link:focus {
+ color: #999999;
+ text-decoration: none;
+}
+
+.btn-lg {
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.33;
+ border-radius: 6px;
+}
+
+.btn-sm,
+.btn-xs {
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+
+.btn-xs {
+ padding: 1px 5px;
+}
+
+.btn-block {
+ display: block;
+ width: 100%;
+ padding-right: 0;
+ padding-left: 0;
+}
+
+.btn-block + .btn-block {
+ margin-top: 5px;
+}
+
+input[type="submit"].btn-block,
+input[type="reset"].btn-block,
+input[type="button"].btn-block {
+ width: 100%;
+}
+
+.fade {
+ opacity: 0;
+ -webkit-transition: opacity 0.15s linear;
+ transition: opacity 0.15s linear;
+}
+
+.fade.in {
+ opacity: 1;
+}
+
+.collapse {
+ display: none;
+}
+
+.collapse.in {
+ display: block;
+}
+
+.collapsing {
+ position: relative;
+ height: 0;
+ overflow: hidden;
+ -webkit-transition: height 0.35s ease;
+ transition: height 0.35s ease;
+}
+
+@font-face {
+ font-family: 'Glyphicons Halflings';
+ src: url('../fonts/glyphicons-halflings-regular.eot');
+ src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg');
+}
+
+.glyphicon {
+ position: relative;
+ top: 1px;
+ display: inline-block;
+ font-family: 'Glyphicons Halflings';
+ -webkit-font-smoothing: antialiased;
+ font-style: normal;
+ font-weight: normal;
+ line-height: 1;
+}
+
+.glyphicon:empty {
+ width: 1em;
+}
+
+.glyphicon-asterisk:before {
+ content: "\2a";
+}
+
+.glyphicon-plus:before {
+ content: "\2b";
+}
+
+.glyphicon-euro:before {
+ content: "\20ac";
+}
+
+.glyphicon-minus:before {
+ content: "\2212";
+}
+
+.glyphicon-cloud:before {
+ content: "\2601";
+}
+
+.glyphicon-envelope:before {
+ content: "\2709";
+}
+
+.glyphicon-pencil:before {
+ content: "\270f";
+}
+
+.glyphicon-glass:before {
+ content: "\e001";
+}
+
+.glyphicon-music:before {
+ content: "\e002";
+}
+
+.glyphicon-search:before {
+ content: "\e003";
+}
+
+.glyphicon-heart:before {
+ content: "\e005";
+}
+
+.glyphicon-star:before {
+ content: "\e006";
+}
+
+.glyphicon-star-empty:before {
+ content: "\e007";
+}
+
+.glyphicon-user:before {
+ content: "\e008";
+}
+
+.glyphicon-film:before {
+ content: "\e009";
+}
+
+.glyphicon-th-large:before {
+ content: "\e010";
+}
+
+.glyphicon-th:before {
+ content: "\e011";
+}
+
+.glyphicon-th-list:before {
+ content: "\e012";
+}
+
+.glyphicon-ok:before {
+ content: "\e013";
+}
+
+.glyphicon-remove:before {
+ content: "\e014";
+}
+
+.glyphicon-zoom-in:before {
+ content: "\e015";
+}
+
+.glyphicon-zoom-out:before {
+ content: "\e016";
+}
+
+.glyphicon-off:before {
+ content: "\e017";
+}
+
+.glyphicon-signal:before {
+ content: "\e018";
+}
+
+.glyphicon-cog:before {
+ content: "\e019";
+}
+
+.glyphicon-trash:before {
+ content: "\e020";
+}
+
+.glyphicon-home:before {
+ content: "\e021";
+}
+
+.glyphicon-file:before {
+ content: "\e022";
+}
+
+.glyphicon-time:before {
+ content: "\e023";
+}
+
+.glyphicon-road:before {
+ content: "\e024";
+}
+
+.glyphicon-download-alt:before {
+ content: "\e025";
+}
+
+.glyphicon-download:before {
+ content: "\e026";
+}
+
+.glyphicon-upload:before {
+ content: "\e027";
+}
+
+.glyphicon-inbox:before {
+ content: "\e028";
+}
+
+.glyphicon-play-circle:before {
+ content: "\e029";
+}
+
+.glyphicon-repeat:before {
+ content: "\e030";
+}
+
+.glyphicon-refresh:before {
+ content: "\e031";
+}
+
+.glyphicon-list-alt:before {
+ content: "\e032";
+}
+
+.glyphicon-flag:before {
+ content: "\e034";
+}
+
+.glyphicon-headphones:before {
+ content: "\e035";
+}
+
+.glyphicon-volume-off:before {
+ content: "\e036";
+}
+
+.glyphicon-volume-down:before {
+ content: "\e037";
+}
+
+.glyphicon-volume-up:before {
+ content: "\e038";
+}
+
+.glyphicon-qrcode:before {
+ content: "\e039";
+}
+
+.glyphicon-barcode:before {
+ content: "\e040";
+}
+
+.glyphicon-tag:before {
+ content: "\e041";
+}
+
+.glyphicon-tags:before {
+ content: "\e042";
+}
+
+.glyphicon-book:before {
+ content: "\e043";
+}
+
+.glyphicon-print:before {
+ content: "\e045";
+}
+
+.glyphicon-font:before {
+ content: "\e047";
+}
+
+.glyphicon-bold:before {
+ content: "\e048";
+}
+
+.glyphicon-italic:before {
+ content: "\e049";
+}
+
+.glyphicon-text-height:before {
+ content: "\e050";
+}
+
+.glyphicon-text-width:before {
+ content: "\e051";
+}
+
+.glyphicon-align-left:before {
+ content: "\e052";
+}
+
+.glyphicon-align-center:before {
+ content: "\e053";
+}
+
+.glyphicon-align-right:before {
+ content: "\e054";
+}
+
+.glyphicon-align-justify:before {
+ content: "\e055";
+}
+
+.glyphicon-list:before {
+ content: "\e056";
+}
+
+.glyphicon-indent-left:before {
+ content: "\e057";
+}
+
+.glyphicon-indent-right:before {
+ content: "\e058";
+}
+
+.glyphicon-facetime-video:before {
+ content: "\e059";
+}
+
+.glyphicon-picture:before {
+ content: "\e060";
+}
+
+.glyphicon-map-marker:before {
+ content: "\e062";
+}
+
+.glyphicon-adjust:before {
+ content: "\e063";
+}
+
+.glyphicon-tint:before {
+ content: "\e064";
+}
+
+.glyphicon-edit:before {
+ content: "\e065";
+}
+
+.glyphicon-share:before {
+ content: "\e066";
+}
+
+.glyphicon-check:before {
+ content: "\e067";
+}
+
+.glyphicon-move:before {
+ content: "\e068";
+}
+
+.glyphicon-step-backward:before {
+ content: "\e069";
+}
+
+.glyphicon-fast-backward:before {
+ content: "\e070";
+}
+
+.glyphicon-backward:before {
+ content: "\e071";
+}
+
+.glyphicon-play:before {
+ content: "\e072";
+}
+
+.glyphicon-pause:before {
+ content: "\e073";
+}
+
+.glyphicon-stop:before {
+ content: "\e074";
+}
+
+.glyphicon-forward:before {
+ content: "\e075";
+}
+
+.glyphicon-fast-forward:before {
+ content: "\e076";
+}
+
+.glyphicon-step-forward:before {
+ content: "\e077";
+}
+
+.glyphicon-eject:before {
+ content: "\e078";
+}
+
+.glyphicon-chevron-left:before {
+ content: "\e079";
+}
+
+.glyphicon-chevron-right:before {
+ content: "\e080";
+}
+
+.glyphicon-plus-sign:before {
+ content: "\e081";
+}
+
+.glyphicon-minus-sign:before {
+ content: "\e082";
+}
+
+.glyphicon-remove-sign:before {
+ content: "\e083";
+}
+
+.glyphicon-ok-sign:before {
+ content: "\e084";
+}
+
+.glyphicon-question-sign:before {
+ content: "\e085";
+}
+
+.glyphicon-info-sign:before {
+ content: "\e086";
+}
+
+.glyphicon-screenshot:before {
+ content: "\e087";
+}
+
+.glyphicon-remove-circle:before {
+ content: "\e088";
+}
+
+.glyphicon-ok-circle:before {
+ content: "\e089";
+}
+
+.glyphicon-ban-circle:before {
+ content: "\e090";
+}
+
+.glyphicon-arrow-left:before {
+ content: "\e091";
+}
+
+.glyphicon-arrow-right:before {
+ content: "\e092";
+}
+
+.glyphicon-arrow-up:before {
+ content: "\e093";
+}
+
+.glyphicon-arrow-down:before {
+ content: "\e094";
+}
+
+.glyphicon-share-alt:before {
+ content: "\e095";
+}
+
+.glyphicon-resize-full:before {
+ content: "\e096";
+}
+
+.glyphicon-resize-small:before {
+ content: "\e097";
+}
+
+.glyphicon-exclamation-sign:before {
+ content: "\e101";
+}
+
+.glyphicon-gift:before {
+ content: "\e102";
+}
+
+.glyphicon-leaf:before {
+ content: "\e103";
+}
+
+.glyphicon-eye-open:before {
+ content: "\e105";
+}
+
+.glyphicon-eye-close:before {
+ content: "\e106";
+}
+
+.glyphicon-warning-sign:before {
+ content: "\e107";
+}
+
+.glyphicon-plane:before {
+ content: "\e108";
+}
+
+.glyphicon-random:before {
+ content: "\e110";
+}
+
+.glyphicon-comment:before {
+ content: "\e111";
+}
+
+.glyphicon-magnet:before {
+ content: "\e112";
+}
+
+.glyphicon-chevron-up:before {
+ content: "\e113";
+}
+
+.glyphicon-chevron-down:before {
+ content: "\e114";
+}
+
+.glyphicon-retweet:before {
+ content: "\e115";
+}
+
+.glyphicon-shopping-cart:before {
+ content: "\e116";
+}
+
+.glyphicon-folder-close:before {
+ content: "\e117";
+}
+
+.glyphicon-folder-open:before {
+ content: "\e118";
+}
+
+.glyphicon-resize-vertical:before {
+ content: "\e119";
+}
+
+.glyphicon-resize-horizontal:before {
+ content: "\e120";
+}
+
+.glyphicon-hdd:before {
+ content: "\e121";
+}
+
+.glyphicon-bullhorn:before {
+ content: "\e122";
+}
+
+.glyphicon-certificate:before {
+ content: "\e124";
+}
+
+.glyphicon-thumbs-up:before {
+ content: "\e125";
+}
+
+.glyphicon-thumbs-down:before {
+ content: "\e126";
+}
+
+.glyphicon-hand-right:before {
+ content: "\e127";
+}
+
+.glyphicon-hand-left:before {
+ content: "\e128";
+}
+
+.glyphicon-hand-up:before {
+ content: "\e129";
+}
+
+.glyphicon-hand-down:before {
+ content: "\e130";
+}
+
+.glyphicon-circle-arrow-right:before {
+ content: "\e131";
+}
+
+.glyphicon-circle-arrow-left:before {
+ content: "\e132";
+}
+
+.glyphicon-circle-arrow-up:before {
+ content: "\e133";
+}
+
+.glyphicon-circle-arrow-down:before {
+ content: "\e134";
+}
+
+.glyphicon-globe:before {
+ content: "\e135";
+}
+
+.glyphicon-tasks:before {
+ content: "\e137";
+}
+
+.glyphicon-filter:before {
+ content: "\e138";
+}
+
+.glyphicon-fullscreen:before {
+ content: "\e140";
+}
+
+.glyphicon-dashboard:before {
+ content: "\e141";
+}
+
+.glyphicon-heart-empty:before {
+ content: "\e143";
+}
+
+.glyphicon-link:before {
+ content: "\e144";
+}
+
+.glyphicon-phone:before {
+ content: "\e145";
+}
+
+.glyphicon-usd:before {
+ content: "\e148";
+}
+
+.glyphicon-gbp:before {
+ content: "\e149";
+}
+
+.glyphicon-sort:before {
+ content: "\e150";
+}
+
+.glyphicon-sort-by-alphabet:before {
+ content: "\e151";
+}
+
+.glyphicon-sort-by-alphabet-alt:before {
+ content: "\e152";
+}
+
+.glyphicon-sort-by-order:before {
+ content: "\e153";
+}
+
+.glyphicon-sort-by-order-alt:before {
+ content: "\e154";
+}
+
+.glyphicon-sort-by-attributes:before {
+ content: "\e155";
+}
+
+.glyphicon-sort-by-attributes-alt:before {
+ content: "\e156";
+}
+
+.glyphicon-unchecked:before {
+ content: "\e157";
+}
+
+.glyphicon-expand:before {
+ content: "\e158";
+}
+
+.glyphicon-collapse-down:before {
+ content: "\e159";
+}
+
+.glyphicon-collapse-up:before {
+ content: "\e160";
+}
+
+.glyphicon-log-in:before {
+ content: "\e161";
+}
+
+.glyphicon-flash:before {
+ content: "\e162";
+}
+
+.glyphicon-log-out:before {
+ content: "\e163";
+}
+
+.glyphicon-new-window:before {
+ content: "\e164";
+}
+
+.glyphicon-record:before {
+ content: "\e165";
+}
+
+.glyphicon-save:before {
+ content: "\e166";
+}
+
+.glyphicon-open:before {
+ content: "\e167";
+}
+
+.glyphicon-saved:before {
+ content: "\e168";
+}
+
+.glyphicon-import:before {
+ content: "\e169";
+}
+
+.glyphicon-export:before {
+ content: "\e170";
+}
+
+.glyphicon-send:before {
+ content: "\e171";
+}
+
+.glyphicon-floppy-disk:before {
+ content: "\e172";
+}
+
+.glyphicon-floppy-saved:before {
+ content: "\e173";
+}
+
+.glyphicon-floppy-remove:before {
+ content: "\e174";
+}
+
+.glyphicon-floppy-save:before {
+ content: "\e175";
+}
+
+.glyphicon-floppy-open:before {
+ content: "\e176";
+}
+
+.glyphicon-credit-card:before {
+ content: "\e177";
+}
+
+.glyphicon-transfer:before {
+ content: "\e178";
+}
+
+.glyphicon-cutlery:before {
+ content: "\e179";
+}
+
+.glyphicon-header:before {
+ content: "\e180";
+}
+
+.glyphicon-compressed:before {
+ content: "\e181";
+}
+
+.glyphicon-earphone:before {
+ content: "\e182";
+}
+
+.glyphicon-phone-alt:before {
+ content: "\e183";
+}
+
+.glyphicon-tower:before {
+ content: "\e184";
+}
+
+.glyphicon-stats:before {
+ content: "\e185";
+}
+
+.glyphicon-sd-video:before {
+ content: "\e186";
+}
+
+.glyphicon-hd-video:before {
+ content: "\e187";
+}
+
+.glyphicon-subtitles:before {
+ content: "\e188";
+}
+
+.glyphicon-sound-stereo:before {
+ content: "\e189";
+}
+
+.glyphicon-sound-dolby:before {
+ content: "\e190";
+}
+
+.glyphicon-sound-5-1:before {
+ content: "\e191";
+}
+
+.glyphicon-sound-6-1:before {
+ content: "\e192";
+}
+
+.glyphicon-sound-7-1:before {
+ content: "\e193";
+}
+
+.glyphicon-copyright-mark:before {
+ content: "\e194";
+}
+
+.glyphicon-registration-mark:before {
+ content: "\e195";
+}
+
+.glyphicon-cloud-download:before {
+ content: "\e197";
+}
+
+.glyphicon-cloud-upload:before {
+ content: "\e198";
+}
+
+.glyphicon-tree-conifer:before {
+ content: "\e199";
+}
+
+.glyphicon-tree-deciduous:before {
+ content: "\e200";
+}
+
+.glyphicon-briefcase:before {
+ content: "\1f4bc";
+}
+
+.glyphicon-calendar:before {
+ content: "\1f4c5";
+}
+
+.glyphicon-pushpin:before {
+ content: "\1f4cc";
+}
+
+.glyphicon-paperclip:before {
+ content: "\1f4ce";
+}
+
+.glyphicon-camera:before {
+ content: "\1f4f7";
+}
+
+.glyphicon-lock:before {
+ content: "\1f512";
+}
+
+.glyphicon-bell:before {
+ content: "\1f514";
+}
+
+.glyphicon-bookmark:before {
+ content: "\1f516";
+}
+
+.glyphicon-fire:before {
+ content: "\1f525";
+}
+
+.glyphicon-wrench:before {
+ content: "\1f527";
+}
+
+.caret {
+ display: inline-block;
+ width: 0;
+ height: 0;
+ margin-left: 2px;
+ vertical-align: middle;
+ border-top: 4px solid #000000;
+ border-right: 4px solid transparent;
+ border-bottom: 0 dotted;
+ border-left: 4px solid transparent;
+ content: "";
+}
+
+.dropdown {
+ position: relative;
+}
+
+.dropdown-toggle:focus {
+ outline: 0;
+}
+
+.dropdown-menu {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: 1000;
+ display: none;
+ float: left;
+ min-width: 160px;
+ padding: 5px 0;
+ margin: 2px 0 0;
+ font-size: 14px;
+ list-style: none;
+ background-color: #ffffff;
+ border: 1px solid #cccccc;
+ border: 1px solid rgba(0, 0, 0, 0.15);
+ border-radius: 4px;
+ -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
+ box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
+ background-clip: padding-box;
+}
+
+.dropdown-menu.pull-right {
+ right: 0;
+ left: auto;
+}
+
+.dropdown-menu .divider {
+ height: 1px;
+ margin: 9px 0;
+ overflow: hidden;
+ background-color: #e5e5e5;
+}
+
+.dropdown-menu > li > a {
+ display: block;
+ padding: 3px 20px;
+ clear: both;
+ font-weight: normal;
+ line-height: 1.428571429;
+ color: #333333;
+ white-space: nowrap;
+}
+
+.dropdown-menu > li > a:hover,
+.dropdown-menu > li > a:focus {
+ color: #ffffff;
+ text-decoration: none;
+ background-color: #428bca;
+}
+
+.dropdown-menu > .active > a,
+.dropdown-menu > .active > a:hover,
+.dropdown-menu > .active > a:focus {
+ color: #ffffff;
+ text-decoration: none;
+ background-color: #428bca;
+ outline: 0;
+}
+
+.dropdown-menu > .disabled > a,
+.dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+ color: #999999;
+}
+
+.dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+ text-decoration: none;
+ cursor: not-allowed;
+ background-color: transparent;
+ background-image: none;
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+
+.open > .dropdown-menu {
+ display: block;
+}
+
+.open > a {
+ outline: 0;
+}
+
+.dropdown-header {
+ display: block;
+ padding: 3px 20px;
+ font-size: 12px;
+ line-height: 1.428571429;
+ color: #999999;
+}
+
+.dropdown-backdrop {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 990;
+}
+
+.pull-right > .dropdown-menu {
+ right: 0;
+ left: auto;
+}
+
+.dropup .caret,
+.navbar-fixed-bottom .dropdown .caret {
+ border-top: 0 dotted;
+ border-bottom: 4px solid #000000;
+ content: "";
+}
+
+.dropup .dropdown-menu,
+.navbar-fixed-bottom .dropdown .dropdown-menu {
+ top: auto;
+ bottom: 100%;
+ margin-bottom: 1px;
+}
+
+@media (min-width: 768px) {
+ .navbar-right .dropdown-menu {
+ right: 0;
+ left: auto;
+ }
+}
+
+.btn-default .caret {
+ border-top-color: #333333;
+}
+
+.btn-primary .caret,
+.btn-success .caret,
+.btn-warning .caret,
+.btn-danger .caret,
+.btn-info .caret {
+ border-top-color: #fff;
+}
+
+.dropup .btn-default .caret {
+ border-bottom-color: #333333;
+}
+
+.dropup .btn-primary .caret,
+.dropup .btn-success .caret,
+.dropup .btn-warning .caret,
+.dropup .btn-danger .caret,
+.dropup .btn-info .caret {
+ border-bottom-color: #fff;
+}
+
+.btn-group,
+.btn-group-vertical {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+}
+
+.btn-group > .btn,
+.btn-group-vertical > .btn {
+ position: relative;
+ float: left;
+}
+
+.btn-group > .btn:hover,
+.btn-group-vertical > .btn:hover,
+.btn-group > .btn:focus,
+.btn-group-vertical > .btn:focus,
+.btn-group > .btn:active,
+.btn-group-vertical > .btn:active,
+.btn-group > .btn.active,
+.btn-group-vertical > .btn.active {
+ z-index: 2;
+}
+
+.btn-group > .btn:focus,
+.btn-group-vertical > .btn:focus {
+ outline: none;
+}
+
+.btn-group .btn + .btn,
+.btn-group .btn + .btn-group,
+.btn-group .btn-group + .btn,
+.btn-group .btn-group + .btn-group {
+ margin-left: -1px;
+}
+
+.btn-toolbar:before,
+.btn-toolbar:after {
+ display: table;
+ content: " ";
+}
+
+.btn-toolbar:after {
+ clear: both;
+}
+
+.btn-toolbar:before,
+.btn-toolbar:after {
+ display: table;
+ content: " ";
+}
+
+.btn-toolbar:after {
+ clear: both;
+}
+
+.btn-toolbar .btn-group {
+ float: left;
+}
+
+.btn-toolbar > .btn + .btn,
+.btn-toolbar > .btn-group + .btn,
+.btn-toolbar > .btn + .btn-group,
+.btn-toolbar > .btn-group + .btn-group {
+ margin-left: 5px;
+}
+
+.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
+ border-radius: 0;
+}
+
+.btn-group > .btn:first-child {
+ margin-left: 0;
+}
+
+.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.btn-group > .btn:last-child:not(:first-child),
+.btn-group > .dropdown-toggle:not(:first-child) {
+ border-bottom-left-radius: 0;
+ border-top-left-radius: 0;
+}
+
+.btn-group > .btn-group {
+ float: left;
+}
+
+.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
+ border-radius: 0;
+}
+
+.btn-group > .btn-group:first-child > .btn:last-child,
+.btn-group > .btn-group:first-child > .dropdown-toggle {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.btn-group > .btn-group:last-child > .btn:first-child {
+ border-bottom-left-radius: 0;
+ border-top-left-radius: 0;
+}
+
+.btn-group .dropdown-toggle:active,
+.btn-group.open .dropdown-toggle {
+ outline: 0;
+}
+
+.btn-group-xs > .btn {
+ padding: 5px 10px;
+ padding: 1px 5px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+
+.btn-group-sm > .btn {
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+
+.btn-group-lg > .btn {
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.33;
+ border-radius: 6px;
+}
+
+.btn-group > .btn + .dropdown-toggle {
+ padding-right: 8px;
+ padding-left: 8px;
+}
+
+.btn-group > .btn-lg + .dropdown-toggle {
+ padding-right: 12px;
+ padding-left: 12px;
+}
+
+.btn-group.open .dropdown-toggle {
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+}
+
+.btn .caret {
+ margin-left: 0;
+}
+
+.btn-lg .caret {
+ border-width: 5px 5px 0;
+ border-bottom-width: 0;
+}
+
+.dropup .btn-lg .caret {
+ border-width: 0 5px 5px;
+}
+
+.btn-group-vertical > .btn,
+.btn-group-vertical > .btn-group {
+ display: block;
+ float: none;
+ width: 100%;
+ max-width: 100%;
+}
+
+.btn-group-vertical > .btn-group:before,
+.btn-group-vertical > .btn-group:after {
+ display: table;
+ content: " ";
+}
+
+.btn-group-vertical > .btn-group:after {
+ clear: both;
+}
+
+.btn-group-vertical > .btn-group:before,
+.btn-group-vertical > .btn-group:after {
+ display: table;
+ content: " ";
+}
+
+.btn-group-vertical > .btn-group:after {
+ clear: both;
+}
+
+.btn-group-vertical > .btn-group > .btn {
+ float: none;
+}
+
+.btn-group-vertical > .btn + .btn,
+.btn-group-vertical > .btn + .btn-group,
+.btn-group-vertical > .btn-group + .btn,
+.btn-group-vertical > .btn-group + .btn-group {
+ margin-top: -1px;
+ margin-left: 0;
+}
+
+.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
+ border-radius: 0;
+}
+
+.btn-group-vertical > .btn:first-child:not(:last-child) {
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.btn-group-vertical > .btn:last-child:not(:first-child) {
+ border-top-right-radius: 0;
+ border-bottom-left-radius: 4px;
+ border-top-left-radius: 0;
+}
+
+.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
+ border-radius: 0;
+}
+
+.btn-group-vertical > .btn-group:first-child > .btn:last-child,
+.btn-group-vertical > .btn-group:first-child > .dropdown-toggle {
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.btn-group-vertical > .btn-group:last-child > .btn:first-child {
+ border-top-right-radius: 0;
+ border-top-left-radius: 0;
+}
+
+.btn-group-justified {
+ display: table;
+ width: 100%;
+ border-collapse: separate;
+ table-layout: fixed;
+}
+
+.btn-group-justified .btn {
+ display: table-cell;
+ float: none;
+ width: 1%;
+}
+
+[data-toggle="buttons"] > .btn > input[type="radio"],
+[data-toggle="buttons"] > .btn > input[type="checkbox"] {
+ display: none;
+}
+
+.input-group {
+ position: relative;
+ display: table;
+ border-collapse: separate;
+}
+
+.input-group.col {
+ float: none;
+ padding-right: 0;
+ padding-left: 0;
+}
+
+.input-group .form-control {
+ width: 100%;
+ margin-bottom: 0;
+}
+
+.input-group-lg > .form-control,
+.input-group-lg > .input-group-addon,
+.input-group-lg > .input-group-btn > .btn {
+ height: 45px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.33;
+ border-radius: 6px;
+}
+
+select.input-group-lg > .form-control,
+select.input-group-lg > .input-group-addon,
+select.input-group-lg > .input-group-btn > .btn {
+ height: 45px;
+ line-height: 45px;
+}
+
+textarea.input-group-lg > .form-control,
+textarea.input-group-lg > .input-group-addon,
+textarea.input-group-lg > .input-group-btn > .btn {
+ height: auto;
+}
+
+.input-group-sm > .form-control,
+.input-group-sm > .input-group-addon,
+.input-group-sm > .input-group-btn > .btn {
+ height: 30px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+
+select.input-group-sm > .form-control,
+select.input-group-sm > .input-group-addon,
+select.input-group-sm > .input-group-btn > .btn {
+ height: 30px;
+ line-height: 30px;
+}
+
+textarea.input-group-sm > .form-control,
+textarea.input-group-sm > .input-group-addon,
+textarea.input-group-sm > .input-group-btn > .btn {
+ height: auto;
+}
+
+.input-group-addon,
+.input-group-btn,
+.input-group .form-control {
+ display: table-cell;
+}
+
+.input-group-addon:not(:first-child):not(:last-child),
+.input-group-btn:not(:first-child):not(:last-child),
+.input-group .form-control:not(:first-child):not(:last-child) {
+ border-radius: 0;
+}
+
+.input-group-addon,
+.input-group-btn {
+ width: 1%;
+ white-space: nowrap;
+ vertical-align: middle;
+}
+
+.input-group-addon {
+ padding: 6px 12px;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 1;
+ text-align: center;
+ background-color: #eeeeee;
+ border: 1px solid #cccccc;
+ border-radius: 4px;
+}
+
+.input-group-addon.input-sm {
+ padding: 5px 10px;
+ font-size: 12px;
+ border-radius: 3px;
+}
+
+.input-group-addon.input-lg {
+ padding: 10px 16px;
+ font-size: 18px;
+ border-radius: 6px;
+}
+
+.input-group-addon input[type="radio"],
+.input-group-addon input[type="checkbox"] {
+ margin-top: 0;
+}
+
+.input-group .form-control:first-child,
+.input-group-addon:first-child,
+.input-group-btn:first-child > .btn,
+.input-group-btn:first-child > .dropdown-toggle,
+.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.input-group-addon:first-child {
+ border-right: 0;
+}
+
+.input-group .form-control:last-child,
+.input-group-addon:last-child,
+.input-group-btn:last-child > .btn,
+.input-group-btn:last-child > .dropdown-toggle,
+.input-group-btn:first-child > .btn:not(:first-child) {
+ border-bottom-left-radius: 0;
+ border-top-left-radius: 0;
+}
+
+.input-group-addon:last-child {
+ border-left: 0;
+}
+
+.input-group-btn {
+ position: relative;
+ white-space: nowrap;
+}
+
+.input-group-btn > .btn {
+ position: relative;
+}
+
+.input-group-btn > .btn + .btn {
+ margin-left: -4px;
+}
+
+.input-group-btn > .btn:hover,
+.input-group-btn > .btn:active {
+ z-index: 2;
+}
+
+.nav {
+ padding-left: 0;
+ margin-bottom: 0;
+ list-style: none;
+}
+
+.nav:before,
+.nav:after {
+ display: table;
+ content: " ";
+}
+
+.nav:after {
+ clear: both;
+}
+
+.nav:before,
+.nav:after {
+ display: table;
+ content: " ";
+}
+
+.nav:after {
+ clear: both;
+}
+
+.nav > li {
+ position: relative;
+ display: block;
+}
+
+.nav > li > a {
+ position: relative;
+ display: block;
+ padding: 10px 15px;
+}
+
+.nav > li > a:hover,
+.nav > li > a:focus {
+ text-decoration: none;
+ background-color: #eeeeee;
+}
+
+.nav > li.disabled > a {
+ color: #999999;
+}
+
+.nav > li.disabled > a:hover,
+.nav > li.disabled > a:focus {
+ color: #999999;
+ text-decoration: none;
+ cursor: not-allowed;
+ background-color: transparent;
+}
+
+.nav .open > a,
+.nav .open > a:hover,
+.nav .open > a:focus {
+ background-color: #eeeeee;
+ border-color: #428bca;
+}
+
+.nav .nav-divider {
+ height: 1px;
+ margin: 9px 0;
+ overflow: hidden;
+ background-color: #e5e5e5;
+}
+
+.nav > li > a > img {
+ max-width: none;
+}
+
+.nav-tabs {
+ border-bottom: 1px solid #dddddd;
+}
+
+.nav-tabs > li {
+ float: left;
+ margin-bottom: -1px;
+}
+
+.nav-tabs > li > a {
+ margin-right: 2px;
+ line-height: 1.428571429;
+ border: 1px solid transparent;
+ border-radius: 4px 4px 0 0;
+}
+
+.nav-tabs > li > a:hover {
+ border-color: #eeeeee #eeeeee #dddddd;
+}
+
+.nav-tabs > li.active > a,
+.nav-tabs > li.active > a:hover,
+.nav-tabs > li.active > a:focus {
+ color: #555555;
+ cursor: default;
+ background-color: #ffffff;
+ border: 1px solid #dddddd;
+ border-bottom-color: transparent;
+}
+
+.nav-tabs.nav-justified {
+ width: 100%;
+ border-bottom: 0;
+}
+
+.nav-tabs.nav-justified > li {
+ float: none;
+}
+
+.nav-tabs.nav-justified > li > a {
+ text-align: center;
+}
+
+@media (min-width: 768px) {
+ .nav-tabs.nav-justified > li {
+ display: table-cell;
+ width: 1%;
+ }
+}
+
+.nav-tabs.nav-justified > li > a {
+ margin-right: 0;
+ border-bottom: 1px solid #dddddd;
+}
+
+.nav-tabs.nav-justified > .active > a {
+ border-bottom-color: #ffffff;
+}
+
+.nav-pills > li {
+ float: left;
+}
+
+.nav-pills > li > a {
+ border-radius: 5px;
+}
+
+.nav-pills > li + li {
+ margin-left: 2px;
+}
+
+.nav-pills > li.active > a,
+.nav-pills > li.active > a:hover,
+.nav-pills > li.active > a:focus {
+ color: #ffffff;
+ background-color: #428bca;
+}
+
+.nav-stacked > li {
+ float: none;
+}
+
+.nav-stacked > li + li {
+ margin-top: 2px;
+ margin-left: 0;
+}
+
+.nav-justified {
+ width: 100%;
+}
+
+.nav-justified > li {
+ float: none;
+}
+
+.nav-justified > li > a {
+ text-align: center;
+}
+
+@media (min-width: 768px) {
+ .nav-justified > li {
+ display: table-cell;
+ width: 1%;
+ }
+}
+
+.nav-tabs-justified {
+ border-bottom: 0;
+}
+
+.nav-tabs-justified > li > a {
+ margin-right: 0;
+ border-bottom: 1px solid #dddddd;
+}
+
+.nav-tabs-justified > .active > a {
+ border-bottom-color: #ffffff;
+}
+
+.tabbable:before,
+.tabbable:after {
+ display: table;
+ content: " ";
+}
+
+.tabbable:after {
+ clear: both;
+}
+
+.tabbable:before,
+.tabbable:after {
+ display: table;
+ content: " ";
+}
+
+.tabbable:after {
+ clear: both;
+}
+
+.tab-content > .tab-pane,
+.pill-content > .pill-pane {
+ display: none;
+}
+
+.tab-content > .active,
+.pill-content > .active {
+ display: block;
+}
+
+.nav .caret {
+ border-top-color: #428bca;
+ border-bottom-color: #428bca;
+}
+
+.nav a:hover .caret {
+ border-top-color: #2a6496;
+ border-bottom-color: #2a6496;
+}
+
+.nav-tabs .dropdown-menu {
+ margin-top: -1px;
+ border-top-right-radius: 0;
+ border-top-left-radius: 0;
+}
+
+.navbar {
+ position: relative;
+ z-index: 1000;
+ min-height: 50px;
+ margin-bottom: 20px;
+ border: 1px solid transparent;
+}
+
+.navbar:before,
+.navbar:after {
+ display: table;
+ content: " ";
+}
+
+.navbar:after {
+ clear: both;
+}
+
+.navbar:before,
+.navbar:after {
+ display: table;
+ content: " ";
+}
+
+.navbar:after {
+ clear: both;
+}
+
+@media (min-width: 768px) {
+ .navbar {
+ border-radius: 4px;
+ }
+}
+
+.navbar-header:before,
+.navbar-header:after {
+ display: table;
+ content: " ";
+}
+
+.navbar-header:after {
+ clear: both;
+}
+
+.navbar-header:before,
+.navbar-header:after {
+ display: table;
+ content: " ";
+}
+
+.navbar-header:after {
+ clear: both;
+}
+
+@media (min-width: 768px) {
+ .navbar-header {
+ float: left;
+ }
+}
+
+.navbar-collapse {
+ max-height: 340px;
+ padding-right: 15px;
+ padding-left: 15px;
+ overflow-x: visible;
+ border-top: 1px solid transparent;
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
+ -webkit-overflow-scrolling: touch;
+}
+
+.navbar-collapse:before,
+.navbar-collapse:after {
+ display: table;
+ content: " ";
+}
+
+.navbar-collapse:after {
+ clear: both;
+}
+
+.navbar-collapse:before,
+.navbar-collapse:after {
+ display: table;
+ content: " ";
+}
+
+.navbar-collapse:after {
+ clear: both;
+}
+
+.navbar-collapse.in {
+ overflow-y: auto;
+}
+
+@media (min-width: 768px) {
+ .navbar-collapse {
+ width: auto;
+ border-top: 0;
+ box-shadow: none;
+ }
+
+ .navbar-collapse.collapse {
+ display: block !important;
+ height: auto !important;
+ padding-bottom: 0;
+ overflow: visible !important;
+ }
+
+ .navbar-collapse.in {
+ overflow-y: visible;
+ }
+
+ .navbar-collapse .navbar-nav.navbar-left:first-child {
+ margin-left: -15px;
+ }
+
+ .navbar-collapse .navbar-nav.navbar-right:last-child {
+ margin-right: -15px;
+ }
+
+ .navbar-collapse .navbar-text:last-child {
+ margin-right: 0;
+ }
+}
+
+.container > .navbar-header,
+.container > .navbar-collapse {
+ margin-right: -15px;
+ margin-left: -15px;
+}
+
+@media (min-width: 768px) {
+ .container > .navbar-header,
+ .container > .navbar-collapse {
+ margin-right: 0;
+ margin-left: 0;
+ }
+}
+
+.navbar-static-top {
+ border-width: 0 0 1px;
+}
+
+@media (min-width: 768px) {
+ .navbar-static-top {
+ border-radius: 0;
+ }
+}
+
+.navbar-fixed-top,
+.navbar-fixed-bottom {
+ position: fixed;
+ right: 0;
+ left: 0;
+ border-width: 0 0 1px;
+}
+
+@media (min-width: 768px) {
+ .navbar-fixed-top,
+ .navbar-fixed-bottom {
+ border-radius: 0;
+ }
+}
+
+.navbar-fixed-top {
+ top: 0;
+ z-index: 1030;
+}
+
+.navbar-fixed-bottom {
+ bottom: 0;
+ margin-bottom: 0;
+}
+
+.navbar-brand {
+ float: left;
+ padding: 15px 15px;
+ font-size: 18px;
+ line-height: 20px;
+}
+
+.navbar-brand:hover,
+.navbar-brand:focus {
+ text-decoration: none;
+}
+
+@media (min-width: 768px) {
+ .navbar > .container .navbar-brand {
+ margin-left: -15px;
+ }
+}
+
+.navbar-toggle {
+ position: relative;
+ float: right;
+ padding: 9px 10px;
+ margin-top: 8px;
+ margin-right: 15px;
+ margin-bottom: 8px;
+ background-color: transparent;
+ border: 1px solid transparent;
+ border-radius: 4px;
+}
+
+.navbar-toggle .icon-bar {
+ display: block;
+ width: 22px;
+ height: 2px;
+ border-radius: 1px;
+}
+
+.navbar-toggle .icon-bar + .icon-bar {
+ margin-top: 4px;
+}
+
+@media (min-width: 768px) {
+ .navbar-toggle {
+ display: none;
+ }
+}
+
+.navbar-nav {
+ margin: 7.5px -15px;
+}
+
+.navbar-nav > li > a {
+ padding-top: 10px;
+ padding-bottom: 10px;
+ line-height: 20px;
+}
+
+@media (max-width: 767px) {
+ .navbar-nav .open .dropdown-menu {
+ position: static;
+ float: none;
+ width: auto;
+ margin-top: 0;
+ background-color: transparent;
+ border: 0;
+ box-shadow: none;
+ }
+
+ .navbar-nav .open .dropdown-menu > li > a,
+ .navbar-nav .open .dropdown-menu .dropdown-header {
+ padding: 5px 15px 5px 25px;
+ }
+
+ .navbar-nav .open .dropdown-menu > li > a {
+ line-height: 20px;
+ }
+
+ .navbar-nav .open .dropdown-menu > li > a:hover,
+ .navbar-nav .open .dropdown-menu > li > a:focus {
+ background-image: none;
+ }
+}
+
+@media (min-width: 768px) {
+ .navbar-nav {
+ float: left;
+ margin: 0;
+ }
+
+ .navbar-nav > li {
+ float: left;
+ }
+
+ .navbar-nav > li > a {
+ padding-top: 15px;
+ padding-bottom: 15px;
+ }
+}
+
+@media (min-width: 768px) {
+ .navbar-left {
+ float: left !important;
+ }
+
+ .navbar-right {
+ float: right !important;
+ }
+}
+
+.navbar-form {
+ padding: 10px 15px;
+ margin-top: 8px;
+ margin-right: -15px;
+ margin-bottom: 8px;
+ margin-left: -15px;
+ border-top: 1px solid transparent;
+ border-bottom: 1px solid transparent;
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
+}
+
+@media (min-width: 768px) {
+ .navbar-form .form-group {
+ display: inline-block;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+
+ .navbar-form .form-control {
+ display: inline-block;
+ }
+
+ .navbar-form .radio,
+ .navbar-form .checkbox {
+ display: inline-block;
+ padding-left: 0;
+ margin-top: 0;
+ margin-bottom: 0;
+ }
+
+ .navbar-form .radio input[type="radio"],
+ .navbar-form .checkbox input[type="checkbox"] {
+ float: none;
+ margin-left: 0;
+ }
+}
+
+@media (max-width: 767px) {
+ .navbar-form .form-group {
+ margin-bottom: 5px;
+ }
+}
+
+@media (min-width: 768px) {
+ .navbar-form {
+ width: auto;
+ padding-top: 0;
+ padding-bottom: 0;
+ margin-right: 0;
+ margin-left: 0;
+ border: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+}
+
+.navbar-nav > li > .dropdown-menu {
+ margin-top: 0;
+ border-top-right-radius: 0;
+ border-top-left-radius: 0;
+}
+
+.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.navbar-nav.pull-right > li > .dropdown-menu,
+.navbar-nav > li > .dropdown-menu.pull-right {
+ right: 0;
+ left: auto;
+}
+
+.navbar-btn {
+ margin-top: 8px;
+ margin-bottom: 8px;
+}
+
+.navbar-text {
+ float: left;
+ margin-top: 15px;
+ margin-bottom: 15px;
+}
+
+@media (min-width: 768px) {
+ .navbar-text {
+ margin-right: 15px;
+ margin-left: 15px;
+ }
+}
+
+.navbar-default {
+ background-color: #f8f8f8;
+ border-color: #e7e7e7;
+}
+
+.navbar-default .navbar-brand {
+ color: #777777;
+}
+
+.navbar-default .navbar-brand:hover,
+.navbar-default .navbar-brand:focus {
+ color: #5e5e5e;
+ background-color: transparent;
+}
+
+.navbar-default .navbar-text {
+ color: #777777;
+}
+
+.navbar-default .navbar-nav > li > a {
+ color: #777777;
+}
+
+.navbar-default .navbar-nav > li > a:hover,
+.navbar-default .navbar-nav > li > a:focus {
+ color: #333333;
+ background-color: transparent;
+}
+
+.navbar-default .navbar-nav > .active > a,
+.navbar-default .navbar-nav > .active > a:hover,
+.navbar-default .navbar-nav > .active > a:focus {
+ color: #555555;
+ background-color: #e7e7e7;
+}
+
+.navbar-default .navbar-nav > .disabled > a,
+.navbar-default .navbar-nav > .disabled > a:hover,
+.navbar-default .navbar-nav > .disabled > a:focus {
+ color: #cccccc;
+ background-color: transparent;
+}
+
+.navbar-default .navbar-toggle {
+ border-color: #dddddd;
+}
+
+.navbar-default .navbar-toggle:hover,
+.navbar-default .navbar-toggle:focus {
+ background-color: #dddddd;
+}
+
+.navbar-default .navbar-toggle .icon-bar {
+ background-color: #cccccc;
+}
+
+.navbar-default .navbar-collapse,
+.navbar-default .navbar-form {
+ border-color: #e6e6e6;
+}
+
+.navbar-default .navbar-nav > .dropdown > a:hover .caret,
+.navbar-default .navbar-nav > .dropdown > a:focus .caret {
+ border-top-color: #333333;
+ border-bottom-color: #333333;
+}
+
+.navbar-default .navbar-nav > .open > a,
+.navbar-default .navbar-nav > .open > a:hover,
+.navbar-default .navbar-nav > .open > a:focus {
+ color: #555555;
+ background-color: #e7e7e7;
+}
+
+.navbar-default .navbar-nav > .open > a .caret,
+.navbar-default .navbar-nav > .open > a:hover .caret,
+.navbar-default .navbar-nav > .open > a:focus .caret {
+ border-top-color: #555555;
+ border-bottom-color: #555555;
+}
+
+.navbar-default .navbar-nav > .dropdown > a .caret {
+ border-top-color: #777777;
+ border-bottom-color: #777777;
+}
+
+@media (max-width: 767px) {
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a {
+ color: #777777;
+ }
+
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
+ color: #333333;
+ background-color: transparent;
+ }
+
+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
+ color: #555555;
+ background-color: #e7e7e7;
+ }
+
+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+ color: #cccccc;
+ background-color: transparent;
+ }
+}
+
+.navbar-default .navbar-link {
+ color: #777777;
+}
+
+.navbar-default .navbar-link:hover {
+ color: #333333;
+}
+
+.navbar-inverse {
+ background-color: #222222;
+ border-color: #080808;
+}
+
+.navbar-inverse .navbar-brand {
+ color: #999999;
+}
+
+.navbar-inverse .navbar-brand:hover,
+.navbar-inverse .navbar-brand:focus {
+ color: #ffffff;
+ background-color: transparent;
+}
+
+.navbar-inverse .navbar-text {
+ color: #999999;
+}
+
+.navbar-inverse .navbar-nav > li > a {
+ color: #999999;
+}
+
+.navbar-inverse .navbar-nav > li > a:hover,
+.navbar-inverse .navbar-nav > li > a:focus {
+ color: #ffffff;
+ background-color: transparent;
+}
+
+.navbar-inverse .navbar-nav > .active > a,
+.navbar-inverse .navbar-nav > .active > a:hover,
+.navbar-inverse .navbar-nav > .active > a:focus {
+ color: #ffffff;
+ background-color: #080808;
+}
+
+.navbar-inverse .navbar-nav > .disabled > a,
+.navbar-inverse .navbar-nav > .disabled > a:hover,
+.navbar-inverse .navbar-nav > .disabled > a:focus {
+ color: #444444;
+ background-color: transparent;
+}
+
+.navbar-inverse .navbar-toggle {
+ border-color: #333333;
+}
+
+.navbar-inverse .navbar-toggle:hover,
+.navbar-inverse .navbar-toggle:focus {
+ background-color: #333333;
+}
+
+.navbar-inverse .navbar-toggle .icon-bar {
+ background-color: #ffffff;
+}
+
+.navbar-inverse .navbar-collapse,
+.navbar-inverse .navbar-form {
+ border-color: #101010;
+}
+
+.navbar-inverse .navbar-nav > .open > a,
+.navbar-inverse .navbar-nav > .open > a:hover,
+.navbar-inverse .navbar-nav > .open > a:focus {
+ color: #ffffff;
+ background-color: #080808;
+}
+
+.navbar-inverse .navbar-nav > .dropdown > a:hover .caret {
+ border-top-color: #ffffff;
+ border-bottom-color: #ffffff;
+}
+
+.navbar-inverse .navbar-nav > .dropdown > a .caret {
+ border-top-color: #999999;
+ border-bottom-color: #999999;
+}
+
+.navbar-inverse .navbar-nav > .open > a .caret,
+.navbar-inverse .navbar-nav > .open > a:hover .caret,
+.navbar-inverse .navbar-nav > .open > a:focus .caret {
+ border-top-color: #ffffff;
+ border-bottom-color: #ffffff;
+}
+
+@media (max-width: 767px) {
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
+ border-color: #080808;
+ }
+
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
+ color: #999999;
+ }
+
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
+ color: #ffffff;
+ background-color: transparent;
+ }
+
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
+ color: #ffffff;
+ background-color: #080808;
+ }
+
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+ color: #444444;
+ background-color: transparent;
+ }
+}
+
+.navbar-inverse .navbar-link {
+ color: #999999;
+}
+
+.navbar-inverse .navbar-link:hover {
+ color: #ffffff;
+}
+
+.breadcrumb {
+ padding: 8px 15px;
+ margin-bottom: 20px;
+ list-style: none;
+ background-color: #f5f5f5;
+ border-radius: 4px;
+}
+
+.breadcrumb > li {
+ display: inline-block;
+}
+
+.breadcrumb > li + li:before {
+ padding: 0 5px;
+ color: #cccccc;
+ content: "/\00a0";
+}
+
+.breadcrumb > .active {
+ color: #999999;
+}
+
+.pagination {
+ display: inline-block;
+ padding-left: 0;
+ margin: 20px 0;
+ border-radius: 4px;
+}
+
+.pagination > li {
+ display: inline;
+}
+
+.pagination > li > a,
+.pagination > li > span {
+ position: relative;
+ float: left;
+ padding: 6px 12px;
+ margin-left: -1px;
+ line-height: 1.428571429;
+ text-decoration: none;
+ background-color: #ffffff;
+ border: 1px solid #dddddd;
+}
+
+.pagination > li:first-child > a,
+.pagination > li:first-child > span {
+ margin-left: 0;
+ border-bottom-left-radius: 4px;
+ border-top-left-radius: 4px;
+}
+
+.pagination > li:last-child > a,
+.pagination > li:last-child > span {
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+}
+
+.pagination > li > a:hover,
+.pagination > li > span:hover,
+.pagination > li > a:focus,
+.pagination > li > span:focus {
+ background-color: #eeeeee;
+}
+
+.pagination > .active > a,
+.pagination > .active > span,
+.pagination > .active > a:hover,
+.pagination > .active > span:hover,
+.pagination > .active > a:focus,
+.pagination > .active > span:focus {
+ z-index: 2;
+ color: #ffffff;
+ cursor: default;
+ background-color: #428bca;
+ border-color: #428bca;
+}
+
+.pagination > .disabled > span,
+.pagination > .disabled > span:hover,
+.pagination > .disabled > span:focus,
+.pagination > .disabled > a,
+.pagination > .disabled > a:hover,
+.pagination > .disabled > a:focus {
+ color: #999999;
+ cursor: not-allowed;
+ background-color: #ffffff;
+ border-color: #dddddd;
+}
+
+.pagination-lg > li > a,
+.pagination-lg > li > span {
+ padding: 10px 16px;
+ font-size: 18px;
+}
+
+.pagination-lg > li:first-child > a,
+.pagination-lg > li:first-child > span {
+ border-bottom-left-radius: 6px;
+ border-top-left-radius: 6px;
+}
+
+.pagination-lg > li:last-child > a,
+.pagination-lg > li:last-child > span {
+ border-top-right-radius: 6px;
+ border-bottom-right-radius: 6px;
+}
+
+.pagination-sm > li > a,
+.pagination-sm > li > span {
+ padding: 5px 10px;
+ font-size: 12px;
+}
+
+.pagination-sm > li:first-child > a,
+.pagination-sm > li:first-child > span {
+ border-bottom-left-radius: 3px;
+ border-top-left-radius: 3px;
+}
+
+.pagination-sm > li:last-child > a,
+.pagination-sm > li:last-child > span {
+ border-top-right-radius: 3px;
+ border-bottom-right-radius: 3px;
+}
+
+.pager {
+ padding-left: 0;
+ margin: 20px 0;
+ text-align: center;
+ list-style: none;
+}
+
+.pager:before,
+.pager:after {
+ display: table;
+ content: " ";
+}
+
+.pager:after {
+ clear: both;
+}
+
+.pager:before,
+.pager:after {
+ display: table;
+ content: " ";
+}
+
+.pager:after {
+ clear: both;
+}
+
+.pager li {
+ display: inline;
+}
+
+.pager li > a,
+.pager li > span {
+ display: inline-block;
+ padding: 5px 14px;
+ background-color: #ffffff;
+ border: 1px solid #dddddd;
+ border-radius: 15px;
+}
+
+.pager li > a:hover,
+.pager li > a:focus {
+ text-decoration: none;
+ background-color: #eeeeee;
+}
+
+.pager .next > a,
+.pager .next > span {
+ float: right;
+}
+
+.pager .previous > a,
+.pager .previous > span {
+ float: left;
+}
+
+.pager .disabled > a,
+.pager .disabled > a:hover,
+.pager .disabled > a:focus,
+.pager .disabled > span {
+ color: #999999;
+ cursor: not-allowed;
+ background-color: #ffffff;
+}
+
+.label {
+ display: inline;
+ padding: .2em .6em .3em;
+ font-size: 75%;
+ font-weight: bold;
+ line-height: 1;
+ color: #ffffff;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: baseline;
+ border-radius: .25em;
+}
+
+.label[href]:hover,
+.label[href]:focus {
+ color: #ffffff;
+ text-decoration: none;
+ cursor: pointer;
+}
+
+.label:empty {
+ display: none;
+}
+
+.label-default {
+ background-color: #999999;
+}
+
+.label-default[href]:hover,
+.label-default[href]:focus {
+ background-color: #808080;
+}
+
+.label-primary {
+ background-color: #428bca;
+}
+
+.label-primary[href]:hover,
+.label-primary[href]:focus {
+ background-color: #3071a9;
+}
+
+.label-success {
+ background-color: #5cb85c;
+}
+
+.label-success[href]:hover,
+.label-success[href]:focus {
+ background-color: #449d44;
+}
+
+.label-info {
+ background-color: #5bc0de;
+}
+
+.label-info[href]:hover,
+.label-info[href]:focus {
+ background-color: #31b0d5;
+}
+
+.label-warning {
+ background-color: #f0ad4e;
+}
+
+.label-warning[href]:hover,
+.label-warning[href]:focus {
+ background-color: #ec971f;
+}
+
+.label-danger {
+ background-color: #d9534f;
+}
+
+.label-danger[href]:hover,
+.label-danger[href]:focus {
+ background-color: #c9302c;
+}
+
+.badge {
+ display: inline-block;
+ min-width: 10px;
+ padding: 3px 7px;
+ font-size: 12px;
+ font-weight: bold;
+ line-height: 1;
+ color: #ffffff;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: baseline;
+ background-color: #999999;
+ border-radius: 10px;
+}
+
+.badge:empty {
+ display: none;
+}
+
+a.badge:hover,
+a.badge:focus {
+ color: #ffffff;
+ text-decoration: none;
+ cursor: pointer;
+}
+
+.btn .badge {
+ position: relative;
+ top: -1px;
+}
+
+a.list-group-item.active > .badge,
+.nav-pills > .active > a > .badge {
+ color: #428bca;
+ background-color: #ffffff;
+}
+
+.nav-pills > li > a > .badge {
+ margin-left: 3px;
+}
+
+.jumbotron {
+ padding: 30px;
+ margin-bottom: 30px;
+ font-size: 21px;
+ font-weight: 200;
+ line-height: 2.1428571435;
+ color: inherit;
+ background-color: #eeeeee;
+}
+
+.jumbotron h1 {
+ line-height: 1;
+ color: inherit;
+}
+
+.jumbotron p {
+ line-height: 1.4;
+}
+
+.container .jumbotron {
+ border-radius: 6px;
+}
+
+@media screen and (min-width: 768px) {
+ .jumbotron {
+ padding-top: 48px;
+ padding-bottom: 48px;
+ }
+
+ .container .jumbotron {
+ padding-right: 60px;
+ padding-left: 60px;
+ }
+
+ .jumbotron h1 {
+ font-size: 63px;
+ }
+}
+
+.thumbnail {
+ display: inline-block;
+ display: block;
+ height: auto;
+ max-width: 100%;
+ padding: 4px;
+ line-height: 1.428571429;
+ background-color: #ffffff;
+ border: 1px solid #dddddd;
+ border-radius: 4px;
+ -webkit-transition: all 0.2s ease-in-out;
+ transition: all 0.2s ease-in-out;
+}
+
+.thumbnail > img {
+ display: block;
+ height: auto;
+ max-width: 100%;
+}
+
+a.thumbnail:hover,
+a.thumbnail:focus {
+ border-color: #428bca;
+}
+
+.thumbnail > img {
+ margin-right: auto;
+ margin-left: auto;
+}
+
+.thumbnail .caption {
+ padding: 9px;
+ color: #333333;
+}
+
+.alert {
+ padding: 15px;
+ margin-bottom: 20px;
+ border: 1px solid transparent;
+ border-radius: 4px;
+}
+
+.alert h4 {
+ margin-top: 0;
+ color: inherit;
+}
+
+.alert .alert-link {
+ font-weight: bold;
+}
+
+.alert > p,
+.alert > ul {
+ margin-bottom: 0;
+}
+
+.alert > p + p {
+ margin-top: 5px;
+}
+
+.alert-dismissable {
+ padding-right: 35px;
+}
+
+.alert-dismissable .close {
+ position: relative;
+ top: -2px;
+ right: -21px;
+ color: inherit;
+}
+
+.alert-success {
+ color: #468847;
+ background-color: #dff0d8;
+ border-color: #d6e9c6;
+}
+
+.alert-success hr {
+ border-top-color: #c9e2b3;
+}
+
+.alert-success .alert-link {
+ color: #356635;
+}
+
+.alert-info {
+ color: #3a87ad;
+ background-color: #d9edf7;
+ border-color: #bce8f1;
+}
+
+.alert-info hr {
+ border-top-color: #a6e1ec;
+}
+
+.alert-info .alert-link {
+ color: #2d6987;
+}
+
+.alert-warning {
+ color: #c09853;
+ background-color: #fcf8e3;
+ border-color: #fbeed5;
+}
+
+.alert-warning hr {
+ border-top-color: #f8e5be;
+}
+
+.alert-warning .alert-link {
+ color: #a47e3c;
+}
+
+.alert-danger {
+ color: #b94a48;
+ background-color: #f2dede;
+ border-color: #eed3d7;
+}
+
+.alert-danger hr {
+ border-top-color: #e6c1c7;
+}
+
+.alert-danger .alert-link {
+ color: #953b39;
+}
+
+@-webkit-keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
+}
+
+@-moz-keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
+}
+
+@-o-keyframes progress-bar-stripes {
+ from {
+ background-position: 0 0;
+ }
+ to {
+ background-position: 40px 0;
+ }
+}
+
+@keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
+}
+
+.progress {
+ height: 20px;
+ margin-bottom: 20px;
+ overflow: hidden;
+ background-color: #f5f5f5;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
+}
+
+.progress-bar {
+ float: left;
+ width: 0;
+ height: 100%;
+ font-size: 12px;
+ color: #ffffff;
+ text-align: center;
+ background-color: #428bca;
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+ -webkit-transition: width 0.6s ease;
+ transition: width 0.6s ease;
+}
+
+.progress-striped .progress-bar {
+ background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-size: 40px 40px;
+}
+
+.progress.active .progress-bar {
+ -webkit-animation: progress-bar-stripes 2s linear infinite;
+ -moz-animation: progress-bar-stripes 2s linear infinite;
+ -ms-animation: progress-bar-stripes 2s linear infinite;
+ -o-animation: progress-bar-stripes 2s linear infinite;
+ animation: progress-bar-stripes 2s linear infinite;
+}
+
+.progress-bar-success {
+ background-color: #5cb85c;
+}
+
+.progress-striped .progress-bar-success {
+ background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+}
+
+.progress-bar-info {
+ background-color: #5bc0de;
+}
+
+.progress-striped .progress-bar-info {
+ background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+}
+
+.progress-bar-warning {
+ background-color: #f0ad4e;
+}
+
+.progress-striped .progress-bar-warning {
+ background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+}
+
+.progress-bar-danger {
+ background-color: #d9534f;
+}
+
+.progress-striped .progress-bar-danger {
+ background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+}
+
+.media,
+.media-body {
+ overflow: hidden;
+ zoom: 1;
+}
+
+.media,
+.media .media {
+ margin-top: 15px;
+}
+
+.media:first-child {
+ margin-top: 0;
+}
+
+.media-object {
+ display: block;
+}
+
+.media-heading {
+ margin: 0 0 5px;
+}
+
+.media > .pull-left {
+ margin-right: 10px;
+}
+
+.media > .pull-right {
+ margin-left: 10px;
+}
+
+.media-list {
+ padding-left: 0;
+ list-style: none;
+}
+
+.list-group {
+ padding-left: 0;
+ margin-bottom: 20px;
+}
+
+.list-group-item {
+ position: relative;
+ display: block;
+ padding: 10px 15px;
+ margin-bottom: -1px;
+ background-color: #ffffff;
+ border: 1px solid #dddddd;
+}
+
+.list-group-item:first-child {
+ border-top-right-radius: 4px;
+ border-top-left-radius: 4px;
+}
+
+.list-group-item:last-child {
+ margin-bottom: 0;
+ border-bottom-right-radius: 4px;
+ border-bottom-left-radius: 4px;
+}
+
+.list-group-item > .badge {
+ float: right;
+}
+
+.list-group-item > .badge + .badge {
+ margin-right: 5px;
+}
+
+a.list-group-item {
+ color: #555555;
+}
+
+a.list-group-item .list-group-item-heading {
+ color: #333333;
+}
+
+a.list-group-item:hover,
+a.list-group-item:focus {
+ text-decoration: none;
+ background-color: #f5f5f5;
+}
+
+.list-group-item.active,
+.list-group-item.active:hover,
+.list-group-item.active:focus {
+ z-index: 2;
+ color: #ffffff;
+ background-color: #428bca;
+ border-color: #428bca;
+}
+
+.list-group-item.active .list-group-item-heading,
+.list-group-item.active:hover .list-group-item-heading,
+.list-group-item.active:focus .list-group-item-heading {
+ color: inherit;
+}
+
+.list-group-item.active .list-group-item-text,
+.list-group-item.active:hover .list-group-item-text,
+.list-group-item.active:focus .list-group-item-text {
+ color: #e1edf7;
+}
+
+.list-group-item-heading {
+ margin-top: 0;
+ margin-bottom: 5px;
+}
+
+.list-group-item-text {
+ margin-bottom: 0;
+ line-height: 1.3;
+}
+
+.panel {
+ margin-bottom: 20px;
+ background-color: #ffffff;
+ border: 1px solid transparent;
+ border-radius: 4px;
+ -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
+}
+
+.panel-body {
+ padding: 15px;
+}
+
+.panel-body:before,
+.panel-body:after {
+ display: table;
+ content: " ";
+}
+
+.panel-body:after {
+ clear: both;
+}
+
+.panel-body:before,
+.panel-body:after {
+ display: table;
+ content: " ";
+}
+
+.panel-body:after {
+ clear: both;
+}
+
+.panel > .list-group {
+ margin-bottom: 0;
+}
+
+.panel > .list-group .list-group-item {
+ border-width: 1px 0;
+}
+
+.panel > .list-group .list-group-item:first-child {
+ border-top-right-radius: 0;
+ border-top-left-radius: 0;
+}
+
+.panel > .list-group .list-group-item:last-child {
+ border-bottom: 0;
+}
+
+.panel-heading + .list-group .list-group-item:first-child {
+ border-top-width: 0;
+}
+
+.panel > .table {
+ margin-bottom: 0;
+}
+
+.panel > .panel-body + .table {
+ border-top: 1px solid #dddddd;
+}
+
+.panel-heading {
+ padding: 10px 15px;
+ border-bottom: 1px solid transparent;
+ border-top-right-radius: 3px;
+ border-top-left-radius: 3px;
+}
+
+.panel-title {
+ margin-top: 0;
+ margin-bottom: 0;
+ font-size: 16px;
+}
+
+.panel-title > a {
+ color: inherit;
+}
+
+.panel-footer {
+ padding: 10px 15px;
+ background-color: #f5f5f5;
+ border-top: 1px solid #dddddd;
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+
+.panel-group .panel {
+ margin-bottom: 0;
+ overflow: hidden;
+ border-radius: 4px;
+}
+
+.panel-group .panel + .panel {
+ margin-top: 5px;
+}
+
+.panel-group .panel-heading {
+ border-bottom: 0;
+}
+
+.panel-group .panel-heading + .panel-collapse .panel-body {
+ border-top: 1px solid #dddddd;
+}
+
+.panel-group .panel-footer {
+ border-top: 0;
+}
+
+.panel-group .panel-footer + .panel-collapse .panel-body {
+ border-bottom: 1px solid #dddddd;
+}
+
+.panel-default {
+ border-color: #dddddd;
+}
+
+.panel-default > .panel-heading {
+ color: #333333;
+ background-color: #f5f5f5;
+ border-color: #dddddd;
+}
+
+.panel-default > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #dddddd;
+}
+
+.panel-default > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #dddddd;
+}
+
+.panel-primary {
+ border-color: #428bca;
+}
+
+.panel-primary > .panel-heading {
+ color: #ffffff;
+ background-color: #428bca;
+ border-color: #428bca;
+}
+
+.panel-primary > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #428bca;
+}
+
+.panel-primary > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #428bca;
+}
+
+.panel-success {
+ border-color: #d6e9c6;
+}
+
+.panel-success > .panel-heading {
+ color: #468847;
+ background-color: #dff0d8;
+ border-color: #d6e9c6;
+}
+
+.panel-success > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #d6e9c6;
+}
+
+.panel-success > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #d6e9c6;
+}
+
+.panel-warning {
+ border-color: #fbeed5;
+}
+
+.panel-warning > .panel-heading {
+ color: #c09853;
+ background-color: #fcf8e3;
+ border-color: #fbeed5;
+}
+
+.panel-warning > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #fbeed5;
+}
+
+.panel-warning > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #fbeed5;
+}
+
+.panel-danger {
+ border-color: #eed3d7;
+}
+
+.panel-danger > .panel-heading {
+ color: #b94a48;
+ background-color: #f2dede;
+ border-color: #eed3d7;
+}
+
+.panel-danger > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #eed3d7;
+}
+
+.panel-danger > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #eed3d7;
+}
+
+.panel-info {
+ border-color: #bce8f1;
+}
+
+.panel-info > .panel-heading {
+ color: #3a87ad;
+ background-color: #d9edf7;
+ border-color: #bce8f1;
+}
+
+.panel-info > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #bce8f1;
+}
+
+.panel-info > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #bce8f1;
+}
+
+.well {
+ min-height: 20px;
+ padding: 19px;
+ margin-bottom: 20px;
+ background-color: #f5f5f5;
+ border: 1px solid #e3e3e3;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+}
+
+.well blockquote {
+ border-color: #ddd;
+ border-color: rgba(0, 0, 0, 0.15);
+}
+
+.well-lg {
+ padding: 24px;
+ border-radius: 6px;
+}
+
+.well-sm {
+ padding: 9px;
+ border-radius: 3px;
+}
+
+.close {
+ float: right;
+ font-size: 21px;
+ font-weight: bold;
+ line-height: 1;
+ color: #000000;
+ text-shadow: 0 1px 0 #ffffff;
+ opacity: 0.2;
+ filter: alpha(opacity=20);
+}
+
+.close:hover,
+.close:focus {
+ color: #000000;
+ text-decoration: none;
+ cursor: pointer;
+ opacity: 0.5;
+ filter: alpha(opacity=50);
+}
+
+button.close {
+ padding: 0;
+ cursor: pointer;
+ background: transparent;
+ border: 0;
+ -webkit-appearance: none;
+}
+
+.modal-open {
+ overflow: hidden;
+}
+
+body.modal-open,
+.modal-open .navbar-fixed-top,
+.modal-open .navbar-fixed-bottom {
+ margin-right: 15px;
+}
+
+.modal {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1040;
+ display: none;
+ overflow: auto;
+ overflow-y: scroll;
+}
+
+.modal.fade .modal-dialog {
+ -webkit-transform: translate(0, -25%);
+ -ms-transform: translate(0, -25%);
+ transform: translate(0, -25%);
+ -webkit-transition: -webkit-transform 0.3s ease-out;
+ -moz-transition: -moz-transform 0.3s ease-out;
+ -o-transition: -o-transform 0.3s ease-out;
+ transition: transform 0.3s ease-out;
+}
+
+.modal.in .modal-dialog {
+ -webkit-transform: translate(0, 0);
+ -ms-transform: translate(0, 0);
+ transform: translate(0, 0);
+}
+
+.modal-dialog {
+ z-index: 1050;
+ width: auto;
+ padding: 10px;
+ margin-right: auto;
+ margin-left: auto;
+}
+
+.modal-content {
+ position: relative;
+ background-color: #ffffff;
+ border: 1px solid #999999;
+ border: 1px solid rgba(0, 0, 0, 0.2);
+ border-radius: 6px;
+ outline: none;
+ -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
+ box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
+ background-clip: padding-box;
+}
+
+.modal-backdrop {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1030;
+ background-color: #000000;
+}
+
+.modal-backdrop.fade {
+ opacity: 0;
+ filter: alpha(opacity=0);
+}
+
+.modal-backdrop.in {
+ opacity: 0.5;
+ filter: alpha(opacity=50);
+}
+
+.modal-header {
+ min-height: 16.428571429px;
+ padding: 15px;
+ border-bottom: 1px solid #e5e5e5;
+}
+
+.modal-header .close {
+ margin-top: -2px;
+}
+
+.modal-title {
+ margin: 0;
+ line-height: 1.428571429;
+}
+
+.modal-body {
+ position: relative;
+ padding: 20px;
+}
+
+.modal-footer {
+ padding: 19px 20px 20px;
+ margin-top: 15px;
+ text-align: right;
+ border-top: 1px solid #e5e5e5;
+}
+
+.modal-footer:before,
+.modal-footer:after {
+ display: table;
+ content: " ";
+}
+
+.modal-footer:after {
+ clear: both;
+}
+
+.modal-footer:before,
+.modal-footer:after {
+ display: table;
+ content: " ";
+}
+
+.modal-footer:after {
+ clear: both;
+}
+
+.modal-footer .btn + .btn {
+ margin-bottom: 0;
+ margin-left: 5px;
+}
+
+.modal-footer .btn-group .btn + .btn {
+ margin-left: -1px;
+}
+
+.modal-footer .btn-block + .btn-block {
+ margin-left: 0;
+}
+
+@media screen and (min-width: 768px) {
+ .modal-dialog {
+ right: auto;
+ left: 50%;
+ width: 600px;
+ padding-top: 30px;
+ padding-bottom: 30px;
+ }
+
+ .modal-content {
+ -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
+ box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
+ }
+}
+
+.tooltip {
+ position: absolute;
+ z-index: 1030;
+ display: block;
+ font-size: 12px;
+ line-height: 1.4;
+ opacity: 0;
+ filter: alpha(opacity=0);
+ visibility: visible;
+}
+
+.tooltip.in {
+ opacity: 0.9;
+ filter: alpha(opacity=90);
+}
+
+.tooltip.top {
+ padding: 5px 0;
+ margin-top: -3px;
+}
+
+.tooltip.right {
+ padding: 0 5px;
+ margin-left: 3px;
+}
+
+.tooltip.bottom {
+ padding: 5px 0;
+ margin-top: 3px;
+}
+
+.tooltip.left {
+ padding: 0 5px;
+ margin-left: -3px;
+}
+
+.tooltip-inner {
+ max-width: 200px;
+ padding: 3px 8px;
+ color: #ffffff;
+ text-align: center;
+ text-decoration: none;
+ background-color: #000000;
+ border-radius: 4px;
+}
+
+.tooltip-arrow {
+ position: absolute;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid;
+}
+
+.tooltip.top .tooltip-arrow {
+ bottom: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-top-color: #000000;
+ border-width: 5px 5px 0;
+}
+
+.tooltip.top-left .tooltip-arrow {
+ bottom: 0;
+ left: 5px;
+ border-top-color: #000000;
+ border-width: 5px 5px 0;
+}
+
+.tooltip.top-right .tooltip-arrow {
+ right: 5px;
+ bottom: 0;
+ border-top-color: #000000;
+ border-width: 5px 5px 0;
+}
+
+.tooltip.right .tooltip-arrow {
+ top: 50%;
+ left: 0;
+ margin-top: -5px;
+ border-right-color: #000000;
+ border-width: 5px 5px 5px 0;
+}
+
+.tooltip.left .tooltip-arrow {
+ top: 50%;
+ right: 0;
+ margin-top: -5px;
+ border-left-color: #000000;
+ border-width: 5px 0 5px 5px;
+}
+
+.tooltip.bottom .tooltip-arrow {
+ top: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-bottom-color: #000000;
+ border-width: 0 5px 5px;
+}
+
+.tooltip.bottom-left .tooltip-arrow {
+ top: 0;
+ left: 5px;
+ border-bottom-color: #000000;
+ border-width: 0 5px 5px;
+}
+
+.tooltip.bottom-right .tooltip-arrow {
+ top: 0;
+ right: 5px;
+ border-bottom-color: #000000;
+ border-width: 0 5px 5px;
+}
+
+.popover {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 1010;
+ display: none;
+ max-width: 276px;
+ padding: 1px;
+ text-align: left;
+ white-space: normal;
+ background-color: #ffffff;
+ border: 1px solid #cccccc;
+ border: 1px solid rgba(0, 0, 0, 0.2);
+ border-radius: 6px;
+ -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+ box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+ background-clip: padding-box;
+}
+
+.popover.top {
+ margin-top: -10px;
+}
+
+.popover.right {
+ margin-left: 10px;
+}
+
+.popover.bottom {
+ margin-top: 10px;
+}
+
+.popover.left {
+ margin-left: -10px;
+}
+
+.popover-title {
+ padding: 8px 14px;
+ margin: 0;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 18px;
+ background-color: #f7f7f7;
+ border-bottom: 1px solid #ebebeb;
+ border-radius: 5px 5px 0 0;
+}
+
+.popover-content {
+ padding: 9px 14px;
+}
+
+.popover .arrow,
+.popover .arrow:after {
+ position: absolute;
+ display: block;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid;
+}
+
+.popover .arrow {
+ border-width: 11px;
+}
+
+.popover .arrow:after {
+ border-width: 10px;
+ content: "";
+}
+
+.popover.top .arrow {
+ bottom: -11px;
+ left: 50%;
+ margin-left: -11px;
+ border-top-color: #999999;
+ border-top-color: rgba(0, 0, 0, 0.25);
+ border-bottom-width: 0;
+}
+
+.popover.top .arrow:after {
+ bottom: 1px;
+ margin-left: -10px;
+ border-top-color: #ffffff;
+ border-bottom-width: 0;
+ content: " ";
+}
+
+.popover.right .arrow {
+ top: 50%;
+ left: -11px;
+ margin-top: -11px;
+ border-right-color: #999999;
+ border-right-color: rgba(0, 0, 0, 0.25);
+ border-left-width: 0;
+}
+
+.popover.right .arrow:after {
+ bottom: -10px;
+ left: 1px;
+ border-right-color: #ffffff;
+ border-left-width: 0;
+ content: " ";
+}
+
+.popover.bottom .arrow {
+ top: -11px;
+ left: 50%;
+ margin-left: -11px;
+ border-bottom-color: #999999;
+ border-bottom-color: rgba(0, 0, 0, 0.25);
+ border-top-width: 0;
+}
+
+.popover.bottom .arrow:after {
+ top: 1px;
+ margin-left: -10px;
+ border-bottom-color: #ffffff;
+ border-top-width: 0;
+ content: " ";
+}
+
+.popover.left .arrow {
+ top: 50%;
+ right: -11px;
+ margin-top: -11px;
+ border-left-color: #999999;
+ border-left-color: rgba(0, 0, 0, 0.25);
+ border-right-width: 0;
+}
+
+.popover.left .arrow:after {
+ right: 1px;
+ bottom: -10px;
+ border-left-color: #ffffff;
+ border-right-width: 0;
+ content: " ";
+}
+
+.carousel {
+ position: relative;
+}
+
+.carousel-inner {
+ position: relative;
+ width: 100%;
+ overflow: hidden;
+}
+
+.carousel-inner > .item {
+ position: relative;
+ display: none;
+ -webkit-transition: 0.6s ease-in-out left;
+ transition: 0.6s ease-in-out left;
+}
+
+.carousel-inner > .item > img,
+.carousel-inner > .item > a > img {
+ display: block;
+ height: auto;
+ max-width: 100%;
+ line-height: 1;
+}
+
+.carousel-inner > .active,
+.carousel-inner > .next,
+.carousel-inner > .prev {
+ display: block;
+}
+
+.carousel-inner > .active {
+ left: 0;
+}
+
+.carousel-inner > .next,
+.carousel-inner > .prev {
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+
+.carousel-inner > .next {
+ left: 100%;
+}
+
+.carousel-inner > .prev {
+ left: -100%;
+}
+
+.carousel-inner > .next.left,
+.carousel-inner > .prev.right {
+ left: 0;
+}
+
+.carousel-inner > .active.left {
+ left: -100%;
+}
+
+.carousel-inner > .active.right {
+ left: 100%;
+}
+
+.carousel-control {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ width: 15%;
+ font-size: 20px;
+ color: #ffffff;
+ text-align: center;
+ text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
+ opacity: 0.5;
+ filter: alpha(opacity=50);
+}
+
+.carousel-control.left {
+ background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001)));
+ background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.5) 0), color-stop(rgba(0, 0, 0, 0.0001) 100%));
+ background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%);
+ background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
+}
+
+.carousel-control.right {
+ right: 0;
+ left: auto;
+ background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5)));
+ background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.0001) 0), color-stop(rgba(0, 0, 0, 0.5) 100%));
+ background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%);
+ background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
+}
+
+.carousel-control:hover,
+.carousel-control:focus {
+ color: #ffffff;
+ text-decoration: none;
+ opacity: 0.9;
+ filter: alpha(opacity=90);
+}
+
+.carousel-control .icon-prev,
+.carousel-control .icon-next,
+.carousel-control .glyphicon-chevron-left,
+.carousel-control .glyphicon-chevron-right {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ z-index: 5;
+ display: inline-block;
+}
+
+.carousel-control .icon-prev,
+.carousel-control .icon-next {
+ width: 20px;
+ height: 20px;
+ margin-top: -10px;
+ margin-left: -10px;
+ font-family: serif;
+}
+
+.carousel-control .icon-prev:before {
+ content: '\2039';
+}
+
+.carousel-control .icon-next:before {
+ content: '\203a';
+}
+
+.carousel-indicators {
+ position: absolute;
+ bottom: 10px;
+ left: 50%;
+ z-index: 15;
+ width: 60%;
+ padding-left: 0;
+ margin-left: -30%;
+ text-align: center;
+ list-style: none;
+}
+
+.carousel-indicators li {
+ display: inline-block;
+ width: 10px;
+ height: 10px;
+ margin: 1px;
+ text-indent: -999px;
+ cursor: pointer;
+ border: 1px solid #ffffff;
+ border-radius: 10px;
+}
+
+.carousel-indicators .active {
+ width: 12px;
+ height: 12px;
+ margin: 0;
+ background-color: #ffffff;
+}
+
+.carousel-caption {
+ position: absolute;
+ right: 15%;
+ bottom: 20px;
+ left: 15%;
+ z-index: 10;
+ padding-top: 20px;
+ padding-bottom: 20px;
+ color: #ffffff;
+ text-align: center;
+ text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
+}
+
+.carousel-caption .btn {
+ text-shadow: none;
+}
+
+@media screen and (min-width: 768px) {
+ .carousel-control .icon-prev,
+ .carousel-control .icon-next {
+ width: 30px;
+ height: 30px;
+ margin-top: -15px;
+ margin-left: -15px;
+ font-size: 30px;
+ }
+
+ .carousel-caption {
+ right: 20%;
+ left: 20%;
+ padding-bottom: 30px;
+ }
+
+ .carousel-indicators {
+ bottom: 20px;
+ }
+}
+
+.clearfix:before,
+.clearfix:after {
+ display: table;
+ content: " ";
+}
+
+.clearfix:after {
+ clear: both;
+}
+
+.pull-right {
+ float: right !important;
+}
+
+.pull-left {
+ float: left !important;
+}
+
+.hide {
+ display: none !important;
+}
+
+.show {
+ display: block !important;
+}
+
+.invisible {
+ visibility: hidden;
+}
+
+.text-hide {
+ font: 0/0 a;
+ color: transparent;
+ text-shadow: none;
+ background-color: transparent;
+ border: 0;
+}
+
+.affix {
+ position: fixed;
+}
+
+@-ms-viewport {
+ width: device-width;
+}
+
+@media screen and (max-width: 400px) {
+ @-ms-viewport {
+ width: 320px;
+ }
+}
+
+.hidden {
+ display: none !important;
+ visibility: hidden !important;
+}
+
+.visible-xs {
+ display: none !important;
+}
+
+tr.visible-xs {
+ display: none !important;
+}
+
+th.visible-xs,
+td.visible-xs {
+ display: none !important;
+}
+
+@media (max-width: 767px) {
+ .visible-xs {
+ display: block !important;
+ }
+
+ tr.visible-xs {
+ display: table-row !important;
+ }
+
+ th.visible-xs,
+ td.visible-xs {
+ display: table-cell !important;
+ }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-xs.visible-sm {
+ display: block !important;
+ }
+
+ tr.visible-xs.visible-sm {
+ display: table-row !important;
+ }
+
+ th.visible-xs.visible-sm,
+ td.visible-xs.visible-sm {
+ display: table-cell !important;
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-xs.visible-md {
+ display: block !important;
+ }
+
+ tr.visible-xs.visible-md {
+ display: table-row !important;
+ }
+
+ th.visible-xs.visible-md,
+ td.visible-xs.visible-md {
+ display: table-cell !important;
+ }
+}
+
+@media (min-width: 1200px) {
+ .visible-xs.visible-lg {
+ display: block !important;
+ }
+
+ tr.visible-xs.visible-lg {
+ display: table-row !important;
+ }
+
+ th.visible-xs.visible-lg,
+ td.visible-xs.visible-lg {
+ display: table-cell !important;
+ }
+}
+
+.visible-sm {
+ display: none !important;
+}
+
+tr.visible-sm {
+ display: none !important;
+}
+
+th.visible-sm,
+td.visible-sm {
+ display: none !important;
+}
+
+@media (max-width: 767px) {
+ .visible-sm.visible-xs {
+ display: block !important;
+ }
+
+ tr.visible-sm.visible-xs {
+ display: table-row !important;
+ }
+
+ th.visible-sm.visible-xs,
+ td.visible-sm.visible-xs {
+ display: table-cell !important;
+ }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm {
+ display: block !important;
+ }
+
+ tr.visible-sm {
+ display: table-row !important;
+ }
+
+ th.visible-sm,
+ td.visible-sm {
+ display: table-cell !important;
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-sm.visible-md {
+ display: block !important;
+ }
+
+ tr.visible-sm.visible-md {
+ display: table-row !important;
+ }
+
+ th.visible-sm.visible-md,
+ td.visible-sm.visible-md {
+ display: table-cell !important;
+ }
+}
+
+@media (min-width: 1200px) {
+ .visible-sm.visible-lg {
+ display: block !important;
+ }
+
+ tr.visible-sm.visible-lg {
+ display: table-row !important;
+ }
+
+ th.visible-sm.visible-lg,
+ td.visible-sm.visible-lg {
+ display: table-cell !important;
+ }
+}
+
+.visible-md {
+ display: none !important;
+}
+
+tr.visible-md {
+ display: none !important;
+}
+
+th.visible-md,
+td.visible-md {
+ display: none !important;
+}
+
+@media (max-width: 767px) {
+ .visible-md.visible-xs {
+ display: block !important;
+ }
+
+ tr.visible-md.visible-xs {
+ display: table-row !important;
+ }
+
+ th.visible-md.visible-xs,
+ td.visible-md.visible-xs {
+ display: table-cell !important;
+ }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-md.visible-sm {
+ display: block !important;
+ }
+
+ tr.visible-md.visible-sm {
+ display: table-row !important;
+ }
+
+ th.visible-md.visible-sm,
+ td.visible-md.visible-sm {
+ display: table-cell !important;
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md {
+ display: block !important;
+ }
+
+ tr.visible-md {
+ display: table-row !important;
+ }
+
+ th.visible-md,
+ td.visible-md {
+ display: table-cell !important;
+ }
+}
+
+@media (min-width: 1200px) {
+ .visible-md.visible-lg {
+ display: block !important;
+ }
+
+ tr.visible-md.visible-lg {
+ display: table-row !important;
+ }
+
+ th.visible-md.visible-lg,
+ td.visible-md.visible-lg {
+ display: table-cell !important;
+ }
+}
+
+.visible-lg {
+ display: none !important;
+}
+
+tr.visible-lg {
+ display: none !important;
+}
+
+th.visible-lg,
+td.visible-lg {
+ display: none !important;
+}
+
+@media (max-width: 767px) {
+ .visible-lg.visible-xs {
+ display: block !important;
+ }
+
+ tr.visible-lg.visible-xs {
+ display: table-row !important;
+ }
+
+ th.visible-lg.visible-xs,
+ td.visible-lg.visible-xs {
+ display: table-cell !important;
+ }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-lg.visible-sm {
+ display: block !important;
+ }
+
+ tr.visible-lg.visible-sm {
+ display: table-row !important;
+ }
+
+ th.visible-lg.visible-sm,
+ td.visible-lg.visible-sm {
+ display: table-cell !important;
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-lg.visible-md {
+ display: block !important;
+ }
+
+ tr.visible-lg.visible-md {
+ display: table-row !important;
+ }
+
+ th.visible-lg.visible-md,
+ td.visible-lg.visible-md {
+ display: table-cell !important;
+ }
+}
+
+@media (min-width: 1200px) {
+ .visible-lg {
+ display: block !important;
+ }
+
+ tr.visible-lg {
+ display: table-row !important;
+ }
+
+ th.visible-lg,
+ td.visible-lg {
+ display: table-cell !important;
+ }
+}
+
+.hidden-xs {
+ display: block !important;
+}
+
+tr.hidden-xs {
+ display: table-row !important;
+}
+
+th.hidden-xs,
+td.hidden-xs {
+ display: table-cell !important;
+}
+
+@media (max-width: 767px) {
+ .hidden-xs {
+ display: none !important;
+ }
+
+ tr.hidden-xs {
+ display: none !important;
+ }
+
+ th.hidden-xs,
+ td.hidden-xs {
+ display: none !important;
+ }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+ .hidden-xs.hidden-sm {
+ display: none !important;
+ }
+
+ tr.hidden-xs.hidden-sm {
+ display: none !important;
+ }
+
+ th.hidden-xs.hidden-sm,
+ td.hidden-xs.hidden-sm {
+ display: none !important;
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .hidden-xs.hidden-md {
+ display: none !important;
+ }
+
+ tr.hidden-xs.hidden-md {
+ display: none !important;
+ }
+
+ th.hidden-xs.hidden-md,
+ td.hidden-xs.hidden-md {
+ display: none !important;
+ }
+}
+
+@media (min-width: 1200px) {
+ .hidden-xs.hidden-lg {
+ display: none !important;
+ }
+
+ tr.hidden-xs.hidden-lg {
+ display: none !important;
+ }
+
+ th.hidden-xs.hidden-lg,
+ td.hidden-xs.hidden-lg {
+ display: none !important;
+ }
+}
+
+.hidden-sm {
+ display: block !important;
+}
+
+tr.hidden-sm {
+ display: table-row !important;
+}
+
+th.hidden-sm,
+td.hidden-sm {
+ display: table-cell !important;
+}
+
+@media (max-width: 767px) {
+ .hidden-sm.hidden-xs {
+ display: none !important;
+ }
+
+ tr.hidden-sm.hidden-xs {
+ display: none !important;
+ }
+
+ th.hidden-sm.hidden-xs,
+ td.hidden-sm.hidden-xs {
+ display: none !important;
+ }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+ .hidden-sm {
+ display: none !important;
+ }
+
+ tr.hidden-sm {
+ display: none !important;
+ }
+
+ th.hidden-sm,
+ td.hidden-sm {
+ display: none !important;
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .hidden-sm.hidden-md {
+ display: none !important;
+ }
+
+ tr.hidden-sm.hidden-md {
+ display: none !important;
+ }
+
+ th.hidden-sm.hidden-md,
+ td.hidden-sm.hidden-md {
+ display: none !important;
+ }
+}
+
+@media (min-width: 1200px) {
+ .hidden-sm.hidden-lg {
+ display: none !important;
+ }
+
+ tr.hidden-sm.hidden-lg {
+ display: none !important;
+ }
+
+ th.hidden-sm.hidden-lg,
+ td.hidden-sm.hidden-lg {
+ display: none !important;
+ }
+}
+
+.hidden-md {
+ display: block !important;
+}
+
+tr.hidden-md {
+ display: table-row !important;
+}
+
+th.hidden-md,
+td.hidden-md {
+ display: table-cell !important;
+}
+
+@media (max-width: 767px) {
+ .hidden-md.hidden-xs {
+ display: none !important;
+ }
+
+ tr.hidden-md.hidden-xs {
+ display: none !important;
+ }
+
+ th.hidden-md.hidden-xs,
+ td.hidden-md.hidden-xs {
+ display: none !important;
+ }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+ .hidden-md.hidden-sm {
+ display: none !important;
+ }
+
+ tr.hidden-md.hidden-sm {
+ display: none !important;
+ }
+
+ th.hidden-md.hidden-sm,
+ td.hidden-md.hidden-sm {
+ display: none !important;
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .hidden-md {
+ display: none !important;
+ }
+
+ tr.hidden-md {
+ display: none !important;
+ }
+
+ th.hidden-md,
+ td.hidden-md {
+ display: none !important;
+ }
+}
+
+@media (min-width: 1200px) {
+ .hidden-md.hidden-lg {
+ display: none !important;
+ }
+
+ tr.hidden-md.hidden-lg {
+ display: none !important;
+ }
+
+ th.hidden-md.hidden-lg,
+ td.hidden-md.hidden-lg {
+ display: none !important;
+ }
+}
+
+.hidden-lg {
+ display: block !important;
+}
+
+tr.hidden-lg {
+ display: table-row !important;
+}
+
+th.hidden-lg,
+td.hidden-lg {
+ display: table-cell !important;
+}
+
+@media (max-width: 767px) {
+ .hidden-lg.hidden-xs {
+ display: none !important;
+ }
+
+ tr.hidden-lg.hidden-xs {
+ display: none !important;
+ }
+
+ th.hidden-lg.hidden-xs,
+ td.hidden-lg.hidden-xs {
+ display: none !important;
+ }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+ .hidden-lg.hidden-sm {
+ display: none !important;
+ }
+
+ tr.hidden-lg.hidden-sm {
+ display: none !important;
+ }
+
+ th.hidden-lg.hidden-sm,
+ td.hidden-lg.hidden-sm {
+ display: none !important;
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .hidden-lg.hidden-md {
+ display: none !important;
+ }
+
+ tr.hidden-lg.hidden-md {
+ display: none !important;
+ }
+
+ th.hidden-lg.hidden-md,
+ td.hidden-lg.hidden-md {
+ display: none !important;
+ }
+}
+
+@media (min-width: 1200px) {
+ .hidden-lg {
+ display: none !important;
+ }
+
+ tr.hidden-lg {
+ display: none !important;
+ }
+
+ th.hidden-lg,
+ td.hidden-lg {
+ display: none !important;
+ }
+}
+
+.visible-print {
+ display: none !important;
+}
+
+tr.visible-print {
+ display: none !important;
+}
+
+th.visible-print,
+td.visible-print {
+ display: none !important;
+}
+
+@media print {
+ .visible-print {
+ display: block !important;
+ }
+
+ tr.visible-print {
+ display: table-row !important;
+ }
+
+ th.visible-print,
+ td.visible-print {
+ display: table-cell !important;
+ }
+
+ .hidden-print {
+ display: none !important;
+ }
+
+ tr.hidden-print {
+ display: none !important;
+ }
+
+ th.hidden-print,
+ td.hidden-print {
+ display: none !important;
+ }
+}
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/dist/css/bootstrap.min.css b/vendor/twitter-bootstrap-3/dist/css/bootstrap.min.css
new file mode 100644
index 000000000..8de3589d8
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/dist/css/bootstrap.min.css
@@ -0,0 +1,6372 @@
+/*!
+ * Bootstrap v3.0.0
+ *
+ * Copyright 2013 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world by @mdo and @fat.
+ *//*! normalize.css v2.1.0 | MIT License | git.io/normalize */
+article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary {
+ display: block
+}
+
+audio, canvas, video {
+ display: inline-block
+}
+
+audio:not([controls]) {
+ display: none;
+ height: 0
+}
+
+[hidden] {
+ display: none
+}
+
+html {
+ font-family: sans-serif;
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%
+}
+
+body {
+ margin: 0
+}
+
+a:focus {
+ outline: thin dotted
+}
+
+a:active, a:hover {
+ outline: 0
+}
+
+h1 {
+ margin: .67em 0;
+ font-size: 2em
+}
+
+abbr[title] {
+ border-bottom: 1px dotted
+}
+
+b, strong {
+ font-weight: bold
+}
+
+dfn {
+ font-style: italic
+}
+
+hr {
+ height: 0;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box
+}
+
+mark {
+ color: #000;
+ background: #ff0
+}
+
+code, kbd, pre, samp {
+ font-family: monospace, serif;
+ font-size: 1em
+}
+
+pre {
+ white-space: pre-wrap
+}
+
+q {
+ quotes: "\201C" "\201D" "\2018" "\2019"
+}
+
+small {
+ font-size: 80%
+}
+
+sub, sup {
+ position: relative;
+ font-size: 75%;
+ line-height: 0;
+ vertical-align: baseline
+}
+
+sup {
+ top: -0.5em
+}
+
+sub {
+ bottom: -0.25em
+}
+
+img {
+ border: 0
+}
+
+svg:not(:root) {
+ overflow: hidden
+}
+
+figure {
+ margin: 0
+}
+
+fieldset {
+ padding: .35em .625em .75em;
+ margin: 0 2px;
+ border: 1px solid #c0c0c0
+}
+
+legend {
+ padding: 0;
+ border: 0
+}
+
+button, input, select, textarea {
+ margin: 0;
+ font-family: inherit;
+ font-size: 100%
+}
+
+button, input {
+ line-height: normal
+}
+
+button, select {
+ text-transform: none
+}
+
+button, html input[type="button"], input[type="reset"], input[type="submit"] {
+ cursor: pointer;
+ -webkit-appearance: button
+}
+
+button[disabled], html input[disabled] {
+ cursor: default
+}
+
+input[type="checkbox"], input[type="radio"] {
+ padding: 0;
+ box-sizing: border-box
+}
+
+input[type="search"] {
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ -webkit-appearance: textfield
+}
+
+input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none
+}
+
+button::-moz-focus-inner, input::-moz-focus-inner {
+ padding: 0;
+ border: 0
+}
+
+textarea {
+ overflow: auto;
+ vertical-align: top
+}
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0
+}
+
+@media print {
+ * {
+ color: #000 !important;
+ text-shadow: none !important;
+ background: transparent !important;
+ box-shadow: none !important
+ }
+
+ a, a:visited {
+ text-decoration: underline
+ }
+
+ a[href]:after {
+ content: " (" attr(href) ")"
+ }
+
+ abbr[title]:after {
+ content: " (" attr(title) ")"
+ }
+
+ .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after {
+ content: ""
+ }
+
+ pre, blockquote {
+ border: 1px solid #999;
+ page-break-inside: avoid
+ }
+
+ thead {
+ display: table-header-group
+ }
+
+ tr, img {
+ page-break-inside: avoid
+ }
+
+ img {
+ max-width: 100% !important
+ }
+
+ @page {
+ margin: 2cm .5cm
+ }
+
+ p, h2, h3 {
+ orphans: 3;
+ widows: 3
+ }
+
+ h2, h3 {
+ page-break-after: avoid
+ }
+
+ .navbar {
+ display: none
+ }
+
+ .table td, .table th {
+ background-color: #fff !important
+ }
+
+ .btn > .caret, .dropup > .btn > .caret {
+ border-top-color: #000 !important
+ }
+
+ .label {
+ border: 1px solid #000
+ }
+
+ .table {
+ border-collapse: collapse !important
+ }
+
+ .table-bordered th, .table-bordered td {
+ border: 1px solid #ddd !important
+ }
+}
+
+*, *:before, *:after {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box
+}
+
+html {
+ font-size: 62.5%;
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0)
+}
+
+body {
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 14px;
+ line-height: 1.428571429;
+ color: #333;
+ background-color: #fff
+}
+
+input, button, select, textarea {
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit
+}
+
+button, input, select[multiple], textarea {
+ background-image: none
+}
+
+a {
+ color: #428bca;
+ text-decoration: none
+}
+
+a:hover, a:focus {
+ color: #2a6496;
+ text-decoration: underline
+}
+
+a:focus {
+ outline: thin dotted #333;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px
+}
+
+img {
+ vertical-align: middle
+}
+
+.img-responsive {
+ display: block;
+ height: auto;
+ max-width: 100%
+}
+
+.img-rounded {
+ border-radius: 6px
+}
+
+.img-thumbnail {
+ display: inline-block;
+ height: auto;
+ max-width: 100%;
+ padding: 4px;
+ line-height: 1.428571429;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ -webkit-transition: all .2s ease-in-out;
+ transition: all .2s ease-in-out
+}
+
+.img-circle {
+ border-radius: 50%
+}
+
+hr {
+ margin-top: 20px;
+ margin-bottom: 20px;
+ border: 0;
+ border-top: 1px solid #eee
+}
+
+.sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ margin: -1px;
+ overflow: hidden;
+ clip: rect(0 0 0 0);
+ border: 0
+}
+
+p {
+ margin: 0 0 10px
+}
+
+.lead {
+ margin-bottom: 20px;
+ font-size: 16.099999999999998px;
+ font-weight: 200;
+ line-height: 1.4
+}
+
+@media (min-width: 768px) {
+ .lead {
+ font-size: 21px
+ }
+}
+
+small {
+ font-size: 85%
+}
+
+cite {
+ font-style: normal
+}
+
+.text-muted {
+ color: #999
+}
+
+.text-primary {
+ color: #428bca
+}
+
+.text-warning {
+ color: #c09853
+}
+
+.text-danger {
+ color: #b94a48
+}
+
+.text-success {
+ color: #468847
+}
+
+.text-info {
+ color: #3a87ad
+}
+
+.text-left {
+ text-align: left
+}
+
+.text-right {
+ text-align: right
+}
+
+.text-center {
+ text-align: center
+}
+
+h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 {
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-weight: 500;
+ line-height: 1.1
+}
+
+h1 small, h2 small, h3 small, h4 small, h5 small, h6 small, .h1 small, .h2 small, .h3 small, .h4 small, .h5 small, .h6 small {
+ font-weight: normal;
+ line-height: 1;
+ color: #999
+}
+
+h1, h2, h3 {
+ margin-top: 20px;
+ margin-bottom: 10px
+}
+
+h1 small, h2 small, h3 small {
+ font-size: 65%
+}
+
+h4, h5, h6 {
+ margin-top: 10px;
+ margin-bottom: 10px
+}
+
+h4 small, h5 small, h6 small {
+ font-size: 75%
+}
+
+h1, .h1 {
+ font-size: 36px
+}
+
+h2, .h2 {
+ font-size: 30px
+}
+
+h3, .h3 {
+ font-size: 24px
+}
+
+h4, .h4 {
+ font-size: 18px
+}
+
+h5, .h5 {
+ font-size: 14px
+}
+
+h6, .h6 {
+ font-size: 12px
+}
+
+.page-header {
+ padding-bottom: 9px;
+ margin: 40px 0 20px;
+ border-bottom: 1px solid #eee
+}
+
+ul, ol {
+ margin-top: 0;
+ margin-bottom: 10px
+}
+
+ul ul, ol ul, ul ol, ol ol {
+ margin-bottom: 0
+}
+
+.list-unstyled {
+ padding-left: 0;
+ list-style: none
+}
+
+.list-inline {
+ padding-left: 0;
+ list-style: none
+}
+
+.list-inline > li {
+ display: inline-block;
+ padding-right: 5px;
+ padding-left: 5px
+}
+
+dl {
+ margin-bottom: 20px
+}
+
+dt, dd {
+ line-height: 1.428571429
+}
+
+dt {
+ font-weight: bold
+}
+
+dd {
+ margin-left: 0
+}
+
+@media (min-width: 768px) {
+ .dl-horizontal dt {
+ float: left;
+ width: 160px;
+ overflow: hidden;
+ clear: left;
+ text-align: right;
+ text-overflow: ellipsis;
+ white-space: nowrap
+ }
+
+ .dl-horizontal dd {
+ margin-left: 180px
+ }
+
+ .dl-horizontal dd:before, .dl-horizontal dd:after {
+ display: table;
+ content: " "
+ }
+
+ .dl-horizontal dd:after {
+ clear: both
+ }
+
+ .dl-horizontal dd:before, .dl-horizontal dd:after {
+ display: table;
+ content: " "
+ }
+
+ .dl-horizontal dd:after {
+ clear: both
+ }
+}
+
+abbr[title], abbr[data-original-title] {
+ cursor: help;
+ border-bottom: 1px dotted #999
+}
+
+abbr.initialism {
+ font-size: 90%;
+ text-transform: uppercase
+}
+
+blockquote {
+ padding: 10px 20px;
+ margin: 0 0 20px;
+ border-left: 5px solid #eee
+}
+
+blockquote p {
+ font-size: 17.5px;
+ font-weight: 300;
+ line-height: 1.25
+}
+
+blockquote p:last-child {
+ margin-bottom: 0
+}
+
+blockquote small {
+ display: block;
+ line-height: 1.428571429;
+ color: #999
+}
+
+blockquote small:before {
+ content: '\2014 \00A0'
+}
+
+blockquote.pull-right {
+ padding-right: 15px;
+ padding-left: 0;
+ border-right: 5px solid #eee;
+ border-left: 0
+}
+
+blockquote.pull-right p, blockquote.pull-right small {
+ text-align: right
+}
+
+blockquote.pull-right small:before {
+ content: ''
+}
+
+blockquote.pull-right small:after {
+ content: '\00A0 \2014'
+}
+
+q:before, q:after, blockquote:before, blockquote:after {
+ content: ""
+}
+
+address {
+ display: block;
+ margin-bottom: 20px;
+ font-style: normal;
+ line-height: 1.428571429
+}
+
+code, pre {
+ font-family: Monaco, Menlo, Consolas, "Courier New", monospace
+}
+
+code {
+ padding: 2px 4px;
+ font-size: 90%;
+ color: #c7254e;
+ white-space: nowrap;
+ background-color: #f9f2f4;
+ border-radius: 4px
+}
+
+pre {
+ display: block;
+ padding: 9.5px;
+ margin: 0 0 10px;
+ font-size: 13px;
+ line-height: 1.428571429;
+ color: #333;
+ word-break: break-all;
+ word-wrap: break-word;
+ background-color: #f5f5f5;
+ border: 1px solid #ccc;
+ border-radius: 4px
+}
+
+pre.prettyprint {
+ margin-bottom: 20px
+}
+
+pre code {
+ padding: 0;
+ font-size: inherit;
+ color: inherit;
+ white-space: pre-wrap;
+ background-color: transparent;
+ border: 0
+}
+
+.pre-scrollable {
+ max-height: 340px;
+ overflow-y: scroll
+}
+
+.container {
+ padding-right: 15px;
+ padding-left: 15px;
+ margin-right: auto;
+ margin-left: auto
+}
+
+.container:before, .container:after {
+ display: table;
+ content: " "
+}
+
+.container:after {
+ clear: both
+}
+
+.container:before, .container:after {
+ display: table;
+ content: " "
+}
+
+.container:after {
+ clear: both
+}
+
+.row {
+ margin-right: -15px;
+ margin-left: -15px
+}
+
+.row:before, .row:after {
+ display: table;
+ content: " "
+}
+
+.row:after {
+ clear: both
+}
+
+.row:before, .row:after {
+ display: table;
+ content: " "
+}
+
+.row:after {
+ clear: both
+}
+
+.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
+ position: relative;
+ min-height: 1px;
+ padding-right: 15px;
+ padding-left: 15px
+}
+
+.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11 {
+ float: left
+}
+
+.col-xs-1 {
+ width: 8.333333333333332%
+}
+
+.col-xs-2 {
+ width: 16.666666666666664%
+}
+
+.col-xs-3 {
+ width: 25%
+}
+
+.col-xs-4 {
+ width: 33.33333333333333%
+}
+
+.col-xs-5 {
+ width: 41.66666666666667%
+}
+
+.col-xs-6 {
+ width: 50%
+}
+
+.col-xs-7 {
+ width: 58.333333333333336%
+}
+
+.col-xs-8 {
+ width: 66.66666666666666%
+}
+
+.col-xs-9 {
+ width: 75%
+}
+
+.col-xs-10 {
+ width: 83.33333333333334%
+}
+
+.col-xs-11 {
+ width: 91.66666666666666%
+}
+
+.col-xs-12 {
+ width: 100%
+}
+
+@media (min-width: 768px) {
+ .container {
+ max-width: 750px
+ }
+
+ .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11 {
+ float: left
+ }
+
+ .col-sm-1 {
+ width: 8.333333333333332%
+ }
+
+ .col-sm-2 {
+ width: 16.666666666666664%
+ }
+
+ .col-sm-3 {
+ width: 25%
+ }
+
+ .col-sm-4 {
+ width: 33.33333333333333%
+ }
+
+ .col-sm-5 {
+ width: 41.66666666666667%
+ }
+
+ .col-sm-6 {
+ width: 50%
+ }
+
+ .col-sm-7 {
+ width: 58.333333333333336%
+ }
+
+ .col-sm-8 {
+ width: 66.66666666666666%
+ }
+
+ .col-sm-9 {
+ width: 75%
+ }
+
+ .col-sm-10 {
+ width: 83.33333333333334%
+ }
+
+ .col-sm-11 {
+ width: 91.66666666666666%
+ }
+
+ .col-sm-12 {
+ width: 100%
+ }
+
+ .col-sm-push-1 {
+ left: 8.333333333333332%
+ }
+
+ .col-sm-push-2 {
+ left: 16.666666666666664%
+ }
+
+ .col-sm-push-3 {
+ left: 25%
+ }
+
+ .col-sm-push-4 {
+ left: 33.33333333333333%
+ }
+
+ .col-sm-push-5 {
+ left: 41.66666666666667%
+ }
+
+ .col-sm-push-6 {
+ left: 50%
+ }
+
+ .col-sm-push-7 {
+ left: 58.333333333333336%
+ }
+
+ .col-sm-push-8 {
+ left: 66.66666666666666%
+ }
+
+ .col-sm-push-9 {
+ left: 75%
+ }
+
+ .col-sm-push-10 {
+ left: 83.33333333333334%
+ }
+
+ .col-sm-push-11 {
+ left: 91.66666666666666%
+ }
+
+ .col-sm-pull-1 {
+ right: 8.333333333333332%
+ }
+
+ .col-sm-pull-2 {
+ right: 16.666666666666664%
+ }
+
+ .col-sm-pull-3 {
+ right: 25%
+ }
+
+ .col-sm-pull-4 {
+ right: 33.33333333333333%
+ }
+
+ .col-sm-pull-5 {
+ right: 41.66666666666667%
+ }
+
+ .col-sm-pull-6 {
+ right: 50%
+ }
+
+ .col-sm-pull-7 {
+ right: 58.333333333333336%
+ }
+
+ .col-sm-pull-8 {
+ right: 66.66666666666666%
+ }
+
+ .col-sm-pull-9 {
+ right: 75%
+ }
+
+ .col-sm-pull-10 {
+ right: 83.33333333333334%
+ }
+
+ .col-sm-pull-11 {
+ right: 91.66666666666666%
+ }
+
+ .col-sm-offset-1 {
+ margin-left: 8.333333333333332%
+ }
+
+ .col-sm-offset-2 {
+ margin-left: 16.666666666666664%
+ }
+
+ .col-sm-offset-3 {
+ margin-left: 25%
+ }
+
+ .col-sm-offset-4 {
+ margin-left: 33.33333333333333%
+ }
+
+ .col-sm-offset-5 {
+ margin-left: 41.66666666666667%
+ }
+
+ .col-sm-offset-6 {
+ margin-left: 50%
+ }
+
+ .col-sm-offset-7 {
+ margin-left: 58.333333333333336%
+ }
+
+ .col-sm-offset-8 {
+ margin-left: 66.66666666666666%
+ }
+
+ .col-sm-offset-9 {
+ margin-left: 75%
+ }
+
+ .col-sm-offset-10 {
+ margin-left: 83.33333333333334%
+ }
+
+ .col-sm-offset-11 {
+ margin-left: 91.66666666666666%
+ }
+}
+
+@media (min-width: 992px) {
+ .container {
+ max-width: 970px
+ }
+
+ .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11 {
+ float: left
+ }
+
+ .col-md-1 {
+ width: 8.333333333333332%
+ }
+
+ .col-md-2 {
+ width: 16.666666666666664%
+ }
+
+ .col-md-3 {
+ width: 25%
+ }
+
+ .col-md-4 {
+ width: 33.33333333333333%
+ }
+
+ .col-md-5 {
+ width: 41.66666666666667%
+ }
+
+ .col-md-6 {
+ width: 50%
+ }
+
+ .col-md-7 {
+ width: 58.333333333333336%
+ }
+
+ .col-md-8 {
+ width: 66.66666666666666%
+ }
+
+ .col-md-9 {
+ width: 75%
+ }
+
+ .col-md-10 {
+ width: 83.33333333333334%
+ }
+
+ .col-md-11 {
+ width: 91.66666666666666%
+ }
+
+ .col-md-12 {
+ width: 100%
+ }
+
+ .col-md-push-0 {
+ left: auto
+ }
+
+ .col-md-push-1 {
+ left: 8.333333333333332%
+ }
+
+ .col-md-push-2 {
+ left: 16.666666666666664%
+ }
+
+ .col-md-push-3 {
+ left: 25%
+ }
+
+ .col-md-push-4 {
+ left: 33.33333333333333%
+ }
+
+ .col-md-push-5 {
+ left: 41.66666666666667%
+ }
+
+ .col-md-push-6 {
+ left: 50%
+ }
+
+ .col-md-push-7 {
+ left: 58.333333333333336%
+ }
+
+ .col-md-push-8 {
+ left: 66.66666666666666%
+ }
+
+ .col-md-push-9 {
+ left: 75%
+ }
+
+ .col-md-push-10 {
+ left: 83.33333333333334%
+ }
+
+ .col-md-push-11 {
+ left: 91.66666666666666%
+ }
+
+ .col-md-pull-0 {
+ right: auto
+ }
+
+ .col-md-pull-1 {
+ right: 8.333333333333332%
+ }
+
+ .col-md-pull-2 {
+ right: 16.666666666666664%
+ }
+
+ .col-md-pull-3 {
+ right: 25%
+ }
+
+ .col-md-pull-4 {
+ right: 33.33333333333333%
+ }
+
+ .col-md-pull-5 {
+ right: 41.66666666666667%
+ }
+
+ .col-md-pull-6 {
+ right: 50%
+ }
+
+ .col-md-pull-7 {
+ right: 58.333333333333336%
+ }
+
+ .col-md-pull-8 {
+ right: 66.66666666666666%
+ }
+
+ .col-md-pull-9 {
+ right: 75%
+ }
+
+ .col-md-pull-10 {
+ right: 83.33333333333334%
+ }
+
+ .col-md-pull-11 {
+ right: 91.66666666666666%
+ }
+
+ .col-md-offset-0 {
+ margin-left: 0
+ }
+
+ .col-md-offset-1 {
+ margin-left: 8.333333333333332%
+ }
+
+ .col-md-offset-2 {
+ margin-left: 16.666666666666664%
+ }
+
+ .col-md-offset-3 {
+ margin-left: 25%
+ }
+
+ .col-md-offset-4 {
+ margin-left: 33.33333333333333%
+ }
+
+ .col-md-offset-5 {
+ margin-left: 41.66666666666667%
+ }
+
+ .col-md-offset-6 {
+ margin-left: 50%
+ }
+
+ .col-md-offset-7 {
+ margin-left: 58.333333333333336%
+ }
+
+ .col-md-offset-8 {
+ margin-left: 66.66666666666666%
+ }
+
+ .col-md-offset-9 {
+ margin-left: 75%
+ }
+
+ .col-md-offset-10 {
+ margin-left: 83.33333333333334%
+ }
+
+ .col-md-offset-11 {
+ margin-left: 91.66666666666666%
+ }
+}
+
+@media (min-width: 1200px) {
+ .container {
+ max-width: 1170px
+ }
+
+ .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11 {
+ float: left
+ }
+
+ .col-lg-1 {
+ width: 8.333333333333332%
+ }
+
+ .col-lg-2 {
+ width: 16.666666666666664%
+ }
+
+ .col-lg-3 {
+ width: 25%
+ }
+
+ .col-lg-4 {
+ width: 33.33333333333333%
+ }
+
+ .col-lg-5 {
+ width: 41.66666666666667%
+ }
+
+ .col-lg-6 {
+ width: 50%
+ }
+
+ .col-lg-7 {
+ width: 58.333333333333336%
+ }
+
+ .col-lg-8 {
+ width: 66.66666666666666%
+ }
+
+ .col-lg-9 {
+ width: 75%
+ }
+
+ .col-lg-10 {
+ width: 83.33333333333334%
+ }
+
+ .col-lg-11 {
+ width: 91.66666666666666%
+ }
+
+ .col-lg-12 {
+ width: 100%
+ }
+
+ .col-lg-push-0 {
+ left: auto
+ }
+
+ .col-lg-push-1 {
+ left: 8.333333333333332%
+ }
+
+ .col-lg-push-2 {
+ left: 16.666666666666664%
+ }
+
+ .col-lg-push-3 {
+ left: 25%
+ }
+
+ .col-lg-push-4 {
+ left: 33.33333333333333%
+ }
+
+ .col-lg-push-5 {
+ left: 41.66666666666667%
+ }
+
+ .col-lg-push-6 {
+ left: 50%
+ }
+
+ .col-lg-push-7 {
+ left: 58.333333333333336%
+ }
+
+ .col-lg-push-8 {
+ left: 66.66666666666666%
+ }
+
+ .col-lg-push-9 {
+ left: 75%
+ }
+
+ .col-lg-push-10 {
+ left: 83.33333333333334%
+ }
+
+ .col-lg-push-11 {
+ left: 91.66666666666666%
+ }
+
+ .col-lg-pull-0 {
+ right: auto
+ }
+
+ .col-lg-pull-1 {
+ right: 8.333333333333332%
+ }
+
+ .col-lg-pull-2 {
+ right: 16.666666666666664%
+ }
+
+ .col-lg-pull-3 {
+ right: 25%
+ }
+
+ .col-lg-pull-4 {
+ right: 33.33333333333333%
+ }
+
+ .col-lg-pull-5 {
+ right: 41.66666666666667%
+ }
+
+ .col-lg-pull-6 {
+ right: 50%
+ }
+
+ .col-lg-pull-7 {
+ right: 58.333333333333336%
+ }
+
+ .col-lg-pull-8 {
+ right: 66.66666666666666%
+ }
+
+ .col-lg-pull-9 {
+ right: 75%
+ }
+
+ .col-lg-pull-10 {
+ right: 83.33333333333334%
+ }
+
+ .col-lg-pull-11 {
+ right: 91.66666666666666%
+ }
+
+ .col-lg-offset-0 {
+ margin-left: 0
+ }
+
+ .col-lg-offset-1 {
+ margin-left: 8.333333333333332%
+ }
+
+ .col-lg-offset-2 {
+ margin-left: 16.666666666666664%
+ }
+
+ .col-lg-offset-3 {
+ margin-left: 25%
+ }
+
+ .col-lg-offset-4 {
+ margin-left: 33.33333333333333%
+ }
+
+ .col-lg-offset-5 {
+ margin-left: 41.66666666666667%
+ }
+
+ .col-lg-offset-6 {
+ margin-left: 50%
+ }
+
+ .col-lg-offset-7 {
+ margin-left: 58.333333333333336%
+ }
+
+ .col-lg-offset-8 {
+ margin-left: 66.66666666666666%
+ }
+
+ .col-lg-offset-9 {
+ margin-left: 75%
+ }
+
+ .col-lg-offset-10 {
+ margin-left: 83.33333333333334%
+ }
+
+ .col-lg-offset-11 {
+ margin-left: 91.66666666666666%
+ }
+}
+
+table {
+ max-width: 100%;
+ background-color: transparent
+}
+
+th {
+ text-align: left
+}
+
+.table {
+ width: 100%;
+ margin-bottom: 20px
+}
+
+.table thead > tr > th, .table tbody > tr > th, .table tfoot > tr > th, .table thead > tr > td, .table tbody > tr > td, .table tfoot > tr > td {
+ padding: 8px;
+ line-height: 1.428571429;
+ vertical-align: top;
+ border-top: 1px solid #ddd
+}
+
+.table thead > tr > th {
+ vertical-align: bottom;
+ border-bottom: 2px solid #ddd
+}
+
+.table caption + thead tr:first-child th, .table colgroup + thead tr:first-child th, .table thead:first-child tr:first-child th, .table caption + thead tr:first-child td, .table colgroup + thead tr:first-child td, .table thead:first-child tr:first-child td {
+ border-top: 0
+}
+
+.table tbody + tbody {
+ border-top: 2px solid #ddd
+}
+
+.table .table {
+ background-color: #fff
+}
+
+.table-condensed thead > tr > th, .table-condensed tbody > tr > th, .table-condensed tfoot > tr > th, .table-condensed thead > tr > td, .table-condensed tbody > tr > td, .table-condensed tfoot > tr > td {
+ padding: 5px
+}
+
+.table-bordered {
+ border: 1px solid #ddd
+}
+
+.table-bordered > thead > tr > th, .table-bordered > tbody > tr > th, .table-bordered > tfoot > tr > th, .table-bordered > thead > tr > td, .table-bordered > tbody > tr > td, .table-bordered > tfoot > tr > td {
+ border: 1px solid #ddd
+}
+
+.table-bordered > thead > tr > th, .table-bordered > thead > tr > td {
+ border-bottom-width: 2px
+}
+
+.table-striped > tbody > tr:nth-child(odd) > td, .table-striped > tbody > tr:nth-child(odd) > th {
+ background-color: #f9f9f9
+}
+
+.table-hover > tbody > tr:hover > td, .table-hover > tbody > tr:hover > th {
+ background-color: #f5f5f5
+}
+
+table col[class*="col-"] {
+ display: table-column;
+ float: none
+}
+
+table td[class*="col-"], table th[class*="col-"] {
+ display: table-cell;
+ float: none
+}
+
+.table > thead > tr > td.active, .table > tbody > tr > td.active, .table > tfoot > tr > td.active, .table > thead > tr > th.active, .table > tbody > tr > th.active, .table > tfoot > tr > th.active, .table > thead > tr.active > td, .table > tbody > tr.active > td, .table > tfoot > tr.active > td, .table > thead > tr.active > th, .table > tbody > tr.active > th, .table > tfoot > tr.active > th {
+ background-color: #f5f5f5
+}
+
+.table > thead > tr > td.success, .table > tbody > tr > td.success, .table > tfoot > tr > td.success, .table > thead > tr > th.success, .table > tbody > tr > th.success, .table > tfoot > tr > th.success, .table > thead > tr.success > td, .table > tbody > tr.success > td, .table > tfoot > tr.success > td, .table > thead > tr.success > th, .table > tbody > tr.success > th, .table > tfoot > tr.success > th {
+ background-color: #dff0d8;
+ border-color: #d6e9c6
+}
+
+.table-hover > tbody > tr > td.success:hover, .table-hover > tbody > tr > th.success:hover, .table-hover > tbody > tr.success:hover > td, .table-hover > tbody > tr.success:hover > th {
+ background-color: #d0e9c6;
+ border-color: #c9e2b3
+}
+
+.table > thead > tr > td.danger, .table > tbody > tr > td.danger, .table > tfoot > tr > td.danger, .table > thead > tr > th.danger, .table > tbody > tr > th.danger, .table > tfoot > tr > th.danger, .table > thead > tr.danger > td, .table > tbody > tr.danger > td, .table > tfoot > tr.danger > td, .table > thead > tr.danger > th, .table > tbody > tr.danger > th, .table > tfoot > tr.danger > th {
+ background-color: #f2dede;
+ border-color: #eed3d7
+}
+
+.table-hover > tbody > tr > td.danger:hover, .table-hover > tbody > tr > th.danger:hover, .table-hover > tbody > tr.danger:hover > td, .table-hover > tbody > tr.danger:hover > th {
+ background-color: #ebcccc;
+ border-color: #e6c1c7
+}
+
+.table > thead > tr > td.warning, .table > tbody > tr > td.warning, .table > tfoot > tr > td.warning, .table > thead > tr > th.warning, .table > tbody > tr > th.warning, .table > tfoot > tr > th.warning, .table > thead > tr.warning > td, .table > tbody > tr.warning > td, .table > tfoot > tr.warning > td, .table > thead > tr.warning > th, .table > tbody > tr.warning > th, .table > tfoot > tr.warning > th {
+ background-color: #fcf8e3;
+ border-color: #fbeed5
+}
+
+.table-hover > tbody > tr > td.warning:hover, .table-hover > tbody > tr > th.warning:hover, .table-hover > tbody > tr.warning:hover > td, .table-hover > tbody > tr.warning:hover > th {
+ background-color: #faf2cc;
+ border-color: #f8e5be
+}
+
+@media (max-width: 768px) {
+ .table-responsive {
+ width: 100%;
+ margin-bottom: 15px;
+ overflow-x: scroll;
+ overflow-y: hidden;
+ border: 1px solid #ddd;
+ -ms-overflow-style: -ms-autohiding-scrollbar;
+ -webkit-overflow-scrolling: touch
+ }
+
+ .table-responsive > .table {
+ margin-bottom: 0;
+ background-color: #fff
+ }
+
+ .table-responsive > .table > thead > tr > th, .table-responsive > .table > tbody > tr > th, .table-responsive > .table > tfoot > tr > th, .table-responsive > .table > thead > tr > td, .table-responsive > .table > tbody > tr > td, .table-responsive > .table > tfoot > tr > td {
+ white-space: nowrap
+ }
+
+ .table-responsive > .table-bordered {
+ border: 0
+ }
+
+ .table-responsive > .table-bordered > thead > tr > th:first-child, .table-responsive > .table-bordered > tbody > tr > th:first-child, .table-responsive > .table-bordered > tfoot > tr > th:first-child, .table-responsive > .table-bordered > thead > tr > td:first-child, .table-responsive > .table-bordered > tbody > tr > td:first-child, .table-responsive > .table-bordered > tfoot > tr > td:first-child {
+ border-left: 0
+ }
+
+ .table-responsive > .table-bordered > thead > tr > th:last-child, .table-responsive > .table-bordered > tbody > tr > th:last-child, .table-responsive > .table-bordered > tfoot > tr > th:last-child, .table-responsive > .table-bordered > thead > tr > td:last-child, .table-responsive > .table-bordered > tbody > tr > td:last-child, .table-responsive > .table-bordered > tfoot > tr > td:last-child {
+ border-right: 0
+ }
+
+ .table-responsive > .table-bordered > thead > tr:last-child > th, .table-responsive > .table-bordered > tbody > tr:last-child > th, .table-responsive > .table-bordered > tfoot > tr:last-child > th, .table-responsive > .table-bordered > thead > tr:last-child > td, .table-responsive > .table-bordered > tbody > tr:last-child > td, .table-responsive > .table-bordered > tfoot > tr:last-child > td {
+ border-bottom: 0
+ }
+}
+
+fieldset {
+ padding: 0;
+ margin: 0;
+ border: 0
+}
+
+legend {
+ display: block;
+ width: 100%;
+ padding: 0;
+ margin-bottom: 20px;
+ font-size: 21px;
+ line-height: inherit;
+ color: #333;
+ border: 0;
+ border-bottom: 1px solid #e5e5e5
+}
+
+label {
+ display: inline-block;
+ margin-bottom: 5px;
+ font-weight: bold
+}
+
+input[type="search"] {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box
+}
+
+input[type="radio"], input[type="checkbox"] {
+ margin: 4px 0 0;
+ margin-top: 1px \9;
+ line-height: normal
+}
+
+input[type="file"] {
+ display: block
+}
+
+select[multiple], select[size] {
+ height: auto
+}
+
+select optgroup {
+ font-family: inherit;
+ font-size: inherit;
+ font-style: inherit
+}
+
+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[type="number"]::-webkit-outer-spin-button, input[type="number"]::-webkit-inner-spin-button {
+ height: auto
+}
+
+output {
+ display: block;
+ padding-top: 7px;
+ font-size: 14px;
+ line-height: 1.428571429;
+ color: #555;
+ vertical-align: middle
+}
+
+.form-control:-moz-placeholder {
+ color: #999
+}
+
+.form-control::-moz-placeholder {
+ color: #999
+}
+
+.form-control:-ms-input-placeholder {
+ color: #999
+}
+
+.form-control::-webkit-input-placeholder {
+ color: #999
+}
+
+.form-control {
+ display: block;
+ width: 100%;
+ height: 34px;
+ padding: 6px 12px;
+ font-size: 14px;
+ line-height: 1.428571429;
+ color: #555;
+ vertical-align: middle;
+ background-color: #fff;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+ -webkit-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-color ease-in-out .15s, box-shadow ease-in-out .15s;
+ transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s
+}
+
+.form-control:focus {
+ border-color: #66afe9;
+ outline: 0;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6)
+}
+
+.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control {
+ cursor: not-allowed;
+ background-color: #eee
+}
+
+textarea.form-control {
+ height: auto
+}
+
+.form-group {
+ margin-bottom: 15px
+}
+
+.radio, .checkbox {
+ display: block;
+ min-height: 20px;
+ padding-left: 20px;
+ margin-top: 10px;
+ margin-bottom: 10px;
+ vertical-align: middle
+}
+
+.radio label, .checkbox label {
+ display: inline;
+ margin-bottom: 0;
+ font-weight: normal;
+ cursor: pointer
+}
+
+.radio input[type="radio"], .radio-inline input[type="radio"], .checkbox input[type="checkbox"], .checkbox-inline input[type="checkbox"] {
+ float: left;
+ margin-left: -20px
+}
+
+.radio + .radio, .checkbox + .checkbox {
+ margin-top: -5px
+}
+
+.radio-inline, .checkbox-inline {
+ display: inline-block;
+ padding-left: 20px;
+ margin-bottom: 0;
+ font-weight: normal;
+ vertical-align: middle;
+ cursor: pointer
+}
+
+.radio-inline + .radio-inline, .checkbox-inline + .checkbox-inline {
+ margin-top: 0;
+ margin-left: 10px
+}
+
+input[type="radio"][disabled], input[type="checkbox"][disabled], .radio[disabled], .radio-inline[disabled], .checkbox[disabled], .checkbox-inline[disabled], fieldset[disabled] input[type="radio"], fieldset[disabled] input[type="checkbox"], fieldset[disabled] .radio, fieldset[disabled] .radio-inline, fieldset[disabled] .checkbox, fieldset[disabled] .checkbox-inline {
+ cursor: not-allowed
+}
+
+.input-sm {
+ height: 30px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px
+}
+
+select.input-sm {
+ height: 30px;
+ line-height: 30px
+}
+
+textarea.input-sm {
+ height: auto
+}
+
+.input-lg {
+ height: 45px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.33;
+ border-radius: 6px
+}
+
+select.input-lg {
+ height: 45px;
+ line-height: 45px
+}
+
+textarea.input-lg {
+ height: auto
+}
+
+.has-warning .help-block, .has-warning .control-label {
+ color: #c09853
+}
+
+.has-warning .form-control {
+ border-color: #c09853;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075)
+}
+
+.has-warning .form-control:focus {
+ border-color: #a47e3c;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e
+}
+
+.has-warning .input-group-addon {
+ color: #c09853;
+ background-color: #fcf8e3;
+ border-color: #c09853
+}
+
+.has-error .help-block, .has-error .control-label {
+ color: #b94a48
+}
+
+.has-error .form-control {
+ border-color: #b94a48;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075)
+}
+
+.has-error .form-control:focus {
+ border-color: #953b39;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392
+}
+
+.has-error .input-group-addon {
+ color: #b94a48;
+ background-color: #f2dede;
+ border-color: #b94a48
+}
+
+.has-success .help-block, .has-success .control-label {
+ color: #468847
+}
+
+.has-success .form-control {
+ border-color: #468847;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075)
+}
+
+.has-success .form-control:focus {
+ border-color: #356635;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b
+}
+
+.has-success .input-group-addon {
+ color: #468847;
+ background-color: #dff0d8;
+ border-color: #468847
+}
+
+.form-control-static {
+ padding-top: 7px;
+ margin-bottom: 0
+}
+
+.help-block {
+ display: block;
+ margin-top: 5px;
+ margin-bottom: 10px;
+ color: #737373
+}
+
+@media (min-width: 768px) {
+ .form-inline .form-group {
+ display: inline-block;
+ margin-bottom: 0;
+ vertical-align: middle
+ }
+
+ .form-inline .form-control {
+ display: inline-block
+ }
+
+ .form-inline .radio, .form-inline .checkbox {
+ display: inline-block;
+ padding-left: 0;
+ margin-top: 0;
+ margin-bottom: 0
+ }
+
+ .form-inline .radio input[type="radio"], .form-inline .checkbox input[type="checkbox"] {
+ float: none;
+ margin-left: 0
+ }
+}
+
+.form-horizontal .control-label, .form-horizontal .radio, .form-horizontal .checkbox, .form-horizontal .radio-inline, .form-horizontal .checkbox-inline {
+ padding-top: 7px;
+ margin-top: 0;
+ margin-bottom: 0
+}
+
+.form-horizontal .form-group {
+ margin-right: -15px;
+ margin-left: -15px
+}
+
+.form-horizontal .form-group:before, .form-horizontal .form-group:after {
+ display: table;
+ content: " "
+}
+
+.form-horizontal .form-group:after {
+ clear: both
+}
+
+.form-horizontal .form-group:before, .form-horizontal .form-group:after {
+ display: table;
+ content: " "
+}
+
+.form-horizontal .form-group:after {
+ clear: both
+}
+
+@media (min-width: 768px) {
+ .form-horizontal .control-label {
+ text-align: right
+ }
+}
+
+.btn {
+ display: inline-block;
+ padding: 6px 12px;
+ margin-bottom: 0;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 1.428571429;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: middle;
+ cursor: pointer;
+ border: 1px solid transparent;
+ border-radius: 4px;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ -o-user-select: none;
+ user-select: none
+}
+
+.btn:focus {
+ outline: thin dotted #333;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px
+}
+
+.btn:hover, .btn:focus {
+ color: #333;
+ text-decoration: none
+}
+
+.btn:active, .btn.active {
+ background-image: none;
+ outline: 0;
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125)
+}
+
+.btn.disabled, .btn[disabled], fieldset[disabled] .btn {
+ pointer-events: none;
+ cursor: not-allowed;
+ opacity: .65;
+ filter: alpha(opacity=65);
+ -webkit-box-shadow: none;
+ box-shadow: none
+}
+
+.btn-default {
+ color: #333;
+ background-color: #fff;
+ border-color: #ccc
+}
+
+.btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default {
+ color: #333;
+ background-color: #ebebeb;
+ border-color: #adadad
+}
+
+.btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default {
+ background-image: none
+}
+
+.btn-default.disabled, .btn-default[disabled], fieldset[disabled] .btn-default, .btn-default.disabled:hover, .btn-default[disabled]:hover, fieldset[disabled] .btn-default:hover, .btn-default.disabled:focus, .btn-default[disabled]:focus, fieldset[disabled] .btn-default:focus, .btn-default.disabled:active, .btn-default[disabled]:active, fieldset[disabled] .btn-default:active, .btn-default.disabled.active, .btn-default[disabled].active, fieldset[disabled] .btn-default.active {
+ background-color: #fff;
+ border-color: #ccc
+}
+
+.btn-primary {
+ color: #fff;
+ background-color: #428bca;
+ border-color: #357ebd
+}
+
+.btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary {
+ color: #fff;
+ background-color: #3276b1;
+ border-color: #285e8e
+}
+
+.btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary {
+ background-image: none
+}
+
+.btn-primary.disabled, .btn-primary[disabled], fieldset[disabled] .btn-primary, .btn-primary.disabled:hover, .btn-primary[disabled]:hover, fieldset[disabled] .btn-primary:hover, .btn-primary.disabled:focus, .btn-primary[disabled]:focus, fieldset[disabled] .btn-primary:focus, .btn-primary.disabled:active, .btn-primary[disabled]:active, fieldset[disabled] .btn-primary:active, .btn-primary.disabled.active, .btn-primary[disabled].active, fieldset[disabled] .btn-primary.active {
+ background-color: #428bca;
+ border-color: #357ebd
+}
+
+.btn-warning {
+ color: #fff;
+ background-color: #f0ad4e;
+ border-color: #eea236
+}
+
+.btn-warning:hover, .btn-warning:focus, .btn-warning:active, .btn-warning.active, .open .dropdown-toggle.btn-warning {
+ color: #fff;
+ background-color: #ed9c28;
+ border-color: #d58512
+}
+
+.btn-warning:active, .btn-warning.active, .open .dropdown-toggle.btn-warning {
+ background-image: none
+}
+
+.btn-warning.disabled, .btn-warning[disabled], fieldset[disabled] .btn-warning, .btn-warning.disabled:hover, .btn-warning[disabled]:hover, fieldset[disabled] .btn-warning:hover, .btn-warning.disabled:focus, .btn-warning[disabled]:focus, fieldset[disabled] .btn-warning:focus, .btn-warning.disabled:active, .btn-warning[disabled]:active, fieldset[disabled] .btn-warning:active, .btn-warning.disabled.active, .btn-warning[disabled].active, fieldset[disabled] .btn-warning.active {
+ background-color: #f0ad4e;
+ border-color: #eea236
+}
+
+.btn-danger {
+ color: #fff;
+ background-color: #d9534f;
+ border-color: #d43f3a
+}
+
+.btn-danger:hover, .btn-danger:focus, .btn-danger:active, .btn-danger.active, .open .dropdown-toggle.btn-danger {
+ color: #fff;
+ background-color: #d2322d;
+ border-color: #ac2925
+}
+
+.btn-danger:active, .btn-danger.active, .open .dropdown-toggle.btn-danger {
+ background-image: none
+}
+
+.btn-danger.disabled, .btn-danger[disabled], fieldset[disabled] .btn-danger, .btn-danger.disabled:hover, .btn-danger[disabled]:hover, fieldset[disabled] .btn-danger:hover, .btn-danger.disabled:focus, .btn-danger[disabled]:focus, fieldset[disabled] .btn-danger:focus, .btn-danger.disabled:active, .btn-danger[disabled]:active, fieldset[disabled] .btn-danger:active, .btn-danger.disabled.active, .btn-danger[disabled].active, fieldset[disabled] .btn-danger.active {
+ background-color: #d9534f;
+ border-color: #d43f3a
+}
+
+.btn-success {
+ color: #fff;
+ background-color: #5cb85c;
+ border-color: #4cae4c
+}
+
+.btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active, .open .dropdown-toggle.btn-success {
+ color: #fff;
+ background-color: #47a447;
+ border-color: #398439
+}
+
+.btn-success:active, .btn-success.active, .open .dropdown-toggle.btn-success {
+ background-image: none
+}
+
+.btn-success.disabled, .btn-success[disabled], fieldset[disabled] .btn-success, .btn-success.disabled:hover, .btn-success[disabled]:hover, fieldset[disabled] .btn-success:hover, .btn-success.disabled:focus, .btn-success[disabled]:focus, fieldset[disabled] .btn-success:focus, .btn-success.disabled:active, .btn-success[disabled]:active, fieldset[disabled] .btn-success:active, .btn-success.disabled.active, .btn-success[disabled].active, fieldset[disabled] .btn-success.active {
+ background-color: #5cb85c;
+ border-color: #4cae4c
+}
+
+.btn-info {
+ color: #fff;
+ background-color: #5bc0de;
+ border-color: #46b8da
+}
+
+.btn-info:hover, .btn-info:focus, .btn-info:active, .btn-info.active, .open .dropdown-toggle.btn-info {
+ color: #fff;
+ background-color: #39b3d7;
+ border-color: #269abc
+}
+
+.btn-info:active, .btn-info.active, .open .dropdown-toggle.btn-info {
+ background-image: none
+}
+
+.btn-info.disabled, .btn-info[disabled], fieldset[disabled] .btn-info, .btn-info.disabled:hover, .btn-info[disabled]:hover, fieldset[disabled] .btn-info:hover, .btn-info.disabled:focus, .btn-info[disabled]:focus, fieldset[disabled] .btn-info:focus, .btn-info.disabled:active, .btn-info[disabled]:active, fieldset[disabled] .btn-info:active, .btn-info.disabled.active, .btn-info[disabled].active, fieldset[disabled] .btn-info.active {
+ background-color: #5bc0de;
+ border-color: #46b8da
+}
+
+.btn-link {
+ font-weight: normal;
+ color: #428bca;
+ cursor: pointer;
+ border-radius: 0
+}
+
+.btn-link, .btn-link:active, .btn-link[disabled], fieldset[disabled] .btn-link {
+ background-color: transparent;
+ -webkit-box-shadow: none;
+ box-shadow: none
+}
+
+.btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active {
+ border-color: transparent
+}
+
+.btn-link:hover, .btn-link:focus {
+ color: #2a6496;
+ text-decoration: underline;
+ background-color: transparent
+}
+
+.btn-link[disabled]:hover, fieldset[disabled] .btn-link:hover, .btn-link[disabled]:focus, fieldset[disabled] .btn-link:focus {
+ color: #999;
+ text-decoration: none
+}
+
+.btn-lg {
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.33;
+ border-radius: 6px
+}
+
+.btn-sm, .btn-xs {
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px
+}
+
+.btn-xs {
+ padding: 1px 5px
+}
+
+.btn-block {
+ display: block;
+ width: 100%;
+ padding-right: 0;
+ padding-left: 0
+}
+
+.btn-block + .btn-block {
+ margin-top: 5px
+}
+
+input[type="submit"].btn-block, input[type="reset"].btn-block, input[type="button"].btn-block {
+ width: 100%
+}
+
+.fade {
+ opacity: 0;
+ -webkit-transition: opacity .15s linear;
+ transition: opacity .15s linear
+}
+
+.fade.in {
+ opacity: 1
+}
+
+.collapse {
+ display: none
+}
+
+.collapse.in {
+ display: block
+}
+
+.collapsing {
+ position: relative;
+ height: 0;
+ overflow: hidden;
+ -webkit-transition: height .35s ease;
+ transition: height .35s ease
+}
+
+@font-face {
+ font-family: 'Glyphicons Halflings';
+ src: url('../fonts/glyphicons-halflings-regular.eot');
+ src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg')
+}
+
+.glyphicon {
+ position: relative;
+ top: 1px;
+ display: inline-block;
+ font-family: 'Glyphicons Halflings';
+ -webkit-font-smoothing: antialiased;
+ font-style: normal;
+ font-weight: normal;
+ line-height: 1
+}
+
+.glyphicon:empty {
+ width: 1em
+}
+
+.glyphicon-asterisk:before {
+ content: "\2a"
+}
+
+.glyphicon-plus:before {
+ content: "\2b"
+}
+
+.glyphicon-euro:before {
+ content: "\20ac"
+}
+
+.glyphicon-minus:before {
+ content: "\2212"
+}
+
+.glyphicon-cloud:before {
+ content: "\2601"
+}
+
+.glyphicon-envelope:before {
+ content: "\2709"
+}
+
+.glyphicon-pencil:before {
+ content: "\270f"
+}
+
+.glyphicon-glass:before {
+ content: "\e001"
+}
+
+.glyphicon-music:before {
+ content: "\e002"
+}
+
+.glyphicon-search:before {
+ content: "\e003"
+}
+
+.glyphicon-heart:before {
+ content: "\e005"
+}
+
+.glyphicon-star:before {
+ content: "\e006"
+}
+
+.glyphicon-star-empty:before {
+ content: "\e007"
+}
+
+.glyphicon-user:before {
+ content: "\e008"
+}
+
+.glyphicon-film:before {
+ content: "\e009"
+}
+
+.glyphicon-th-large:before {
+ content: "\e010"
+}
+
+.glyphicon-th:before {
+ content: "\e011"
+}
+
+.glyphicon-th-list:before {
+ content: "\e012"
+}
+
+.glyphicon-ok:before {
+ content: "\e013"
+}
+
+.glyphicon-remove:before {
+ content: "\e014"
+}
+
+.glyphicon-zoom-in:before {
+ content: "\e015"
+}
+
+.glyphicon-zoom-out:before {
+ content: "\e016"
+}
+
+.glyphicon-off:before {
+ content: "\e017"
+}
+
+.glyphicon-signal:before {
+ content: "\e018"
+}
+
+.glyphicon-cog:before {
+ content: "\e019"
+}
+
+.glyphicon-trash:before {
+ content: "\e020"
+}
+
+.glyphicon-home:before {
+ content: "\e021"
+}
+
+.glyphicon-file:before {
+ content: "\e022"
+}
+
+.glyphicon-time:before {
+ content: "\e023"
+}
+
+.glyphicon-road:before {
+ content: "\e024"
+}
+
+.glyphicon-download-alt:before {
+ content: "\e025"
+}
+
+.glyphicon-download:before {
+ content: "\e026"
+}
+
+.glyphicon-upload:before {
+ content: "\e027"
+}
+
+.glyphicon-inbox:before {
+ content: "\e028"
+}
+
+.glyphicon-play-circle:before {
+ content: "\e029"
+}
+
+.glyphicon-repeat:before {
+ content: "\e030"
+}
+
+.glyphicon-refresh:before {
+ content: "\e031"
+}
+
+.glyphicon-list-alt:before {
+ content: "\e032"
+}
+
+.glyphicon-flag:before {
+ content: "\e034"
+}
+
+.glyphicon-headphones:before {
+ content: "\e035"
+}
+
+.glyphicon-volume-off:before {
+ content: "\e036"
+}
+
+.glyphicon-volume-down:before {
+ content: "\e037"
+}
+
+.glyphicon-volume-up:before {
+ content: "\e038"
+}
+
+.glyphicon-qrcode:before {
+ content: "\e039"
+}
+
+.glyphicon-barcode:before {
+ content: "\e040"
+}
+
+.glyphicon-tag:before {
+ content: "\e041"
+}
+
+.glyphicon-tags:before {
+ content: "\e042"
+}
+
+.glyphicon-book:before {
+ content: "\e043"
+}
+
+.glyphicon-print:before {
+ content: "\e045"
+}
+
+.glyphicon-font:before {
+ content: "\e047"
+}
+
+.glyphicon-bold:before {
+ content: "\e048"
+}
+
+.glyphicon-italic:before {
+ content: "\e049"
+}
+
+.glyphicon-text-height:before {
+ content: "\e050"
+}
+
+.glyphicon-text-width:before {
+ content: "\e051"
+}
+
+.glyphicon-align-left:before {
+ content: "\e052"
+}
+
+.glyphicon-align-center:before {
+ content: "\e053"
+}
+
+.glyphicon-align-right:before {
+ content: "\e054"
+}
+
+.glyphicon-align-justify:before {
+ content: "\e055"
+}
+
+.glyphicon-list:before {
+ content: "\e056"
+}
+
+.glyphicon-indent-left:before {
+ content: "\e057"
+}
+
+.glyphicon-indent-right:before {
+ content: "\e058"
+}
+
+.glyphicon-facetime-video:before {
+ content: "\e059"
+}
+
+.glyphicon-picture:before {
+ content: "\e060"
+}
+
+.glyphicon-map-marker:before {
+ content: "\e062"
+}
+
+.glyphicon-adjust:before {
+ content: "\e063"
+}
+
+.glyphicon-tint:before {
+ content: "\e064"
+}
+
+.glyphicon-edit:before {
+ content: "\e065"
+}
+
+.glyphicon-share:before {
+ content: "\e066"
+}
+
+.glyphicon-check:before {
+ content: "\e067"
+}
+
+.glyphicon-move:before {
+ content: "\e068"
+}
+
+.glyphicon-step-backward:before {
+ content: "\e069"
+}
+
+.glyphicon-fast-backward:before {
+ content: "\e070"
+}
+
+.glyphicon-backward:before {
+ content: "\e071"
+}
+
+.glyphicon-play:before {
+ content: "\e072"
+}
+
+.glyphicon-pause:before {
+ content: "\e073"
+}
+
+.glyphicon-stop:before {
+ content: "\e074"
+}
+
+.glyphicon-forward:before {
+ content: "\e075"
+}
+
+.glyphicon-fast-forward:before {
+ content: "\e076"
+}
+
+.glyphicon-step-forward:before {
+ content: "\e077"
+}
+
+.glyphicon-eject:before {
+ content: "\e078"
+}
+
+.glyphicon-chevron-left:before {
+ content: "\e079"
+}
+
+.glyphicon-chevron-right:before {
+ content: "\e080"
+}
+
+.glyphicon-plus-sign:before {
+ content: "\e081"
+}
+
+.glyphicon-minus-sign:before {
+ content: "\e082"
+}
+
+.glyphicon-remove-sign:before {
+ content: "\e083"
+}
+
+.glyphicon-ok-sign:before {
+ content: "\e084"
+}
+
+.glyphicon-question-sign:before {
+ content: "\e085"
+}
+
+.glyphicon-info-sign:before {
+ content: "\e086"
+}
+
+.glyphicon-screenshot:before {
+ content: "\e087"
+}
+
+.glyphicon-remove-circle:before {
+ content: "\e088"
+}
+
+.glyphicon-ok-circle:before {
+ content: "\e089"
+}
+
+.glyphicon-ban-circle:before {
+ content: "\e090"
+}
+
+.glyphicon-arrow-left:before {
+ content: "\e091"
+}
+
+.glyphicon-arrow-right:before {
+ content: "\e092"
+}
+
+.glyphicon-arrow-up:before {
+ content: "\e093"
+}
+
+.glyphicon-arrow-down:before {
+ content: "\e094"
+}
+
+.glyphicon-share-alt:before {
+ content: "\e095"
+}
+
+.glyphicon-resize-full:before {
+ content: "\e096"
+}
+
+.glyphicon-resize-small:before {
+ content: "\e097"
+}
+
+.glyphicon-exclamation-sign:before {
+ content: "\e101"
+}
+
+.glyphicon-gift:before {
+ content: "\e102"
+}
+
+.glyphicon-leaf:before {
+ content: "\e103"
+}
+
+.glyphicon-eye-open:before {
+ content: "\e105"
+}
+
+.glyphicon-eye-close:before {
+ content: "\e106"
+}
+
+.glyphicon-warning-sign:before {
+ content: "\e107"
+}
+
+.glyphicon-plane:before {
+ content: "\e108"
+}
+
+.glyphicon-random:before {
+ content: "\e110"
+}
+
+.glyphicon-comment:before {
+ content: "\e111"
+}
+
+.glyphicon-magnet:before {
+ content: "\e112"
+}
+
+.glyphicon-chevron-up:before {
+ content: "\e113"
+}
+
+.glyphicon-chevron-down:before {
+ content: "\e114"
+}
+
+.glyphicon-retweet:before {
+ content: "\e115"
+}
+
+.glyphicon-shopping-cart:before {
+ content: "\e116"
+}
+
+.glyphicon-folder-close:before {
+ content: "\e117"
+}
+
+.glyphicon-folder-open:before {
+ content: "\e118"
+}
+
+.glyphicon-resize-vertical:before {
+ content: "\e119"
+}
+
+.glyphicon-resize-horizontal:before {
+ content: "\e120"
+}
+
+.glyphicon-hdd:before {
+ content: "\e121"
+}
+
+.glyphicon-bullhorn:before {
+ content: "\e122"
+}
+
+.glyphicon-certificate:before {
+ content: "\e124"
+}
+
+.glyphicon-thumbs-up:before {
+ content: "\e125"
+}
+
+.glyphicon-thumbs-down:before {
+ content: "\e126"
+}
+
+.glyphicon-hand-right:before {
+ content: "\e127"
+}
+
+.glyphicon-hand-left:before {
+ content: "\e128"
+}
+
+.glyphicon-hand-up:before {
+ content: "\e129"
+}
+
+.glyphicon-hand-down:before {
+ content: "\e130"
+}
+
+.glyphicon-circle-arrow-right:before {
+ content: "\e131"
+}
+
+.glyphicon-circle-arrow-left:before {
+ content: "\e132"
+}
+
+.glyphicon-circle-arrow-up:before {
+ content: "\e133"
+}
+
+.glyphicon-circle-arrow-down:before {
+ content: "\e134"
+}
+
+.glyphicon-globe:before {
+ content: "\e135"
+}
+
+.glyphicon-tasks:before {
+ content: "\e137"
+}
+
+.glyphicon-filter:before {
+ content: "\e138"
+}
+
+.glyphicon-fullscreen:before {
+ content: "\e140"
+}
+
+.glyphicon-dashboard:before {
+ content: "\e141"
+}
+
+.glyphicon-heart-empty:before {
+ content: "\e143"
+}
+
+.glyphicon-link:before {
+ content: "\e144"
+}
+
+.glyphicon-phone:before {
+ content: "\e145"
+}
+
+.glyphicon-usd:before {
+ content: "\e148"
+}
+
+.glyphicon-gbp:before {
+ content: "\e149"
+}
+
+.glyphicon-sort:before {
+ content: "\e150"
+}
+
+.glyphicon-sort-by-alphabet:before {
+ content: "\e151"
+}
+
+.glyphicon-sort-by-alphabet-alt:before {
+ content: "\e152"
+}
+
+.glyphicon-sort-by-order:before {
+ content: "\e153"
+}
+
+.glyphicon-sort-by-order-alt:before {
+ content: "\e154"
+}
+
+.glyphicon-sort-by-attributes:before {
+ content: "\e155"
+}
+
+.glyphicon-sort-by-attributes-alt:before {
+ content: "\e156"
+}
+
+.glyphicon-unchecked:before {
+ content: "\e157"
+}
+
+.glyphicon-expand:before {
+ content: "\e158"
+}
+
+.glyphicon-collapse-down:before {
+ content: "\e159"
+}
+
+.glyphicon-collapse-up:before {
+ content: "\e160"
+}
+
+.glyphicon-log-in:before {
+ content: "\e161"
+}
+
+.glyphicon-flash:before {
+ content: "\e162"
+}
+
+.glyphicon-log-out:before {
+ content: "\e163"
+}
+
+.glyphicon-new-window:before {
+ content: "\e164"
+}
+
+.glyphicon-record:before {
+ content: "\e165"
+}
+
+.glyphicon-save:before {
+ content: "\e166"
+}
+
+.glyphicon-open:before {
+ content: "\e167"
+}
+
+.glyphicon-saved:before {
+ content: "\e168"
+}
+
+.glyphicon-import:before {
+ content: "\e169"
+}
+
+.glyphicon-export:before {
+ content: "\e170"
+}
+
+.glyphicon-send:before {
+ content: "\e171"
+}
+
+.glyphicon-floppy-disk:before {
+ content: "\e172"
+}
+
+.glyphicon-floppy-saved:before {
+ content: "\e173"
+}
+
+.glyphicon-floppy-remove:before {
+ content: "\e174"
+}
+
+.glyphicon-floppy-save:before {
+ content: "\e175"
+}
+
+.glyphicon-floppy-open:before {
+ content: "\e176"
+}
+
+.glyphicon-credit-card:before {
+ content: "\e177"
+}
+
+.glyphicon-transfer:before {
+ content: "\e178"
+}
+
+.glyphicon-cutlery:before {
+ content: "\e179"
+}
+
+.glyphicon-header:before {
+ content: "\e180"
+}
+
+.glyphicon-compressed:before {
+ content: "\e181"
+}
+
+.glyphicon-earphone:before {
+ content: "\e182"
+}
+
+.glyphicon-phone-alt:before {
+ content: "\e183"
+}
+
+.glyphicon-tower:before {
+ content: "\e184"
+}
+
+.glyphicon-stats:before {
+ content: "\e185"
+}
+
+.glyphicon-sd-video:before {
+ content: "\e186"
+}
+
+.glyphicon-hd-video:before {
+ content: "\e187"
+}
+
+.glyphicon-subtitles:before {
+ content: "\e188"
+}
+
+.glyphicon-sound-stereo:before {
+ content: "\e189"
+}
+
+.glyphicon-sound-dolby:before {
+ content: "\e190"
+}
+
+.glyphicon-sound-5-1:before {
+ content: "\e191"
+}
+
+.glyphicon-sound-6-1:before {
+ content: "\e192"
+}
+
+.glyphicon-sound-7-1:before {
+ content: "\e193"
+}
+
+.glyphicon-copyright-mark:before {
+ content: "\e194"
+}
+
+.glyphicon-registration-mark:before {
+ content: "\e195"
+}
+
+.glyphicon-cloud-download:before {
+ content: "\e197"
+}
+
+.glyphicon-cloud-upload:before {
+ content: "\e198"
+}
+
+.glyphicon-tree-conifer:before {
+ content: "\e199"
+}
+
+.glyphicon-tree-deciduous:before {
+ content: "\e200"
+}
+
+.glyphicon-briefcase:before {
+ content: "\1f4bc"
+}
+
+.glyphicon-calendar:before {
+ content: "\1f4c5"
+}
+
+.glyphicon-pushpin:before {
+ content: "\1f4cc"
+}
+
+.glyphicon-paperclip:before {
+ content: "\1f4ce"
+}
+
+.glyphicon-camera:before {
+ content: "\1f4f7"
+}
+
+.glyphicon-lock:before {
+ content: "\1f512"
+}
+
+.glyphicon-bell:before {
+ content: "\1f514"
+}
+
+.glyphicon-bookmark:before {
+ content: "\1f516"
+}
+
+.glyphicon-fire:before {
+ content: "\1f525"
+}
+
+.glyphicon-wrench:before {
+ content: "\1f527"
+}
+
+.caret {
+ display: inline-block;
+ width: 0;
+ height: 0;
+ margin-left: 2px;
+ vertical-align: middle;
+ border-top: 4px solid #000;
+ border-right: 4px solid transparent;
+ border-bottom: 0 dotted;
+ border-left: 4px solid transparent;
+ content: ""
+}
+
+.dropdown {
+ position: relative
+}
+
+.dropdown-toggle:focus {
+ outline: 0
+}
+
+.dropdown-menu {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: 1000;
+ display: none;
+ float: left;
+ min-width: 160px;
+ padding: 5px 0;
+ margin: 2px 0 0;
+ font-size: 14px;
+ list-style: none;
+ background-color: #fff;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, 0.15);
+ border-radius: 4px;
+ -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
+ box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
+ background-clip: padding-box
+}
+
+.dropdown-menu.pull-right {
+ right: 0;
+ left: auto
+}
+
+.dropdown-menu .divider {
+ height: 1px;
+ margin: 9px 0;
+ overflow: hidden;
+ background-color: #e5e5e5
+}
+
+.dropdown-menu > li > a {
+ display: block;
+ padding: 3px 20px;
+ clear: both;
+ font-weight: normal;
+ line-height: 1.428571429;
+ color: #333;
+ white-space: nowrap
+}
+
+.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus {
+ color: #fff;
+ text-decoration: none;
+ background-color: #428bca
+}
+
+.dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus {
+ color: #fff;
+ text-decoration: none;
+ background-color: #428bca;
+ outline: 0
+}
+
+.dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {
+ color: #999
+}
+
+.dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {
+ text-decoration: none;
+ cursor: not-allowed;
+ background-color: transparent;
+ background-image: none;
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false)
+}
+
+.open > .dropdown-menu {
+ display: block
+}
+
+.open > a {
+ outline: 0
+}
+
+.dropdown-header {
+ display: block;
+ padding: 3px 20px;
+ font-size: 12px;
+ line-height: 1.428571429;
+ color: #999
+}
+
+.dropdown-backdrop {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 990
+}
+
+.pull-right > .dropdown-menu {
+ right: 0;
+ left: auto
+}
+
+.dropup .caret, .navbar-fixed-bottom .dropdown .caret {
+ border-top: 0 dotted;
+ border-bottom: 4px solid #000;
+ content: ""
+}
+
+.dropup .dropdown-menu, .navbar-fixed-bottom .dropdown .dropdown-menu {
+ top: auto;
+ bottom: 100%;
+ margin-bottom: 1px
+}
+
+@media (min-width: 768px) {
+ .navbar-right .dropdown-menu {
+ right: 0;
+ left: auto
+ }
+}
+
+.btn-default .caret {
+ border-top-color: #333
+}
+
+.btn-primary .caret, .btn-success .caret, .btn-warning .caret, .btn-danger .caret, .btn-info .caret {
+ border-top-color: #fff
+}
+
+.dropup .btn-default .caret {
+ border-bottom-color: #333
+}
+
+.dropup .btn-primary .caret, .dropup .btn-success .caret, .dropup .btn-warning .caret, .dropup .btn-danger .caret, .dropup .btn-info .caret {
+ border-bottom-color: #fff
+}
+
+.btn-group, .btn-group-vertical {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle
+}
+
+.btn-group > .btn, .btn-group-vertical > .btn {
+ position: relative;
+ float: left
+}
+
+.btn-group > .btn:hover, .btn-group-vertical > .btn:hover, .btn-group > .btn:focus, .btn-group-vertical > .btn:focus, .btn-group > .btn:active, .btn-group-vertical > .btn:active, .btn-group > .btn.active, .btn-group-vertical > .btn.active {
+ z-index: 2
+}
+
+.btn-group > .btn:focus, .btn-group-vertical > .btn:focus {
+ outline: 0
+}
+
+.btn-group .btn + .btn, .btn-group .btn + .btn-group, .btn-group .btn-group + .btn, .btn-group .btn-group + .btn-group {
+ margin-left: -1px
+}
+
+.btn-toolbar:before, .btn-toolbar:after {
+ display: table;
+ content: " "
+}
+
+.btn-toolbar:after {
+ clear: both
+}
+
+.btn-toolbar:before, .btn-toolbar:after {
+ display: table;
+ content: " "
+}
+
+.btn-toolbar:after {
+ clear: both
+}
+
+.btn-toolbar .btn-group {
+ float: left
+}
+
+.btn-toolbar > .btn + .btn, .btn-toolbar > .btn-group + .btn, .btn-toolbar > .btn + .btn-group, .btn-toolbar > .btn-group + .btn-group {
+ margin-left: 5px
+}
+
+.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
+ border-radius: 0
+}
+
+.btn-group > .btn:first-child {
+ margin-left: 0
+}
+
+.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0
+}
+
+.btn-group > .btn:last-child:not(:first-child), .btn-group > .dropdown-toggle:not(:first-child) {
+ border-bottom-left-radius: 0;
+ border-top-left-radius: 0
+}
+
+.btn-group > .btn-group {
+ float: left
+}
+
+.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
+ border-radius: 0
+}
+
+.btn-group > .btn-group:first-child > .btn:last-child, .btn-group > .btn-group:first-child > .dropdown-toggle {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0
+}
+
+.btn-group > .btn-group:last-child > .btn:first-child {
+ border-bottom-left-radius: 0;
+ border-top-left-radius: 0
+}
+
+.btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle {
+ outline: 0
+}
+
+.btn-group-xs > .btn {
+ padding: 5px 10px;
+ padding: 1px 5px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px
+}
+
+.btn-group-sm > .btn {
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px
+}
+
+.btn-group-lg > .btn {
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.33;
+ border-radius: 6px
+}
+
+.btn-group > .btn + .dropdown-toggle {
+ padding-right: 8px;
+ padding-left: 8px
+}
+
+.btn-group > .btn-lg + .dropdown-toggle {
+ padding-right: 12px;
+ padding-left: 12px
+}
+
+.btn-group.open .dropdown-toggle {
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125)
+}
+
+.btn .caret {
+ margin-left: 0
+}
+
+.btn-lg .caret {
+ border-width: 5px 5px 0;
+ border-bottom-width: 0
+}
+
+.dropup .btn-lg .caret {
+ border-width: 0 5px 5px
+}
+
+.btn-group-vertical > .btn, .btn-group-vertical > .btn-group {
+ display: block;
+ float: none;
+ width: 100%;
+ max-width: 100%
+}
+
+.btn-group-vertical > .btn-group:before, .btn-group-vertical > .btn-group:after {
+ display: table;
+ content: " "
+}
+
+.btn-group-vertical > .btn-group:after {
+ clear: both
+}
+
+.btn-group-vertical > .btn-group:before, .btn-group-vertical > .btn-group:after {
+ display: table;
+ content: " "
+}
+
+.btn-group-vertical > .btn-group:after {
+ clear: both
+}
+
+.btn-group-vertical > .btn-group > .btn {
+ float: none
+}
+
+.btn-group-vertical > .btn + .btn, .btn-group-vertical > .btn + .btn-group, .btn-group-vertical > .btn-group + .btn, .btn-group-vertical > .btn-group + .btn-group {
+ margin-top: -1px;
+ margin-left: 0
+}
+
+.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
+ border-radius: 0
+}
+
+.btn-group-vertical > .btn:first-child:not(:last-child) {
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0
+}
+
+.btn-group-vertical > .btn:last-child:not(:first-child) {
+ border-top-right-radius: 0;
+ border-bottom-left-radius: 4px;
+ border-top-left-radius: 0
+}
+
+.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
+ border-radius: 0
+}
+
+.btn-group-vertical > .btn-group:first-child > .btn:last-child, .btn-group-vertical > .btn-group:first-child > .dropdown-toggle {
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0
+}
+
+.btn-group-vertical > .btn-group:last-child > .btn:first-child {
+ border-top-right-radius: 0;
+ border-top-left-radius: 0
+}
+
+.btn-group-justified {
+ display: table;
+ width: 100%;
+ border-collapse: separate;
+ table-layout: fixed
+}
+
+.btn-group-justified .btn {
+ display: table-cell;
+ float: none;
+ width: 1%
+}
+
+[data-toggle="buttons"] > .btn > input[type="radio"], [data-toggle="buttons"] > .btn > input[type="checkbox"] {
+ display: none
+}
+
+.input-group {
+ position: relative;
+ display: table;
+ border-collapse: separate
+}
+
+.input-group.col {
+ float: none;
+ padding-right: 0;
+ padding-left: 0
+}
+
+.input-group .form-control {
+ width: 100%;
+ margin-bottom: 0
+}
+
+.input-group-lg > .form-control, .input-group-lg > .input-group-addon, .input-group-lg > .input-group-btn > .btn {
+ height: 45px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.33;
+ border-radius: 6px
+}
+
+select.input-group-lg > .form-control, select.input-group-lg > .input-group-addon, select.input-group-lg > .input-group-btn > .btn {
+ height: 45px;
+ line-height: 45px
+}
+
+textarea.input-group-lg > .form-control, textarea.input-group-lg > .input-group-addon, textarea.input-group-lg > .input-group-btn > .btn {
+ height: auto
+}
+
+.input-group-sm > .form-control, .input-group-sm > .input-group-addon, .input-group-sm > .input-group-btn > .btn {
+ height: 30px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px
+}
+
+select.input-group-sm > .form-control, select.input-group-sm > .input-group-addon, select.input-group-sm > .input-group-btn > .btn {
+ height: 30px;
+ line-height: 30px
+}
+
+textarea.input-group-sm > .form-control, textarea.input-group-sm > .input-group-addon, textarea.input-group-sm > .input-group-btn > .btn {
+ height: auto
+}
+
+.input-group-addon, .input-group-btn, .input-group .form-control {
+ display: table-cell
+}
+
+.input-group-addon:not(:first-child):not(:last-child), .input-group-btn:not(:first-child):not(:last-child), .input-group .form-control:not(:first-child):not(:last-child) {
+ border-radius: 0
+}
+
+.input-group-addon, .input-group-btn {
+ width: 1%;
+ white-space: nowrap;
+ vertical-align: middle
+}
+
+.input-group-addon {
+ padding: 6px 12px;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 1;
+ text-align: center;
+ background-color: #eee;
+ border: 1px solid #ccc;
+ border-radius: 4px
+}
+
+.input-group-addon.input-sm {
+ padding: 5px 10px;
+ font-size: 12px;
+ border-radius: 3px
+}
+
+.input-group-addon.input-lg {
+ padding: 10px 16px;
+ font-size: 18px;
+ border-radius: 6px
+}
+
+.input-group-addon input[type="radio"], .input-group-addon input[type="checkbox"] {
+ margin-top: 0
+}
+
+.input-group .form-control:first-child, .input-group-addon:first-child, .input-group-btn:first-child > .btn, .input-group-btn:first-child > .dropdown-toggle, .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0
+}
+
+.input-group-addon:first-child {
+ border-right: 0
+}
+
+.input-group .form-control:last-child, .input-group-addon:last-child, .input-group-btn:last-child > .btn, .input-group-btn:last-child > .dropdown-toggle, .input-group-btn:first-child > .btn:not(:first-child) {
+ border-bottom-left-radius: 0;
+ border-top-left-radius: 0
+}
+
+.input-group-addon:last-child {
+ border-left: 0
+}
+
+.input-group-btn {
+ position: relative;
+ white-space: nowrap
+}
+
+.input-group-btn > .btn {
+ position: relative
+}
+
+.input-group-btn > .btn + .btn {
+ margin-left: -4px
+}
+
+.input-group-btn > .btn:hover, .input-group-btn > .btn:active {
+ z-index: 2
+}
+
+.nav {
+ padding-left: 0;
+ margin-bottom: 0;
+ list-style: none
+}
+
+.nav:before, .nav:after {
+ display: table;
+ content: " "
+}
+
+.nav:after {
+ clear: both
+}
+
+.nav:before, .nav:after {
+ display: table;
+ content: " "
+}
+
+.nav:after {
+ clear: both
+}
+
+.nav > li {
+ position: relative;
+ display: block
+}
+
+.nav > li > a {
+ position: relative;
+ display: block;
+ padding: 10px 15px
+}
+
+.nav > li > a:hover, .nav > li > a:focus {
+ text-decoration: none;
+ background-color: #eee
+}
+
+.nav > li.disabled > a {
+ color: #999
+}
+
+.nav > li.disabled > a:hover, .nav > li.disabled > a:focus {
+ color: #999;
+ text-decoration: none;
+ cursor: not-allowed;
+ background-color: transparent
+}
+
+.nav .open > a, .nav .open > a:hover, .nav .open > a:focus {
+ background-color: #eee;
+ border-color: #428bca
+}
+
+.nav .nav-divider {
+ height: 1px;
+ margin: 9px 0;
+ overflow: hidden;
+ background-color: #e5e5e5
+}
+
+.nav > li > a > img {
+ max-width: none
+}
+
+.nav-tabs {
+ border-bottom: 1px solid #ddd
+}
+
+.nav-tabs > li {
+ float: left;
+ margin-bottom: -1px
+}
+
+.nav-tabs > li > a {
+ margin-right: 2px;
+ line-height: 1.428571429;
+ border: 1px solid transparent;
+ border-radius: 4px 4px 0 0
+}
+
+.nav-tabs > li > a:hover {
+ border-color: #eee #eee #ddd
+}
+
+.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus {
+ color: #555;
+ cursor: default;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-bottom-color: transparent
+}
+
+.nav-tabs.nav-justified {
+ width: 100%;
+ border-bottom: 0
+}
+
+.nav-tabs.nav-justified > li {
+ float: none
+}
+
+.nav-tabs.nav-justified > li > a {
+ text-align: center
+}
+
+@media (min-width: 768px) {
+ .nav-tabs.nav-justified > li {
+ display: table-cell;
+ width: 1%
+ }
+}
+
+.nav-tabs.nav-justified > li > a {
+ margin-right: 0;
+ border-bottom: 1px solid #ddd
+}
+
+.nav-tabs.nav-justified > .active > a {
+ border-bottom-color: #fff
+}
+
+.nav-pills > li {
+ float: left
+}
+
+.nav-pills > li > a {
+ border-radius: 5px
+}
+
+.nav-pills > li + li {
+ margin-left: 2px
+}
+
+.nav-pills > li.active > a, .nav-pills > li.active > a:hover, .nav-pills > li.active > a:focus {
+ color: #fff;
+ background-color: #428bca
+}
+
+.nav-stacked > li {
+ float: none
+}
+
+.nav-stacked > li + li {
+ margin-top: 2px;
+ margin-left: 0
+}
+
+.nav-justified {
+ width: 100%
+}
+
+.nav-justified > li {
+ float: none
+}
+
+.nav-justified > li > a {
+ text-align: center
+}
+
+@media (min-width: 768px) {
+ .nav-justified > li {
+ display: table-cell;
+ width: 1%
+ }
+}
+
+.nav-tabs-justified {
+ border-bottom: 0
+}
+
+.nav-tabs-justified > li > a {
+ margin-right: 0;
+ border-bottom: 1px solid #ddd
+}
+
+.nav-tabs-justified > .active > a {
+ border-bottom-color: #fff
+}
+
+.tabbable:before, .tabbable:after {
+ display: table;
+ content: " "
+}
+
+.tabbable:after {
+ clear: both
+}
+
+.tabbable:before, .tabbable:after {
+ display: table;
+ content: " "
+}
+
+.tabbable:after {
+ clear: both
+}
+
+.tab-content > .tab-pane, .pill-content > .pill-pane {
+ display: none
+}
+
+.tab-content > .active, .pill-content > .active {
+ display: block
+}
+
+.nav .caret {
+ border-top-color: #428bca;
+ border-bottom-color: #428bca
+}
+
+.nav a:hover .caret {
+ border-top-color: #2a6496;
+ border-bottom-color: #2a6496
+}
+
+.nav-tabs .dropdown-menu {
+ margin-top: -1px;
+ border-top-right-radius: 0;
+ border-top-left-radius: 0
+}
+
+.navbar {
+ position: relative;
+ z-index: 1000;
+ min-height: 50px;
+ margin-bottom: 20px;
+ border: 1px solid transparent
+}
+
+.navbar:before, .navbar:after {
+ display: table;
+ content: " "
+}
+
+.navbar:after {
+ clear: both
+}
+
+.navbar:before, .navbar:after {
+ display: table;
+ content: " "
+}
+
+.navbar:after {
+ clear: both
+}
+
+@media (min-width: 768px) {
+ .navbar {
+ border-radius: 4px
+ }
+}
+
+.navbar-header:before, .navbar-header:after {
+ display: table;
+ content: " "
+}
+
+.navbar-header:after {
+ clear: both
+}
+
+.navbar-header:before, .navbar-header:after {
+ display: table;
+ content: " "
+}
+
+.navbar-header:after {
+ clear: both
+}
+
+@media (min-width: 768px) {
+ .navbar-header {
+ float: left
+ }
+}
+
+.navbar-collapse {
+ max-height: 340px;
+ padding-right: 15px;
+ padding-left: 15px;
+ overflow-x: visible;
+ border-top: 1px solid transparent;
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
+ -webkit-overflow-scrolling: touch
+}
+
+.navbar-collapse:before, .navbar-collapse:after {
+ display: table;
+ content: " "
+}
+
+.navbar-collapse:after {
+ clear: both
+}
+
+.navbar-collapse:before, .navbar-collapse:after {
+ display: table;
+ content: " "
+}
+
+.navbar-collapse:after {
+ clear: both
+}
+
+.navbar-collapse.in {
+ overflow-y: auto
+}
+
+@media (min-width: 768px) {
+ .navbar-collapse {
+ width: auto;
+ border-top: 0;
+ box-shadow: none
+ }
+
+ .navbar-collapse.collapse {
+ display: block !important;
+ height: auto !important;
+ padding-bottom: 0;
+ overflow: visible !important
+ }
+
+ .navbar-collapse.in {
+ overflow-y: visible
+ }
+
+ .navbar-collapse .navbar-nav.navbar-left:first-child {
+ margin-left: -15px
+ }
+
+ .navbar-collapse .navbar-nav.navbar-right:last-child {
+ margin-right: -15px
+ }
+
+ .navbar-collapse .navbar-text:last-child {
+ margin-right: 0
+ }
+}
+
+.container > .navbar-header, .container > .navbar-collapse {
+ margin-right: -15px;
+ margin-left: -15px
+}
+
+@media (min-width: 768px) {
+ .container > .navbar-header, .container > .navbar-collapse {
+ margin-right: 0;
+ margin-left: 0
+ }
+}
+
+.navbar-static-top {
+ border-width: 0 0 1px
+}
+
+@media (min-width: 768px) {
+ .navbar-static-top {
+ border-radius: 0
+ }
+}
+
+.navbar-fixed-top, .navbar-fixed-bottom {
+ position: fixed;
+ right: 0;
+ left: 0;
+ border-width: 0 0 1px
+}
+
+@media (min-width: 768px) {
+ .navbar-fixed-top, .navbar-fixed-bottom {
+ border-radius: 0
+ }
+}
+
+.navbar-fixed-top {
+ top: 0;
+ z-index: 1030
+}
+
+.navbar-fixed-bottom {
+ bottom: 0;
+ margin-bottom: 0
+}
+
+.navbar-brand {
+ float: left;
+ padding: 15px 15px;
+ font-size: 18px;
+ line-height: 20px
+}
+
+.navbar-brand:hover, .navbar-brand:focus {
+ text-decoration: none
+}
+
+@media (min-width: 768px) {
+ .navbar > .container .navbar-brand {
+ margin-left: -15px
+ }
+}
+
+.navbar-toggle {
+ position: relative;
+ float: right;
+ padding: 9px 10px;
+ margin-top: 8px;
+ margin-right: 15px;
+ margin-bottom: 8px;
+ background-color: transparent;
+ border: 1px solid transparent;
+ border-radius: 4px
+}
+
+.navbar-toggle .icon-bar {
+ display: block;
+ width: 22px;
+ height: 2px;
+ border-radius: 1px
+}
+
+.navbar-toggle .icon-bar + .icon-bar {
+ margin-top: 4px
+}
+
+@media (min-width: 768px) {
+ .navbar-toggle {
+ display: none
+ }
+}
+
+.navbar-nav {
+ margin: 7.5px -15px
+}
+
+.navbar-nav > li > a {
+ padding-top: 10px;
+ padding-bottom: 10px;
+ line-height: 20px
+}
+
+@media (max-width: 767px) {
+ .navbar-nav .open .dropdown-menu {
+ position: static;
+ float: none;
+ width: auto;
+ margin-top: 0;
+ background-color: transparent;
+ border: 0;
+ box-shadow: none
+ }
+
+ .navbar-nav .open .dropdown-menu > li > a, .navbar-nav .open .dropdown-menu .dropdown-header {
+ padding: 5px 15px 5px 25px
+ }
+
+ .navbar-nav .open .dropdown-menu > li > a {
+ line-height: 20px
+ }
+
+ .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-nav .open .dropdown-menu > li > a:focus {
+ background-image: none
+ }
+}
+
+@media (min-width: 768px) {
+ .navbar-nav {
+ float: left;
+ margin: 0
+ }
+
+ .navbar-nav > li {
+ float: left
+ }
+
+ .navbar-nav > li > a {
+ padding-top: 15px;
+ padding-bottom: 15px
+ }
+}
+
+@media (min-width: 768px) {
+ .navbar-left {
+ float: left !important
+ }
+
+ .navbar-right {
+ float: right !important
+ }
+}
+
+.navbar-form {
+ padding: 10px 15px;
+ margin-top: 8px;
+ margin-right: -15px;
+ margin-bottom: 8px;
+ margin-left: -15px;
+ border-top: 1px solid transparent;
+ border-bottom: 1px solid transparent;
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1)
+}
+
+@media (min-width: 768px) {
+ .navbar-form .form-group {
+ display: inline-block;
+ margin-bottom: 0;
+ vertical-align: middle
+ }
+
+ .navbar-form .form-control {
+ display: inline-block
+ }
+
+ .navbar-form .radio, .navbar-form .checkbox {
+ display: inline-block;
+ padding-left: 0;
+ margin-top: 0;
+ margin-bottom: 0
+ }
+
+ .navbar-form .radio input[type="radio"], .navbar-form .checkbox input[type="checkbox"] {
+ float: none;
+ margin-left: 0
+ }
+}
+
+@media (max-width: 767px) {
+ .navbar-form .form-group {
+ margin-bottom: 5px
+ }
+}
+
+@media (min-width: 768px) {
+ .navbar-form {
+ width: auto;
+ padding-top: 0;
+ padding-bottom: 0;
+ margin-right: 0;
+ margin-left: 0;
+ border: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none
+ }
+}
+
+.navbar-nav > li > .dropdown-menu {
+ margin-top: 0;
+ border-top-right-radius: 0;
+ border-top-left-radius: 0
+}
+
+.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0
+}
+
+.navbar-nav.pull-right > li > .dropdown-menu, .navbar-nav > li > .dropdown-menu.pull-right {
+ right: 0;
+ left: auto
+}
+
+.navbar-btn {
+ margin-top: 8px;
+ margin-bottom: 8px
+}
+
+.navbar-text {
+ float: left;
+ margin-top: 15px;
+ margin-bottom: 15px
+}
+
+@media (min-width: 768px) {
+ .navbar-text {
+ margin-right: 15px;
+ margin-left: 15px
+ }
+}
+
+.navbar-default {
+ background-color: #f8f8f8;
+ border-color: #e7e7e7
+}
+
+.navbar-default .navbar-brand {
+ color: #777
+}
+
+.navbar-default .navbar-brand:hover, .navbar-default .navbar-brand:focus {
+ color: #5e5e5e;
+ background-color: transparent
+}
+
+.navbar-default .navbar-text {
+ color: #777
+}
+
+.navbar-default .navbar-nav > li > a {
+ color: #777
+}
+
+.navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:focus {
+ color: #333;
+ background-color: transparent
+}
+
+.navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus {
+ color: #555;
+ background-color: #e7e7e7
+}
+
+.navbar-default .navbar-nav > .disabled > a, .navbar-default .navbar-nav > .disabled > a:hover, .navbar-default .navbar-nav > .disabled > a:focus {
+ color: #ccc;
+ background-color: transparent
+}
+
+.navbar-default .navbar-toggle {
+ border-color: #ddd
+}
+
+.navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus {
+ background-color: #ddd
+}
+
+.navbar-default .navbar-toggle .icon-bar {
+ background-color: #ccc
+}
+
+.navbar-default .navbar-collapse, .navbar-default .navbar-form {
+ border-color: #e6e6e6
+}
+
+.navbar-default .navbar-nav > .dropdown > a:hover .caret, .navbar-default .navbar-nav > .dropdown > a:focus .caret {
+ border-top-color: #333;
+ border-bottom-color: #333
+}
+
+.navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .open > a:hover, .navbar-default .navbar-nav > .open > a:focus {
+ color: #555;
+ background-color: #e7e7e7
+}
+
+.navbar-default .navbar-nav > .open > a .caret, .navbar-default .navbar-nav > .open > a:hover .caret, .navbar-default .navbar-nav > .open > a:focus .caret {
+ border-top-color: #555;
+ border-bottom-color: #555
+}
+
+.navbar-default .navbar-nav > .dropdown > a .caret {
+ border-top-color: #777;
+ border-bottom-color: #777
+}
+
+@media (max-width: 767px) {
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a {
+ color: #777
+ }
+
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
+ color: #333;
+ background-color: transparent
+ }
+
+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
+ color: #555;
+ background-color: #e7e7e7
+ }
+
+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+ color: #ccc;
+ background-color: transparent
+ }
+}
+
+.navbar-default .navbar-link {
+ color: #777
+}
+
+.navbar-default .navbar-link:hover {
+ color: #333
+}
+
+.navbar-inverse {
+ background-color: #222;
+ border-color: #080808
+}
+
+.navbar-inverse .navbar-brand {
+ color: #999
+}
+
+.navbar-inverse .navbar-brand:hover, .navbar-inverse .navbar-brand:focus {
+ color: #fff;
+ background-color: transparent
+}
+
+.navbar-inverse .navbar-text {
+ color: #999
+}
+
+.navbar-inverse .navbar-nav > li > a {
+ color: #999
+}
+
+.navbar-inverse .navbar-nav > li > a:hover, .navbar-inverse .navbar-nav > li > a:focus {
+ color: #fff;
+ background-color: transparent
+}
+
+.navbar-inverse .navbar-nav > .active > a, .navbar-inverse .navbar-nav > .active > a:hover, .navbar-inverse .navbar-nav > .active > a:focus {
+ color: #fff;
+ background-color: #080808
+}
+
+.navbar-inverse .navbar-nav > .disabled > a, .navbar-inverse .navbar-nav > .disabled > a:hover, .navbar-inverse .navbar-nav > .disabled > a:focus {
+ color: #444;
+ background-color: transparent
+}
+
+.navbar-inverse .navbar-toggle {
+ border-color: #333
+}
+
+.navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus {
+ background-color: #333
+}
+
+.navbar-inverse .navbar-toggle .icon-bar {
+ background-color: #fff
+}
+
+.navbar-inverse .navbar-collapse, .navbar-inverse .navbar-form {
+ border-color: #101010
+}
+
+.navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .open > a:hover, .navbar-inverse .navbar-nav > .open > a:focus {
+ color: #fff;
+ background-color: #080808
+}
+
+.navbar-inverse .navbar-nav > .dropdown > a:hover .caret {
+ border-top-color: #fff;
+ border-bottom-color: #fff
+}
+
+.navbar-inverse .navbar-nav > .dropdown > a .caret {
+ border-top-color: #999;
+ border-bottom-color: #999
+}
+
+.navbar-inverse .navbar-nav > .open > a .caret, .navbar-inverse .navbar-nav > .open > a:hover .caret, .navbar-inverse .navbar-nav > .open > a:focus .caret {
+ border-top-color: #fff;
+ border-bottom-color: #fff
+}
+
+@media (max-width: 767px) {
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
+ border-color: #080808
+ }
+
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
+ color: #999
+ }
+
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
+ color: #fff;
+ background-color: transparent
+ }
+
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
+ color: #fff;
+ background-color: #080808
+ }
+
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+ color: #444;
+ background-color: transparent
+ }
+}
+
+.navbar-inverse .navbar-link {
+ color: #999
+}
+
+.navbar-inverse .navbar-link:hover {
+ color: #fff
+}
+
+.breadcrumb {
+ padding: 8px 15px;
+ margin-bottom: 20px;
+ list-style: none;
+ background-color: #f5f5f5;
+ border-radius: 4px
+}
+
+.breadcrumb > li {
+ display: inline-block
+}
+
+.breadcrumb > li + li:before {
+ padding: 0 5px;
+ color: #ccc;
+ content: "/\00a0"
+}
+
+.breadcrumb > .active {
+ color: #999
+}
+
+.pagination {
+ display: inline-block;
+ padding-left: 0;
+ margin: 20px 0;
+ border-radius: 4px
+}
+
+.pagination > li {
+ display: inline
+}
+
+.pagination > li > a, .pagination > li > span {
+ position: relative;
+ float: left;
+ padding: 6px 12px;
+ margin-left: -1px;
+ line-height: 1.428571429;
+ text-decoration: none;
+ background-color: #fff;
+ border: 1px solid #ddd
+}
+
+.pagination > li:first-child > a, .pagination > li:first-child > span {
+ margin-left: 0;
+ border-bottom-left-radius: 4px;
+ border-top-left-radius: 4px
+}
+
+.pagination > li:last-child > a, .pagination > li:last-child > span {
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 4px
+}
+
+.pagination > li > a:hover, .pagination > li > span:hover, .pagination > li > a:focus, .pagination > li > span:focus {
+ background-color: #eee
+}
+
+.pagination > .active > a, .pagination > .active > span, .pagination > .active > a:hover, .pagination > .active > span:hover, .pagination > .active > a:focus, .pagination > .active > span:focus {
+ z-index: 2;
+ color: #fff;
+ cursor: default;
+ background-color: #428bca;
+ border-color: #428bca
+}
+
+.pagination > .disabled > span, .pagination > .disabled > span:hover, .pagination > .disabled > span:focus, .pagination > .disabled > a, .pagination > .disabled > a:hover, .pagination > .disabled > a:focus {
+ color: #999;
+ cursor: not-allowed;
+ background-color: #fff;
+ border-color: #ddd
+}
+
+.pagination-lg > li > a, .pagination-lg > li > span {
+ padding: 10px 16px;
+ font-size: 18px
+}
+
+.pagination-lg > li:first-child > a, .pagination-lg > li:first-child > span {
+ border-bottom-left-radius: 6px;
+ border-top-left-radius: 6px
+}
+
+.pagination-lg > li:last-child > a, .pagination-lg > li:last-child > span {
+ border-top-right-radius: 6px;
+ border-bottom-right-radius: 6px
+}
+
+.pagination-sm > li > a, .pagination-sm > li > span {
+ padding: 5px 10px;
+ font-size: 12px
+}
+
+.pagination-sm > li:first-child > a, .pagination-sm > li:first-child > span {
+ border-bottom-left-radius: 3px;
+ border-top-left-radius: 3px
+}
+
+.pagination-sm > li:last-child > a, .pagination-sm > li:last-child > span {
+ border-top-right-radius: 3px;
+ border-bottom-right-radius: 3px
+}
+
+.pager {
+ padding-left: 0;
+ margin: 20px 0;
+ text-align: center;
+ list-style: none
+}
+
+.pager:before, .pager:after {
+ display: table;
+ content: " "
+}
+
+.pager:after {
+ clear: both
+}
+
+.pager:before, .pager:after {
+ display: table;
+ content: " "
+}
+
+.pager:after {
+ clear: both
+}
+
+.pager li {
+ display: inline
+}
+
+.pager li > a, .pager li > span {
+ display: inline-block;
+ padding: 5px 14px;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 15px
+}
+
+.pager li > a:hover, .pager li > a:focus {
+ text-decoration: none;
+ background-color: #eee
+}
+
+.pager .next > a, .pager .next > span {
+ float: right
+}
+
+.pager .previous > a, .pager .previous > span {
+ float: left
+}
+
+.pager .disabled > a, .pager .disabled > a:hover, .pager .disabled > a:focus, .pager .disabled > span {
+ color: #999;
+ cursor: not-allowed;
+ background-color: #fff
+}
+
+.label {
+ display: inline;
+ padding: .2em .6em .3em;
+ font-size: 75%;
+ font-weight: bold;
+ line-height: 1;
+ color: #fff;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: baseline;
+ border-radius: .25em
+}
+
+.label[href]:hover, .label[href]:focus {
+ color: #fff;
+ text-decoration: none;
+ cursor: pointer
+}
+
+.label:empty {
+ display: none
+}
+
+.label-default {
+ background-color: #999
+}
+
+.label-default[href]:hover, .label-default[href]:focus {
+ background-color: #808080
+}
+
+.label-primary {
+ background-color: #428bca
+}
+
+.label-primary[href]:hover, .label-primary[href]:focus {
+ background-color: #3071a9
+}
+
+.label-success {
+ background-color: #5cb85c
+}
+
+.label-success[href]:hover, .label-success[href]:focus {
+ background-color: #449d44
+}
+
+.label-info {
+ background-color: #5bc0de
+}
+
+.label-info[href]:hover, .label-info[href]:focus {
+ background-color: #31b0d5
+}
+
+.label-warning {
+ background-color: #f0ad4e
+}
+
+.label-warning[href]:hover, .label-warning[href]:focus {
+ background-color: #ec971f
+}
+
+.label-danger {
+ background-color: #d9534f
+}
+
+.label-danger[href]:hover, .label-danger[href]:focus {
+ background-color: #c9302c
+}
+
+.badge {
+ display: inline-block;
+ min-width: 10px;
+ padding: 3px 7px;
+ font-size: 12px;
+ font-weight: bold;
+ line-height: 1;
+ color: #fff;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: baseline;
+ background-color: #999;
+ border-radius: 10px
+}
+
+.badge:empty {
+ display: none
+}
+
+a.badge:hover, a.badge:focus {
+ color: #fff;
+ text-decoration: none;
+ cursor: pointer
+}
+
+.btn .badge {
+ position: relative;
+ top: -1px
+}
+
+a.list-group-item.active > .badge, .nav-pills > .active > a > .badge {
+ color: #428bca;
+ background-color: #fff
+}
+
+.nav-pills > li > a > .badge {
+ margin-left: 3px
+}
+
+.jumbotron {
+ padding: 30px;
+ margin-bottom: 30px;
+ font-size: 21px;
+ font-weight: 200;
+ line-height: 2.1428571435;
+ color: inherit;
+ background-color: #eee
+}
+
+.jumbotron h1 {
+ line-height: 1;
+ color: inherit
+}
+
+.jumbotron p {
+ line-height: 1.4
+}
+
+.container .jumbotron {
+ border-radius: 6px
+}
+
+@media screen and (min-width: 768px) {
+ .jumbotron {
+ padding-top: 48px;
+ padding-bottom: 48px
+ }
+
+ .container .jumbotron {
+ padding-right: 60px;
+ padding-left: 60px
+ }
+
+ .jumbotron h1 {
+ font-size: 63px
+ }
+}
+
+.thumbnail {
+ display: inline-block;
+ display: block;
+ height: auto;
+ max-width: 100%;
+ padding: 4px;
+ line-height: 1.428571429;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ -webkit-transition: all .2s ease-in-out;
+ transition: all .2s ease-in-out
+}
+
+.thumbnail > img {
+ display: block;
+ height: auto;
+ max-width: 100%
+}
+
+a.thumbnail:hover, a.thumbnail:focus {
+ border-color: #428bca
+}
+
+.thumbnail > img {
+ margin-right: auto;
+ margin-left: auto
+}
+
+.thumbnail .caption {
+ padding: 9px;
+ color: #333
+}
+
+.alert {
+ padding: 15px;
+ margin-bottom: 20px;
+ border: 1px solid transparent;
+ border-radius: 4px
+}
+
+.alert h4 {
+ margin-top: 0;
+ color: inherit
+}
+
+.alert .alert-link {
+ font-weight: bold
+}
+
+.alert > p, .alert > ul {
+ margin-bottom: 0
+}
+
+.alert > p + p {
+ margin-top: 5px
+}
+
+.alert-dismissable {
+ padding-right: 35px
+}
+
+.alert-dismissable .close {
+ position: relative;
+ top: -2px;
+ right: -21px;
+ color: inherit
+}
+
+.alert-success {
+ color: #468847;
+ background-color: #dff0d8;
+ border-color: #d6e9c6
+}
+
+.alert-success hr {
+ border-top-color: #c9e2b3
+}
+
+.alert-success .alert-link {
+ color: #356635
+}
+
+.alert-info {
+ color: #3a87ad;
+ background-color: #d9edf7;
+ border-color: #bce8f1
+}
+
+.alert-info hr {
+ border-top-color: #a6e1ec
+}
+
+.alert-info .alert-link {
+ color: #2d6987
+}
+
+.alert-warning {
+ color: #c09853;
+ background-color: #fcf8e3;
+ border-color: #fbeed5
+}
+
+.alert-warning hr {
+ border-top-color: #f8e5be
+}
+
+.alert-warning .alert-link {
+ color: #a47e3c
+}
+
+.alert-danger {
+ color: #b94a48;
+ background-color: #f2dede;
+ border-color: #eed3d7
+}
+
+.alert-danger hr {
+ border-top-color: #e6c1c7
+}
+
+.alert-danger .alert-link {
+ color: #953b39
+}
+
+@-webkit-keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0
+ }
+ to {
+ background-position: 0 0
+ }
+}
+
+@-moz-keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0
+ }
+ to {
+ background-position: 0 0
+ }
+}
+
+@-o-keyframes progress-bar-stripes {
+ from {
+ background-position: 0 0
+ }
+ to {
+ background-position: 40px 0
+ }
+}
+
+@keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0
+ }
+ to {
+ background-position: 0 0
+ }
+}
+
+.progress {
+ height: 20px;
+ margin-bottom: 20px;
+ overflow: hidden;
+ background-color: #f5f5f5;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1)
+}
+
+.progress-bar {
+ float: left;
+ width: 0;
+ height: 100%;
+ font-size: 12px;
+ color: #fff;
+ text-align: center;
+ background-color: #428bca;
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+ -webkit-transition: width .6s ease;
+ transition: width .6s ease
+}
+
+.progress-striped .progress-bar {
+ background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-size: 40px 40px
+}
+
+.progress.active .progress-bar {
+ -webkit-animation: progress-bar-stripes 2s linear infinite;
+ -moz-animation: progress-bar-stripes 2s linear infinite;
+ -ms-animation: progress-bar-stripes 2s linear infinite;
+ -o-animation: progress-bar-stripes 2s linear infinite;
+ animation: progress-bar-stripes 2s linear infinite
+}
+
+.progress-bar-success {
+ background-color: #5cb85c
+}
+
+.progress-striped .progress-bar-success {
+ background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent)
+}
+
+.progress-bar-info {
+ background-color: #5bc0de
+}
+
+.progress-striped .progress-bar-info {
+ background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent)
+}
+
+.progress-bar-warning {
+ background-color: #f0ad4e
+}
+
+.progress-striped .progress-bar-warning {
+ background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent)
+}
+
+.progress-bar-danger {
+ background-color: #d9534f
+}
+
+.progress-striped .progress-bar-danger {
+ background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent)
+}
+
+.media, .media-body {
+ overflow: hidden;
+ zoom: 1
+}
+
+.media, .media .media {
+ margin-top: 15px
+}
+
+.media:first-child {
+ margin-top: 0
+}
+
+.media-object {
+ display: block
+}
+
+.media-heading {
+ margin: 0 0 5px
+}
+
+.media > .pull-left {
+ margin-right: 10px
+}
+
+.media > .pull-right {
+ margin-left: 10px
+}
+
+.media-list {
+ padding-left: 0;
+ list-style: none
+}
+
+.list-group {
+ padding-left: 0;
+ margin-bottom: 20px
+}
+
+.list-group-item {
+ position: relative;
+ display: block;
+ padding: 10px 15px;
+ margin-bottom: -1px;
+ background-color: #fff;
+ border: 1px solid #ddd
+}
+
+.list-group-item:first-child {
+ border-top-right-radius: 4px;
+ border-top-left-radius: 4px
+}
+
+.list-group-item:last-child {
+ margin-bottom: 0;
+ border-bottom-right-radius: 4px;
+ border-bottom-left-radius: 4px
+}
+
+.list-group-item > .badge {
+ float: right
+}
+
+.list-group-item > .badge + .badge {
+ margin-right: 5px
+}
+
+a.list-group-item {
+ color: #555
+}
+
+a.list-group-item .list-group-item-heading {
+ color: #333
+}
+
+a.list-group-item:hover, a.list-group-item:focus {
+ text-decoration: none;
+ background-color: #f5f5f5
+}
+
+.list-group-item.active, .list-group-item.active:hover, .list-group-item.active:focus {
+ z-index: 2;
+ color: #fff;
+ background-color: #428bca;
+ border-color: #428bca
+}
+
+.list-group-item.active .list-group-item-heading, .list-group-item.active:hover .list-group-item-heading, .list-group-item.active:focus .list-group-item-heading {
+ color: inherit
+}
+
+.list-group-item.active .list-group-item-text, .list-group-item.active:hover .list-group-item-text, .list-group-item.active:focus .list-group-item-text {
+ color: #e1edf7
+}
+
+.list-group-item-heading {
+ margin-top: 0;
+ margin-bottom: 5px
+}
+
+.list-group-item-text {
+ margin-bottom: 0;
+ line-height: 1.3
+}
+
+.panel {
+ margin-bottom: 20px;
+ background-color: #fff;
+ border: 1px solid transparent;
+ border-radius: 4px;
+ -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05)
+}
+
+.panel-body {
+ padding: 15px
+}
+
+.panel-body:before, .panel-body:after {
+ display: table;
+ content: " "
+}
+
+.panel-body:after {
+ clear: both
+}
+
+.panel-body:before, .panel-body:after {
+ display: table;
+ content: " "
+}
+
+.panel-body:after {
+ clear: both
+}
+
+.panel > .list-group {
+ margin-bottom: 0
+}
+
+.panel > .list-group .list-group-item {
+ border-width: 1px 0
+}
+
+.panel > .list-group .list-group-item:first-child {
+ border-top-right-radius: 0;
+ border-top-left-radius: 0
+}
+
+.panel > .list-group .list-group-item:last-child {
+ border-bottom: 0
+}
+
+.panel-heading + .list-group .list-group-item:first-child {
+ border-top-width: 0
+}
+
+.panel > .table {
+ margin-bottom: 0
+}
+
+.panel > .panel-body + .table {
+ border-top: 1px solid #ddd
+}
+
+.panel-heading {
+ padding: 10px 15px;
+ border-bottom: 1px solid transparent;
+ border-top-right-radius: 3px;
+ border-top-left-radius: 3px
+}
+
+.panel-title {
+ margin-top: 0;
+ margin-bottom: 0;
+ font-size: 16px
+}
+
+.panel-title > a {
+ color: inherit
+}
+
+.panel-footer {
+ padding: 10px 15px;
+ background-color: #f5f5f5;
+ border-top: 1px solid #ddd;
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px
+}
+
+.panel-group .panel {
+ margin-bottom: 0;
+ overflow: hidden;
+ border-radius: 4px
+}
+
+.panel-group .panel + .panel {
+ margin-top: 5px
+}
+
+.panel-group .panel-heading {
+ border-bottom: 0
+}
+
+.panel-group .panel-heading + .panel-collapse .panel-body {
+ border-top: 1px solid #ddd
+}
+
+.panel-group .panel-footer {
+ border-top: 0
+}
+
+.panel-group .panel-footer + .panel-collapse .panel-body {
+ border-bottom: 1px solid #ddd
+}
+
+.panel-default {
+ border-color: #ddd
+}
+
+.panel-default > .panel-heading {
+ color: #333;
+ background-color: #f5f5f5;
+ border-color: #ddd
+}
+
+.panel-default > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #ddd
+}
+
+.panel-default > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #ddd
+}
+
+.panel-primary {
+ border-color: #428bca
+}
+
+.panel-primary > .panel-heading {
+ color: #fff;
+ background-color: #428bca;
+ border-color: #428bca
+}
+
+.panel-primary > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #428bca
+}
+
+.panel-primary > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #428bca
+}
+
+.panel-success {
+ border-color: #d6e9c6
+}
+
+.panel-success > .panel-heading {
+ color: #468847;
+ background-color: #dff0d8;
+ border-color: #d6e9c6
+}
+
+.panel-success > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #d6e9c6
+}
+
+.panel-success > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #d6e9c6
+}
+
+.panel-warning {
+ border-color: #fbeed5
+}
+
+.panel-warning > .panel-heading {
+ color: #c09853;
+ background-color: #fcf8e3;
+ border-color: #fbeed5
+}
+
+.panel-warning > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #fbeed5
+}
+
+.panel-warning > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #fbeed5
+}
+
+.panel-danger {
+ border-color: #eed3d7
+}
+
+.panel-danger > .panel-heading {
+ color: #b94a48;
+ background-color: #f2dede;
+ border-color: #eed3d7
+}
+
+.panel-danger > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #eed3d7
+}
+
+.panel-danger > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #eed3d7
+}
+
+.panel-info {
+ border-color: #bce8f1
+}
+
+.panel-info > .panel-heading {
+ color: #3a87ad;
+ background-color: #d9edf7;
+ border-color: #bce8f1
+}
+
+.panel-info > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #bce8f1
+}
+
+.panel-info > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #bce8f1
+}
+
+.well {
+ min-height: 20px;
+ padding: 19px;
+ margin-bottom: 20px;
+ background-color: #f5f5f5;
+ border: 1px solid #e3e3e3;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05)
+}
+
+.well blockquote {
+ border-color: #ddd;
+ border-color: rgba(0, 0, 0, 0.15)
+}
+
+.well-lg {
+ padding: 24px;
+ border-radius: 6px
+}
+
+.well-sm {
+ padding: 9px;
+ border-radius: 3px
+}
+
+.close {
+ float: right;
+ font-size: 21px;
+ font-weight: bold;
+ line-height: 1;
+ color: #000;
+ text-shadow: 0 1px 0 #fff;
+ opacity: .2;
+ filter: alpha(opacity=20)
+}
+
+.close:hover, .close:focus {
+ color: #000;
+ text-decoration: none;
+ cursor: pointer;
+ opacity: .5;
+ filter: alpha(opacity=50)
+}
+
+button.close {
+ padding: 0;
+ cursor: pointer;
+ background: transparent;
+ border: 0;
+ -webkit-appearance: none
+}
+
+.modal-open {
+ overflow: hidden
+}
+
+body.modal-open, .modal-open .navbar-fixed-top, .modal-open .navbar-fixed-bottom {
+ margin-right: 15px
+}
+
+.modal {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1040;
+ display: none;
+ overflow: auto;
+ overflow-y: scroll
+}
+
+.modal.fade .modal-dialog {
+ -webkit-transform: translate(0, -25%);
+ -ms-transform: translate(0, -25%);
+ transform: translate(0, -25%);
+ -webkit-transition: -webkit-transform .3s ease-out;
+ -moz-transition: -moz-transform .3s ease-out;
+ -o-transition: -o-transform .3s ease-out;
+ transition: transform .3s ease-out
+}
+
+.modal.in .modal-dialog {
+ -webkit-transform: translate(0, 0);
+ -ms-transform: translate(0, 0);
+ transform: translate(0, 0)
+}
+
+.modal-dialog {
+ z-index: 1050;
+ width: auto;
+ padding: 10px;
+ margin-right: auto;
+ margin-left: auto
+}
+
+.modal-content {
+ position: relative;
+ background-color: #fff;
+ border: 1px solid #999;
+ border: 1px solid rgba(0, 0, 0, 0.2);
+ border-radius: 6px;
+ outline: 0;
+ -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
+ box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
+ background-clip: padding-box
+}
+
+.modal-backdrop {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1030;
+ background-color: #000
+}
+
+.modal-backdrop.fade {
+ opacity: 0;
+ filter: alpha(opacity=0)
+}
+
+.modal-backdrop.in {
+ opacity: .5;
+ filter: alpha(opacity=50)
+}
+
+.modal-header {
+ min-height: 16.428571429px;
+ padding: 15px;
+ border-bottom: 1px solid #e5e5e5
+}
+
+.modal-header .close {
+ margin-top: -2px
+}
+
+.modal-title {
+ margin: 0;
+ line-height: 1.428571429
+}
+
+.modal-body {
+ position: relative;
+ padding: 20px
+}
+
+.modal-footer {
+ padding: 19px 20px 20px;
+ margin-top: 15px;
+ text-align: right;
+ border-top: 1px solid #e5e5e5
+}
+
+.modal-footer:before, .modal-footer:after {
+ display: table;
+ content: " "
+}
+
+.modal-footer:after {
+ clear: both
+}
+
+.modal-footer:before, .modal-footer:after {
+ display: table;
+ content: " "
+}
+
+.modal-footer:after {
+ clear: both
+}
+
+.modal-footer .btn + .btn {
+ margin-bottom: 0;
+ margin-left: 5px
+}
+
+.modal-footer .btn-group .btn + .btn {
+ margin-left: -1px
+}
+
+.modal-footer .btn-block + .btn-block {
+ margin-left: 0
+}
+
+@media screen and (min-width: 768px) {
+ .modal-dialog {
+ right: auto;
+ left: 50%;
+ width: 600px;
+ padding-top: 30px;
+ padding-bottom: 30px
+ }
+
+ .modal-content {
+ -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
+ box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5)
+ }
+}
+
+.tooltip {
+ position: absolute;
+ z-index: 1030;
+ display: block;
+ font-size: 12px;
+ line-height: 1.4;
+ opacity: 0;
+ filter: alpha(opacity=0);
+ visibility: visible
+}
+
+.tooltip.in {
+ opacity: .9;
+ filter: alpha(opacity=90)
+}
+
+.tooltip.top {
+ padding: 5px 0;
+ margin-top: -3px
+}
+
+.tooltip.right {
+ padding: 0 5px;
+ margin-left: 3px
+}
+
+.tooltip.bottom {
+ padding: 5px 0;
+ margin-top: 3px
+}
+
+.tooltip.left {
+ padding: 0 5px;
+ margin-left: -3px
+}
+
+.tooltip-inner {
+ max-width: 200px;
+ padding: 3px 8px;
+ color: #fff;
+ text-align: center;
+ text-decoration: none;
+ background-color: #000;
+ border-radius: 4px
+}
+
+.tooltip-arrow {
+ position: absolute;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid
+}
+
+.tooltip.top .tooltip-arrow {
+ bottom: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-top-color: #000;
+ border-width: 5px 5px 0
+}
+
+.tooltip.top-left .tooltip-arrow {
+ bottom: 0;
+ left: 5px;
+ border-top-color: #000;
+ border-width: 5px 5px 0
+}
+
+.tooltip.top-right .tooltip-arrow {
+ right: 5px;
+ bottom: 0;
+ border-top-color: #000;
+ border-width: 5px 5px 0
+}
+
+.tooltip.right .tooltip-arrow {
+ top: 50%;
+ left: 0;
+ margin-top: -5px;
+ border-right-color: #000;
+ border-width: 5px 5px 5px 0
+}
+
+.tooltip.left .tooltip-arrow {
+ top: 50%;
+ right: 0;
+ margin-top: -5px;
+ border-left-color: #000;
+ border-width: 5px 0 5px 5px
+}
+
+.tooltip.bottom .tooltip-arrow {
+ top: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-bottom-color: #000;
+ border-width: 0 5px 5px
+}
+
+.tooltip.bottom-left .tooltip-arrow {
+ top: 0;
+ left: 5px;
+ border-bottom-color: #000;
+ border-width: 0 5px 5px
+}
+
+.tooltip.bottom-right .tooltip-arrow {
+ top: 0;
+ right: 5px;
+ border-bottom-color: #000;
+ border-width: 0 5px 5px
+}
+
+.popover {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 1010;
+ display: none;
+ max-width: 276px;
+ padding: 1px;
+ text-align: left;
+ white-space: normal;
+ background-color: #fff;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, 0.2);
+ border-radius: 6px;
+ -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+ box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+ background-clip: padding-box
+}
+
+.popover.top {
+ margin-top: -10px
+}
+
+.popover.right {
+ margin-left: 10px
+}
+
+.popover.bottom {
+ margin-top: 10px
+}
+
+.popover.left {
+ margin-left: -10px
+}
+
+.popover-title {
+ padding: 8px 14px;
+ margin: 0;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 18px;
+ background-color: #f7f7f7;
+ border-bottom: 1px solid #ebebeb;
+ border-radius: 5px 5px 0 0
+}
+
+.popover-content {
+ padding: 9px 14px
+}
+
+.popover .arrow, .popover .arrow:after {
+ position: absolute;
+ display: block;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid
+}
+
+.popover .arrow {
+ border-width: 11px
+}
+
+.popover .arrow:after {
+ border-width: 10px;
+ content: ""
+}
+
+.popover.top .arrow {
+ bottom: -11px;
+ left: 50%;
+ margin-left: -11px;
+ border-top-color: #999;
+ border-top-color: rgba(0, 0, 0, 0.25);
+ border-bottom-width: 0
+}
+
+.popover.top .arrow:after {
+ bottom: 1px;
+ margin-left: -10px;
+ border-top-color: #fff;
+ border-bottom-width: 0;
+ content: " "
+}
+
+.popover.right .arrow {
+ top: 50%;
+ left: -11px;
+ margin-top: -11px;
+ border-right-color: #999;
+ border-right-color: rgba(0, 0, 0, 0.25);
+ border-left-width: 0
+}
+
+.popover.right .arrow:after {
+ bottom: -10px;
+ left: 1px;
+ border-right-color: #fff;
+ border-left-width: 0;
+ content: " "
+}
+
+.popover.bottom .arrow {
+ top: -11px;
+ left: 50%;
+ margin-left: -11px;
+ border-bottom-color: #999;
+ border-bottom-color: rgba(0, 0, 0, 0.25);
+ border-top-width: 0
+}
+
+.popover.bottom .arrow:after {
+ top: 1px;
+ margin-left: -10px;
+ border-bottom-color: #fff;
+ border-top-width: 0;
+ content: " "
+}
+
+.popover.left .arrow {
+ top: 50%;
+ right: -11px;
+ margin-top: -11px;
+ border-left-color: #999;
+ border-left-color: rgba(0, 0, 0, 0.25);
+ border-right-width: 0
+}
+
+.popover.left .arrow:after {
+ right: 1px;
+ bottom: -10px;
+ border-left-color: #fff;
+ border-right-width: 0;
+ content: " "
+}
+
+.carousel {
+ position: relative
+}
+
+.carousel-inner {
+ position: relative;
+ width: 100%;
+ overflow: hidden
+}
+
+.carousel-inner > .item {
+ position: relative;
+ display: none;
+ -webkit-transition: .6s ease-in-out left;
+ transition: .6s ease-in-out left
+}
+
+.carousel-inner > .item > img, .carousel-inner > .item > a > img {
+ display: block;
+ height: auto;
+ max-width: 100%;
+ line-height: 1
+}
+
+.carousel-inner > .active, .carousel-inner > .next, .carousel-inner > .prev {
+ display: block
+}
+
+.carousel-inner > .active {
+ left: 0
+}
+
+.carousel-inner > .next, .carousel-inner > .prev {
+ position: absolute;
+ top: 0;
+ width: 100%
+}
+
+.carousel-inner > .next {
+ left: 100%
+}
+
+.carousel-inner > .prev {
+ left: -100%
+}
+
+.carousel-inner > .next.left, .carousel-inner > .prev.right {
+ left: 0
+}
+
+.carousel-inner > .active.left {
+ left: -100%
+}
+
+.carousel-inner > .active.right {
+ left: 100%
+}
+
+.carousel-control {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ width: 15%;
+ font-size: 20px;
+ color: #fff;
+ text-align: center;
+ text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
+ opacity: .5;
+ filter: alpha(opacity=50)
+}
+
+.carousel-control.left {
+ background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001)));
+ background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.5) 0), color-stop(rgba(0, 0, 0, 0.0001) 100%));
+ background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%);
+ background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)
+}
+
+.carousel-control.right {
+ right: 0;
+ left: auto;
+ background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5)));
+ background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.0001) 0), color-stop(rgba(0, 0, 0, 0.5) 100%));
+ background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%);
+ background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)
+}
+
+.carousel-control:hover, .carousel-control:focus {
+ color: #fff;
+ text-decoration: none;
+ opacity: .9;
+ filter: alpha(opacity=90)
+}
+
+.carousel-control .icon-prev, .carousel-control .icon-next, .carousel-control .glyphicon-chevron-left, .carousel-control .glyphicon-chevron-right {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ z-index: 5;
+ display: inline-block
+}
+
+.carousel-control .icon-prev, .carousel-control .icon-next {
+ width: 20px;
+ height: 20px;
+ margin-top: -10px;
+ margin-left: -10px;
+ font-family: serif
+}
+
+.carousel-control .icon-prev:before {
+ content: '\2039'
+}
+
+.carousel-control .icon-next:before {
+ content: '\203a'
+}
+
+.carousel-indicators {
+ position: absolute;
+ bottom: 10px;
+ left: 50%;
+ z-index: 15;
+ width: 60%;
+ padding-left: 0;
+ margin-left: -30%;
+ text-align: center;
+ list-style: none
+}
+
+.carousel-indicators li {
+ display: inline-block;
+ width: 10px;
+ height: 10px;
+ margin: 1px;
+ text-indent: -999px;
+ cursor: pointer;
+ border: 1px solid #fff;
+ border-radius: 10px
+}
+
+.carousel-indicators .active {
+ width: 12px;
+ height: 12px;
+ margin: 0;
+ background-color: #fff
+}
+
+.carousel-caption {
+ position: absolute;
+ right: 15%;
+ bottom: 20px;
+ left: 15%;
+ z-index: 10;
+ padding-top: 20px;
+ padding-bottom: 20px;
+ color: #fff;
+ text-align: center;
+ text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6)
+}
+
+.carousel-caption .btn {
+ text-shadow: none
+}
+
+@media screen and (min-width: 768px) {
+ .carousel-control .icon-prev, .carousel-control .icon-next {
+ width: 30px;
+ height: 30px;
+ margin-top: -15px;
+ margin-left: -15px;
+ font-size: 30px
+ }
+
+ .carousel-caption {
+ right: 20%;
+ left: 20%;
+ padding-bottom: 30px
+ }
+
+ .carousel-indicators {
+ bottom: 20px
+ }
+}
+
+.clearfix:before, .clearfix:after {
+ display: table;
+ content: " "
+}
+
+.clearfix:after {
+ clear: both
+}
+
+.pull-right {
+ float: right !important
+}
+
+.pull-left {
+ float: left !important
+}
+
+.hide {
+ display: none !important
+}
+
+.show {
+ display: block !important
+}
+
+.invisible {
+ visibility: hidden
+}
+
+.text-hide {
+ font: 0/0 a;
+ color: transparent;
+ text-shadow: none;
+ background-color: transparent;
+ border: 0
+}
+
+.affix {
+ position: fixed
+}
+
+@-ms-viewport {
+ width: device-width
+}
+
+@media screen and (max-width: 400px) {
+ @-ms-viewport {
+ width: 320px
+ }
+}
+
+.hidden {
+ display: none !important;
+ visibility: hidden !important
+}
+
+.visible-xs {
+ display: none !important
+}
+
+tr.visible-xs {
+ display: none !important
+}
+
+th.visible-xs, td.visible-xs {
+ display: none !important
+}
+
+@media (max-width: 767px) {
+ .visible-xs {
+ display: block !important
+ }
+
+ tr.visible-xs {
+ display: table-row !important
+ }
+
+ th.visible-xs, td.visible-xs {
+ display: table-cell !important
+ }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-xs.visible-sm {
+ display: block !important
+ }
+
+ tr.visible-xs.visible-sm {
+ display: table-row !important
+ }
+
+ th.visible-xs.visible-sm, td.visible-xs.visible-sm {
+ display: table-cell !important
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-xs.visible-md {
+ display: block !important
+ }
+
+ tr.visible-xs.visible-md {
+ display: table-row !important
+ }
+
+ th.visible-xs.visible-md, td.visible-xs.visible-md {
+ display: table-cell !important
+ }
+}
+
+@media (min-width: 1200px) {
+ .visible-xs.visible-lg {
+ display: block !important
+ }
+
+ tr.visible-xs.visible-lg {
+ display: table-row !important
+ }
+
+ th.visible-xs.visible-lg, td.visible-xs.visible-lg {
+ display: table-cell !important
+ }
+}
+
+.visible-sm {
+ display: none !important
+}
+
+tr.visible-sm {
+ display: none !important
+}
+
+th.visible-sm, td.visible-sm {
+ display: none !important
+}
+
+@media (max-width: 767px) {
+ .visible-sm.visible-xs {
+ display: block !important
+ }
+
+ tr.visible-sm.visible-xs {
+ display: table-row !important
+ }
+
+ th.visible-sm.visible-xs, td.visible-sm.visible-xs {
+ display: table-cell !important
+ }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm {
+ display: block !important
+ }
+
+ tr.visible-sm {
+ display: table-row !important
+ }
+
+ th.visible-sm, td.visible-sm {
+ display: table-cell !important
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-sm.visible-md {
+ display: block !important
+ }
+
+ tr.visible-sm.visible-md {
+ display: table-row !important
+ }
+
+ th.visible-sm.visible-md, td.visible-sm.visible-md {
+ display: table-cell !important
+ }
+}
+
+@media (min-width: 1200px) {
+ .visible-sm.visible-lg {
+ display: block !important
+ }
+
+ tr.visible-sm.visible-lg {
+ display: table-row !important
+ }
+
+ th.visible-sm.visible-lg, td.visible-sm.visible-lg {
+ display: table-cell !important
+ }
+}
+
+.visible-md {
+ display: none !important
+}
+
+tr.visible-md {
+ display: none !important
+}
+
+th.visible-md, td.visible-md {
+ display: none !important
+}
+
+@media (max-width: 767px) {
+ .visible-md.visible-xs {
+ display: block !important
+ }
+
+ tr.visible-md.visible-xs {
+ display: table-row !important
+ }
+
+ th.visible-md.visible-xs, td.visible-md.visible-xs {
+ display: table-cell !important
+ }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-md.visible-sm {
+ display: block !important
+ }
+
+ tr.visible-md.visible-sm {
+ display: table-row !important
+ }
+
+ th.visible-md.visible-sm, td.visible-md.visible-sm {
+ display: table-cell !important
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md {
+ display: block !important
+ }
+
+ tr.visible-md {
+ display: table-row !important
+ }
+
+ th.visible-md, td.visible-md {
+ display: table-cell !important
+ }
+}
+
+@media (min-width: 1200px) {
+ .visible-md.visible-lg {
+ display: block !important
+ }
+
+ tr.visible-md.visible-lg {
+ display: table-row !important
+ }
+
+ th.visible-md.visible-lg, td.visible-md.visible-lg {
+ display: table-cell !important
+ }
+}
+
+.visible-lg {
+ display: none !important
+}
+
+tr.visible-lg {
+ display: none !important
+}
+
+th.visible-lg, td.visible-lg {
+ display: none !important
+}
+
+@media (max-width: 767px) {
+ .visible-lg.visible-xs {
+ display: block !important
+ }
+
+ tr.visible-lg.visible-xs {
+ display: table-row !important
+ }
+
+ th.visible-lg.visible-xs, td.visible-lg.visible-xs {
+ display: table-cell !important
+ }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-lg.visible-sm {
+ display: block !important
+ }
+
+ tr.visible-lg.visible-sm {
+ display: table-row !important
+ }
+
+ th.visible-lg.visible-sm, td.visible-lg.visible-sm {
+ display: table-cell !important
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-lg.visible-md {
+ display: block !important
+ }
+
+ tr.visible-lg.visible-md {
+ display: table-row !important
+ }
+
+ th.visible-lg.visible-md, td.visible-lg.visible-md {
+ display: table-cell !important
+ }
+}
+
+@media (min-width: 1200px) {
+ .visible-lg {
+ display: block !important
+ }
+
+ tr.visible-lg {
+ display: table-row !important
+ }
+
+ th.visible-lg, td.visible-lg {
+ display: table-cell !important
+ }
+}
+
+.hidden-xs {
+ display: block !important
+}
+
+tr.hidden-xs {
+ display: table-row !important
+}
+
+th.hidden-xs, td.hidden-xs {
+ display: table-cell !important
+}
+
+@media (max-width: 767px) {
+ .hidden-xs {
+ display: none !important
+ }
+
+ tr.hidden-xs {
+ display: none !important
+ }
+
+ th.hidden-xs, td.hidden-xs {
+ display: none !important
+ }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+ .hidden-xs.hidden-sm {
+ display: none !important
+ }
+
+ tr.hidden-xs.hidden-sm {
+ display: none !important
+ }
+
+ th.hidden-xs.hidden-sm, td.hidden-xs.hidden-sm {
+ display: none !important
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .hidden-xs.hidden-md {
+ display: none !important
+ }
+
+ tr.hidden-xs.hidden-md {
+ display: none !important
+ }
+
+ th.hidden-xs.hidden-md, td.hidden-xs.hidden-md {
+ display: none !important
+ }
+}
+
+@media (min-width: 1200px) {
+ .hidden-xs.hidden-lg {
+ display: none !important
+ }
+
+ tr.hidden-xs.hidden-lg {
+ display: none !important
+ }
+
+ th.hidden-xs.hidden-lg, td.hidden-xs.hidden-lg {
+ display: none !important
+ }
+}
+
+.hidden-sm {
+ display: block !important
+}
+
+tr.hidden-sm {
+ display: table-row !important
+}
+
+th.hidden-sm, td.hidden-sm {
+ display: table-cell !important
+}
+
+@media (max-width: 767px) {
+ .hidden-sm.hidden-xs {
+ display: none !important
+ }
+
+ tr.hidden-sm.hidden-xs {
+ display: none !important
+ }
+
+ th.hidden-sm.hidden-xs, td.hidden-sm.hidden-xs {
+ display: none !important
+ }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+ .hidden-sm {
+ display: none !important
+ }
+
+ tr.hidden-sm {
+ display: none !important
+ }
+
+ th.hidden-sm, td.hidden-sm {
+ display: none !important
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .hidden-sm.hidden-md {
+ display: none !important
+ }
+
+ tr.hidden-sm.hidden-md {
+ display: none !important
+ }
+
+ th.hidden-sm.hidden-md, td.hidden-sm.hidden-md {
+ display: none !important
+ }
+}
+
+@media (min-width: 1200px) {
+ .hidden-sm.hidden-lg {
+ display: none !important
+ }
+
+ tr.hidden-sm.hidden-lg {
+ display: none !important
+ }
+
+ th.hidden-sm.hidden-lg, td.hidden-sm.hidden-lg {
+ display: none !important
+ }
+}
+
+.hidden-md {
+ display: block !important
+}
+
+tr.hidden-md {
+ display: table-row !important
+}
+
+th.hidden-md, td.hidden-md {
+ display: table-cell !important
+}
+
+@media (max-width: 767px) {
+ .hidden-md.hidden-xs {
+ display: none !important
+ }
+
+ tr.hidden-md.hidden-xs {
+ display: none !important
+ }
+
+ th.hidden-md.hidden-xs, td.hidden-md.hidden-xs {
+ display: none !important
+ }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+ .hidden-md.hidden-sm {
+ display: none !important
+ }
+
+ tr.hidden-md.hidden-sm {
+ display: none !important
+ }
+
+ th.hidden-md.hidden-sm, td.hidden-md.hidden-sm {
+ display: none !important
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .hidden-md {
+ display: none !important
+ }
+
+ tr.hidden-md {
+ display: none !important
+ }
+
+ th.hidden-md, td.hidden-md {
+ display: none !important
+ }
+}
+
+@media (min-width: 1200px) {
+ .hidden-md.hidden-lg {
+ display: none !important
+ }
+
+ tr.hidden-md.hidden-lg {
+ display: none !important
+ }
+
+ th.hidden-md.hidden-lg, td.hidden-md.hidden-lg {
+ display: none !important
+ }
+}
+
+.hidden-lg {
+ display: block !important
+}
+
+tr.hidden-lg {
+ display: table-row !important
+}
+
+th.hidden-lg, td.hidden-lg {
+ display: table-cell !important
+}
+
+@media (max-width: 767px) {
+ .hidden-lg.hidden-xs {
+ display: none !important
+ }
+
+ tr.hidden-lg.hidden-xs {
+ display: none !important
+ }
+
+ th.hidden-lg.hidden-xs, td.hidden-lg.hidden-xs {
+ display: none !important
+ }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+ .hidden-lg.hidden-sm {
+ display: none !important
+ }
+
+ tr.hidden-lg.hidden-sm {
+ display: none !important
+ }
+
+ th.hidden-lg.hidden-sm, td.hidden-lg.hidden-sm {
+ display: none !important
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .hidden-lg.hidden-md {
+ display: none !important
+ }
+
+ tr.hidden-lg.hidden-md {
+ display: none !important
+ }
+
+ th.hidden-lg.hidden-md, td.hidden-lg.hidden-md {
+ display: none !important
+ }
+}
+
+@media (min-width: 1200px) {
+ .hidden-lg {
+ display: none !important
+ }
+
+ tr.hidden-lg {
+ display: none !important
+ }
+
+ th.hidden-lg, td.hidden-lg {
+ display: none !important
+ }
+}
+
+.visible-print {
+ display: none !important
+}
+
+tr.visible-print {
+ display: none !important
+}
+
+th.visible-print, td.visible-print {
+ display: none !important
+}
+
+@media print {
+ .visible-print {
+ display: block !important
+ }
+
+ tr.visible-print {
+ display: table-row !important
+ }
+
+ th.visible-print, td.visible-print {
+ display: table-cell !important
+ }
+
+ .hidden-print {
+ display: none !important
+ }
+
+ tr.hidden-print {
+ display: none !important
+ }
+
+ th.hidden-print, td.hidden-print {
+ display: none !important
+ }
+}
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/dist/fonts/glyphicons-halflings-regular.eot b/vendor/twitter-bootstrap-3/dist/fonts/glyphicons-halflings-regular.eot
new file mode 100644
index 000000000..87eaa4342
Binary files /dev/null and b/vendor/twitter-bootstrap-3/dist/fonts/glyphicons-halflings-regular.eot differ
diff --git a/vendor/twitter-bootstrap-3/dist/fonts/glyphicons-halflings-regular.svg b/vendor/twitter-bootstrap-3/dist/fonts/glyphicons-halflings-regular.svg
new file mode 100644
index 000000000..5fee06854
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/dist/fonts/glyphicons-halflings-regular.svg
@@ -0,0 +1,228 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/dist/fonts/glyphicons-halflings-regular.ttf b/vendor/twitter-bootstrap-3/dist/fonts/glyphicons-halflings-regular.ttf
new file mode 100644
index 000000000..be784dc1d
Binary files /dev/null and b/vendor/twitter-bootstrap-3/dist/fonts/glyphicons-halflings-regular.ttf differ
diff --git a/vendor/twitter-bootstrap-3/dist/fonts/glyphicons-halflings-regular.woff b/vendor/twitter-bootstrap-3/dist/fonts/glyphicons-halflings-regular.woff
new file mode 100644
index 000000000..2cc3e4852
Binary files /dev/null and b/vendor/twitter-bootstrap-3/dist/fonts/glyphicons-halflings-regular.woff differ
diff --git a/vendor/twitter-bootstrap-3/dist/js/bootstrap.js b/vendor/twitter-bootstrap-3/dist/js/bootstrap.js
new file mode 100644
index 000000000..661b6a14c
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/dist/js/bootstrap.js
@@ -0,0 +1,2221 @@
+/**
+ * Bootstrap v3.0.0 by @fat and @mdo
+ * Copyright 2013 Twitter Inc.
+ * Licensed under http://www.apache.org/licenses/LICENSE-2.0.
+ *
+ * Designed and built with all the love in the world by @mdo and @fat.
+ */
+if (!jQuery)
+{
+ throw new Error ("Bootstrap requires jQuery")
+}
+
+/* ========================================================================
+ * Bootstrap: transition.js v3.0.0
+ * http://twbs.github.com/bootstrap/javascript.html#transitions
+ * ========================================================================
+ * Copyright 2013 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ======================================================================== */
+
+
++function ($)
+{
+ "use strict";
+
+ // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
+ // ============================================================
+
+ function transitionEnd ()
+ {
+ var el = document.createElement ('bootstrap')
+
+ var transEndEventNames = {
+ 'WebkitTransition': 'webkitTransitionEnd', 'MozTransition': 'transitionend', 'OTransition': 'oTransitionEnd otransitionend', 'transition': 'transitionend'
+ }
+
+ for (var name in transEndEventNames)
+ {
+ if (el.style[name] !== undefined)
+ {
+ return { end: transEndEventNames[name] }
+ }
+ }
+ }
+
+ // http://blog.alexmaccaw.com/css-transitions
+ $.fn.emulateTransitionEnd = function (duration)
+ {
+ var called = false, $el = this
+ $ (this).one ($.support.transition.end, function ()
+ {
+ called = true
+ })
+ var callback = function ()
+ {
+ if (!called) $ ($el).trigger ($.support.transition.end)
+ }
+ setTimeout (callback, duration)
+ return this
+ }
+
+ $ (function ()
+ {
+ $.support.transition = transitionEnd ()
+ })
+
+} (window.jQuery);
+
+/* ========================================================================
+ * Bootstrap: alert.js v3.0.0
+ * http://twbs.github.com/bootstrap/javascript.html#alerts
+ * ========================================================================
+ * Copyright 2013 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ======================================================================== */
+
+
++function ($)
+{
+ "use strict";
+
+ // ALERT CLASS DEFINITION
+ // ======================
+
+ var dismiss = '[data-dismiss="alert"]'
+ var Alert = function (el)
+ {
+ $ (el).on ('click', dismiss, this.close)
+ }
+
+ Alert.prototype.close = function (e)
+ {
+ var $this = $ (this)
+ var selector = $this.attr ('data-target')
+
+ if (!selector)
+ {
+ selector = $this.attr ('href')
+ selector = selector && selector.replace (/.*(?=#[^\s]*$)/, '') // strip for ie7
+ }
+
+ var $parent = $ (selector)
+
+ if (e) e.preventDefault ()
+
+ if (!$parent.length)
+ {
+ $parent = $this.hasClass ('alert') ? $this : $this.parent ()
+ }
+
+ $parent.trigger (e = $.Event ('close.bs.alert'))
+
+ if (e.isDefaultPrevented ()) return
+
+ $parent.removeClass ('in')
+
+ function removeElement ()
+ {
+ $parent.trigger ('closed.bs.alert').remove ()
+ }
+
+ $.support.transition && $parent.hasClass ('fade') ?
+ $parent
+ .one ($.support.transition.end, removeElement)
+ .emulateTransitionEnd (150) :
+ removeElement ()
+ }
+
+
+ // ALERT PLUGIN DEFINITION
+ // =======================
+
+ var old = $.fn.alert
+
+ $.fn.alert = function (option)
+ {
+ return this.each (function ()
+ {
+ var $this = $ (this)
+ var data = $this.data ('bs.alert')
+
+ if (!data) $this.data ('bs.alert', (data = new Alert (this)))
+ if (typeof option == 'string') data[option].call ($this)
+ })
+ }
+
+ $.fn.alert.Constructor = Alert
+
+
+ // ALERT NO CONFLICT
+ // =================
+
+ $.fn.alert.noConflict = function ()
+ {
+ $.fn.alert = old
+ return this
+ }
+
+
+ // ALERT DATA-API
+ // ==============
+
+ $ (document).on ('click.bs.alert.data-api', dismiss, Alert.prototype.close)
+
+} (window.jQuery);
+
+/* ========================================================================
+ * Bootstrap: button.js v3.0.0
+ * http://twbs.github.com/bootstrap/javascript.html#buttons
+ * ========================================================================
+ * Copyright 2013 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ======================================================================== */
+
+
++function ($)
+{
+ "use strict";
+
+ // BUTTON PUBLIC CLASS DEFINITION
+ // ==============================
+
+ var Button = function (element, options)
+ {
+ this.$element = $ (element)
+ this.options = $.extend ({}, Button.DEFAULTS, options)
+ }
+
+ Button.DEFAULTS = {
+ loadingText: 'loading...'
+ }
+
+ Button.prototype.setState = function (state)
+ {
+ var d = 'disabled'
+ var $el = this.$element
+ var val = $el.is ('input') ? 'val' : 'html'
+ var data = $el.data ()
+
+ state = state + 'Text'
+
+ if (!data.resetText) $el.data ('resetText', $el[val] ())
+
+ $el[val] (data[state] || this.options[state])
+
+ // push to event loop to allow forms to submit
+ setTimeout (function ()
+ {
+ state == 'loadingText' ?
+ $el.addClass (d).attr (d, d) :
+ $el.removeClass (d).removeAttr (d);
+ }, 0)
+ }
+
+ Button.prototype.toggle = function ()
+ {
+ var $parent = this.$element.closest ('[data-toggle="buttons"]')
+
+ if ($parent.length)
+ {
+ var $input = this.$element.find ('input')
+ .prop ('checked', !this.$element.hasClass ('active'))
+ .trigger ('change')
+ if ($input.prop ('type') === 'radio') $parent.find ('.active').removeClass ('active')
+ }
+
+ this.$element.toggleClass ('active')
+ }
+
+
+ // BUTTON PLUGIN DEFINITION
+ // ========================
+
+ var old = $.fn.button
+
+ $.fn.button = function (option)
+ {
+ return this.each (function ()
+ {
+ var $this = $ (this)
+ var data = $this.data ('bs.button')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data ('bs.button', (data = new Button (this, options)))
+
+ if (option == 'toggle') data.toggle ()
+ else if (option) data.setState (option)
+ })
+ }
+
+ $.fn.button.Constructor = Button
+
+
+ // BUTTON NO CONFLICT
+ // ==================
+
+ $.fn.button.noConflict = function ()
+ {
+ $.fn.button = old
+ return this
+ }
+
+
+ // BUTTON DATA-API
+ // ===============
+
+ $ (document).on ('click.bs.button.data-api', '[data-toggle^=button]', function (e)
+ {
+ var $btn = $ (e.target)
+ if (!$btn.hasClass ('btn')) $btn = $btn.closest ('.btn')
+ $btn.button ('toggle')
+ e.preventDefault ()
+ })
+
+} (window.jQuery);
+
+/* ========================================================================
+ * Bootstrap: carousel.js v3.0.0
+ * http://twbs.github.com/bootstrap/javascript.html#carousel
+ * ========================================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ======================================================================== */
+
+
++function ($)
+{
+ "use strict";
+
+ // CAROUSEL CLASS DEFINITION
+ // =========================
+
+ var Carousel = function (element, options)
+ {
+ this.$element = $ (element)
+ this.$indicators = this.$element.find ('.carousel-indicators')
+ this.options = options
+ this.paused =
+ this.sliding =
+ this.interval =
+ this.$active =
+ this.$items = null
+
+ this.options.pause == 'hover' && this.$element
+ .on ('mouseenter', $.proxy (this.pause, this))
+ .on ('mouseleave', $.proxy (this.cycle, this))
+ }
+
+ Carousel.DEFAULTS = {
+ interval: 5000, pause: 'hover', wrap: true
+ }
+
+ Carousel.prototype.cycle = function (e)
+ {
+ e || (this.paused = false)
+
+ this.interval && clearInterval (this.interval)
+
+ this.options.interval
+ && !this.paused
+ && (this.interval = setInterval ($.proxy (this.next, this), this.options.interval))
+
+ return this
+ }
+
+ Carousel.prototype.getActiveIndex = function ()
+ {
+ this.$active = this.$element.find ('.item.active')
+ this.$items = this.$active.parent ().children ()
+
+ return this.$items.index (this.$active)
+ }
+
+ Carousel.prototype.to = function (pos)
+ {
+ var that = this
+ var activeIndex = this.getActiveIndex ()
+
+ if (pos > (this.$items.length - 1) || pos < 0) return
+
+ if (this.sliding) return this.$element.one ('slid', function ()
+ {
+ that.to (pos)
+ })
+ if (activeIndex == pos) return this.pause ().cycle ()
+
+ return this.slide (pos > activeIndex ? 'next' : 'prev', $ (this.$items[pos]))
+ }
+
+ Carousel.prototype.pause = function (e)
+ {
+ e || (this.paused = true)
+
+ if (this.$element.find ('.next, .prev').length && $.support.transition.end)
+ {
+ this.$element.trigger ($.support.transition.end)
+ this.cycle (true)
+ }
+
+ this.interval = clearInterval (this.interval)
+
+ return this
+ }
+
+ Carousel.prototype.next = function ()
+ {
+ if (this.sliding) return
+ return this.slide ('next')
+ }
+
+ Carousel.prototype.prev = function ()
+ {
+ if (this.sliding) return
+ return this.slide ('prev')
+ }
+
+ Carousel.prototype.slide = function (type, next)
+ {
+ var $active = this.$element.find ('.item.active')
+ var $next = next || $active[type] ()
+ var isCycling = this.interval
+ var direction = type == 'next' ? 'left' : 'right'
+ var fallback = type == 'next' ? 'first' : 'last'
+ var that = this
+
+ if (!$next.length)
+ {
+ if (!this.options.wrap) return
+ $next = this.$element.find ('.item')[fallback] ()
+ }
+
+ this.sliding = true
+
+ isCycling && this.pause ()
+
+ var e = $.Event ('slide.bs.carousel', { relatedTarget: $next[0], direction: direction })
+
+ if ($next.hasClass ('active')) return
+
+ if (this.$indicators.length)
+ {
+ this.$indicators.find ('.active').removeClass ('active')
+ this.$element.one ('slid', function ()
+ {
+ var $nextIndicator = $ (that.$indicators.children ()[that.getActiveIndex ()])
+ $nextIndicator && $nextIndicator.addClass ('active')
+ })
+ }
+
+ if ($.support.transition && this.$element.hasClass ('slide'))
+ {
+ this.$element.trigger (e)
+ if (e.isDefaultPrevented ()) return
+ $next.addClass (type)
+ $next[0].offsetWidth // force reflow
+ $active.addClass (direction)
+ $next.addClass (direction)
+ $active
+ .one ($.support.transition.end, function ()
+ {
+ $next.removeClass ([type, direction].join (' ')).addClass ('active')
+ $active.removeClass (['active', direction].join (' '))
+ that.sliding = false
+ setTimeout (function ()
+ {
+ that.$element.trigger ('slid')
+ }, 0)
+ })
+ .emulateTransitionEnd (600)
+ } else
+ {
+ this.$element.trigger (e)
+ if (e.isDefaultPrevented ()) return
+ $active.removeClass ('active')
+ $next.addClass ('active')
+ this.sliding = false
+ this.$element.trigger ('slid')
+ }
+
+ isCycling && this.cycle ()
+
+ return this
+ }
+
+
+ // CAROUSEL PLUGIN DEFINITION
+ // ==========================
+
+ var old = $.fn.carousel
+
+ $.fn.carousel = function (option)
+ {
+ return this.each (function ()
+ {
+ var $this = $ (this)
+ var data = $this.data ('bs.carousel')
+ var options = $.extend ({}, Carousel.DEFAULTS, $this.data (), typeof option == 'object' && option)
+ var action = typeof option == 'string' ? option : options.slide
+
+ if (!data) $this.data ('bs.carousel', (data = new Carousel (this, options)))
+ if (typeof option == 'number') data.to (option)
+ else if (action) data[action] ()
+ else if (options.interval) data.pause ().cycle ()
+ })
+ }
+
+ $.fn.carousel.Constructor = Carousel
+
+
+ // CAROUSEL NO CONFLICT
+ // ====================
+
+ $.fn.carousel.noConflict = function ()
+ {
+ $.fn.carousel = old
+ return this
+ }
+
+
+ // CAROUSEL DATA-API
+ // =================
+
+ $ (document).on ('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e)
+ {
+ var $this = $ (this), href
+ var $target = $ ($this.attr ('data-target') || (href = $this.attr ('href')) && href.replace (/.*(?=#[^\s]+$)/, '')) //strip for ie7
+ var options = $.extend ({}, $target.data (), $this.data ())
+ var slideIndex = $this.attr ('data-slide-to')
+ if (slideIndex) options.interval = false
+
+ $target.carousel (options)
+
+ if (slideIndex = $this.attr ('data-slide-to'))
+ {
+ $target.data ('bs.carousel').to (slideIndex)
+ }
+
+ e.preventDefault ()
+ })
+
+ $ (window).on ('load', function ()
+ {
+ $ ('[data-ride="carousel"]').each (function ()
+ {
+ var $carousel = $ (this)
+ $carousel.carousel ($carousel.data ())
+ })
+ })
+
+} (window.jQuery);
+
+/* ========================================================================
+ * Bootstrap: collapse.js v3.0.0
+ * http://twbs.github.com/bootstrap/javascript.html#collapse
+ * ========================================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ======================================================================== */
+
+
++function ($)
+{
+ "use strict";
+
+ // COLLAPSE PUBLIC CLASS DEFINITION
+ // ================================
+
+ var Collapse = function (element, options)
+ {
+ this.$element = $ (element)
+ this.options = $.extend ({}, Collapse.DEFAULTS, options)
+ this.transitioning = null
+
+ if (this.options.parent) this.$parent = $ (this.options.parent)
+ if (this.options.toggle) this.toggle ()
+ }
+
+ Collapse.DEFAULTS = {
+ toggle: true
+ }
+
+ Collapse.prototype.dimension = function ()
+ {
+ var hasWidth = this.$element.hasClass ('width')
+ return hasWidth ? 'width' : 'height'
+ }
+
+ Collapse.prototype.show = function ()
+ {
+ if (this.transitioning || this.$element.hasClass ('in')) return
+
+ var startEvent = $.Event ('show.bs.collapse')
+ this.$element.trigger (startEvent)
+ if (startEvent.isDefaultPrevented ()) return
+
+ var actives = this.$parent && this.$parent.find ('> .panel > .in')
+
+ if (actives && actives.length)
+ {
+ var hasData = actives.data ('bs.collapse')
+ if (hasData && hasData.transitioning) return
+ actives.collapse ('hide')
+ hasData || actives.data ('bs.collapse', null)
+ }
+
+ var dimension = this.dimension ()
+
+ this.$element
+ .removeClass ('collapse')
+ .addClass ('collapsing')
+ [dimension] (0)
+
+ this.transitioning = 1
+
+ var complete = function ()
+ {
+ this.$element
+ .removeClass ('collapsing')
+ .addClass ('in')
+ [dimension] ('auto')
+ this.transitioning = 0
+ this.$element.trigger ('shown.bs.collapse')
+ }
+
+ if (!$.support.transition) return complete.call (this)
+
+ var scrollSize = $.camelCase (['scroll', dimension].join ('-'))
+
+ this.$element
+ .one ($.support.transition.end, $.proxy (complete, this))
+ .emulateTransitionEnd (350)
+ [dimension] (this.$element[0][scrollSize])
+ }
+
+ Collapse.prototype.hide = function ()
+ {
+ if (this.transitioning || !this.$element.hasClass ('in')) return
+
+ var startEvent = $.Event ('hide.bs.collapse')
+ this.$element.trigger (startEvent)
+ if (startEvent.isDefaultPrevented ()) return
+
+ var dimension = this.dimension ()
+
+ this.$element
+ [dimension] (this.$element[dimension] ())
+ [0].offsetHeight
+
+ this.$element
+ .addClass ('collapsing')
+ .removeClass ('collapse')
+ .removeClass ('in')
+
+ this.transitioning = 1
+
+ var complete = function ()
+ {
+ this.transitioning = 0
+ this.$element
+ .trigger ('hidden.bs.collapse')
+ .removeClass ('collapsing')
+ .addClass ('collapse')
+ }
+
+ if (!$.support.transition) return complete.call (this)
+
+ this.$element
+ [dimension] (0)
+ .one ($.support.transition.end, $.proxy (complete, this))
+ .emulateTransitionEnd (350)
+ }
+
+ Collapse.prototype.toggle = function ()
+ {
+ this[this.$element.hasClass ('in') ? 'hide' : 'show'] ()
+ }
+
+
+ // COLLAPSE PLUGIN DEFINITION
+ // ==========================
+
+ var old = $.fn.collapse
+
+ $.fn.collapse = function (option)
+ {
+ return this.each (function ()
+ {
+ var $this = $ (this)
+ var data = $this.data ('bs.collapse')
+ var options = $.extend ({}, Collapse.DEFAULTS, $this.data (), typeof option == 'object' && option)
+
+ if (!data) $this.data ('bs.collapse', (data = new Collapse (this, options)))
+ if (typeof option == 'string') data[option] ()
+ })
+ }
+
+ $.fn.collapse.Constructor = Collapse
+
+
+ // COLLAPSE NO CONFLICT
+ // ====================
+
+ $.fn.collapse.noConflict = function ()
+ {
+ $.fn.collapse = old
+ return this
+ }
+
+
+ // COLLAPSE DATA-API
+ // =================
+
+ $ (document).on ('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e)
+ {
+ var $this = $ (this), href
+ var target = $this.attr ('data-target')
+ || e.preventDefault ()
+ || (href = $this.attr ('href')) && href.replace (/.*(?=#[^\s]+$)/, '') //strip for ie7
+ var $target = $ (target)
+ var data = $target.data ('bs.collapse')
+ var option = data ? 'toggle' : $this.data ()
+ var parent = $this.attr ('data-parent')
+ var $parent = parent && $ (parent)
+
+ if (!data || !data.transitioning)
+ {
+ if ($parent) $parent.find ('[data-toggle=collapse][data-parent="' + parent + '"]').not ($this).addClass ('collapsed')
+ $this[$target.hasClass ('in') ? 'addClass' : 'removeClass'] ('collapsed')
+ }
+
+ $target.collapse (option)
+ })
+
+} (window.jQuery);
+
+/* ========================================================================
+ * Bootstrap: dropdown.js v3.0.0
+ * http://twbs.github.com/bootstrap/javascript.html#dropdowns
+ * ========================================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ======================================================================== */
+
+
++function ($)
+{
+ "use strict";
+
+ // DROPDOWN CLASS DEFINITION
+ // =========================
+
+ var backdrop = '.dropdown-backdrop'
+ var toggle = '[data-toggle=dropdown]'
+ var Dropdown = function (element)
+ {
+ var $el = $ (element).on ('click.bs.dropdown', this.toggle)
+ }
+
+ Dropdown.prototype.toggle = function (e)
+ {
+ var $this = $ (this)
+
+ if ($this.is ('.disabled, :disabled')) return
+
+ var $parent = getParent ($this)
+ var isActive = $parent.hasClass ('open')
+
+ clearMenus ()
+
+ if (!isActive)
+ {
+ if ('ontouchstart' in document.documentElement && !$parent.closest ('.navbar-nav').length)
+ {
+ // if mobile we we use a backdrop because click events don't delegate
+ $ ('
').insertAfter ($ (this)).on ('click', clearMenus)
+ }
+
+ $parent.trigger (e = $.Event ('show.bs.dropdown'))
+
+ if (e.isDefaultPrevented ()) return
+
+ $parent
+ .toggleClass ('open')
+ .trigger ('shown.bs.dropdown')
+
+ $this.focus ()
+ }
+
+ return false
+ }
+
+ Dropdown.prototype.keydown = function (e)
+ {
+ if (!/(38|40|27)/.test (e.keyCode)) return
+
+ var $this = $ (this)
+
+ e.preventDefault ()
+ e.stopPropagation ()
+
+ if ($this.is ('.disabled, :disabled')) return
+
+ var $parent = getParent ($this)
+ var isActive = $parent.hasClass ('open')
+
+ if (!isActive || (isActive && e.keyCode == 27))
+ {
+ if (e.which == 27) $parent.find (toggle).focus ()
+ return $this.click ()
+ }
+
+ var $items = $ ('[role=menu] li:not(.divider):visible a', $parent)
+
+ if (!$items.length) return
+
+ var index = $items.index ($items.filter (':focus'))
+
+ if (e.keyCode == 38 && index > 0) index-- // up
+ if (e.keyCode == 40 && index < $items.length - 1) index++ // down
+ if (!~index) index = 0
+
+ $items.eq (index).focus ()
+ }
+
+ function clearMenus ()
+ {
+ $ (backdrop).remove ()
+ $ (toggle).each (function (e)
+ {
+ var $parent = getParent ($ (this))
+ if (!$parent.hasClass ('open')) return
+ $parent.trigger (e = $.Event ('hide.bs.dropdown'))
+ if (e.isDefaultPrevented ()) return
+ $parent.removeClass ('open').trigger ('hidden.bs.dropdown')
+ })
+ }
+
+ function getParent ($this)
+ {
+ var selector = $this.attr ('data-target')
+
+ if (!selector)
+ {
+ selector = $this.attr ('href')
+ selector = selector && /#/.test (selector) && selector.replace (/.*(?=#[^\s]*$)/, '') //strip for ie7
+ }
+
+ var $parent = selector && $ (selector)
+
+ return $parent && $parent.length ? $parent : $this.parent ()
+ }
+
+
+ // DROPDOWN PLUGIN DEFINITION
+ // ==========================
+
+ var old = $.fn.dropdown
+
+ $.fn.dropdown = function (option)
+ {
+ return this.each (function ()
+ {
+ var $this = $ (this)
+ var data = $this.data ('dropdown')
+
+ if (!data) $this.data ('dropdown', (data = new Dropdown (this)))
+ if (typeof option == 'string') data[option].call ($this)
+ })
+ }
+
+ $.fn.dropdown.Constructor = Dropdown
+
+
+ // DROPDOWN NO CONFLICT
+ // ====================
+
+ $.fn.dropdown.noConflict = function ()
+ {
+ $.fn.dropdown = old
+ return this
+ }
+
+
+ // APPLY TO STANDARD DROPDOWN ELEMENTS
+ // ===================================
+
+ $ (document)
+ .on ('click.bs.dropdown.data-api', clearMenus)
+ .on ('click.bs.dropdown.data-api', '.dropdown form', function (e)
+ {
+ e.stopPropagation ()
+ })
+ .on ('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
+ .on ('keydown.bs.dropdown.data-api', toggle + ', [role=menu]', Dropdown.prototype.keydown)
+
+} (window.jQuery);
+
+/* ========================================================================
+ * Bootstrap: modal.js v3.0.0
+ * http://twbs.github.com/bootstrap/javascript.html#modals
+ * ========================================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ======================================================================== */
+
+
++function ($)
+{
+ "use strict";
+
+ // MODAL CLASS DEFINITION
+ // ======================
+
+ var Modal = function (element, options)
+ {
+ this.options = options
+ this.$element = $ (element)
+ this.$backdrop =
+ this.isShown = null
+
+ if (this.options.remote) this.$element.load (this.options.remote)
+ }
+
+ Modal.DEFAULTS = {
+ backdrop: true, keyboard: true, show: true
+ }
+
+ Modal.prototype.toggle = function (_relatedTarget)
+ {
+ return this[!this.isShown ? 'show' : 'hide'] (_relatedTarget)
+ }
+
+ Modal.prototype.show = function (_relatedTarget)
+ {
+ var that = this
+ var e = $.Event ('show.bs.modal', { relatedTarget: _relatedTarget })
+
+ this.$element.trigger (e)
+
+ if (this.isShown || e.isDefaultPrevented ()) return
+
+ this.isShown = true
+
+ this.escape ()
+
+ this.$element.on ('click.dismiss.modal', '[data-dismiss="modal"]', $.proxy (this.hide, this))
+
+ this.backdrop (function ()
+ {
+ var transition = $.support.transition && that.$element.hasClass ('fade')
+
+ if (!that.$element.parent ().length)
+ {
+ that.$element.appendTo (document.body) // don't move modals dom position
+ }
+
+ that.$element.show ()
+
+ if (transition)
+ {
+ that.$element[0].offsetWidth // force reflow
+ }
+
+ that.$element
+ .addClass ('in')
+ .attr ('aria-hidden', false)
+
+ that.enforceFocus ()
+
+ var e = $.Event ('shown.bs.modal', { relatedTarget: _relatedTarget })
+
+ transition ?
+ that.$element.find ('.modal-dialog') // wait for modal to slide in
+ .one ($.support.transition.end, function ()
+ {
+ that.$element.focus ().trigger (e)
+ })
+ .emulateTransitionEnd (300) :
+ that.$element.focus ().trigger (e)
+ })
+ }
+
+ Modal.prototype.hide = function (e)
+ {
+ if (e) e.preventDefault ()
+
+ e = $.Event ('hide.bs.modal')
+
+ this.$element.trigger (e)
+
+ if (!this.isShown || e.isDefaultPrevented ()) return
+
+ this.isShown = false
+
+ this.escape ()
+
+ $ (document).off ('focusin.bs.modal')
+
+ this.$element
+ .removeClass ('in')
+ .attr ('aria-hidden', true)
+ .off ('click.dismiss.modal')
+
+ $.support.transition && this.$element.hasClass ('fade') ?
+ this.$element
+ .one ($.support.transition.end, $.proxy (this.hideModal, this))
+ .emulateTransitionEnd (300) :
+ this.hideModal ()
+ }
+
+ Modal.prototype.enforceFocus = function ()
+ {
+ $ (document)
+ .off ('focusin.bs.modal') // guard against infinite focus loop
+ .on ('focusin.bs.modal', $.proxy (function (e)
+ {
+ if (this.$element[0] !== e.target && !this.$element.has (e.target).length)
+ {
+ this.$element.focus ()
+ }
+ }, this))
+ }
+
+ Modal.prototype.escape = function ()
+ {
+ if (this.isShown && this.options.keyboard)
+ {
+ this.$element.on ('keyup.dismiss.bs.modal', $.proxy (function (e)
+ {
+ e.which == 27 && this.hide ()
+ }, this))
+ } else if (!this.isShown)
+ {
+ this.$element.off ('keyup.dismiss.bs.modal')
+ }
+ }
+
+ Modal.prototype.hideModal = function ()
+ {
+ var that = this
+ this.$element.hide ()
+ this.backdrop (function ()
+ {
+ that.removeBackdrop ()
+ that.$element.trigger ('hidden.bs.modal')
+ })
+ }
+
+ Modal.prototype.removeBackdrop = function ()
+ {
+ this.$backdrop && this.$backdrop.remove ()
+ this.$backdrop = null
+ }
+
+ Modal.prototype.backdrop = function (callback)
+ {
+ var that = this
+ var animate = this.$element.hasClass ('fade') ? 'fade' : ''
+
+ if (this.isShown && this.options.backdrop)
+ {
+ var doAnimate = $.support.transition && animate
+
+ this.$backdrop = $ ('
')
+ .appendTo (document.body)
+
+ this.$element.on ('click.dismiss.modal', $.proxy (function (e)
+ {
+ if (e.target !== e.currentTarget) return
+ this.options.backdrop == 'static'
+ ? this.$element[0].focus.call (this.$element[0])
+ : this.hide.call (this)
+ }, this))
+
+ if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
+
+ this.$backdrop.addClass ('in')
+
+ if (!callback) return
+
+ doAnimate ?
+ this.$backdrop
+ .one ($.support.transition.end, callback)
+ .emulateTransitionEnd (150) :
+ callback ()
+
+ } else if (!this.isShown && this.$backdrop)
+ {
+ this.$backdrop.removeClass ('in')
+
+ $.support.transition && this.$element.hasClass ('fade') ?
+ this.$backdrop
+ .one ($.support.transition.end, callback)
+ .emulateTransitionEnd (150) :
+ callback ()
+
+ } else if (callback)
+ {
+ callback ()
+ }
+ }
+
+
+ // MODAL PLUGIN DEFINITION
+ // =======================
+
+ var old = $.fn.modal
+
+ $.fn.modal = function (option, _relatedTarget)
+ {
+ return this.each (function ()
+ {
+ var $this = $ (this)
+ var data = $this.data ('bs.modal')
+ var options = $.extend ({}, Modal.DEFAULTS, $this.data (), typeof option == 'object' && option)
+
+ if (!data) $this.data ('bs.modal', (data = new Modal (this, options)))
+ if (typeof option == 'string') data[option] (_relatedTarget)
+ else if (options.show) data.show (_relatedTarget)
+ })
+ }
+
+ $.fn.modal.Constructor = Modal
+
+
+ // MODAL NO CONFLICT
+ // =================
+
+ $.fn.modal.noConflict = function ()
+ {
+ $.fn.modal = old
+ return this
+ }
+
+
+ // MODAL DATA-API
+ // ==============
+
+ $ (document).on ('click.bs.modal.data-api', '[data-toggle="modal"]', function (e)
+ {
+ var $this = $ (this)
+ var href = $this.attr ('href')
+ var $target = $ ($this.attr ('data-target') || (href && href.replace (/.*(?=#[^\s]+$)/, ''))) //strip for ie7
+ var option = $target.data ('modal') ? 'toggle' : $.extend ({ remote: !/#/.test (href) && href }, $target.data (), $this.data ())
+
+ e.preventDefault ()
+
+ $target
+ .modal (option, this)
+ .one ('hide', function ()
+ {
+ $this.is (':visible') && $this.focus ()
+ })
+ })
+
+ $ (document)
+ .on ('show.bs.modal', '.modal', function ()
+ {
+ $ (document.body).addClass ('modal-open')
+ })
+ .on ('hidden.bs.modal', '.modal', function ()
+ {
+ $ (document.body).removeClass ('modal-open')
+ })
+
+} (window.jQuery);
+
+/* ========================================================================
+ * Bootstrap: tooltip.js v3.0.0
+ * http://twbs.github.com/bootstrap/javascript.html#tooltip
+ * Inspired by the original jQuery.tipsy by Jason Frame
+ * ========================================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ======================================================================== */
+
+
++function ($)
+{
+ "use strict";
+
+ // TOOLTIP PUBLIC CLASS DEFINITION
+ // ===============================
+
+ var Tooltip = function (element, options)
+ {
+ this.type =
+ this.options =
+ this.enabled =
+ this.timeout =
+ this.hoverState =
+ this.$element = null
+
+ this.init ('tooltip', element, options)
+ }
+
+ Tooltip.DEFAULTS = {
+ animation: true, placement: 'top', selector: false, template: '', trigger: 'hover focus', title: '', delay: 0, html: false, container: false
+ }
+
+ Tooltip.prototype.init = function (type, element, options)
+ {
+ this.enabled = true
+ this.type = type
+ this.$element = $ (element)
+ this.options = this.getOptions (options)
+
+ var triggers = this.options.trigger.split (' ')
+
+ for (var i = triggers.length; i--;)
+ {
+ var trigger = triggers[i]
+
+ if (trigger == 'click')
+ {
+ this.$element.on ('click.' + this.type, this.options.selector, $.proxy (this.toggle, this))
+ } else if (trigger != 'manual')
+ {
+ var eventIn = trigger == 'hover' ? 'mouseenter' : 'focus'
+ var eventOut = trigger == 'hover' ? 'mouseleave' : 'blur'
+
+ this.$element.on (eventIn + '.' + this.type, this.options.selector, $.proxy (this.enter, this))
+ this.$element.on (eventOut + '.' + this.type, this.options.selector, $.proxy (this.leave, this))
+ }
+ }
+
+ this.options.selector ?
+ (this._options = $.extend ({}, this.options, { trigger: 'manual', selector: '' })) :
+ this.fixTitle ()
+ }
+
+ Tooltip.prototype.getDefaults = function ()
+ {
+ return Tooltip.DEFAULTS
+ }
+
+ Tooltip.prototype.getOptions = function (options)
+ {
+ options = $.extend ({}, this.getDefaults (), this.$element.data (), options)
+
+ if (options.delay && typeof options.delay == 'number')
+ {
+ options.delay = {
+ show: options.delay, hide: options.delay
+ }
+ }
+
+ return options
+ }
+
+ Tooltip.prototype.getDelegateOptions = function ()
+ {
+ var options = {}
+ var defaults = this.getDefaults ()
+
+ this._options && $.each (this._options, function (key, value)
+ {
+ if (defaults[key] != value) options[key] = value
+ })
+
+ return options
+ }
+
+ Tooltip.prototype.enter = function (obj)
+ {
+ var self = obj instanceof this.constructor ?
+ obj : $ (obj.currentTarget)[this.type] (this.getDelegateOptions ()).data ('bs.' + this.type)
+
+ clearTimeout (self.timeout)
+
+ self.hoverState = 'in'
+
+ if (!self.options.delay || !self.options.delay.show) return self.show ()
+
+ self.timeout = setTimeout (function ()
+ {
+ if (self.hoverState == 'in') self.show ()
+ }, self.options.delay.show)
+ }
+
+ Tooltip.prototype.leave = function (obj)
+ {
+ var self = obj instanceof this.constructor ?
+ obj : $ (obj.currentTarget)[this.type] (this.getDelegateOptions ()).data ('bs.' + this.type)
+
+ clearTimeout (self.timeout)
+
+ self.hoverState = 'out'
+
+ if (!self.options.delay || !self.options.delay.hide) return self.hide ()
+
+ self.timeout = setTimeout (function ()
+ {
+ if (self.hoverState == 'out') self.hide ()
+ }, self.options.delay.hide)
+ }
+
+ Tooltip.prototype.show = function ()
+ {
+ var e = $.Event ('show.bs.' + this.type)
+
+ if (this.hasContent () && this.enabled)
+ {
+ this.$element.trigger (e)
+
+ if (e.isDefaultPrevented ()) return
+
+ var $tip = this.tip ()
+
+ this.setContent ()
+
+ if (this.options.animation) $tip.addClass ('fade')
+
+ var placement = typeof this.options.placement == 'function' ?
+ this.options.placement.call (this, $tip[0], this.$element[0]) :
+ this.options.placement
+
+ var autoToken = /\s?auto?\s?/i
+ var autoPlace = autoToken.test (placement)
+ if (autoPlace) placement = placement.replace (autoToken, '') || 'top'
+
+ $tip
+ .detach ()
+ .css ({ top: 0, left: 0, display: 'block' })
+ .addClass (placement)
+
+ this.options.container ? $tip.appendTo (this.options.container) : $tip.insertAfter (this.$element)
+
+ var pos = this.getPosition ()
+ var actualWidth = $tip[0].offsetWidth
+ var actualHeight = $tip[0].offsetHeight
+
+ if (autoPlace)
+ {
+ var $parent = this.$element.parent ()
+
+ var orgPlacement = placement
+ var docScroll = document.documentElement.scrollTop || document.body.scrollTop
+ var parentWidth = this.options.container == 'body' ? window.innerWidth : $parent.outerWidth ()
+ var parentHeight = this.options.container == 'body' ? window.innerHeight : $parent.outerHeight ()
+ var parentLeft = this.options.container == 'body' ? 0 : $parent.offset ().left
+
+ placement = placement == 'bottom' && pos.top + pos.height + actualHeight - docScroll > parentHeight ? 'top' :
+ placement == 'top' && pos.top - docScroll - actualHeight < 0 ? 'bottom' :
+ placement == 'right' && pos.right + actualWidth > parentWidth ? 'left' :
+ placement == 'left' && pos.left - actualWidth < parentLeft ? 'right' :
+ placement
+
+ $tip
+ .removeClass (orgPlacement)
+ .addClass (placement)
+ }
+
+ var calculatedOffset = this.getCalculatedOffset (placement, pos, actualWidth, actualHeight)
+
+ this.applyPlacement (calculatedOffset, placement)
+ this.$element.trigger ('shown.bs.' + this.type)
+ }
+ }
+
+ Tooltip.prototype.applyPlacement = function (offset, placement)
+ {
+ var replace
+ var $tip = this.tip ()
+ var width = $tip[0].offsetWidth
+ var height = $tip[0].offsetHeight
+
+ // manually read margins because getBoundingClientRect includes difference
+ var marginTop = parseInt ($tip.css ('margin-top'), 10)
+ var marginLeft = parseInt ($tip.css ('margin-left'), 10)
+
+ // we must check for NaN for ie 8/9
+ if (isNaN (marginTop)) marginTop = 0
+ if (isNaN (marginLeft)) marginLeft = 0
+
+ offset.top = offset.top + marginTop
+ offset.left = offset.left + marginLeft
+
+ $tip
+ .offset (offset)
+ .addClass ('in')
+
+ // check to see if placing tip in new offset caused the tip to resize itself
+ var actualWidth = $tip[0].offsetWidth
+ var actualHeight = $tip[0].offsetHeight
+
+ if (placement == 'top' && actualHeight != height)
+ {
+ replace = true
+ offset.top = offset.top + height - actualHeight
+ }
+
+ if (/bottom|top/.test (placement))
+ {
+ var delta = 0
+
+ if (offset.left < 0)
+ {
+ delta = offset.left * -2
+ offset.left = 0
+
+ $tip.offset (offset)
+
+ actualWidth = $tip[0].offsetWidth
+ actualHeight = $tip[0].offsetHeight
+ }
+
+ this.replaceArrow (delta - width + actualWidth, actualWidth, 'left')
+ } else
+ {
+ this.replaceArrow (actualHeight - height, actualHeight, 'top')
+ }
+
+ if (replace) $tip.offset (offset)
+ }
+
+ Tooltip.prototype.replaceArrow = function (delta, dimension, position)
+ {
+ this.arrow ().css (position, delta ? (50 * (1 - delta / dimension) + "%") : '')
+ }
+
+ Tooltip.prototype.setContent = function ()
+ {
+ var $tip = this.tip ()
+ var title = this.getTitle ()
+
+ $tip.find ('.tooltip-inner')[this.options.html ? 'html' : 'text'] (title)
+ $tip.removeClass ('fade in top bottom left right')
+ }
+
+ Tooltip.prototype.hide = function ()
+ {
+ var that = this
+ var $tip = this.tip ()
+ var e = $.Event ('hide.bs.' + this.type)
+
+ function complete ()
+ {
+ if (that.hoverState != 'in') $tip.detach ()
+ }
+
+ this.$element.trigger (e)
+
+ if (e.isDefaultPrevented ()) return
+
+ $tip.removeClass ('in')
+
+ $.support.transition && this.$tip.hasClass ('fade') ?
+ $tip
+ .one ($.support.transition.end, complete)
+ .emulateTransitionEnd (150) :
+ complete ()
+
+ this.$element.trigger ('hidden.bs.' + this.type)
+
+ return this
+ }
+
+ Tooltip.prototype.fixTitle = function ()
+ {
+ var $e = this.$element
+ if ($e.attr ('title') || typeof($e.attr ('data-original-title')) != 'string')
+ {
+ $e.attr ('data-original-title', $e.attr ('title') || '').attr ('title', '')
+ }
+ }
+
+ Tooltip.prototype.hasContent = function ()
+ {
+ return this.getTitle ()
+ }
+
+ Tooltip.prototype.getPosition = function ()
+ {
+ var el = this.$element[0]
+ return $.extend ({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect () : {
+ width: el.offsetWidth, height: el.offsetHeight
+ }, this.$element.offset ())
+ }
+
+ Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight)
+ {
+ return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
+ placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
+ placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
+ /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
+ }
+
+ Tooltip.prototype.getTitle = function ()
+ {
+ var title
+ var $e = this.$element
+ var o = this.options
+
+ title = $e.attr ('data-original-title')
+ || (typeof o.title == 'function' ? o.title.call ($e[0]) : o.title)
+
+ return title
+ }
+
+ Tooltip.prototype.tip = function ()
+ {
+ return this.$tip = this.$tip || $ (this.options.template)
+ }
+
+ Tooltip.prototype.arrow = function ()
+ {
+ return this.$arrow = this.$arrow || this.tip ().find ('.tooltip-arrow')
+ }
+
+ Tooltip.prototype.validate = function ()
+ {
+ if (!this.$element[0].parentNode)
+ {
+ this.hide ()
+ this.$element = null
+ this.options = null
+ }
+ }
+
+ Tooltip.prototype.enable = function ()
+ {
+ this.enabled = true
+ }
+
+ Tooltip.prototype.disable = function ()
+ {
+ this.enabled = false
+ }
+
+ Tooltip.prototype.toggleEnabled = function ()
+ {
+ this.enabled = !this.enabled
+ }
+
+ Tooltip.prototype.toggle = function (e)
+ {
+ var self = e ? $ (e.currentTarget)[this.type] (this.getDelegateOptions ()).data ('bs.' + this.type) : this
+ self.tip ().hasClass ('in') ? self.leave (self) : self.enter (self)
+ }
+
+ Tooltip.prototype.destroy = function ()
+ {
+ this.hide ().$element.off ('.' + this.type).removeData ('bs.' + this.type)
+ }
+
+
+ // TOOLTIP PLUGIN DEFINITION
+ // =========================
+
+ var old = $.fn.tooltip
+
+ $.fn.tooltip = function (option)
+ {
+ return this.each (function ()
+ {
+ var $this = $ (this)
+ var data = $this.data ('bs.tooltip')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data ('bs.tooltip', (data = new Tooltip (this, options)))
+ if (typeof option == 'string') data[option] ()
+ })
+ }
+
+ $.fn.tooltip.Constructor = Tooltip
+
+
+ // TOOLTIP NO CONFLICT
+ // ===================
+
+ $.fn.tooltip.noConflict = function ()
+ {
+ $.fn.tooltip = old
+ return this
+ }
+
+} (window.jQuery);
+
+/* ========================================================================
+ * Bootstrap: popover.js v3.0.0
+ * http://twbs.github.com/bootstrap/javascript.html#popovers
+ * ========================================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ======================================================================== */
+
+
++function ($)
+{
+ "use strict";
+
+ // POPOVER PUBLIC CLASS DEFINITION
+ // ===============================
+
+ var Popover = function (element, options)
+ {
+ this.init ('popover', element, options)
+ }
+
+ if (!$.fn.tooltip) throw new Error ('Popover requires tooltip.js')
+
+ Popover.DEFAULTS = $.extend ({}, $.fn.tooltip.Constructor.DEFAULTS, {
+ placement: 'right', trigger: 'click', content: '', template: ''
+ })
+
+
+ // NOTE: POPOVER EXTENDS tooltip.js
+ // ================================
+
+ Popover.prototype = $.extend ({}, $.fn.tooltip.Constructor.prototype)
+
+ Popover.prototype.constructor = Popover
+
+ Popover.prototype.getDefaults = function ()
+ {
+ return Popover.DEFAULTS
+ }
+
+ Popover.prototype.setContent = function ()
+ {
+ var $tip = this.tip ()
+ var title = this.getTitle ()
+ var content = this.getContent ()
+
+ $tip.find ('.popover-title')[this.options.html ? 'html' : 'text'] (title)
+ $tip.find ('.popover-content')[this.options.html ? 'html' : 'text'] (content)
+
+ $tip.removeClass ('fade top bottom left right in')
+
+ // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
+ // this manually by checking the contents.
+ if (!$tip.find ('.popover-title').html ()) $tip.find ('.popover-title').hide ()
+ }
+
+ Popover.prototype.hasContent = function ()
+ {
+ return this.getTitle () || this.getContent ()
+ }
+
+ Popover.prototype.getContent = function ()
+ {
+ var $e = this.$element
+ var o = this.options
+
+ return $e.attr ('data-content')
+ || (typeof o.content == 'function' ?
+ o.content.call ($e[0]) :
+ o.content)
+ }
+
+ Popover.prototype.arrow = function ()
+ {
+ return this.$arrow = this.$arrow || this.tip ().find ('.arrow')
+ }
+
+ Popover.prototype.tip = function ()
+ {
+ if (!this.$tip) this.$tip = $ (this.options.template)
+ return this.$tip
+ }
+
+
+ // POPOVER PLUGIN DEFINITION
+ // =========================
+
+ var old = $.fn.popover
+
+ $.fn.popover = function (option)
+ {
+ return this.each (function ()
+ {
+ var $this = $ (this)
+ var data = $this.data ('bs.popover')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data ('bs.popover', (data = new Popover (this, options)))
+ if (typeof option == 'string') data[option] ()
+ })
+ }
+
+ $.fn.popover.Constructor = Popover
+
+
+ // POPOVER NO CONFLICT
+ // ===================
+
+ $.fn.popover.noConflict = function ()
+ {
+ $.fn.popover = old
+ return this
+ }
+
+} (window.jQuery);
+
+/* ========================================================================
+ * Bootstrap: scrollspy.js v3.0.0
+ * http://twbs.github.com/bootstrap/javascript.html#scrollspy
+ * ========================================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ======================================================================== */
+
+
++function ($)
+{
+ "use strict";
+
+ // SCROLLSPY CLASS DEFINITION
+ // ==========================
+
+ function ScrollSpy (element, options)
+ {
+ var href
+ var process = $.proxy (this.process, this)
+
+ this.$element = $ (element).is ('body') ? $ (window) : $ (element)
+ this.$body = $ ('body')
+ this.$scrollElement = this.$element.on ('scroll.bs.scroll-spy.data-api', process)
+ this.options = $.extend ({}, ScrollSpy.DEFAULTS, options)
+ this.selector = (this.options.target
+ || ((href = $ (element).attr ('href')) && href.replace (/.*(?=#[^\s]+$)/, '')) //strip for ie7
+ || '') + ' .nav li > a'
+ this.offsets = $ ([])
+ this.targets = $ ([])
+ this.activeTarget = null
+
+ this.refresh ()
+ this.process ()
+ }
+
+ ScrollSpy.DEFAULTS = {
+ offset: 10
+ }
+
+ ScrollSpy.prototype.refresh = function ()
+ {
+ var offsetMethod = this.$element[0] == window ? 'offset' : 'position'
+
+ this.offsets = $ ([])
+ this.targets = $ ([])
+
+ var self = this
+ var $targets = this.$body
+ .find (this.selector)
+ .map (function ()
+ {
+ var $el = $ (this)
+ var href = $el.data ('target') || $el.attr ('href')
+ var $href = /^#\w/.test (href) && $ (href)
+
+ return ($href
+ && $href.length
+ && [
+ [ $href[offsetMethod] ().top + (!$.isWindow (self.$scrollElement.get (0)) && self.$scrollElement.scrollTop ()), href ]
+ ]) || null
+ })
+ .sort (function (a, b)
+ {
+ return a[0] - b[0]
+ })
+ .each (function ()
+ {
+ self.offsets.push (this[0])
+ self.targets.push (this[1])
+ })
+ }
+
+ ScrollSpy.prototype.process = function ()
+ {
+ var scrollTop = this.$scrollElement.scrollTop () + this.options.offset
+ var scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight
+ var maxScroll = scrollHeight - this.$scrollElement.height ()
+ var offsets = this.offsets
+ var targets = this.targets
+ var activeTarget = this.activeTarget
+ var i
+
+ if (scrollTop >= maxScroll)
+ {
+ return activeTarget != (i = targets.last ()[0]) && this.activate (i)
+ }
+
+ for (i = offsets.length; i--;)
+ {
+ activeTarget != targets[i]
+ && scrollTop >= offsets[i]
+ && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
+ && this.activate (targets[i])
+ }
+ }
+
+ ScrollSpy.prototype.activate = function (target)
+ {
+ this.activeTarget = target
+
+ $ (this.selector)
+ .parents ('.active')
+ .removeClass ('active')
+
+ var selector = this.selector
+ + '[data-target="' + target + '"],'
+ + this.selector + '[href="' + target + '"]'
+
+ var active = $ (selector)
+ .parents ('li')
+ .addClass ('active')
+
+ if (active.parent ('.dropdown-menu').length)
+ {
+ active = active
+ .closest ('li.dropdown')
+ .addClass ('active')
+ }
+
+ active.trigger ('activate')
+ }
+
+
+ // SCROLLSPY PLUGIN DEFINITION
+ // ===========================
+
+ var old = $.fn.scrollspy
+
+ $.fn.scrollspy = function (option)
+ {
+ return this.each (function ()
+ {
+ var $this = $ (this)
+ var data = $this.data ('bs.scrollspy')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data ('bs.scrollspy', (data = new ScrollSpy (this, options)))
+ if (typeof option == 'string') data[option] ()
+ })
+ }
+
+ $.fn.scrollspy.Constructor = ScrollSpy
+
+
+ // SCROLLSPY NO CONFLICT
+ // =====================
+
+ $.fn.scrollspy.noConflict = function ()
+ {
+ $.fn.scrollspy = old
+ return this
+ }
+
+
+ // SCROLLSPY DATA-API
+ // ==================
+
+ $ (window).on ('load', function ()
+ {
+ $ ('[data-spy="scroll"]').each (function ()
+ {
+ var $spy = $ (this)
+ $spy.scrollspy ($spy.data ())
+ })
+ })
+
+} (window.jQuery);
+
+/* ========================================================================
+ * Bootstrap: tab.js v3.0.0
+ * http://twbs.github.com/bootstrap/javascript.html#tabs
+ * ========================================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ======================================================================== */
+
+
++function ($)
+{
+ "use strict";
+
+ // TAB CLASS DEFINITION
+ // ====================
+
+ var Tab = function (element)
+ {
+ this.element = $ (element)
+ }
+
+ Tab.prototype.show = function ()
+ {
+ var $this = this.element
+ var $ul = $this.closest ('ul:not(.dropdown-menu)')
+ var selector = $this.attr ('data-target')
+
+ if (!selector)
+ {
+ selector = $this.attr ('href')
+ selector = selector && selector.replace (/.*(?=#[^\s]*$)/, '') //strip for ie7
+ }
+
+ if ($this.parent ('li').hasClass ('active')) return
+
+ var previous = $ul.find ('.active:last a')[0]
+ var e = $.Event ('show.bs.tab', {
+ relatedTarget: previous
+ })
+
+ $this.trigger (e)
+
+ if (e.isDefaultPrevented ()) return
+
+ var $target = $ (selector)
+
+ this.activate ($this.parent ('li'), $ul)
+ this.activate ($target, $target.parent (), function ()
+ {
+ $this.trigger ({
+ type: 'shown.bs.tab', relatedTarget: previous
+ })
+ })
+ }
+
+ Tab.prototype.activate = function (element, container, callback)
+ {
+ var $active = container.find ('> .active')
+ var transition = callback
+ && $.support.transition
+ && $active.hasClass ('fade')
+
+ function next ()
+ {
+ $active
+ .removeClass ('active')
+ .find ('> .dropdown-menu > .active')
+ .removeClass ('active')
+
+ element.addClass ('active')
+
+ if (transition)
+ {
+ element[0].offsetWidth // reflow for transition
+ element.addClass ('in')
+ } else
+ {
+ element.removeClass ('fade')
+ }
+
+ if (element.parent ('.dropdown-menu'))
+ {
+ element.closest ('li.dropdown').addClass ('active')
+ }
+
+ callback && callback ()
+ }
+
+ transition ?
+ $active
+ .one ($.support.transition.end, next)
+ .emulateTransitionEnd (150) :
+ next ()
+
+ $active.removeClass ('in')
+ }
+
+
+ // TAB PLUGIN DEFINITION
+ // =====================
+
+ var old = $.fn.tab
+
+ $.fn.tab = function (option)
+ {
+ return this.each (function ()
+ {
+ var $this = $ (this)
+ var data = $this.data ('bs.tab')
+
+ if (!data) $this.data ('bs.tab', (data = new Tab (this)))
+ if (typeof option == 'string') data[option] ()
+ })
+ }
+
+ $.fn.tab.Constructor = Tab
+
+
+ // TAB NO CONFLICT
+ // ===============
+
+ $.fn.tab.noConflict = function ()
+ {
+ $.fn.tab = old
+ return this
+ }
+
+
+ // TAB DATA-API
+ // ============
+
+ $ (document).on ('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e)
+ {
+ e.preventDefault ()
+ $ (this).tab ('show')
+ })
+
+} (window.jQuery);
+
+/* ========================================================================
+ * Bootstrap: affix.js v3.0.0
+ * http://twbs.github.com/bootstrap/javascript.html#affix
+ * ========================================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ======================================================================== */
+
+
++function ($)
+{
+ "use strict";
+
+ // AFFIX CLASS DEFINITION
+ // ======================
+
+ var Affix = function (element, options)
+ {
+ this.options = $.extend ({}, Affix.DEFAULTS, options)
+ this.$window = $ (window)
+ .on ('scroll.bs.affix.data-api', $.proxy (this.checkPosition, this))
+ .on ('click.bs.affix.data-api', $.proxy (this.checkPositionWithEventLoop, this))
+
+ this.$element = $ (element)
+ this.affixed =
+ this.unpin = null
+
+ this.checkPosition ()
+ }
+
+ Affix.RESET = 'affix affix-top affix-bottom'
+
+ Affix.DEFAULTS = {
+ offset: 0
+ }
+
+ Affix.prototype.checkPositionWithEventLoop = function ()
+ {
+ setTimeout ($.proxy (this.checkPosition, this), 1)
+ }
+
+ Affix.prototype.checkPosition = function ()
+ {
+ if (!this.$element.is (':visible')) return
+
+ var scrollHeight = $ (document).height ()
+ var scrollTop = this.$window.scrollTop ()
+ var position = this.$element.offset ()
+ var offset = this.options.offset
+ var offsetTop = offset.top
+ var offsetBottom = offset.bottom
+
+ if (typeof offset != 'object') offsetBottom = offsetTop = offset
+ if (typeof offsetTop == 'function') offsetTop = offset.top ()
+ if (typeof offsetBottom == 'function') offsetBottom = offset.bottom ()
+
+ var affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? false :
+ offsetBottom != null && (position.top + this.$element.height () >= scrollHeight - offsetBottom) ? 'bottom' :
+ offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false
+
+ if (this.affixed === affix) return
+ if (this.unpin) this.$element.css ('top', '')
+
+ this.affixed = affix
+ this.unpin = affix == 'bottom' ? position.top - scrollTop : null
+
+ this.$element.removeClass (Affix.RESET).addClass ('affix' + (affix ? '-' + affix : ''))
+
+ if (affix == 'bottom')
+ {
+ this.$element.offset ({ top: document.body.offsetHeight - offsetBottom - this.$element.height () })
+ }
+ }
+
+
+ // AFFIX PLUGIN DEFINITION
+ // =======================
+
+ var old = $.fn.affix
+
+ $.fn.affix = function (option)
+ {
+ return this.each (function ()
+ {
+ var $this = $ (this)
+ var data = $this.data ('bs.affix')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data ('bs.affix', (data = new Affix (this, options)))
+ if (typeof option == 'string') data[option] ()
+ })
+ }
+
+ $.fn.affix.Constructor = Affix
+
+
+ // AFFIX NO CONFLICT
+ // =================
+
+ $.fn.affix.noConflict = function ()
+ {
+ $.fn.affix = old
+ return this
+ }
+
+
+ // AFFIX DATA-API
+ // ==============
+
+ $ (window).on ('load', function ()
+ {
+ $ ('[data-spy="affix"]').each (function ()
+ {
+ var $spy = $ (this)
+ var data = $spy.data ()
+
+ data.offset = data.offset || {}
+
+ if (data.offsetBottom) data.offset.bottom = data.offsetBottom
+ if (data.offsetTop) data.offset.top = data.offsetTop
+
+ $spy.affix (data)
+ })
+ })
+
+} (window.jQuery);
diff --git a/vendor/twitter-bootstrap-3/dist/js/bootstrap.min.js b/vendor/twitter-bootstrap-3/dist/js/bootstrap.min.js
new file mode 100644
index 000000000..edadedf5a
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/dist/js/bootstrap.min.js
@@ -0,0 +1,752 @@
+/**
+ * Bootstrap v3.0.0 by @fat and @mdo
+ * Copyright 2013 Twitter Inc.
+ * Licensed under http://www.apache.org/licenses/LICENSE-2.0.
+ *
+ * Designed and built with all the love in the world by @mdo and @fat.
+ */
+if (!jQuery)throw new Error ("Bootstrap requires jQuery");
++function (a)
+{
+ "use strict";
+ function b ()
+ {
+ var a = document.createElement ("bootstrap"), b = {WebkitTransition: "webkitTransitionEnd", MozTransition: "transitionend", OTransition: "oTransitionEnd otransitionend", transition: "transitionend"};
+ for (var c in b)if (void 0 !== a.style[c])return{end: b[c]}
+ }
+
+ a.fn.emulateTransitionEnd = function (b)
+ {
+ var c = !1, d = this;
+ a (this).one (a.support.transition.end, function ()
+ {
+ c = !0
+ });
+ var e = function ()
+ {
+ c || a (d).trigger (a.support.transition.end)
+ };
+ return setTimeout (e, b), this
+ }, a (function ()
+ {
+ a.support.transition = b ()
+ })
+} (window.jQuery), +function (a)
+{
+ "use strict";
+ var b = '[data-dismiss="alert"]', c = function (c)
+ {
+ a (c).on ("click", b, this.close)
+ };
+ c.prototype.close = function (b)
+ {
+ function c ()
+ {
+ f.trigger ("closed.bs.alert").remove ()
+ }
+
+ var d = a (this), e = d.attr ("data-target");
+ e || (e = d.attr ("href"), e = e && e.replace (/.*(?=#[^\s]*$)/, ""));
+ var f = a (e);
+ b && b.preventDefault (), f.length || (f = d.hasClass ("alert") ? d : d.parent ()), f.trigger (b = a.Event ("close.bs.alert")), b.isDefaultPrevented () || (f.removeClass ("in"), a.support.transition && f.hasClass ("fade") ? f.one (a.support.transition.end, c).emulateTransitionEnd (150) : c ())
+ };
+ var d = a.fn.alert;
+ a.fn.alert = function (b)
+ {
+ return this.each (function ()
+ {
+ var d = a (this), e = d.data ("bs.alert");
+ e || d.data ("bs.alert", e = new c (this)), "string" == typeof b && e[b].call (d)
+ })
+ }, a.fn.alert.Constructor = c, a.fn.alert.noConflict = function ()
+ {
+ return a.fn.alert = d, this
+ }, a (document).on ("click.bs.alert.data-api", b, c.prototype.close)
+} (window.jQuery), +function (a)
+{
+ "use strict";
+ var b = function (c, d)
+ {
+ this.$element = a (c), this.options = a.extend ({}, b.DEFAULTS, d)
+ };
+ b.DEFAULTS = {loadingText: "loading..."}, b.prototype.setState = function (a)
+ {
+ var b = "disabled", c = this.$element, d = c.is ("input") ? "val" : "html", e = c.data ();
+ a += "Text", e.resetText || c.data ("resetText", c[d] ()), c[d] (e[a] || this.options[a]), setTimeout (function ()
+ {
+ "loadingText" == a ? c.addClass (b).attr (b, b) : c.removeClass (b).removeAttr (b)
+ }, 0)
+ }, b.prototype.toggle = function ()
+ {
+ var a = this.$element.closest ('[data-toggle="buttons"]');
+ if (a.length)
+ {
+ var b = this.$element.find ("input").prop ("checked", !this.$element.hasClass ("active")).trigger ("change");
+ "radio" === b.prop ("type") && a.find (".active").removeClass ("active")
+ }
+ this.$element.toggleClass ("active")
+ };
+ var c = a.fn.button;
+ a.fn.button = function (c)
+ {
+ return this.each (function ()
+ {
+ var d = a (this), e = d.data ("bs.button"), f = "object" == typeof c && c;
+ e || d.data ("bs.button", e = new b (this, f)), "toggle" == c ? e.toggle () : c && e.setState (c)
+ })
+ }, a.fn.button.Constructor = b, a.fn.button.noConflict = function ()
+ {
+ return a.fn.button = c, this
+ }, a (document).on ("click.bs.button.data-api", "[data-toggle^=button]", function (b)
+ {
+ var c = a (b.target);
+ c.hasClass ("btn") || (c = c.closest (".btn")), c.button ("toggle"), b.preventDefault ()
+ })
+} (window.jQuery), +function (a)
+{
+ "use strict";
+ var b = function (b, c)
+ {
+ this.$element = a (b), this.$indicators = this.$element.find (".carousel-indicators"), this.options = c, this.paused = this.sliding = this.interval = this.$active = this.$items = null, "hover" == this.options.pause && this.$element.on ("mouseenter", a.proxy (this.pause, this)).on ("mouseleave", a.proxy (this.cycle, this))
+ };
+ b.DEFAULTS = {interval: 5e3, pause: "hover", wrap: !0}, b.prototype.cycle = function (b)
+ {
+ return b || (this.paused = !1), this.interval && clearInterval (this.interval), this.options.interval && !this.paused && (this.interval = setInterval (a.proxy (this.next, this), this.options.interval)), this
+ }, b.prototype.getActiveIndex = function ()
+ {
+ return this.$active = this.$element.find (".item.active"), this.$items = this.$active.parent ().children (), this.$items.index (this.$active)
+ }, b.prototype.to = function (b)
+ {
+ var c = this, d = this.getActiveIndex ();
+ return b > this.$items.length - 1 || 0 > b ? void 0 : this.sliding ? this.$element.one ("slid", function ()
+ {
+ c.to (b)
+ }) : d == b ? this.pause ().cycle () : this.slide (b > d ? "next" : "prev", a (this.$items[b]))
+ }, b.prototype.pause = function (b)
+ {
+ return b || (this.paused = !0), this.$element.find (".next, .prev").length && a.support.transition.end && (this.$element.trigger (a.support.transition.end), this.cycle (!0)), this.interval = clearInterval (this.interval), this
+ }, b.prototype.next = function ()
+ {
+ return this.sliding ? void 0 : this.slide ("next")
+ }, b.prototype.prev = function ()
+ {
+ return this.sliding ? void 0 : this.slide ("prev")
+ }, b.prototype.slide = function (b, c)
+ {
+ var d = this.$element.find (".item.active"), e = c || d[b] (), f = this.interval, g = "next" == b ? "left" : "right", h = "next" == b ? "first" : "last", i = this;
+ if (!e.length)
+ {
+ if (!this.options.wrap)return;
+ e = this.$element.find (".item")[h] ()
+ }
+ this.sliding = !0, f && this.pause ();
+ var j = a.Event ("slide.bs.carousel", {relatedTarget: e[0], direction: g});
+ if (!e.hasClass ("active"))
+ {
+ if (this.$indicators.length && (this.$indicators.find (".active").removeClass ("active"), this.$element.one ("slid", function ()
+ {
+ var b = a (i.$indicators.children ()[i.getActiveIndex ()]);
+ b && b.addClass ("active")
+ })), a.support.transition && this.$element.hasClass ("slide"))
+ {
+ if (this.$element.trigger (j), j.isDefaultPrevented ())return;
+ e.addClass (b), e[0].offsetWidth, d.addClass (g), e.addClass (g), d.one (a.support.transition.end,function ()
+ {
+ e.removeClass ([b, g].join (" ")).addClass ("active"), d.removeClass (["active", g].join (" ")), i.sliding = !1, setTimeout (function ()
+ {
+ i.$element.trigger ("slid")
+ }, 0)
+ }).emulateTransitionEnd (600)
+ } else
+ {
+ if (this.$element.trigger (j), j.isDefaultPrevented ())return;
+ d.removeClass ("active"), e.addClass ("active"), this.sliding = !1, this.$element.trigger ("slid")
+ }
+ return f && this.cycle (), this
+ }
+ };
+ var c = a.fn.carousel;
+ a.fn.carousel = function (c)
+ {
+ return this.each (function ()
+ {
+ var d = a (this), e = d.data ("bs.carousel"), f = a.extend ({}, b.DEFAULTS, d.data (), "object" == typeof c && c), g = "string" == typeof c ? c : f.slide;
+ e || d.data ("bs.carousel", e = new b (this, f)), "number" == typeof c ? e.to (c) : g ? e[g] () : f.interval && e.pause ().cycle ()
+ })
+ }, a.fn.carousel.Constructor = b, a.fn.carousel.noConflict = function ()
+ {
+ return a.fn.carousel = c, this
+ }, a (document).on ("click.bs.carousel.data-api", "[data-slide], [data-slide-to]", function (b)
+ {
+ var c, d = a (this), e = a (d.attr ("data-target") || (c = d.attr ("href")) && c.replace (/.*(?=#[^\s]+$)/, "")), f = a.extend ({}, e.data (), d.data ()), g = d.attr ("data-slide-to");
+ g && (f.interval = !1), e.carousel (f), (g = d.attr ("data-slide-to")) && e.data ("bs.carousel").to (g), b.preventDefault ()
+ }), a (window).on ("load", function ()
+ {
+ a ('[data-ride="carousel"]').each (function ()
+ {
+ var b = a (this);
+ b.carousel (b.data ())
+ })
+ })
+} (window.jQuery), +function (a)
+{
+ "use strict";
+ var b = function (c, d)
+ {
+ this.$element = a (c), this.options = a.extend ({}, b.DEFAULTS, d), this.transitioning = null, this.options.parent && (this.$parent = a (this.options.parent)), this.options.toggle && this.toggle ()
+ };
+ b.DEFAULTS = {toggle: !0}, b.prototype.dimension = function ()
+ {
+ var a = this.$element.hasClass ("width");
+ return a ? "width" : "height"
+ }, b.prototype.show = function ()
+ {
+ if (!this.transitioning && !this.$element.hasClass ("in"))
+ {
+ var b = a.Event ("show.bs.collapse");
+ if (this.$element.trigger (b), !b.isDefaultPrevented ())
+ {
+ var c = this.$parent && this.$parent.find ("> .panel > .in");
+ if (c && c.length)
+ {
+ var d = c.data ("bs.collapse");
+ if (d && d.transitioning)return;
+ c.collapse ("hide"), d || c.data ("bs.collapse", null)
+ }
+ var e = this.dimension ();
+ this.$element.removeClass ("collapse").addClass ("collapsing")[e] (0), this.transitioning = 1;
+ var f = function ()
+ {
+ this.$element.removeClass ("collapsing").addClass ("in")[e] ("auto"), this.transitioning = 0, this.$element.trigger ("shown.bs.collapse")
+ };
+ if (!a.support.transition)return f.call (this);
+ var g = a.camelCase (["scroll", e].join ("-"));
+ this.$element.one (a.support.transition.end, a.proxy (f, this)).emulateTransitionEnd (350)[e] (this.$element[0][g])
+ }
+ }
+ }, b.prototype.hide = function ()
+ {
+ if (!this.transitioning && this.$element.hasClass ("in"))
+ {
+ var b = a.Event ("hide.bs.collapse");
+ if (this.$element.trigger (b), !b.isDefaultPrevented ())
+ {
+ var c = this.dimension ();
+ this.$element[c] (this.$element[c] ())[0].offsetHeight, this.$element.addClass ("collapsing").removeClass ("collapse").removeClass ("in"), this.transitioning = 1;
+ var d = function ()
+ {
+ this.transitioning = 0, this.$element.trigger ("hidden.bs.collapse").removeClass ("collapsing").addClass ("collapse")
+ };
+ return a.support.transition ? (this.$element[c] (0).one (a.support.transition.end, a.proxy (d, this)).emulateTransitionEnd (350), void 0) : d.call (this)
+ }
+ }
+ }, b.prototype.toggle = function ()
+ {
+ this[this.$element.hasClass ("in") ? "hide" : "show"] ()
+ };
+ var c = a.fn.collapse;
+ a.fn.collapse = function (c)
+ {
+ return this.each (function ()
+ {
+ var d = a (this), e = d.data ("bs.collapse"), f = a.extend ({}, b.DEFAULTS, d.data (), "object" == typeof c && c);
+ e || d.data ("bs.collapse", e = new b (this, f)), "string" == typeof c && e[c] ()
+ })
+ }, a.fn.collapse.Constructor = b, a.fn.collapse.noConflict = function ()
+ {
+ return a.fn.collapse = c, this
+ }, a (document).on ("click.bs.collapse.data-api", "[data-toggle=collapse]", function (b)
+ {
+ var c, d = a (this), e = d.attr ("data-target") || b.preventDefault () || (c = d.attr ("href")) && c.replace (/.*(?=#[^\s]+$)/, ""), f = a (e), g = f.data ("bs.collapse"), h = g ? "toggle" : d.data (), i = d.attr ("data-parent"), j = i && a (i);
+ g && g.transitioning || (j && j.find ('[data-toggle=collapse][data-parent="' + i + '"]').not (d).addClass ("collapsed"), d[f.hasClass ("in") ? "addClass" : "removeClass"] ("collapsed")), f.collapse (h)
+ })
+} (window.jQuery), +function (a)
+{
+ "use strict";
+ function b ()
+ {
+ a (d).remove (), a (e).each (function (b)
+ {
+ var d = c (a (this));
+ d.hasClass ("open") && (d.trigger (b = a.Event ("hide.bs.dropdown")), b.isDefaultPrevented () || d.removeClass ("open").trigger ("hidden.bs.dropdown"))
+ })
+ }
+
+ function c (b)
+ {
+ var c = b.attr ("data-target");
+ c || (c = b.attr ("href"), c = c && /#/.test (c) && c.replace (/.*(?=#[^\s]*$)/, ""));
+ var d = c && a (c);
+ return d && d.length ? d : b.parent ()
+ }
+
+ var d = ".dropdown-backdrop", e = "[data-toggle=dropdown]", f = function (b)
+ {
+ a (b).on ("click.bs.dropdown", this.toggle)
+ };
+ f.prototype.toggle = function (d)
+ {
+ var e = a (this);
+ if (!e.is (".disabled, :disabled"))
+ {
+ var f = c (e), g = f.hasClass ("open");
+ if (b (), !g)
+ {
+ if ("ontouchstart"in document.documentElement && !f.closest (".navbar-nav").length && a ('
').insertAfter (a (this)).on ("click", b), f.trigger (d = a.Event ("show.bs.dropdown")), d.isDefaultPrevented ())return;
+ f.toggleClass ("open").trigger ("shown.bs.dropdown"), e.focus ()
+ }
+ return!1
+ }
+ }, f.prototype.keydown = function (b)
+ {
+ if (/(38|40|27)/.test (b.keyCode))
+ {
+ var d = a (this);
+ if (b.preventDefault (), b.stopPropagation (), !d.is (".disabled, :disabled"))
+ {
+ var f = c (d), g = f.hasClass ("open");
+ if (!g || g && 27 == b.keyCode)return 27 == b.which && f.find (e).focus (), d.click ();
+ var h = a ("[role=menu] li:not(.divider):visible a", f);
+ if (h.length)
+ {
+ var i = h.index (h.filter (":focus"));
+ 38 == b.keyCode && i > 0 && i--, 40 == b.keyCode && i < h.length - 1 && i++, ~i || (i = 0), h.eq (i).focus ()
+ }
+ }
+ }
+ };
+ var g = a.fn.dropdown;
+ a.fn.dropdown = function (b)
+ {
+ return this.each (function ()
+ {
+ var c = a (this), d = c.data ("dropdown");
+ d || c.data ("dropdown", d = new f (this)), "string" == typeof b && d[b].call (c)
+ })
+ }, a.fn.dropdown.Constructor = f, a.fn.dropdown.noConflict = function ()
+ {
+ return a.fn.dropdown = g, this
+ }, a (document).on ("click.bs.dropdown.data-api", b).on ("click.bs.dropdown.data-api", ".dropdown form",function (a)
+ {
+ a.stopPropagation ()
+ }).on ("click.bs.dropdown.data-api", e, f.prototype.toggle).on ("keydown.bs.dropdown.data-api", e + ", [role=menu]", f.prototype.keydown)
+} (window.jQuery), +function (a)
+{
+ "use strict";
+ var b = function (b, c)
+ {
+ this.options = c, this.$element = a (b), this.$backdrop = this.isShown = null, this.options.remote && this.$element.load (this.options.remote)
+ };
+ b.DEFAULTS = {backdrop: !0, keyboard: !0, show: !0}, b.prototype.toggle = function (a)
+ {
+ return this[this.isShown ? "hide" : "show"] (a)
+ }, b.prototype.show = function (b)
+ {
+ var c = this, d = a.Event ("show.bs.modal", {relatedTarget: b});
+ this.$element.trigger (d), this.isShown || d.isDefaultPrevented () || (this.isShown = !0, this.escape (), this.$element.on ("click.dismiss.modal", '[data-dismiss="modal"]', a.proxy (this.hide, this)), this.backdrop (function ()
+ {
+ var d = a.support.transition && c.$element.hasClass ("fade");
+ c.$element.parent ().length || c.$element.appendTo (document.body), c.$element.show (), d && c.$element[0].offsetWidth, c.$element.addClass ("in").attr ("aria-hidden", !1), c.enforceFocus ();
+ var e = a.Event ("shown.bs.modal", {relatedTarget: b});
+ d ? c.$element.find (".modal-dialog").one (a.support.transition.end,function ()
+ {
+ c.$element.focus ().trigger (e)
+ }).emulateTransitionEnd (300) : c.$element.focus ().trigger (e)
+ }))
+ }, b.prototype.hide = function (b)
+ {
+ b && b.preventDefault (), b = a.Event ("hide.bs.modal"), this.$element.trigger (b), this.isShown && !b.isDefaultPrevented () && (this.isShown = !1, this.escape (), a (document).off ("focusin.bs.modal"), this.$element.removeClass ("in").attr ("aria-hidden", !0).off ("click.dismiss.modal"), a.support.transition && this.$element.hasClass ("fade") ? this.$element.one (a.support.transition.end, a.proxy (this.hideModal, this)).emulateTransitionEnd (300) : this.hideModal ())
+ }, b.prototype.enforceFocus = function ()
+ {
+ a (document).off ("focusin.bs.modal").on ("focusin.bs.modal", a.proxy (function (a)
+ {
+ this.$element[0] === a.target || this.$element.has (a.target).length || this.$element.focus ()
+ }, this))
+ }, b.prototype.escape = function ()
+ {
+ this.isShown && this.options.keyboard ? this.$element.on ("keyup.dismiss.bs.modal", a.proxy (function (a)
+ {
+ 27 == a.which && this.hide ()
+ }, this)) : this.isShown || this.$element.off ("keyup.dismiss.bs.modal")
+ }, b.prototype.hideModal = function ()
+ {
+ var a = this;
+ this.$element.hide (), this.backdrop (function ()
+ {
+ a.removeBackdrop (), a.$element.trigger ("hidden.bs.modal")
+ })
+ }, b.prototype.removeBackdrop = function ()
+ {
+ this.$backdrop && this.$backdrop.remove (), this.$backdrop = null
+ }, b.prototype.backdrop = function (b)
+ {
+ var c = this.$element.hasClass ("fade") ? "fade" : "";
+ if (this.isShown && this.options.backdrop)
+ {
+ var d = a.support.transition && c;
+ if (this.$backdrop = a ('
').appendTo (document.body), this.$element.on ("click.dismiss.modal", a.proxy (function (a)
+ {
+ a.target === a.currentTarget && ("static" == this.options.backdrop ? this.$element[0].focus.call (this.$element[0]) : this.hide.call (this))
+ }, this)), d && this.$backdrop[0].offsetWidth, this.$backdrop.addClass ("in"), !b)return;
+ d ? this.$backdrop.one (a.support.transition.end, b).emulateTransitionEnd (150) : b ()
+ } else!this.isShown && this.$backdrop ? (this.$backdrop.removeClass ("in"), a.support.transition && this.$element.hasClass ("fade") ? this.$backdrop.one (a.support.transition.end, b).emulateTransitionEnd (150) : b ()) : b && b ()
+ };
+ var c = a.fn.modal;
+ a.fn.modal = function (c, d)
+ {
+ return this.each (function ()
+ {
+ var e = a (this), f = e.data ("bs.modal"), g = a.extend ({}, b.DEFAULTS, e.data (), "object" == typeof c && c);
+ f || e.data ("bs.modal", f = new b (this, g)), "string" == typeof c ? f[c] (d) : g.show && f.show (d)
+ })
+ }, a.fn.modal.Constructor = b, a.fn.modal.noConflict = function ()
+ {
+ return a.fn.modal = c, this
+ }, a (document).on ("click.bs.modal.data-api", '[data-toggle="modal"]', function (b)
+ {
+ var c = a (this), d = c.attr ("href"), e = a (c.attr ("data-target") || d && d.replace (/.*(?=#[^\s]+$)/, "")), f = e.data ("modal") ? "toggle" : a.extend ({remote: !/#/.test (d) && d}, e.data (), c.data ());
+ b.preventDefault (), e.modal (f, this).one ("hide", function ()
+ {
+ c.is (":visible") && c.focus ()
+ })
+ }), a (document).on ("show.bs.modal", ".modal",function ()
+ {
+ a (document.body).addClass ("modal-open")
+ }).on ("hidden.bs.modal", ".modal", function ()
+ {
+ a (document.body).removeClass ("modal-open")
+ })
+} (window.jQuery), +function (a)
+{
+ "use strict";
+ var b = function (a, b)
+ {
+ this.type = this.options = this.enabled = this.timeout = this.hoverState = this.$element = null, this.init ("tooltip", a, b)
+ };
+ b.DEFAULTS = {animation: !0, placement: "top", selector: !1, template: '', trigger: "hover focus", title: "", delay: 0, html: !1, container: !1}, b.prototype.init = function (b, c, d)
+ {
+ this.enabled = !0, this.type = b, this.$element = a (c), this.options = this.getOptions (d);
+ for (var e = this.options.trigger.split (" "), f = e.length; f--;)
+ {
+ var g = e[f];
+ if ("click" == g)this.$element.on ("click." + this.type, this.options.selector, a.proxy (this.toggle, this)); else if ("manual" != g)
+ {
+ var h = "hover" == g ? "mouseenter" : "focus", i = "hover" == g ? "mouseleave" : "blur";
+ this.$element.on (h + "." + this.type, this.options.selector, a.proxy (this.enter, this)), this.$element.on (i + "." + this.type, this.options.selector, a.proxy (this.leave, this))
+ }
+ }
+ this.options.selector ? this._options = a.extend ({}, this.options, {trigger: "manual", selector: ""}) : this.fixTitle ()
+ }, b.prototype.getDefaults = function ()
+ {
+ return b.DEFAULTS
+ }, b.prototype.getOptions = function (b)
+ {
+ return b = a.extend ({}, this.getDefaults (), this.$element.data (), b), b.delay && "number" == typeof b.delay && (b.delay = {show: b.delay, hide: b.delay}), b
+ }, b.prototype.getDelegateOptions = function ()
+ {
+ var b = {}, c = this.getDefaults ();
+ return this._options && a.each (this._options, function (a, d)
+ {
+ c[a] != d && (b[a] = d)
+ }), b
+ }, b.prototype.enter = function (b)
+ {
+ var c = b instanceof this.constructor ? b : a (b.currentTarget)[this.type] (this.getDelegateOptions ()).data ("bs." + this.type);
+ return clearTimeout (c.timeout), c.hoverState = "in", c.options.delay && c.options.delay.show ? (c.timeout = setTimeout (function ()
+ {
+ "in" == c.hoverState && c.show ()
+ }, c.options.delay.show), void 0) : c.show ()
+ }, b.prototype.leave = function (b)
+ {
+ var c = b instanceof this.constructor ? b : a (b.currentTarget)[this.type] (this.getDelegateOptions ()).data ("bs." + this.type);
+ return clearTimeout (c.timeout), c.hoverState = "out", c.options.delay && c.options.delay.hide ? (c.timeout = setTimeout (function ()
+ {
+ "out" == c.hoverState && c.hide ()
+ }, c.options.delay.hide), void 0) : c.hide ()
+ }, b.prototype.show = function ()
+ {
+ var b = a.Event ("show.bs." + this.type);
+ if (this.hasContent () && this.enabled)
+ {
+ if (this.$element.trigger (b), b.isDefaultPrevented ())return;
+ var c = this.tip ();
+ this.setContent (), this.options.animation && c.addClass ("fade");
+ var d = "function" == typeof this.options.placement ? this.options.placement.call (this, c[0], this.$element[0]) : this.options.placement, e = /\s?auto?\s?/i, f = e.test (d);
+ f && (d = d.replace (e, "") || "top"), c.detach ().css ({top: 0, left: 0, display: "block"}).addClass (d), this.options.container ? c.appendTo (this.options.container) : c.insertAfter (this.$element);
+ var g = this.getPosition (), h = c[0].offsetWidth, i = c[0].offsetHeight;
+ if (f)
+ {
+ var j = this.$element.parent (), k = d, l = document.documentElement.scrollTop || document.body.scrollTop, m = "body" == this.options.container ? window.innerWidth : j.outerWidth (), n = "body" == this.options.container ? window.innerHeight : j.outerHeight (), o = "body" == this.options.container ? 0 : j.offset ().left;
+ d = "bottom" == d && g.top + g.height + i - l > n ? "top" : "top" == d && g.top - l - i < 0 ? "bottom" : "right" == d && g.right + h > m ? "left" : "left" == d && g.left - h < o ? "right" : d, c.removeClass (k).addClass (d)
+ }
+ var p = this.getCalculatedOffset (d, g, h, i);
+ this.applyPlacement (p, d), this.$element.trigger ("shown.bs." + this.type)
+ }
+ }, b.prototype.applyPlacement = function (a, b)
+ {
+ var c, d = this.tip (), e = d[0].offsetWidth, f = d[0].offsetHeight, g = parseInt (d.css ("margin-top"), 10), h = parseInt (d.css ("margin-left"), 10);
+ isNaN (g) && (g = 0), isNaN (h) && (h = 0), a.top = a.top + g, a.left = a.left + h, d.offset (a).addClass ("in");
+ var i = d[0].offsetWidth, j = d[0].offsetHeight;
+ if ("top" == b && j != f && (c = !0, a.top = a.top + f - j), /bottom|top/.test (b))
+ {
+ var k = 0;
+ a.left < 0 && (k = -2 * a.left, a.left = 0, d.offset (a), i = d[0].offsetWidth, j = d[0].offsetHeight), this.replaceArrow (k - e + i, i, "left")
+ } else this.replaceArrow (j - f, j, "top");
+ c && d.offset (a)
+ }, b.prototype.replaceArrow = function (a, b, c)
+ {
+ this.arrow ().css (c, a ? 50 * (1 - a / b) + "%" : "")
+ }, b.prototype.setContent = function ()
+ {
+ var a = this.tip (), b = this.getTitle ();
+ a.find (".tooltip-inner")[this.options.html ? "html" : "text"] (b), a.removeClass ("fade in top bottom left right")
+ }, b.prototype.hide = function ()
+ {
+ function b ()
+ {
+ "in" != c.hoverState && d.detach ()
+ }
+
+ var c = this, d = this.tip (), e = a.Event ("hide.bs." + this.type);
+ return this.$element.trigger (e), e.isDefaultPrevented () ? void 0 : (d.removeClass ("in"), a.support.transition && this.$tip.hasClass ("fade") ? d.one (a.support.transition.end, b).emulateTransitionEnd (150) : b (), this.$element.trigger ("hidden.bs." + this.type), this)
+ }, b.prototype.fixTitle = function ()
+ {
+ var a = this.$element;
+ (a.attr ("title") || "string" != typeof a.attr ("data-original-title")) && a.attr ("data-original-title", a.attr ("title") || "").attr ("title", "")
+ }, b.prototype.hasContent = function ()
+ {
+ return this.getTitle ()
+ }, b.prototype.getPosition = function ()
+ {
+ var b = this.$element[0];
+ return a.extend ({}, "function" == typeof b.getBoundingClientRect ? b.getBoundingClientRect () : {width: b.offsetWidth, height: b.offsetHeight}, this.$element.offset ())
+ }, b.prototype.getCalculatedOffset = function (a, b, c, d)
+ {
+ return"bottom" == a ? {top: b.top + b.height, left: b.left + b.width / 2 - c / 2} : "top" == a ? {top: b.top - d, left: b.left + b.width / 2 - c / 2} : "left" == a ? {top: b.top + b.height / 2 - d / 2, left: b.left - c} : {top: b.top + b.height / 2 - d / 2, left: b.left + b.width}
+ }, b.prototype.getTitle = function ()
+ {
+ var a, b = this.$element, c = this.options;
+ return a = b.attr ("data-original-title") || ("function" == typeof c.title ? c.title.call (b[0]) : c.title)
+ }, b.prototype.tip = function ()
+ {
+ return this.$tip = this.$tip || a (this.options.template)
+ }, b.prototype.arrow = function ()
+ {
+ return this.$arrow = this.$arrow || this.tip ().find (".tooltip-arrow")
+ }, b.prototype.validate = function ()
+ {
+ this.$element[0].parentNode || (this.hide (), this.$element = null, this.options = null)
+ }, b.prototype.enable = function ()
+ {
+ this.enabled = !0
+ }, b.prototype.disable = function ()
+ {
+ this.enabled = !1
+ }, b.prototype.toggleEnabled = function ()
+ {
+ this.enabled = !this.enabled
+ }, b.prototype.toggle = function (b)
+ {
+ var c = b ? a (b.currentTarget)[this.type] (this.getDelegateOptions ()).data ("bs." + this.type) : this;
+ c.tip ().hasClass ("in") ? c.leave (c) : c.enter (c)
+ }, b.prototype.destroy = function ()
+ {
+ this.hide ().$element.off ("." + this.type).removeData ("bs." + this.type)
+ };
+ var c = a.fn.tooltip;
+ a.fn.tooltip = function (c)
+ {
+ return this.each (function ()
+ {
+ var d = a (this), e = d.data ("bs.tooltip"), f = "object" == typeof c && c;
+ e || d.data ("bs.tooltip", e = new b (this, f)), "string" == typeof c && e[c] ()
+ })
+ }, a.fn.tooltip.Constructor = b, a.fn.tooltip.noConflict = function ()
+ {
+ return a.fn.tooltip = c, this
+ }
+} (window.jQuery), +function (a)
+{
+ "use strict";
+ var b = function (a, b)
+ {
+ this.init ("popover", a, b)
+ };
+ if (!a.fn.tooltip)throw new Error ("Popover requires tooltip.js");
+ b.DEFAULTS = a.extend ({}, a.fn.tooltip.Constructor.DEFAULTS, {placement: "right", trigger: "click", content: "", template: ''}), b.prototype = a.extend ({}, a.fn.tooltip.Constructor.prototype), b.prototype.constructor = b, b.prototype.getDefaults = function ()
+ {
+ return b.DEFAULTS
+ }, b.prototype.setContent = function ()
+ {
+ var a = this.tip (), b = this.getTitle (), c = this.getContent ();
+ a.find (".popover-title")[this.options.html ? "html" : "text"] (b), a.find (".popover-content")[this.options.html ? "html" : "text"] (c), a.removeClass ("fade top bottom left right in"), a.find (".popover-title").html () || a.find (".popover-title").hide ()
+ }, b.prototype.hasContent = function ()
+ {
+ return this.getTitle () || this.getContent ()
+ }, b.prototype.getContent = function ()
+ {
+ var a = this.$element, b = this.options;
+ return a.attr ("data-content") || ("function" == typeof b.content ? b.content.call (a[0]) : b.content)
+ }, b.prototype.arrow = function ()
+ {
+ return this.$arrow = this.$arrow || this.tip ().find (".arrow")
+ }, b.prototype.tip = function ()
+ {
+ return this.$tip || (this.$tip = a (this.options.template)), this.$tip
+ };
+ var c = a.fn.popover;
+ a.fn.popover = function (c)
+ {
+ return this.each (function ()
+ {
+ var d = a (this), e = d.data ("bs.popover"), f = "object" == typeof c && c;
+ e || d.data ("bs.popover", e = new b (this, f)), "string" == typeof c && e[c] ()
+ })
+ }, a.fn.popover.Constructor = b, a.fn.popover.noConflict = function ()
+ {
+ return a.fn.popover = c, this
+ }
+} (window.jQuery), +function (a)
+{
+ "use strict";
+ function b (c, d)
+ {
+ var e, f = a.proxy (this.process, this);
+ this.$element = a (c).is ("body") ? a (window) : a (c), this.$body = a ("body"), this.$scrollElement = this.$element.on ("scroll.bs.scroll-spy.data-api", f), this.options = a.extend ({}, b.DEFAULTS, d), this.selector = (this.options.target || (e = a (c).attr ("href")) && e.replace (/.*(?=#[^\s]+$)/, "") || "") + " .nav li > a", this.offsets = a ([]), this.targets = a ([]), this.activeTarget = null, this.refresh (), this.process ()
+ }
+
+ b.DEFAULTS = {offset: 10}, b.prototype.refresh = function ()
+ {
+ var b = this.$element[0] == window ? "offset" : "position";
+ this.offsets = a ([]), this.targets = a ([]);
+ var c = this;
+ this.$body.find (this.selector).map (function ()
+ {
+ var d = a (this), e = d.data ("target") || d.attr ("href"), f = /^#\w/.test (e) && a (e);
+ return f && f.length && [
+ [f[b] ().top + (!a.isWindow (c.$scrollElement.get (0)) && c.$scrollElement.scrollTop ()), e]
+ ] || null
+ }).sort (function (a, b)
+ {
+ return a[0] - b[0]
+ }).each (function ()
+ {
+ c.offsets.push (this[0]), c.targets.push (this[1])
+ })
+ }, b.prototype.process = function ()
+ {
+ var a, b = this.$scrollElement.scrollTop () + this.options.offset, c = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight, d = c - this.$scrollElement.height (), e = this.offsets, f = this.targets, g = this.activeTarget;
+ if (b >= d)return g != (a = f.last ()[0]) && this.activate (a);
+ for (a = e.length; a--;)g != f[a] && b >= e[a] && (!e[a + 1] || b <= e[a + 1]) && this.activate (f[a])
+ }, b.prototype.activate = function (b)
+ {
+ this.activeTarget = b, a (this.selector).parents (".active").removeClass ("active");
+ var c = this.selector + '[data-target="' + b + '"],' + this.selector + '[href="' + b + '"]', d = a (c).parents ("li").addClass ("active");
+ d.parent (".dropdown-menu").length && (d = d.closest ("li.dropdown").addClass ("active")), d.trigger ("activate")
+ };
+ var c = a.fn.scrollspy;
+ a.fn.scrollspy = function (c)
+ {
+ return this.each (function ()
+ {
+ var d = a (this), e = d.data ("bs.scrollspy"), f = "object" == typeof c && c;
+ e || d.data ("bs.scrollspy", e = new b (this, f)), "string" == typeof c && e[c] ()
+ })
+ }, a.fn.scrollspy.Constructor = b, a.fn.scrollspy.noConflict = function ()
+ {
+ return a.fn.scrollspy = c, this
+ }, a (window).on ("load", function ()
+ {
+ a ('[data-spy="scroll"]').each (function ()
+ {
+ var b = a (this);
+ b.scrollspy (b.data ())
+ })
+ })
+} (window.jQuery), +function (a)
+{
+ "use strict";
+ var b = function (b)
+ {
+ this.element = a (b)
+ };
+ b.prototype.show = function ()
+ {
+ var b = this.element, c = b.closest ("ul:not(.dropdown-menu)"), d = b.attr ("data-target");
+ if (d || (d = b.attr ("href"), d = d && d.replace (/.*(?=#[^\s]*$)/, "")), !b.parent ("li").hasClass ("active"))
+ {
+ var e = c.find (".active:last a")[0], f = a.Event ("show.bs.tab", {relatedTarget: e});
+ if (b.trigger (f), !f.isDefaultPrevented ())
+ {
+ var g = a (d);
+ this.activate (b.parent ("li"), c), this.activate (g, g.parent (), function ()
+ {
+ b.trigger ({type: "shown.bs.tab", relatedTarget: e})
+ })
+ }
+ }
+ }, b.prototype.activate = function (b, c, d)
+ {
+ function e ()
+ {
+ f.removeClass ("active").find ("> .dropdown-menu > .active").removeClass ("active"), b.addClass ("active"), g ? (b[0].offsetWidth, b.addClass ("in")) : b.removeClass ("fade"), b.parent (".dropdown-menu") && b.closest ("li.dropdown").addClass ("active"), d && d ()
+ }
+
+ var f = c.find ("> .active"), g = d && a.support.transition && f.hasClass ("fade");
+ g ? f.one (a.support.transition.end, e).emulateTransitionEnd (150) : e (), f.removeClass ("in")
+ };
+ var c = a.fn.tab;
+ a.fn.tab = function (c)
+ {
+ return this.each (function ()
+ {
+ var d = a (this), e = d.data ("bs.tab");
+ e || d.data ("bs.tab", e = new b (this)), "string" == typeof c && e[c] ()
+ })
+ }, a.fn.tab.Constructor = b, a.fn.tab.noConflict = function ()
+ {
+ return a.fn.tab = c, this
+ }, a (document).on ("click.bs.tab.data-api", '[data-toggle="tab"], [data-toggle="pill"]', function (b)
+ {
+ b.preventDefault (), a (this).tab ("show")
+ })
+} (window.jQuery), +function (a)
+{
+ "use strict";
+ var b = function (c, d)
+ {
+ this.options = a.extend ({}, b.DEFAULTS, d), this.$window = a (window).on ("scroll.bs.affix.data-api", a.proxy (this.checkPosition, this)).on ("click.bs.affix.data-api", a.proxy (this.checkPositionWithEventLoop, this)), this.$element = a (c), this.affixed = this.unpin = null, this.checkPosition ()
+ };
+ b.RESET = "affix affix-top affix-bottom", b.DEFAULTS = {offset: 0}, b.prototype.checkPositionWithEventLoop = function ()
+ {
+ setTimeout (a.proxy (this.checkPosition, this), 1)
+ }, b.prototype.checkPosition = function ()
+ {
+ if (this.$element.is (":visible"))
+ {
+ var c = a (document).height (), d = this.$window.scrollTop (), e = this.$element.offset (), f = this.options.offset, g = f.top, h = f.bottom;
+ "object" != typeof f && (h = g = f), "function" == typeof g && (g = f.top ()), "function" == typeof h && (h = f.bottom ());
+ var i = null != this.unpin && d + this.unpin <= e.top ? !1 : null != h && e.top + this.$element.height () >= c - h ? "bottom" : null != g && g >= d ? "top" : !1;
+ this.affixed !== i && (this.unpin && this.$element.css ("top", ""), this.affixed = i, this.unpin = "bottom" == i ? e.top - d : null, this.$element.removeClass (b.RESET).addClass ("affix" + (i ? "-" + i : "")), "bottom" == i && this.$element.offset ({top: document.body.offsetHeight - h - this.$element.height ()}))
+ }
+ };
+ var c = a.fn.affix;
+ a.fn.affix = function (c)
+ {
+ return this.each (function ()
+ {
+ var d = a (this), e = d.data ("bs.affix"), f = "object" == typeof c && c;
+ e || d.data ("bs.affix", e = new b (this, f)), "string" == typeof c && e[c] ()
+ })
+ }, a.fn.affix.Constructor = b, a.fn.affix.noConflict = function ()
+ {
+ return a.fn.affix = c, this
+ }, a (window).on ("load", function ()
+ {
+ a ('[data-spy="affix"]').each (function ()
+ {
+ var b = a (this), c = b.data ();
+ c.offset = c.offset || {}, c.offsetBottom && (c.offset.bottom = c.offsetBottom), c.offsetTop && (c.offset.top = c.offsetTop), b.affix (c)
+ })
+ })
+} (window.jQuery);
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/examples/carousel/carousel.css b/vendor/twitter-bootstrap-3/examples/carousel/carousel.css
new file mode 100644
index 000000000..55adaab1c
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/examples/carousel/carousel.css
@@ -0,0 +1,125 @@
+/* GLOBAL STYLES
+-------------------------------------------------- */
+/* Padding below the footer and lighter body text */
+
+body {
+ padding-bottom: 40px;
+ color: #5a5a5a;
+}
+
+/* CUSTOMIZE THE NAVBAR
+-------------------------------------------------- */
+
+/* Special class on .container surrounding .navbar, used for positioning it into place. */
+.navbar-wrapper {
+ position: relative;
+ z-index: 15;
+}
+
+/* CUSTOMIZE THE CAROUSEL
+-------------------------------------------------- */
+
+/* Carousel base class */
+.carousel {
+ margin-bottom: 60px;
+
+ /* Negative margin to pull up carousel. 90px is roughly margins and height of navbar. */
+ margin-top: -90px;
+}
+
+/* Since positioning the image, we need to help out the caption */
+.carousel-caption {
+ z-index: 10;
+}
+
+/* Declare heights because of positioning of img element */
+.carousel .item {
+ height: 500px;
+ background-color: #777;
+}
+
+.carousel-inner > .item > img {
+ position: absolute;
+ top: 0;
+ left: 0;
+ min-width: 100%;
+ height: 500px;
+}
+
+/* MARKETING CONTENT
+-------------------------------------------------- */
+
+/* Pad the edges of the mobile views a bit */
+.marketing {
+ padding-left: 15px;
+ padding-right: 15px;
+}
+
+/* Center align the text within the three columns below the carousel */
+.marketing .col-lg-4 {
+ text-align: center;
+ margin-bottom: 20px;
+}
+
+.marketing h2 {
+ font-weight: normal;
+}
+
+.marketing .col-lg-4 p {
+ margin-left: 10px;
+ margin-right: 10px;
+}
+
+/* Featurettes
+------------------------- */
+
+.featurette-divider {
+ margin: 80px 0; /* Space out the Bootstrap more */
+}
+
+/* Thin out the marketing headings */
+.featurette-heading {
+ font-weight: 300;
+ line-height: 1;
+ letter-spacing: -1px;
+}
+
+/* RESPONSIVE CSS
+-------------------------------------------------- */
+
+@media (min-width: 768px) {
+
+ /* Remove the edge padding needed for mobile */
+ .marketing {
+ padding-left: 0;
+ padding-right: 0;
+ }
+
+ /* Navbar positioning foo */
+ .navbar-wrapper {
+ margin-top: 20px;
+ }
+
+ /* The navbar becomes detached from the top, so we round the corners */
+ .navbar-wrapper .navbar {
+ border-radius: 4px;
+ }
+
+ /* Bump up size of carousel content */
+ .carousel-caption p {
+ margin-bottom: 20px;
+ font-size: 21px;
+ line-height: 1.4;
+ }
+
+ .featurette-heading {
+ font-size: 50px;
+ }
+
+}
+
+@media (min-width: 992px) {
+ .featurette-heading {
+ margin-top: 120px;
+ }
+}
diff --git a/vendor/twitter-bootstrap-3/examples/carousel/index.html b/vendor/twitter-bootstrap-3/examples/carousel/index.html
new file mode 100644
index 000000000..00b3c6f0b
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/examples/carousel/index.html
@@ -0,0 +1,243 @@
+
+
+
+
+
+
+
+ Carousel Template for Bootstrap
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Example headline.
+
+
Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida
+ at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.
+
+
Sign up today
+
+
+
+
+
+
+
+
+
Another example headline.
+
+
Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida
+ at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.
+
+
Learn more
+
+
+
+
+
+
+
+
+
One more for good measure.
+
+
Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida
+ at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.
+
+
Browse gallery
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Heading
+
+
Donec sed odio dui. Etiam porta sem malesuada magna mollis euismod. Nullam id dolor id nibh ultricies
+ vehicula ut id elit. Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Praesent commodo
+ cursus magna.
+
+
View details »
+
+
+
+
+
+
Heading
+
+
Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras
+ mattis consectetur purus sit amet fermentum. Fusce dapibus, tellus ac cursus commodo, tortor mauris
+ condimentum nibh.
+
+
View details »
+
+
+
+
+
+
Heading
+
+
Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula
+ porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut
+ fermentum massa justo sit amet risus.
+
+
View details »
+
+
+
+
+
+
+
+
+
+
+
+
+
First featurette heading. It'll blow your mind.
+
+
Donec ullamcorper nulla non metus auctor fringilla. Vestibulum id ligula porta felis euismod
+ semper. Praesent commodo cursus magna, vel scelerisque nisl consectetur. Fusce dapibus, tellus ac cursus
+ commodo.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Oh yeah, it's that good. See for yourself.
+
+
+
Donec ullamcorper nulla non metus auctor fringilla. Vestibulum id ligula porta felis euismod
+ semper. Praesent commodo cursus magna, vel scelerisque nisl consectetur. Fusce dapibus, tellus ac cursus
+ commodo.
+
+
+
+
+
+
+
+
And lastly, this one. Checkmate.
+
+
Donec ullamcorper nulla non metus auctor fringilla. Vestibulum id ligula porta felis euismod
+ semper. Praesent commodo cursus magna, vel scelerisque nisl consectetur. Fusce dapibus, tellus ac cursus
+ commodo.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/examples/grid/grid.css b/vendor/twitter-bootstrap-3/examples/grid/grid.css
new file mode 100644
index 000000000..15d5319ed
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/examples/grid/grid.css
@@ -0,0 +1,31 @@
+.container {
+ padding-left: 15px;
+ padding-right: 15px;
+}
+
+h4 {
+ margin-top: 25px;
+}
+
+.row {
+ margin-bottom: 20px;
+}
+
+.row .row {
+ margin-top: 10px;
+ margin-bottom: 0;
+}
+
+[class*="col-"] {
+ padding-top: 15px;
+ padding-bottom: 15px;
+ background-color: #eee;
+ border: 1px solid #ddd;
+ background-color: rgba(86, 61, 124, .15);
+ border: 1px solid rgba(86, 61, 124, .2);
+}
+
+hr {
+ margin-top: 40px;
+ margin-bottom: 40px;
+}
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/examples/grid/index.html b/vendor/twitter-bootstrap-3/examples/grid/index.html
new file mode 100644
index 000000000..329c4886f
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/examples/grid/index.html
@@ -0,0 +1,142 @@
+
+
+
+
+
+
+
+ Grid Template for Bootstrap
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Three equal columns
+
+
Get three equal-width columns starting at desktops and scaling to large desktops . On mobile
+ devices, tablets and below, the columns will automatically stack.
+
+
+
.col-md-4
+
.col-md-4
+
.col-md-4
+
+
+
Three unequal columns
+
+
Get three columns starting at desktops and scaling to large desktops of various widths.
+ Remember, grid columns should add up to twelve for a single horizontal block. More than that, and columns start
+ stacking no matter the viewport.
+
+
+
.col-md-3
+
.col-md-6
+
.col-md-3
+
+
+
Two columns
+
+
Get two columns starting at desktops and scaling to large desktops .
+
+
+
.col-md-8
+
.col-md-4
+
+
+
Full width, single column
+
+
No grid classes are necessary for full-width elements.
+
+
+
+
Two columns with two nested columns
+
+
Per the documentation, nesting is easy—just put a row of columns within an existing row. This gives you two
+ columns starting at desktops and scaling to large desktops , with another two (equal widths)
+ within the larger column.
+
+
At mobile device sizes, tablets and down, these columns and their nested columns will stack.
+
+
+
+ .col-md-8
+
+
.col-md-6
+
.col-md-6
+
+
+
.col-md-4
+
+
+
+
+
Mixed: mobile and desktop
+
+
The Bootstrap 3 grid system has four tiers of classes: xs (phones), sm (tablets), md (desktops), and lg (larger
+ desktops). You can use nearly any combination of these classes to create more dynamic and flexible layouts.
+
+
Each tier of classes scales up, meaning if you plan on setting the same widths for xs and sm, you only need to
+ specify xs.
+
+
+
.col-xs-12 .col-md-8
+
.col-xs-6 .col-md-4
+
+
+
.col-xs-6 .col-md-4
+
.col-xs-6 .col-md-4
+
.col-xs-6 .col-md-4
+
+
+
.col-xs-6 .col-md-6
+
.col-xs-6 .col-md-6
+
+
+
+
+
Mixed: mobile, tablet, and desktop
+
+
+
+
+
.col-xs-12 .col-lg-8
+
.col-xs-6 .col-lg-4
+
+
+
.col-xs-6 .col-sm-4 .col-lg-4
+
.col-xs-6 .col-sm-4 .col-lg-4
+
.col-xs-6 .col-sm-4 .col-lg-4
+
+
+
.col-xs-6 .col-sm-6 .col-lg-6
+
.col-xs-6 .col-sm-6 .col-lg-6
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/examples/jumbotron-narrow/index.html b/vendor/twitter-bootstrap-3/examples/jumbotron-narrow/index.html
new file mode 100644
index 000000000..081600296
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/examples/jumbotron-narrow/index.html
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+ Narrow Jumbotron Template for Bootstrap
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Jumbotron heading
+
+
Cras justo odio, dapibus ac facilisis in, egestas eget quam. Fusce dapibus, tellus ac cursus
+ commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.
+
+
Sign up today
+
+
+
+
+
Subheading
+
+
Donec id elit non mi porta gravida at eget metus. Maecenas faucibus mollis interdum.
+
+
Subheading
+
+
Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Cras mattis consectetur purus sit amet
+ fermentum.
+
+
Subheading
+
+
Maecenas sed diam eget risus varius blandit sit amet non magna.
+
+
+
+
Subheading
+
+
Donec id elit non mi porta gravida at eget metus. Maecenas faucibus mollis interdum.
+
+
Subheading
+
+
Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Cras mattis consectetur purus sit amet
+ fermentum.
+
+
Subheading
+
+
Maecenas sed diam eget risus varius blandit sit amet non magna.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/examples/jumbotron-narrow/jumbotron-narrow.css b/vendor/twitter-bootstrap-3/examples/jumbotron-narrow/jumbotron-narrow.css
new file mode 100644
index 000000000..a4a26eb65
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/examples/jumbotron-narrow/jumbotron-narrow.css
@@ -0,0 +1,85 @@
+/* Space out content a bit */
+body {
+ padding-top: 20px;
+ padding-bottom: 20px;
+}
+
+/* Everything but the jumbotron gets side spacing for mobile first views */
+.header,
+.marketing,
+.footer {
+ padding-left: 15px;
+ padding-right: 15px;
+}
+
+/* Custom page header */
+.header {
+ border-bottom: 1px solid #e5e5e5;
+}
+
+/* Make the masthead heading the same height as the navigation */
+.header h3 {
+ margin-top: 0;
+ margin-bottom: 0;
+ line-height: 40px;
+ padding-bottom: 19px;
+}
+
+/* Custom page footer */
+.footer {
+ padding-top: 19px;
+ color: #777;
+ border-top: 1px solid #e5e5e5;
+}
+
+/* Customize container */
+@media (min-width: 768px) {
+ .container {
+ max-width: 730px;
+ }
+}
+
+.container-narrow > hr {
+ margin: 30px 0;
+}
+
+/* Main marketing message and sign up button */
+.jumbotron {
+ text-align: center;
+ border-bottom: 1px solid #e5e5e5;
+}
+
+.jumbotron .btn {
+ font-size: 21px;
+ padding: 14px 24px;
+}
+
+/* Supporting marketing content */
+.marketing {
+ margin: 40px 0;
+}
+
+.marketing p + h4 {
+ margin-top: 28px;
+}
+
+/* Responsive: Portrait tablets and up */
+@media screen and (min-width: 768px) {
+ /* Remove the padding we set earlier */
+ .header,
+ .marketing,
+ .footer {
+ padding-left: 0;
+ padding-right: 0;
+ }
+
+ /* Space out the masthead */
+ .header {
+ margin-bottom: 30px;
+ }
+
+ /* Remove the bottom border on the jumbotron for visual effect */
+ .jumbotron {
+ border-bottom: 0;
+ }
+}
diff --git a/vendor/twitter-bootstrap-3/examples/jumbotron/index.html b/vendor/twitter-bootstrap-3/examples/jumbotron/index.html
new file mode 100644
index 000000000..7ded34120
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/examples/jumbotron/index.html
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+ Jumbotron Template for Bootstrap
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Hello, world!
+
+
This is a template for a simple marketing or informational website. It includes a large callout called the
+ hero unit and three supporting pieces of content. Use it as a starting point to create something more
+ unique.
+
+
Learn more »
+
+
+
+
+
+
+
+
Heading
+
+
Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris
+ condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis
+ euismod. Donec sed odio dui.
+
+
View details »
+
+
+
Heading
+
+
Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris
+ condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis
+ euismod. Donec sed odio dui.
+
+
View details »
+
+
+
Heading
+
+
Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula
+ porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut
+ fermentum massa justo sit amet risus.
+
+
View details »
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/examples/jumbotron/jumbotron.css b/vendor/twitter-bootstrap-3/examples/jumbotron/jumbotron.css
new file mode 100644
index 000000000..72e05f616
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/examples/jumbotron/jumbotron.css
@@ -0,0 +1,5 @@
+/* Move down content because we have a fixed navbar that is 50px tall */
+body {
+ padding-top: 50px;
+ padding-bottom: 20px;
+}
diff --git a/vendor/twitter-bootstrap-3/examples/justified-nav/index.html b/vendor/twitter-bootstrap-3/examples/justified-nav/index.html
new file mode 100644
index 000000000..173e385b2
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/examples/justified-nav/index.html
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+ Justified Nav Template for Bootstrap
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Marketing stuff!
+
+
Cras justo odio, dapibus ac facilisis in, egestas eget quam. Fusce dapibus, tellus ac cursus
+ commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet.
+
+
Get started today
+
+
+
+
+
+
Heading
+
+
Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris
+ condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis
+ euismod. Donec sed odio dui.
+
+
View details »
+
+
+
Heading
+
+
Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris
+ condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis
+ euismod. Donec sed odio dui.
+
+
View details »
+
+
+
Heading
+
+
Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula
+ porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut
+ fermentum massa.
+
+
View details »
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/examples/justified-nav/justified-nav.css b/vendor/twitter-bootstrap-3/examples/justified-nav/justified-nav.css
new file mode 100644
index 000000000..90071c60b
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/examples/justified-nav/justified-nav.css
@@ -0,0 +1,95 @@
+body {
+ padding-top: 20px;
+}
+
+.footer {
+ border-top: 1px solid #eee;
+ margin-top: 40px;
+ padding-top: 40px;
+ padding-bottom: 40px;
+}
+
+/* Main marketing message and sign up button */
+.jumbotron {
+ text-align: center;
+ background-color: transparent;
+}
+
+.jumbotron .btn {
+ font-size: 21px;
+ padding: 14px 24px;
+}
+
+/* Customize the nav-justified links to be fill the entire space of the .navbar */
+
+.nav-justified {
+ background-color: #eee;
+ border-radius: 5px;
+ border: 1px solid #ccc;
+}
+
+.nav-justified > li > a {
+ padding-top: 15px;
+ padding-bottom: 15px;
+ color: #777;
+ font-weight: bold;
+ text-align: center;
+ border-bottom: 1px solid #d5d5d5;
+ background-color: #e5e5e5; /* Old browsers */
+ background-repeat: repeat-x; /* Repeat the gradient */
+ background-image: -moz-linear-gradient(top, #f5f5f5 0%, #e5e5e5 100%); /* FF3.6+ */
+ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f5f5f5), color-stop(100%, #e5e5e5)); /* Chrome,Safari4+ */
+ background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e5e5e5 100%); /* Chrome 10+,Safari 5.1+ */
+ background-image: -o-linear-gradient(top, #f5f5f5 0%, #e5e5e5 100%); /* Opera 11.10+ */
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#e5e5e5', GradientType=0); /* IE6-9 */
+ background-image: linear-gradient(top, #f5f5f5 0%, #e5e5e5 100%); /* W3C */
+}
+
+.nav-justified > .active > a,
+.nav-justified > .active > a:hover,
+.nav-justified > .active > a:focus {
+ background-color: #ddd;
+ background-image: none;
+ box-shadow: inset 0 3px 7px rgba(0, 0, 0, .15);
+}
+
+.nav-justified > li:first-child > a {
+ border-radius: 5px 5px 0 0;
+}
+
+.nav-justified > li:last-child > a {
+ border-bottom: 0;
+ border-radius: 0 0 5px 5px;
+}
+
+@media (min-width: 768px) {
+ .nav-justified {
+ max-height: 52px;
+ }
+
+ .nav-justified > li > a {
+ border-left: 1px solid #fff;
+ border-right: 1px solid #d5d5d5;
+ }
+
+ .nav-justified > li:first-child > a {
+ border-left: 0;
+ border-radius: 5px 0 0 5px;
+ }
+
+ .nav-justified > li:last-child > a {
+ border-radius: 0 5px 5px 0;
+ border-right: 0;
+ }
+}
+
+/* Responsive: Portrait tablets and up */
+@media screen and (min-width: 768px) {
+ /* Remove the padding we set earlier */
+ .masthead,
+ .marketing,
+ .footer {
+ padding-left: 0;
+ padding-right: 0;
+ }
+}
diff --git a/vendor/twitter-bootstrap-3/examples/navbar-fixed-top/index.html b/vendor/twitter-bootstrap-3/examples/navbar-fixed-top/index.html
new file mode 100644
index 000000000..9383bbd1d
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/examples/navbar-fixed-top/index.html
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+ Fixed Top Navbar Example for Bootstrap
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Navbar example
+
+
This example is a quick exercise to illustrate how the default, static and fixed to top navbar work. It
+ includes the responsive CSS and HTML, so it also adapts to your viewport and device.
+
+
To see the difference between static and fixed top navbars, just scroll.
+
+
+ View navbar docs »
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/examples/navbar-fixed-top/navbar-fixed-top.css b/vendor/twitter-bootstrap-3/examples/navbar-fixed-top/navbar-fixed-top.css
new file mode 100644
index 000000000..7f7913827
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/examples/navbar-fixed-top/navbar-fixed-top.css
@@ -0,0 +1,4 @@
+body {
+ min-height: 2000px;
+ padding-top: 70px;
+}
diff --git a/vendor/twitter-bootstrap-3/examples/navbar-static-top/index.html b/vendor/twitter-bootstrap-3/examples/navbar-static-top/index.html
new file mode 100644
index 000000000..18fbc65cf
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/examples/navbar-static-top/index.html
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+ Static Top Navbar Example for Bootstrap
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Navbar example
+
+
This example is a quick exercise to illustrate how the default, static and fixed to top navbar work. It
+ includes the responsive CSS and HTML, so it also adapts to your viewport and device.
+
+
To see the difference between static and fixed top navbars, just scroll.
+
+
+ View navbar docs »
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/examples/navbar-static-top/navbar-static-top.css b/vendor/twitter-bootstrap-3/examples/navbar-static-top/navbar-static-top.css
new file mode 100644
index 000000000..931a3a354
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/examples/navbar-static-top/navbar-static-top.css
@@ -0,0 +1,7 @@
+body {
+ min-height: 2000px;
+}
+
+.navbar-static-top {
+ margin-bottom: 19px;
+}
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/examples/navbar/index.html b/vendor/twitter-bootstrap-3/examples/navbar/index.html
new file mode 100644
index 000000000..0d5ca98d1
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/examples/navbar/index.html
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+ Navbar Template for Bootstrap
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Navbar example
+
+
This example is a quick exercise to illustrate how the default, static navbar and fixed to top navbar work.
+ It includes the responsive CSS and HTML, so it also adapts to your viewport and device.
+
+
+ View navbar docs »
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/examples/navbar/navbar.css b/vendor/twitter-bootstrap-3/examples/navbar/navbar.css
new file mode 100644
index 000000000..0d3ff0dd1
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/examples/navbar/navbar.css
@@ -0,0 +1,7 @@
+body {
+ padding: 30px;
+}
+
+.navbar {
+ margin-bottom: 30px;
+}
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/examples/non-responsive/index.html b/vendor/twitter-bootstrap-3/examples/non-responsive/index.html
new file mode 100644
index 000000000..07f7611d8
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/examples/non-responsive/index.html
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+
+
+
+ Non-responsive Template for Bootstrap
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
What changes
+
+
Note the lack of the <meta name="viewport" content="width=device-width, initial-scale=1.0">
,
+ which disables the zooming aspect of sites in mobile devices. In addition, we reset our container's width and
+ are basically good to go.
+
+
Regarding navbars
+
+
As a heads up, the navbar component is rather tricky here in that the styles for displaying it are rather
+ specific and detailed. Overrides to ensure desktop styles display are not as performant or sleek as one would
+ like. Just be aware there may be potential gotchas as you build on top of this example when using the
+ navbar.
+
+
Non-responsive grid system
+
+
+
One third
+
One third
+
One third
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/examples/non-responsive/non-responsive.css b/vendor/twitter-bootstrap-3/examples/non-responsive/non-responsive.css
new file mode 100644
index 000000000..df51f6664
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/examples/non-responsive/non-responsive.css
@@ -0,0 +1,121 @@
+/* Template-specific stuff
+ *
+ * Customizations just for the template; these are not necessary for anything
+ * with disabling the responsiveness.
+ */
+
+/* Account for fixed navbar */
+body {
+ padding-top: 70px;
+ padding-bottom: 30px;
+}
+
+/* Finesse the page header spacing */
+.page-header {
+ margin-bottom: 30px;
+}
+
+.page-header .lead {
+ margin-bottom: 10px;
+}
+
+/* Non-responsive overrides
+ *
+ * Utilitze the following CSS to disable the responsive-ness of the container,
+ * grid system, and navbar.
+ */
+
+/* Reset the container */
+.container {
+ max-width: none !important;
+ width: 970px;
+}
+
+/* Demonstrate the grids */
+.col-xs-4 {
+ padding-top: 15px;
+ padding-bottom: 15px;
+ background-color: #eee;
+ border: 1px solid #ddd;
+ background-color: rgba(86, 61, 124, .15);
+ border: 1px solid rgba(86, 61, 124, .2);
+}
+
+.container .navbar-header,
+.container .navbar-collapse {
+ margin-right: 0;
+ margin-left: 0;
+}
+
+/* Always float the navbar header */
+.navbar-header {
+ float: left;
+}
+
+/* Undo the collapsing navbar */
+.navbar-collapse {
+ display: block !important;
+ height: auto !important;
+ padding-bottom: 0;
+ overflow: visible !important;
+}
+
+.navbar-toggle {
+ display: none;
+}
+
+.navbar-brand {
+ margin-left: -15px;
+}
+
+/* Always apply the floated nav */
+.navbar-nav {
+ float: left;
+ margin: 0;
+}
+
+.navbar-nav > li {
+ float: left;
+}
+
+.navbar-nav > li > a {
+ padding: 15px;
+}
+
+/* Redeclare since we override the float above */
+.navbar-nav.navbar-right {
+ float: right;
+}
+
+/* Undo custom dropdowns */
+.navbar .open .dropdown-menu {
+ position: absolute;
+ float: left;
+ background-color: #fff;
+ border: 1px solid #cccccc;
+ border: 1px solid rgba(0, 0, 0, 0.15);
+ border-width: 0 1px 1px;
+ border-radius: 0 0 4px 4px;
+ -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
+ box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
+}
+
+.navbar .open .dropdown-menu > li > a {
+ color: #333;
+}
+
+.navbar .open .dropdown-menu > li > a:hover,
+.navbar .open .dropdown-menu > li > a:focus,
+.navbar .open .dropdown-menu > .active > a,
+.navbar .open .dropdown-menu > .active > a:hover,
+.navbar .open .dropdown-menu > .active > a:focus {
+ color: #fff !important;
+ background-color: #428bca !important;
+}
+
+.navbar .open .dropdown-menu > .disabled > a,
+.navbar .open .dropdown-menu > .disabled > a:hover,
+.navbar .open .dropdown-menu > .disabled > a:focus {
+ color: #999 !important;
+ background-color: transparent !important;
+}
diff --git a/vendor/twitter-bootstrap-3/examples/offcanvas/index.html b/vendor/twitter-bootstrap-3/examples/offcanvas/index.html
new file mode 100644
index 000000000..320931294
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/examples/offcanvas/index.html
@@ -0,0 +1,166 @@
+
+
+
+
+
+
+
+ Off Canvas Template for Bootstrap
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Toggle nav
+
+
+
Hello, world!
+
+
This is an example to show the potential of an offcanvas layout pattern in Bootstrap. Try some
+ responsive-range viewport sizes to see it in action.
+
+
+
+
Heading
+
+
Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor
+ mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada
+ magna mollis euismod. Donec sed odio dui.
+
+
View details »
+
+
+
+
Heading
+
+
Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor
+ mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada
+ magna mollis euismod. Donec sed odio dui.
+
+
View details »
+
+
+
+
Heading
+
+
Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor
+ mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada
+ magna mollis euismod. Donec sed odio dui.
+
+
View details »
+
+
+
+
Heading
+
+
Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor
+ mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada
+ magna mollis euismod. Donec sed odio dui.
+
+
View details »
+
+
+
+
Heading
+
+
Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor
+ mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada
+ magna mollis euismod. Donec sed odio dui.
+
+
View details »
+
+
+
+
Heading
+
+
Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor
+ mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada
+ magna mollis euismod. Donec sed odio dui.
+
+
View details »
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/examples/offcanvas/offcanvas.css b/vendor/twitter-bootstrap-3/examples/offcanvas/offcanvas.css
new file mode 100644
index 000000000..04bf08ccf
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/examples/offcanvas/offcanvas.css
@@ -0,0 +1,49 @@
+/*
+ * Style twaks
+ * --------------------------------------------------
+ */
+body {
+ padding-top: 70px;
+}
+
+footer {
+ padding-left: 15px;
+ padding-right: 15px;
+}
+
+/*
+ * Off Canvas
+ * --------------------------------------------------
+ */
+@media screen and (max-width: 768px) {
+ .row-offcanvas {
+ position: relative;
+ -webkit-transition: all 0.25s ease-out;
+ -moz-transition: all 0.25s ease-out;
+ transition: all 0.25s ease-out;
+ }
+
+ .row-offcanvas-right
+ .sidebar-offcanvas {
+ right: -50%; /* 6 columns */
+ }
+
+ .row-offcanvas-left
+ .sidebar-offcanvas {
+ left: -50%; /* 6 columns */
+ }
+
+ .row-offcanvas-right.active {
+ right: 50%; /* 6 columns */
+ }
+
+ .row-offcanvas-left.active {
+ left: 50%; /* 6 columns */
+ }
+
+ .sidebar-offcanvas {
+ position: absolute;
+ top: 0;
+ width: 50%; /* 6 columns */
+ }
+}
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/examples/offcanvas/offcanvas.js b/vendor/twitter-bootstrap-3/examples/offcanvas/offcanvas.js
new file mode 100644
index 000000000..c3da78d43
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/examples/offcanvas/offcanvas.js
@@ -0,0 +1,7 @@
+$ (document).ready (function ()
+{
+ $ ('[data-toggle=offcanvas]').click (function ()
+ {
+ $ ('.row-offcanvas').toggleClass ('active');
+ });
+});
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/examples/screenshots/carousel.jpg b/vendor/twitter-bootstrap-3/examples/screenshots/carousel.jpg
new file mode 100644
index 000000000..a63a1ba9d
Binary files /dev/null and b/vendor/twitter-bootstrap-3/examples/screenshots/carousel.jpg differ
diff --git a/vendor/twitter-bootstrap-3/examples/screenshots/grid.jpg b/vendor/twitter-bootstrap-3/examples/screenshots/grid.jpg
new file mode 100644
index 000000000..2407cf293
Binary files /dev/null and b/vendor/twitter-bootstrap-3/examples/screenshots/grid.jpg differ
diff --git a/vendor/twitter-bootstrap-3/examples/screenshots/jumbotron-narrow.jpg b/vendor/twitter-bootstrap-3/examples/screenshots/jumbotron-narrow.jpg
new file mode 100644
index 000000000..915d10f4c
Binary files /dev/null and b/vendor/twitter-bootstrap-3/examples/screenshots/jumbotron-narrow.jpg differ
diff --git a/vendor/twitter-bootstrap-3/examples/screenshots/jumbotron.jpg b/vendor/twitter-bootstrap-3/examples/screenshots/jumbotron.jpg
new file mode 100644
index 000000000..46bce0c53
Binary files /dev/null and b/vendor/twitter-bootstrap-3/examples/screenshots/jumbotron.jpg differ
diff --git a/vendor/twitter-bootstrap-3/examples/screenshots/justified-nav.jpg b/vendor/twitter-bootstrap-3/examples/screenshots/justified-nav.jpg
new file mode 100644
index 000000000..5f57923e6
Binary files /dev/null and b/vendor/twitter-bootstrap-3/examples/screenshots/justified-nav.jpg differ
diff --git a/vendor/twitter-bootstrap-3/examples/screenshots/navbar-fixed.jpg b/vendor/twitter-bootstrap-3/examples/screenshots/navbar-fixed.jpg
new file mode 100644
index 000000000..16a03b0bc
Binary files /dev/null and b/vendor/twitter-bootstrap-3/examples/screenshots/navbar-fixed.jpg differ
diff --git a/vendor/twitter-bootstrap-3/examples/screenshots/navbar-static.jpg b/vendor/twitter-bootstrap-3/examples/screenshots/navbar-static.jpg
new file mode 100644
index 000000000..8fe3529fb
Binary files /dev/null and b/vendor/twitter-bootstrap-3/examples/screenshots/navbar-static.jpg differ
diff --git a/vendor/twitter-bootstrap-3/examples/screenshots/navbar.jpg b/vendor/twitter-bootstrap-3/examples/screenshots/navbar.jpg
new file mode 100644
index 000000000..3120c507a
Binary files /dev/null and b/vendor/twitter-bootstrap-3/examples/screenshots/navbar.jpg differ
diff --git a/vendor/twitter-bootstrap-3/examples/screenshots/non-responsive.jpg b/vendor/twitter-bootstrap-3/examples/screenshots/non-responsive.jpg
new file mode 100644
index 000000000..0b8953ce1
Binary files /dev/null and b/vendor/twitter-bootstrap-3/examples/screenshots/non-responsive.jpg differ
diff --git a/vendor/twitter-bootstrap-3/examples/screenshots/offcanvas.jpg b/vendor/twitter-bootstrap-3/examples/screenshots/offcanvas.jpg
new file mode 100644
index 000000000..76b7d6702
Binary files /dev/null and b/vendor/twitter-bootstrap-3/examples/screenshots/offcanvas.jpg differ
diff --git a/vendor/twitter-bootstrap-3/examples/screenshots/sign-in.jpg b/vendor/twitter-bootstrap-3/examples/screenshots/sign-in.jpg
new file mode 100644
index 000000000..4191c33b8
Binary files /dev/null and b/vendor/twitter-bootstrap-3/examples/screenshots/sign-in.jpg differ
diff --git a/vendor/twitter-bootstrap-3/examples/screenshots/starter-template.jpg b/vendor/twitter-bootstrap-3/examples/screenshots/starter-template.jpg
new file mode 100644
index 000000000..2545aa32f
Binary files /dev/null and b/vendor/twitter-bootstrap-3/examples/screenshots/starter-template.jpg differ
diff --git a/vendor/twitter-bootstrap-3/examples/screenshots/sticky-footer-navbar.jpg b/vendor/twitter-bootstrap-3/examples/screenshots/sticky-footer-navbar.jpg
new file mode 100644
index 000000000..6226bf4ac
Binary files /dev/null and b/vendor/twitter-bootstrap-3/examples/screenshots/sticky-footer-navbar.jpg differ
diff --git a/vendor/twitter-bootstrap-3/examples/screenshots/sticky-footer.jpg b/vendor/twitter-bootstrap-3/examples/screenshots/sticky-footer.jpg
new file mode 100644
index 000000000..644f6dd26
Binary files /dev/null and b/vendor/twitter-bootstrap-3/examples/screenshots/sticky-footer.jpg differ
diff --git a/vendor/twitter-bootstrap-3/examples/screenshots/theme.jpg b/vendor/twitter-bootstrap-3/examples/screenshots/theme.jpg
new file mode 100644
index 000000000..ef47acb9c
Binary files /dev/null and b/vendor/twitter-bootstrap-3/examples/screenshots/theme.jpg differ
diff --git a/vendor/twitter-bootstrap-3/examples/signin/index.html b/vendor/twitter-bootstrap-3/examples/signin/index.html
new file mode 100644
index 000000000..614d2b7e7
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/examples/signin/index.html
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+ Signin Template for Bootstrap
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Remember me
+
+ Sign in
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/examples/signin/signin.css b/vendor/twitter-bootstrap-3/examples/signin/signin.css
new file mode 100644
index 000000000..9dc0d864e
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/examples/signin/signin.css
@@ -0,0 +1,46 @@
+body {
+ padding-top: 40px;
+ padding-bottom: 40px;
+ background-color: #eee;
+}
+
+.form-signin {
+ max-width: 330px;
+ padding: 15px;
+ margin: 0 auto;
+}
+
+.form-signin .form-signin-heading,
+.form-signin .checkbox {
+ margin-bottom: 10px;
+}
+
+.form-signin .checkbox {
+ font-weight: normal;
+}
+
+.form-signin .form-control {
+ position: relative;
+ font-size: 16px;
+ height: auto;
+ padding: 10px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.form-signin .form-control:focus {
+ z-index: 2;
+}
+
+.form-signin input[type="text"] {
+ margin-bottom: -1px;
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.form-signin input[type="password"] {
+ margin-bottom: 10px;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/examples/starter-template/index.html b/vendor/twitter-bootstrap-3/examples/starter-template/index.html
new file mode 100644
index 000000000..59c91776a
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/examples/starter-template/index.html
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+ Starter Template for Bootstrap
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Bootstrap starter template
+
+
Use this document as a way to quickly start any new project. All you get is this text and a
+ mostly barebones HTML document.
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/examples/starter-template/starter-template.css b/vendor/twitter-bootstrap-3/examples/starter-template/starter-template.css
new file mode 100644
index 000000000..f42b3c3e5
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/examples/starter-template/starter-template.css
@@ -0,0 +1,8 @@
+body {
+ padding-top: 50px;
+}
+
+.starter-template {
+ padding: 40px 15px;
+ text-align: center;
+}
diff --git a/vendor/twitter-bootstrap-3/examples/sticky-footer-navbar/index.html b/vendor/twitter-bootstrap-3/examples/sticky-footer-navbar/index.html
new file mode 100644
index 000000000..4514bf6b3
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/examples/sticky-footer-navbar/index.html
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+ Sticky Footer Navbar Template for Bootstrap
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Pin a fixed-height footer to the bottom of the viewport in desktop browsers with this custom
+ HTML and CSS. A fixed navbar has been added within #wrap
with padding-top: 60px;
+ on the .container
.
+
+
Back to the default sticky footer minus the navbar.
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/examples/sticky-footer-navbar/sticky-footer-navbar.css b/vendor/twitter-bootstrap-3/examples/sticky-footer-navbar/sticky-footer-navbar.css
new file mode 100644
index 000000000..a27e038f6
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/examples/sticky-footer-navbar/sticky-footer-navbar.css
@@ -0,0 +1,46 @@
+/* Sticky footer styles
+-------------------------------------------------- */
+
+html,
+body {
+ height: 100%;
+ /* The html and body elements cannot have any padding or margin. */
+}
+
+/* Wrapper for page content to push down footer */
+#wrap {
+ min-height: 100%;
+ height: auto !important;
+ height: 100%;
+ /* Negative indent footer by its height */
+ margin: 0 auto -60px;
+ /* Pad bottom by footer height */
+ padding: 0 0 60px;
+}
+
+/* Set the fixed height of the footer here */
+#footer {
+ height: 60px;
+ background-color: #f5f5f5;
+}
+
+/* Custom page CSS
+-------------------------------------------------- */
+/* Not required for template or sticky footer method. */
+
+#wrap > .container {
+ padding: 60px 15px 0;
+}
+
+.container .credit {
+ margin: 20px 0;
+}
+
+#footer > .container {
+ padding-left: 15px;
+ padding-right: 15px;
+}
+
+code {
+ font-size: 80%;
+}
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/examples/sticky-footer/index.html b/vendor/twitter-bootstrap-3/examples/sticky-footer/index.html
new file mode 100644
index 000000000..9693e0f30
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/examples/sticky-footer/index.html
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+ Sticky Footer Template for Bootstrap
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/examples/sticky-footer/sticky-footer.css b/vendor/twitter-bootstrap-3/examples/sticky-footer/sticky-footer.css
new file mode 100644
index 000000000..2d011d598
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/examples/sticky-footer/sticky-footer.css
@@ -0,0 +1,39 @@
+/* Sticky footer styles
+-------------------------------------------------- */
+
+html,
+body {
+ height: 100%;
+ /* The html and body elements cannot have any padding or margin. */
+}
+
+/* Wrapper for page content to push down footer */
+#wrap {
+ min-height: 100%;
+ height: auto !important;
+ height: 100%;
+ /* Negative indent footer by its height */
+ margin: 0 auto -60px;
+ /* Pad bottom by footer height */
+ padding: 0 0 60px;
+}
+
+/* Set the fixed height of the footer here */
+#footer {
+ height: 60px;
+ background-color: #f5f5f5;
+}
+
+/* Custom page CSS
+-------------------------------------------------- */
+/* Not required for template or sticky footer method. */
+
+.container {
+ width: auto;
+ max-width: 680px;
+ padding: 0 15px;
+}
+
+.container .credit {
+ margin: 20px 0;
+}
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/examples/theme/index.html b/vendor/twitter-bootstrap-3/examples/theme/index.html
new file mode 100644
index 000000000..85336586f
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/examples/theme/index.html
@@ -0,0 +1,375 @@
+
+
+
+
+
+
+
+ Theme Template for Bootstrap
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Hello, world!
+
+
This is a template for a simple marketing or informational website. It includes a large callout called the hero
+ unit and three supporting pieces of content. Use it as a starting point to create something more unique.
+
+
Learn more »
+
+
+
+
+
+ Default
+ Primary
+ Success
+ Info
+ Warning
+ Danger
+ Link
+
+
+ Default
+ Primary
+ Success
+ Info
+ Warning
+ Danger
+ Link
+
+
+ Default
+ Primary
+ Success
+ Info
+ Warning
+ Danger
+ Link
+
+
+ Default
+ Primary
+ Success
+ Info
+ Warning
+ Danger
+ Link
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Well done! You successfully read this important alert message.
+
+
+ Heads up! This alert needs your attention, but it's not super important.
+
+
+ Warning! Best check yo self, you're not looking too good.
+
+
+ Oh snap! Change a few things up and try submitting again.
+
+
+
+
+
+
+
40% Complete (success)
+
+
+
+
60% Complete (warning)
+
+
+
80% Complete (danger)
+
+
+
35% Complete (success)
+
20% Complete (warning)
+
10% Complete (danger)
+
+
+
+
+
+
+
+
+ Cras justo odio
+ Dapibus ac facilisis in
+ Morbi leo risus
+ Porta ac consectetur ac
+ Vestibulum at eros
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Panel title
+
+
+ Panel content
+
+
+
+
+
Panel title
+
+
+ Panel content
+
+
+
+
+
+
+
+
Panel title
+
+
+ Panel content
+
+
+
+
+
Panel title
+
+
+ Panel content
+
+
+
+
+
+
+
+
Panel title
+
+
+ Panel content
+
+
+
+
+
Panel title
+
+
+ Panel content
+
+
+
+
+
+
+
+
+
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas sed diam eget risus varius blandit sit amet non
+ magna. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent commodo cursus magna, vel scelerisque
+ nisl consectetur et. Cras mattis consectetur purus sit amet fermentum. Duis mollis, est non commodo luctus, nisi
+ erat porttitor ligula, eget lacinia odio sem nec elit. Aenean lacinia bibendum nulla sed consectetur.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/examples/theme/theme.css b/vendor/twitter-bootstrap-3/examples/theme/theme.css
new file mode 100644
index 000000000..a35ea0b21
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/examples/theme/theme.css
@@ -0,0 +1,14 @@
+body {
+ padding-top: 70px;
+ padding-bottom: 30px;
+}
+
+.theme-dropdown .dropdown-menu {
+ display: block;
+ position: static;
+ margin-bottom: 20px;
+}
+
+.theme-showcase > p > .btn {
+ margin: 5px 0;
+}
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/fonts/glyphicons-halflings-regular.eot b/vendor/twitter-bootstrap-3/fonts/glyphicons-halflings-regular.eot
new file mode 100644
index 000000000..87eaa4342
Binary files /dev/null and b/vendor/twitter-bootstrap-3/fonts/glyphicons-halflings-regular.eot differ
diff --git a/vendor/twitter-bootstrap-3/fonts/glyphicons-halflings-regular.svg b/vendor/twitter-bootstrap-3/fonts/glyphicons-halflings-regular.svg
new file mode 100644
index 000000000..5fee06854
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/fonts/glyphicons-halflings-regular.svg
@@ -0,0 +1,228 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/fonts/glyphicons-halflings-regular.ttf b/vendor/twitter-bootstrap-3/fonts/glyphicons-halflings-regular.ttf
new file mode 100644
index 000000000..be784dc1d
Binary files /dev/null and b/vendor/twitter-bootstrap-3/fonts/glyphicons-halflings-regular.ttf differ
diff --git a/vendor/twitter-bootstrap-3/fonts/glyphicons-halflings-regular.woff b/vendor/twitter-bootstrap-3/fonts/glyphicons-halflings-regular.woff
new file mode 100644
index 000000000..2cc3e4852
Binary files /dev/null and b/vendor/twitter-bootstrap-3/fonts/glyphicons-halflings-regular.woff differ
diff --git a/vendor/twitter-bootstrap-3/getting-started.html b/vendor/twitter-bootstrap-3/getting-started.html
new file mode 100644
index 000000000..084465448
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/getting-started.html
@@ -0,0 +1,1046 @@
+---
+layout: default
+title: Getting started
+slug: getting-started
+lead: "An overview of Bootstrap, how to download and use, basic templates and examples, and more."
+base_url: "../"
+---
+
+
+
+
+
+
There are a few easy ways to quickly get started with Bootstrap, each one appealing to a different
+ skill level and use case. Read through to see what suits your particular needs.
+
+
Compiled CSS, JS, and fonts
+
+
The fastest way to get Bootstrap is to download the compiled and minified versions of our CSS and JavaScript,
+ along with the included fonts. No documentation or original source files are included.
+
+
Download
+ precompiled Bootstrap
+
+
Additional downloads
+
+
+
+
+
Get the original files for all CSS and JavaScript by downloading the full release directly from GitHub.
+
+
+
Clone the entire project or fork your own version of Bootstrap to make it your own by visiting us on
+ GitHub.
+
+ Install with Bower
+
+
+
Install and manage the original files for all CSS and JavaScript, along with a local copy of the docs, using
+ Bower .
+ {% highlight bash %}$ bower install bootstrap{% endhighlight %}
+
+
+
Bootstrap CDN
+
+
The folks over at NetDNA have graciously provided CDN support for
+ Bootstrap's CSS and JavaScript. To use, swap your local instances for the Bootstrap CDN links listed below.
+ {% highlight html %}
+
+
+
+
+
+
+
+
+ {% endhighlight %}
+
+
+
LESS compilation
+
+
If you download the original files, you need to compile Bootstrap's LESS files into usable CSS. To do that,
+ Bootstrap only officially supports Recess , Twitter's CSS
+ hinter built on top of less.js .
+
+
+
+
+
+
+
+
Within the download you'll find the following directories and files, logically grouping common
+ assets and providing both compiled and minified variations.
+
+
Once downloaded, unzip the compressed folder to see the structure of (the compiled) Bootstrap. You'll see
+ something like this:
+
+ {% highlight bash %}
+ bootstrap/
+ ├── css/
+ │ ├── bootstrap.css
+ │ ├── bootstrap.min.css
+ │ ├── bootstrap-theme.css
+ │ ├── bootstrap-theme.min.css
+ ├── js/
+ │ ├── bootstrap.js
+ │ ├── bootstrap.min.js
+ └── fonts/
+ ├── glyphicons-halflings-regular.eot
+ ├── glyphicons-halflings-regular.svg
+ ├── glyphicons-halflings-regular.ttf
+ └── glyphicons-halflings-regular.woff
+ {% endhighlight %}
+
+
This is the most basic form of Bootstrap: compiled files for quick drop-in usage in nearly any web project. We
+ provide compiled CSS and JS (bootstrap.*
), as well as compiled and minified CSS and JS (bootstrap.min.*
).
+ Fonts from Glyphicons are included, as is the optional Bootstrap theme.
+
+
+
jQuery required
+
+
Please note that all JavaScript plugins require jQuery to be included, as shown in the starter template .
+
+
+
+
+
+
+
+
Make use of a super basic HTML template, or dive into a few
+ examples we've started for you. We encourage folks to iterate on these examples and not simply use them as
+ an end result.
+
+
Copy and paste the HTML from below to get started with a bare bones Bootstrap document.
+ {% highlight html %}
+
+
+
+
Bootstrap 101 Template
+
+
+
+
+
+
+
+
+
Hello, world!
+
+
+
+
+
+
+
+ {% endhighlight %}
+
+
+
+
+
+
+
Build on the basic template above with Bootstrap's many components. Check out some of the more
+ advanced tips for how to customize and build on top of them.
+
+
+
+
+
+
+
Starter template
+
+
Nothing but the basics: compiled CSS and JavaScript along with a container.
+
+
+
+
+
+
Grids
+
+
Multiple examples of grid layouts with all four tiers, nesting, and more.
+
+
+
+
+
+
+
+
Jumbotron
+
+
Build around the jumbotron with a navbar and some basic grid columns.
+
+
+
+
+
+
Narrow jumbotron
+
+
Build a more custom page by narrowing the default container and jumbotron.
+
+
+
+
+
+
+
+
Navbar
+
+
Super basic template that includes the navbar along with some additional content.
+
+
+
+
+
+
Static top navbar
+
+
Super basic template with a static top navbar along with some additional content.
+
+
+
+
+
+
+
+
Fixed navbar
+
+
Super basic template with a fixed top navbar along with some additional content.
+
+
+
+
+
+
Sign-in page
+
+
Custom form layout and design for a simple sign in form.
+
+
+
+
+
+
+
+
Sticky footer
+
+
Attach a footer to the bottom of the viewport when the content is shorter than it.
+
+
+
+
+
+
Sticky footer with navbar
+
+
Attach a footer to the bottom of the viewport with a fixed navbar at the top.
+
+
+
+
+
+
+
+
Justified nav
+
+
Expand on the default navbar and more to create justified navigation links.
+
+
+
+
+
+
Offcanvas
+
+
Build a toggleable off-canvas navigation menu for use with Bootstrap.
+
+
+
+
+
+
+
+
Carousel
+
+
Customize the navbar and carousel, then add some new components.
+
+
+
+
+
+
Non-responsive Bootstrap
+
+
Easily disable the responsiveness of Bootstrap per our
+ docs .
+
+
+
+
+
+
+
+
Bootstrap theme
+
+
Load the optional Bootstrap theme for a visually enhanced experience.
+
+
+
+
+
+
+
+
+
+
Don't want your site or application to be scaled on different devices? With a little bit of work,
+ you can disable the responsive features of Bootstrap so that mobile users see your full desktop-version site.
+ Read below or check out the non-responsive example .
+
+
Steps to disable responsive views
+
+
To disable responsive features, follow these steps. See it in action in the modified template below.
+
+ Remove (or just don't add) the viewport <meta>
mentioned in the CSS docs
+ Remove the max-width
on the .container
for all grid tiers with max-width:
+ none !important;
and set a regular width like width: 970px;
. Be sure that this comes
+ after the default Bootstrap CSS. You can optionally avoid the !important
with media queries or
+ some selector-fu.
+
+ If using navbars, undo all the navbar collapsing and expanding behavior (this is too much to show here, so
+ peep the example).
+
+ For grid layouts, make use of .col-xs-*
classes in addition to or in place of the medium/large
+ ones. Don't worry, the extra-small device grid scales up to all resolutions, so you're set there.
+
+
+
You'll still need Respond.js for IE8 (since our media queries are still there and need to be picked up). This
+ just disables the "mobile site" of Bootstrap.
+
+
Bootstrap template with disabled responsive
+
+
We've taken the above steps and applied them to an example. Read it's source code to see the specific changes
+ called out.
+
+
+ View non-responsive example
+
+
+
+
+
+
+
+
Bootstrap 3 is not backwards compatible with v2.x. Folks looking to upgrade to v3 should use this
+ section as a general upgrade guide. We've outlined some of the major changes and provided tables that highlight key
+ changes. For an overview, read the
+ announcement blog post .
+
+
+
Major class changes
+
+
Reference table for classes that have changed between v2.x and v3.0.
+
+
+
+
+
+ Bootstrap 2.x
+ Bootstrap 3.0
+
+
+
+
+ .container-fluid
+ .container
+
+
+ .row-fluid
+ .row
+
+
+ .span*
+ .col-md-*
+
+
+ .offset*
+ .col-md-offset-*
+
+
+ .brand
+ .navbar-brand
+
+
+ .nav-collapse
+ .navbar-collapse
+
+
+ .nav-toggle
+ .navbar-toggle
+
+
+ .btn-navbar
+ .navbar-btn
+
+
+ .hero-unit
+ .jumbotron
+
+
+ .icon-*
+ .glyphicon .glyphicon-*
+
+
+ .btn
+ .btn .btn-default
+
+
+ .btn-mini
+ .btn-xs
+
+
+ .btn-small
+ .btn-sm
+
+
+ .btn-large
+ .btn-lg
+
+
+ .visible-phone
+ .visible-xs
+
+
+ .visible-tablet
+ .visible-sm
+
+
+ .visible-desktop
+ .visible-md
+
+
+ .hidden-phone
+ .hidden-xs
+
+
+ .hidden-tablet
+ .hidden-sm
+
+
+ .hidden-desktop
+ .hidden-md
+
+
+ .input-small
+ .input-sm
+
+
+ .input-large
+ .input-lg
+
+
+ .checkbox.inline
.radio.inline
+ .checkbox-inline
.radio-inline
+
+
+ .input-prepend
.input-append
+ .input-group
+
+
+ .add-on
+ .input-group-addon
+
+
+ .thumbnail
+ .img-thumbnail
+
+
+ ul.unstyled
+ .list-unstyled
+
+
+ ul.inline
+ .list-inline
+
+
+ .muted
+ .text-muted
+
+
+
+
+
+
+
+
What's new
+
+
We've added a few new elements and changed some existing ones. Here's their new or updated classes.
+
+
+
+
+
+ Element
+ Description
+
+
+
+
+ Panels
+ .panel .panel-default
.panel-body
.panel-title
.panel-heading
+ .panel-footer
.panel-collapse
+
+
+ List groups
+ .list-group
.list-group-item
.list-group-item-text
.list-group-item-heading
+
+
+
+ Glyphicons
+ .glyphicon
+
+
+ Jumbotron
+ .jumbotron
+
+
+ Tiny grid (<768px)
+ .col-xs-*
+
+
+ Small grid (≥768px)
+ .col-sm-*
+
+
+ Medium grid (≥992px)
+ .col-md-*
+
+
+ Large grid (≥1200px)
+ .col-lg-*
+
+
+ Responsive utility classes (≥1200px)
+ .visible-lg
.hidden-lg
+
+
+ Offsets
+ .col-sm-offset-*
.col-md-offset-*
.col-lg-offset-*
+
+
+ Push
+ .col-sm-push-*
.col-md-push-*
.col-lg-push-*
+
+
+ Pull
+ .col-sm-pull-*
.col-md-pull-*
.col-lg-pull-*
+
+
+ Input groups
+ .input-group
.input-group-addon
.input-group-btn
+
+
+ Form controls
+ .form-control
.form-group
+
+
+ Button group sizes
+ .btn-group-xs
.btn-group-sm
.btn-group-lg
+
+
+ Navbar text
+ .navbar-text
+
+
+ Navbar header
+ .navbar-header
+
+
+ Justified tabs / pills
+ .nav-justified
+
+
+ Responsive images
+ .img-responsive
+
+
+ Contextual table rows
+ .success
.danger
.warning
.active
+
+
+ Contextual panels
+ .panel-success
.panel-danger
.panel-warning
+ .panel-info
+
+
+ Modal
+ .modal-dialog
.modal-content
+
+
+ Thumbnail image
+ .img-thumbnail
+
+
+ Well sizes
+ .well-sm
.well-lg
+
+
+ Alert links
+ .alert-link
+
+
+
+
+
+
+
+
What's removed
+
+
The following elements have been dropped or changed in v3.
+
+
+
+
+
+ Element
+ Removed from 2.x
+ 3.0 Equivalent
+
+
+
+
+ Form actions
+ .form-actions
+ N/A
+
+
+ Search form
+ .form-search
+ N/A
+
+
+ Fluid container
+ .container-fluid
+ .container
(no more fixed grid)
+
+
+ Fluid row
+ .row-fluid
+ .row
(no more fixed grid)
+
+
+ Navbar inner
+ .navbar-inner
+ N/A
+
+
+ Dropdown submenu
+ .dropdown-submenu
+ N/A
+
+
+ Tab alignments
+ .tabs-left
.tabs-right
.tabs-below
+ N/A
+
+
+
+
+
+
+
+
Additional notes
+
+
We've made many underlying changes in v3 that are not immediately apparent. Base classes, key styles, and behaviors
+ have been adjusted for flexibility and our mobile first approach.
+
+ Text-based form controls are now 100% wide. Wrap inputs inside <div
+ class="col-*"></div>
to control input widths.
+
+ .badge
no longer has contextual (-success,-primary,etc..) classes.
+ .btn
must also use .btn-default
to get the "default" button.
+ .container
and .row
are now fluid (percentage-based).
+ Images are no longer responsive by default. Use .img-responsive
for fluid <img>
+ size.
+
+ The icons, now .glyphicon
, are now font based. They also require a base and icon class (e.g. .glyphicon
+ .glyphicon-asterisk
).
+
+ Typeahead has been dropped, in favor of using Twitter
+ Typeahead .
+
+ Modal markup has changed significantly. The .modal-header
, .modal-body
, and .modal-footer
+ sections now get wrapped in .modal-content
and .modal-dialog
for improved mobile
+ styling and behavior.
+
+ JavaScript events are namespaced. For example, to handle the modal "show" event, use
+ 'show.bs.modal'
. For tabs "shown" use 'shown.bs.tab'
, etc..
+
+
+
For more information on upgrades and code snippets from the community check out Bootply .
+
+
+
+
+
+
+
Bootstrap is built to work best in the latest desktop and mobile browsers, meaning older and less
+ advanced browsers might receive a less stylized, though fully functional, version of certain components.
+
+
Supported browsers
+
+
Specifically, we support the latest versions of the following:
+
+ Chrome (Mac, Windows, iOS, and Android)
+ Safari (Mac and iOS only, as Windows has more or less been discontinued)
+ Firefox (Mac, Windows)
+ Internet Explorer
+ Opera (Mac, Windows)
+
+
Unofficially, Bootstrap should look and behave well enough in Chromium for Linux and Internet Explorer 7, though
+ they are not officially supported.
+
+
Internet Explorer 8 and 9
+
+
Internet Explorer 8 and 9 are also supported, however, please be aware that many CSS3 properties—e.g., rounded
+ corners and shadows—are not supported by IE8. The placeholder
attribute is also not supported in
+ either of these versions.
+
+
In addition, Internet Explorer 8 requires the use of respond.js
+ to enable media query support.
+
+
IE Compatibility modes
+
+
Bootstrap is not supported in the old Internet Explorer compatibility modes. To be sure you're using the latest
+ rendering mode for IE, consider including the appropriate <meta>
tag in your pages:
+ {% highlight html %}
+
+ {% endhighlight %}
+
See this
+ StackOverflow question for more information.
+
+
Windows Phone 8 and Internet Explorer 10
+
+
Internet Explorer 10 doesn't differentiate device width from viewport width, and thus doesn't properly apply the
+ media queries in Bootstrap's CSS. To address this, you can optionally include the following CSS and JavaScript
+ to work around this problem until Microsoft issues a fix.
+ {% highlight css %}
+ @-webkit-viewport { width: device-width; }
+ @-moz-viewport { width: device-width; }
+ @-ms-viewport { width: device-width; }
+ @-o-viewport { width: device-width; }
+ @viewport { width: device-width; }
+ {% endhighlight %}
+
+ {% highlight js %}
+ if (navigator.userAgent.match(/IEMobile\/10\.0/)) {
+ var msViewportStyle = document.createElement("style")
+ msViewportStyle.appendChild(
+ document.createTextNode(
+ "@-ms-viewport{width:auto!important}"
+ )
+ )
+ document.getElementsByTagName("head")[0].appendChild(msViewportStyle)
+ }
+ {% endhighlight %}
+
For more information and usage guidelines, read Windows Phone 8 and Device-Width .
+
+
+
Safari percent rounding
+
+
In the latest Safari for Mac, its rendering engine has a little trouble with the long decimal places of our
+ .col-*-1
grid classes, meaning if you have 12 individual columns you'll notice they come up short
+ compared to other rows of columns. There's not much we can do here (see #9282 ) but you do have some options:
+
+ Add .pull-right
to your last grid column to get the hard-right alignment
+ Tweak your percentages manually to get the perfect rounding for Safari (more difficult than the first
+ option)
+
+
+
We'll keep an eye on this though and update our code if we have an easy solution.
+
+
Modals and mobile devices
+
Overflow and scrolling
+
+
Support for overflow: hidden
on the <body>
element is quite limited in iOS and
+ Android. To that end, when you scroll past the top or bottom of a modal in either of those devices' browsers,
+ the <body>
content will begin to scroll.
+
Virtual keyboards
+
+
Also, note that if you're using inputs in your modal – iOS has a rendering bug which doesn't update the position
+ of fixed elements when the virtual keyboard is triggered. There are a few work arounds for this, including
+ transforming your elements to position: absolute
or invoking a timer on focus to try to correct the
+ positioning manually. This is not handled by Bootstrap, so it is up to you to decide which solution is best for
+ your application.
+
+
Browser zooming
+
+
Page zooming inevitably presents rendering artifacts in some components, both in Bootstrap and the rest of the
+ web. Depending on the issue, we may be able to fix it (search first and then open an issue if need be). However,
+ we tend to ignore these as they often have no direct solution other than hacky workarounds.
+
+
+
+
+
+
+
While we don't officially support any third party plugins or add-ons, we do offer some useful advice
+ to help avoid potential issues in your projects.
+
+
Google Maps
+
+
If you're using Google Maps on a Bootstrapped project, you might run into some display problems due to our use of
+ * { box-sizing: border-box; }
. Previously, you may have also ran into issues with the use of max-width
+ on images. The following snippet should avoid all those problems.
+ {% highlight css %}
+ /* Fix Google Maps canvas
+ *
+ * Wrap your Google Maps embed in a `.google-map-canvas` to reset Bootstrap's
+ * global `box-sizing` changes. You may optionally need to reset the `max-width`
+ * on images in case you've applied that anywhere else. (That shouldn't be as
+ * necessary with Bootstrap 3 though as that behavior is relegated to the
+ * `.img-responsive` class.)
+ */
+
+ .google-map-canvas,
+ .google-map-canvas * { .box-sizing(content-box); }
+
+ /* Optional responsive image override */
+ img { max-width: none; }
+ {% endhighlight %}
+
+
+
+
+
+
+
Bootstrap follows common web standards, and with minimal extra effort, can be used to create sites
+ that are accessibile to those using AT .
+
+
Skip navigation
+
+
If your navigation contains many links and comes before the main content in the DOM, add a Skip to
+ content
link immediately after your opening <body>
tag. (read why)
+ {% highlight html %}
+
+
Skip to content
+
+
+ The main page content.
+
+
+ {% endhighlight %}
+
+
Nested headers
+
+
Another "gotcha" has to do with how you nest your <header>
elements. Section 508 states that your
+ largest header must be an h1
, and the next header must be an <h2>
, etc. This is
+ hard to achieve in practice, but if the largest header on your site is smaller than Bootstrap's default 38px,
+ you should consider modifying your stylesheets before using a smaller header element.
+
+
Additional resources
+
+
+
+
+
+
+
+
Bootstrap is released under the Apache 2 license and is copyright {{ site.time | date: "%Y" }}
+ Twitter. Boiled down to smaller chunks, it can be described with the following conditions.
+
+
+
+
It allows you to:
+
+ Freely download and use Bootstrap, in whole or in part, for personal, company internal or commercial
+ purposes
+
+ Use Bootstrap in packages or distributions that you create
+
+
+
+
It forbids you to:
+
+ Redistribute any piece of Bootstrap without proper attribution
+ Use any marks owned by Twitter in any way that might state or imply that Twitter endorses your
+ distribution
+
+ Use any marks owned by Twitter in any way that might state or imply that you created the Twitter
+ software in question
+
+
+
+
+
+
+
It requires you to:
+
+ Include a copy of the license in any redistribution you may make that includes Bootstrap
+ Provide clear attribution to Twitter for any distributions that include Bootstrap
+
+
+
+
It does not require you to:
+
+ Include the source of Bootstrap itself, or of any modifications you may have made to it, in any
+ redistribution you may assemble that includes it
+
+ Submit changes that you make to Bootstrap back to the Bootstrap project (though such feedback is
+ encouraged)
+
+
+
+
+
The full Bootstrap license is located in the project
+ repository for more information.
+
+
+
+
+
+
Customizing Bootstrap is best accomplished when you treat it as another dependency in your
+ development stack. Doing so ensures future upgrades are as easy as possible while also familiarizing yourself to
+ the intricacies of the framework.
+
+
Once you've downloaded and included Bootstrap's CSS into your templates, you can move on to customizing the
+ included components. To do so, create a new stylesheet (LESS, if you like, or just plain CSS) to house your
+ customizations.
+
+
+
Compiled or minified?
+
+
Unless you plan on reading a good chunk of the compiled CSS, go with the minified. It's the same code, just
+ compacted. Less bandwidth is good, especially in production environments.
+
+
+
From there, include whatever Bootstrap components and HTML content you need to get your template setup. It's best
+ to have a rough idea in mind of modifications to make and content to include, so be sure to spend a brief amount
+ of time on that before moving on.
+
+
Customizing components
+
+
There are varying degrees to customizing components, but most fall into two camps: light customizations and
+ complete visual overhauls. Luckily, there are plenty of examples of both.
+
+
We define light customizations as mostly surface layer changes, things like a color and font changes to existing
+ Bootstrap components. A great example of this is the the Twitter
+ Translation Center (coded by @mdo). Let's look at how to implement the custom button we wrote for this
+ site, .btn-ttc
.
+
+
Instead of using the provided Bootstrap buttons, which only require just one class to start, .btn
,
+ we'll add our own modifier class, .btn-ttc
. This will give us a slightly custom look with minimal
+ effort.
+ {% highlight html %}
+
Save changes
+ {% endhighlight %}
+
+
In the custom stylesheet, add the following CSS:
+
+ {% highlight css %}
+ /* Custom button
+ -------------------------------------------------- */
+
+ /* Override base .btn styles */
+ /* Apply text and background changes to three key states: default, hover, and active (click). */
+ .btn-ttc,
+ .btn-ttc:hover,
+ .btn-ttc:active {
+ color: white;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ background-color: #007da7;
+ }
+
+ /* Apply the custom-colored gradients */
+ /* Note: you'll need to include all the appropriate gradients for various browsers and standards. */
+ .btn-ttc {
+ background-repeat: repeat-x;
+ background-image: linear-gradient(top, #009ED2 0%, #007DA7 100%);
+ ...
+ }
+
+ /* Set the hover state */
+ /* An easy hover state is just to move the gradient up a small amount. Add other embellishments as you see fit. */
+ .btn-ttc:hover {
+ background-position: 0 -15px;
+ }
+ {% endhighlight %}
+
+
Customizing Bootstrap components takes time, but should be straightforward. Look to the source code often
+ and duplicate the selectors you need for your modifications. Placing them after the Bootstrap source
+ makes for easy overriding without complication. To recap, here's the basic workflow:
+
+ For each element you want to customize, find its code in the compiled Bootstrap CSS. Copy and paste the
+ selector for a component as-is. For instance, to customize the navbar background, just snag
+ .navbar
.
+
+ Add all your custom CSS in a separate stylesheet using the selectors you just copied from the Bootstrap
+ source. No need for prefacing with additional classes or using !important
here.
+
+ Rinse and repeat until you're happy with your customizations.
+
+
Going beyond light customizations and into visual overhauls is just as straightforward as the above custom
+ button. For a site like Karma , which uses Bootstrap as a CSS reset with heavy
+ modifications, more extensive work is involved, but well worth it in the end.
+
+
+
Alternate customization methods
+
+
While not recommended for folks new to Bootstrap, you may use one of two alternate methods for customization.
+ The first is modifying the source .less files (making upgrades super difficult), and the second is mapping
+ source LESS code to your own
+ classes via mixins . For the time being, neither of those options are documented here.
+
+
+
Removing potential bloat
+
+
Not all sites and applications need to make use of everything Bootstrap has to offer, especially in production
+ environments where bandwidth literally becomes a financial issue. We encourage folks to remove whatever is
+ unused with our Customizer .
+
+
Using the Customizer, simply uncheck any component, feature, or asset you don't need. Hit download and swap out
+ the default Bootstrap files with these newly customized ones. You'll get vanilla Bootstrap, but without the
+ features *you* deem unnecessary. All custom builds include compiled and minified versions, so use whichever
+ works for you.
+
+
+
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/index.html b/vendor/twitter-bootstrap-3/index.html
new file mode 100644
index 000000000..e51b2c272
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/index.html
@@ -0,0 +1,20 @@
+---
+layout: home
+title: Bootstrap
+base_url: "./"
+---
+
+
+
+
Bootstrap
+
+
Sleek, intuitive, and powerful mobile first front-end framework for faster and easier web
+ development.
+
+
+ Download
+ Bootstrap
+
+
+
+
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/javascript.html b/vendor/twitter-bootstrap-3/javascript.html
new file mode 100644
index 000000000..92dbffc3f
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/javascript.html
@@ -0,0 +1,2445 @@
+---
+layout: default
+title: JavaScript
+slug: js
+lead: "Bring Bootstrap's components to life with over a dozen custom jQuery plugins. Easily include them all, or one by one."
+base_url: "../"
+---
+
+
+
+
+
+
+
Individual or compiled
+
+
Plugins can be included individually (using Bootstrap's individual *.js
files), or all at once
+ (using bootstrap.js
or the minified bootstrap.min.js
).
+
+
+
Do not attempt to include both.
+
+
Both bootstrap.js
and bootstrap.min.js
contain all plugins in a single file.
+
+
+
+
Plugin dependencies
+
+
Some plugins and CSS components depend on other plugins. If you include plugins individually, make sure to
+ check for these dependencies in the docs. Also note that all plugins depend on jQuery (this means jQuery
+ must be included before the plugin files).
+
+
+
Data attributes
+
+
You can use all Bootstrap plugins purely through the markup API without writing a single line of JavaScript. This
+ is Bootstrap's first-class API and should be your first consideration when using a plugin.
+
+
That said, in some situations it may be desirable to turn this functionality off. Therefore, we also provide the
+ ability to disable the data attribute API by unbinding all events on the document namespaced with
+ data-api
. This looks like this:
+ {% highlight js %}
+ $(document).off('.data-api')
+ {% endhighlight %}
+
+
Alternatively, to target a specific plugin, just include the plugin's name as a namespace along with the data-api
+ namespace like this:
+ {% highlight js %}
+ $(document).off('.alert.data-api')
+ {% endhighlight %}
+
+
Programmatic API
+
+
We also believe you should be able to use all Bootstrap plugins purely through the JavaScript API. All public
+ APIs are single, chainable methods, and return the collection acted upon.
+ {% highlight js %}
+ $(".btn.danger").button("toggle").addClass("fat")
+ {% endhighlight %}
+
+
All methods should accept an optional options object, a string which targets a particular method, or nothing
+ (which initiates a plugin with default behavior):
+ {% highlight js %}
+ $("#myModal").modal() // initialized with defaults
+ $("#myModal").modal({ keyboard: false }) // initialized with no keyboard
+ $("#myModal").modal('show') // initializes and invokes show immediately
+ {% endhighlight %}
+
+
Each plugin also exposes its raw constructor on a Constructor
property: $.fn.popover.Constructor
.
+ If you'd like to get a particular plugin instance, retrieve it directly from an element: $('[rel=popover]').data('popover')
.
+
+
+
No conflict
+
+
Sometimes it is necessary to use Bootstrap plugins with other UI frameworks. In these circumstances, namespace
+ collisions can occasionally occur. If this happens, you may call .noConflict
on the plugin you wish
+ to revert the value of.
+ {% highlight js %}
+ var bootstrapButton = $.fn.button.noConflict() // return $.fn.button to previously assigned value
+ $.fn.bootstrapBtn = bootstrapButton // give $().bootstrapBtn the Bootstrap functionality
+ {% endhighlight %}
+
+
Events
+
+
Bootstrap provides custom events for most plugin's unique actions. Generally, these come in an infinitive and
+ past participle form - where the infinitive (ex. show
) is triggered at the start of an event, and
+ its past participle form (ex. shown
) is trigger on the completion of an action.
+
+
As of 3.0.0, all Bootstrap events are namespaced.
+
+
All infinitive events provide preventDefault
functionality. This provides the ability to stop the
+ execution of an action before it starts.
+ {% highlight js %}
+ $('#myModal').on('show.bs.modal', function (e) {
+ if (!data) return e.preventDefault() // stops modal from being shown
+ })
+ {% endhighlight %}
+
+
+
Third-party libraries
+
+
Bootstrap does not officially support third-party JavaScript libraries like Prototype or
+ jQuery UI. Despite .noConflict
and namespaced events, there may be compatibility problems that
+ you need to fix on your own. Ask on the mailing
+ list if you need help.
+
+
+
+
+
+
+
+
About transitions
+
+
For simple transition effects, include transition.js
once alongside the other JS files. If you're
+ using the compiled (or minified) bootstrap.js
, there is no need to include this—it's already
+ there.
+
+
What's inside
+
+
Transition.js is a basic helper for transitionEnd
events as well as a CSS transition emulator. It's
+ used by the other plugins to check for CSS transition support and to catch hanging transitions.
+
+
+
+
+
+
+
+
Examples
+
+
Modals are streamlined, but flexible, dialog prompts with the minimum required functionality and smart defaults.
+
+
Static example
+
+
A rendered modal with header, body, and set of actions in the footer.
+
+
+
+{% highlight html %}
+
+
+{% endhighlight %}
+
+
Live demo
+
+
Toggle a modal via JavaScript by clicking the button below. It will slide down and fade in from the top of the
+ page.
+
+
+
+
+
+
+
+
Text in a modal
+
+
Duis mollis, est non commodo luctus, nisi erat porttitor ligula.
+
+
Popover in a modal
+
+
This button should
+ trigger a popover on click.
+
+
Tooltips in a modal
+
+
This link and that link
+ should have tooltips on hover.
+
+
+
+
Overflowing text to show scroll behavior
+
+
Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas
+ eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.
+
+
Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue
+ laoreet rutrum faucibus dolor auctor.
+
+
Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl
+ consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.
+
+
Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas
+ eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.
+
+
Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue
+ laoreet rutrum faucibus dolor auctor.
+
+
Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl
+ consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.
+
+
Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas
+ eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.
+
+
Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue
+ laoreet rutrum faucibus dolor auctor.
+
+
Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl
+ consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.
+
+
+
+
+
+
+
+
+
+
+
+
+ Launch demo modal
+
+
+
+{% highlight html %}
+
+
+ Launch demo modal
+
+
+
+
+
+{% endhighlight %}
+
+
+
+
Make modals accessible
+
+
+ Be sure to add role="dialog"
to your primary modal div. In the example above,
+ div#myModal
.
+ Also, the aria-labelledby
attribute references your modal title. In this example, h4#myModalLabel
.
+ Finally, aria-hidden="true"
tells assistive technologies to skip DOM elements.
+ Additionally, you may give a description of your modal dialog. Use the aria-describedby
attribute
+ in the modal's primary <div>
to point to this description (this is not shown in the above
+ example).
+
+
+
+
Usage
+
+
Via data attributes
+
+
Activate a modal without writing JavaScript. Set data-toggle="modal"
on a controller element, like a
+ button, along with a data-target="#foo"
or href="#foo"
to target a specific modal to
+ toggle.
+{% highlight html %}
+
Launch modal
+{% endhighlight %}
+
+
Via JavaScript
+
+
Call a modal with id myModal
with a single line of JavaScript:
+{% highlight js %}$('#myModal').modal(options){% endhighlight %}
+
+
Options
+
+
Options can be passed via data attributes or JavaScript. For data attributes, append the option name to
+ data-
, as in data-backdrop=""
.
+
+
+
+
+
+ Name
+ type
+ default
+ description
+
+
+
+
+ backdrop
+ boolean
+ true
+ Includes a modal-backdrop element. Alternatively, specify static
for a backdrop which
+ doesn't close the modal on click.
+
+
+
+ keyboard
+ boolean
+ true
+ Closes the modal when escape key is pressed
+
+
+ show
+ boolean
+ true
+ Shows the modal when initialized.
+
+
+ remote
+ path
+ false
+ If a remote URL is provided, content will be loaded via jQuery's load
method and
+ injected into the root of the modal element. If you're using the data-api, you may alternatively use the
+ href
attribute to specify the remote source. An example of this is shown below:
+ {% highlight html %}
+ Click me
+ {% endhighlight %}
+
+
+
+
+
+
+
+
Methods
+
+
.modal(options)
+
+
Activates your content as a modal. Accepts an optional options object
.
+{% highlight js %}
+$('#myModal').modal({
+keyboard: false
+})
+{% endhighlight %}
+
+
.modal('toggle')
+
+
Manually toggles a modal.
+{% highlight js %}$('#myModal').modal('toggle'){% endhighlight %}
+
+
.modal('show')
+
+
Manually opens a modal.
+{% highlight js %}$('#myModal').modal('show'){% endhighlight %}
+
+
.modal('hide')
+
+
Manually hides a modal.
+{% highlight js %}$('#myModal').modal('hide'){% endhighlight %}
+
+
Events
+
+
Bootstrap's modal class exposes a few events for hooking into modal functionality.
+
+
+
+
+
+ Event Type
+ Description
+
+
+
+
+ show.bs.modal
+ This event fires immediately when the show
instance method is called.
+
+
+ shown.bs.modal
+ This event is fired when the modal has been made visible to the user (will wait for CSS transitions to
+ complete).
+
+
+
+ hide.bs.modal
+ This event is fired immediately when the hide
instance method has been called.
+
+
+ hidden.bs.modal
+ This event is fired when the modal has finished being hidden from the user (will wait for CSS
+ transitions to complete).
+
+
+
+
+
+
+{% highlight js %}
+$('#myModal').on('hidden.bs.modal', function () {
+// do something…
+})
+{% endhighlight %}
+
+
+
+
+
+
+
+
Examples
+
+
Add dropdown menus to nearly anything with this simple plugin, including the navbar, tabs, and pills.
+
+
Within a navbar
+
+
+
+
+
Within tabs
+
+
+
+
+
+
Usage
+
+
Via data attributes
+
+
Add data-toggle="dropdown"
to a link or button to toggle a dropdown.
+ {% highlight html %}
+
+ {% endhighlight %}
+
To keep URLs intact, use the data-target
attribute instead of href="#"
.
+ {% highlight html %}
+
+ {% endhighlight %}
+
+
Via JavaScript
+
+
Call the dropdowns via JavaScript:
+ {% highlight js %}
+ $('.dropdown-toggle').dropdown()
+ {% endhighlight %}
+
+
Options
+
+
None
+
+
Methods
+
$().dropdown('toggle')
+
+
Toggles the dropdown menu of a given navbar or tabbed navigation.
+
+
Events
+
+
+
+
+
+ Event Type
+ Description
+
+
+
+
+ show.bs.dropdown
+ This event fires immediately when the show instance method is called.
+
+
+ shown.bs.dropdown
+ This event is fired when the dropdown has been made visible to the user (will wait for CSS
+ transitions, to complete).
+
+
+
+ hide.bs.dropdown
+ This event is fired immediately when the hide instance method has been called.
+
+
+ hidden.bs.dropdown
+ This event is fired when the dropdown has finished being hidden from the user (will wait for CSS
+ transitions, to complete).
+
+
+
+
+
+
+ {% highlight js %}
+ $('#myDropdown').on('show.bs.dropdown', function () {
+ // do something…
+ })
+ {% endhighlight %}
+
+
+
+
+
+
+
+
+
+
The ScrollSpy plugin is for automatically updating nav targets based on scroll position. Scroll the area below
+ the navbar and watch the active class change. The dropdown sub items will be highlighted as well.
+
+
+
+
+
+
+
+
@fat
+
+
Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui.
+ Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's
+ photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you
+ probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil
+ tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.
+
@mdo
+
+
Veniam marfa mustache skateboard, adipisicing fugiat velit pitchfork beard. Freegan beard aliqua
+ cupidatat mcsweeney's vero. Cupidatat four loko nisi, ea helvetica nulla carles. Tattooed cosby sweater
+ food truck, mcsweeney's quis non freegan vinyl. Lo-fi wes anderson +1 sartorial. Carles non aesthetic
+ exercitation quis gentrify. Brooklyn adipisicing craft beer vice keytar deserunt.
+
one
+
+
Occaecat commodo aliqua delectus. Fap craft beer deserunt skateboard ea. Lomo bicycle rights adipisicing
+ banh mi, velit ea sunt next level locavore single-origin coffee in magna veniam. High life id vinyl,
+ echo park consequat quis aliquip banh mi pitchfork. Vero VHS est adipisicing. Consectetur nisi DIY minim
+ messenger bag. Cred ex in, sustainable delectus consectetur fanny pack iphone.
+
two
+
+
In incididunt echo park, officia deserunt mcsweeney's proident master cleanse thundercats sapiente
+ veniam. Excepteur VHS elit, proident shoreditch +1 biodiesel laborum craft beer. Single-origin coffee
+ wayfarers irure four loko, cupidatat terry richardson master cleanse. Assumenda you probably haven't
+ heard of them art party fanny pack, tattooed nulla cardigan tempor ad. Proident wolf nesciunt sartorial
+ keffiyeh eu banh mi sustainable. Elit wolf voluptate, lo-fi ea portland before they sold out four loko.
+ Locavore enim nostrud mlkshk brooklyn nesciunt.
+
three
+
+
Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui.
+ Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's
+ photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you
+ probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil
+ tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.
+
+
Keytar twee blog, culpa messenger bag marfa whatever delectus food truck. Sapiente synth id assumenda.
+ Locavore sed helvetica cliche irony, thundercats you probably haven't heard of them consequat hoodie
+ gluten-free lo-fi fap aliquip. Labore elit placeat before they sold out, terry richardson proident
+ brunch nesciunt quis cosby sweater pariatur keffiyeh ut helvetica artisan. Cardigan craft beer seitan
+ readymade velit. VHS chambray laboris tempor veniam. Anim mollit minim commodo ullamco thundercats.
+
+
+
+
+
+
+
+
+
Via data attributes
+
+
To easily add scrollspy behavior to your topbar navigation, add data-spy="scroll"
to the element you
+ want to spy on (most typically this would be the <body>
. Then add the
+ data-target
attribute with the ID or class of the parent element of any Bootstrap .nav
+ component.
+ {% highlight html %}
+
+ ...
+
+ {% endhighlight %}
+
+
Via JavaScript
+
+
Call the scrollspy via JavaScript:
+ {% highlight js %}
+ $('body').scrollspy({ target: '#navbar-example' })
+ {% endhighlight %}
+
+
+
Resolvable ID targets required
+
+
Navbar links must have resolvable id targets. For example, a <a
+ href="#home">home</a>
must correspond to something in the DOM like <div id="home"></div>
.
+
+
+
+
Methods
+
.scrollspy('refresh')
+
+
When using scrollspy in conjunction with adding or removing of elements from the DOM, you'll need to call the
+ refresh method like so:
+ {% highlight js %}
+ $('[data-spy="scroll"]').each(function () {
+ var $spy = $(this).scrollspy('refresh')
+ })
+ {% endhighlight %}
+
+
+
Options
+
+
Options can be passed via data attributes or JavaScript. For data attributes, append the option name to data-
,
+ as in data-offset=""
.
+
+
+
+
+
+ Name
+ type
+ default
+ description
+
+
+
+
+ offset
+ number
+ 10
+ Pixels to offset from top when calculating position of scroll.
+
+
+
+
+
+
+
Events
+
+
+
+
+
+ Event Type
+ Description
+
+
+
+
+ activate.bs.scrollspy
+ This event fires whenever a new item becomes activated by the scrollspy.
+
+
+
+
+
+ {% highlight js %}
+ $('#myScrollspy').on('activate.bs.scrollspy', function () {
+ // do something…
+ })
+ {% endhighlight %}
+
+
+
+
+
+
+
+
Example tabs
+
+
Add quick, dynamic tab functionality to transition through panes of local content, even via dropdown menus.
+
+
+
+
+
+
Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua,
+ retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica.
+ Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry
+ richardson ex squid. Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american
+ apparel, butcher voluptate nisi qui.
+
+
+
Food truck fixie locavore, accusamus mcsweeney's marfa nulla single-origin coffee squid. Exercitation
+ +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table
+ craft beer twee. Qui photo booth letterpress, commodo enim craft beer mlkshk aliquip jean shorts
+ ullamco ad vinyl cillum PBR. Homo nostrud organic, assumenda labore aesthetic magna delectus mollit.
+ Keytar helvetica VHS salvia yr, vero magna velit sapiente labore stumptown. Vegan fanny pack odio
+ cillum wes anderson 8-bit, sustainable jean shorts beard ut DIY ethical culpa terry richardson
+ biodiesel. Art party scenester stumptown, tumblr butcher vero sint qui sapiente accusamus tattooed
+ echo park.
+
+
+
Etsy mixtape wayfarers, ethical wes anderson tofu before they sold out mcsweeney's organic lomo retro
+ fanny pack lo-fi farm-to-table readymade. Messenger bag gentrify pitchfork tattooed craft beer,
+ iphone skateboard locavore carles etsy salvia banksy hoodie helvetica. DIY synth PBR banksy irony.
+ Leggings gentrify squid 8-bit cred pitchfork. Williamsburg banh mi whatever gluten-free, carles
+ pitchfork biodiesel fixie etsy retro mlkshk vice blog. Scenester cred you probably haven't heard of
+ them, vinyl craft beer blog stumptown. Pitchfork sustainable tofu synth chambray yr.
+
+
+
Trust fund seitan letterpress, keytar raw denim keffiyeh etsy art party before they sold out master
+ cleanse gluten-free squid scenester freegan cosby sweater. Fanny pack portland seitan DIY, art party
+ locavore wolf cliche high life echo park Austin. Cred vinyl keffiyeh DIY salvia PBR, banh mi before
+ they sold out farm-to-table VHS viral locavore cosby sweater. Lomo wolf viral, mustache readymade
+ thundercats keffiyeh craft beer marfa ethical. Wolf salvia freegan, sartorial keffiyeh echo park
+ vegan.
+
+
+
+
+
+
+
Usage
+
+
Enable tabbable tabs via JavaScript (each tab needs to be activated individually):
+ {% highlight js %}
+ $('#myTab a').click(function (e) {
+ e.preventDefault()
+ $(this).tab('show')
+ })
+ {% endhighlight %}
+
+
You can activate individual tabs in several ways:
+ {% highlight js %}
+ $('#myTab a[href="#profile"]').tab('show') // Select tab by name
+ $('#myTab a:first').tab('show') // Select first tab
+ $('#myTab a:last').tab('show') // Select last tab
+ $('#myTab li:eq(2) a').tab('show') // Select third tab (0-indexed)
+ {% endhighlight %}
+
+
Markup
+
+
You can activate a tab or pill navigation without writing any JavaScript by simply specifying data-toggle="tab"
+ or data-toggle="pill"
on an element. Adding the nav
and nav-tabs
classes
+ to the tab ul
will apply the Bootstrap tab styling.
+ {% highlight html %}
+
+ {% endhighlight %}
+
+
To make tabs fade in, add .fade
to each .tab-pane
.
+
+
Methods
+
$().tab
+
+
+ Activates a tab element and content container. Tab should have either a data-target
or an href
+ targeting a container node in the DOM.
+
+ {% highlight html %}
+
+
+
+
...
+
...
+
...
+
...
+
+
+
+ {% endhighlight %}
+
+
Events
+
+
+
+
+
+ Event Type
+ Description
+
+
+
+
+ show.bs.tab
+ This event fires on tab show, but before the new tab has been shown. Use event.target
+ and event.relatedTarget
to target the active tab and the previous active tab (if
+ available) respectively.
+
+
+
+ shown.bs.tab
+ This event fires on tab show after a tab has been shown. Use event.target
and event.relatedTarget
+ to target the active tab and the previous active tab (if available) respectively.
+
+
+
+
+
+
+ {% highlight js %}
+ $('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
+ e.target // activated tab
+ e.relatedTarget // previous tab
+ })
+ {% endhighlight %}
+
+
+
+
+
+
+
+
+
+
Inspired by the excellent jQuery.tipsy plugin written by Jason Frame; Tooltips are an updated version, which
+ don't rely on images, use CSS3 for animations, and data-attributes for local title storage.
+
+
Hover over the links below to see tooltips:
+
+
+
+
+
Four directions
+
+
+
+
+
+
Tooltips in button groups and input groups require special setting
+
+
When using tooltips on elements within a .btn-group
or an .input-group
, you'll have
+ to specify the option container: 'body'
(documented below) to avoid unwanted side effects (such
+ as the element growing wider and/or losing its rounded corners when the tooltip is triggered).
+
+
+
Tooltips on disabled elements require wrapper elements
+
+
To add a tooltip to a disabled
or .disabled
element, put the element inside of a
+ <div>
or <span>
, and apply the tooltip to that element instead.
+
+
+
+
+
Trigger the tooltip via JavaScript:
+ {% highlight js %}
+ $('#example').tooltip(options)
+ {% endhighlight %}
+
+
Options
+
+
Options can be passed via data attributes or JavaScript. For data attributes, append the option name to data-
,
+ as in data-animation=""
.
+
+
+
+
+
+ Name
+ type
+ default
+ description
+
+
+
+
+ animation
+ boolean
+ true
+ apply a CSS fade transition to the tooltip
+
+
+ html
+ boolean
+ false
+ Insert HTML into the tooltip. If false, jQuery's text
method will be used to insert
+ content into the DOM. Use text if you're worried about XSS attacks.
+
+
+
+ placement
+ string | function
+ 'top'
+ how to position the tooltip - top | bottom | left | right | auto. When "auto" is specified, it
+ will dynamically reorient the tooltip. For example, if placement is "auto left", the tooltip will
+ display to the left when possible, otherwise it will display right.
+
+
+
+ selector
+ string
+ false
+ If a selector is provided, tooltip objects will be delegated to the specified targets.
+
+
+ title
+ string | function
+ ''
+ default title value if title
attribute isn't present
+
+
+ trigger
+ string
+ 'hover focus'
+ how tooltip is triggered - click | hover | focus | manual. You may pass multiple triggers; separate
+ them with a space.
+
+
+
+ delay
+ number | object
+ 0
+
+ delay showing and hiding the tooltip (ms) - does not apply to manual trigger type
+
+ If a number is supplied, delay is applied to both hide/show
+
+ Object structure is: delay: { show: 500, hide: 100 }
+
+
+
+ container
+ string | false
+ false
+
+ Appends the tooltip to a specific element. Example: container: 'body'
+
+
+
+
+
+
+
+
Data attributes for individual tooltips
+
+
Options for individual tooltips can alternatively be specified through the use of data attributes, as
+ explained above.
+
+
+
Markup
+ {% highlight html %}
+
Hover over me
+ {% endhighlight %}
+
+
Methods
+
+
$().tooltip(options)
+
+
Attaches a tooltip handler to an element collection.
+
+
.tooltip('show')
+
+
Reveals an element's tooltip.
+ {% highlight js %}$('#element').tooltip('show'){% endhighlight %}
+
+
.tooltip('hide')
+
+
Hides an element's tooltip.
+ {% highlight js %}$('#element').tooltip('hide'){% endhighlight %}
+
+
.tooltip('toggle')
+
+
Toggles an element's tooltip.
+ {% highlight js %}$('#element').tooltip('toggle'){% endhighlight %}
+
+
.tooltip('destroy')
+
+
Hides and destroys an element's tooltip.
+ {% highlight js %}$('#element').tooltip('destroy'){% endhighlight %}
+
+
Events
+
+
+
+
+
+ Event Type
+ Description
+
+
+
+
+ show.bs.tooltip
+ This event fires immediately when the show
instance method is called.
+
+
+ shown.bs.tooltip
+ This event is fired when the tooltip has been made visible to the user (will wait for CSS
+ transitions to complete).
+
+
+
+ hide.bs.tooltip
+ This event is fired immediately when the hide
instance method has been called.
+
+
+ hidden.bs.tooltip
+ This event is fired when the tooltip has finished being hidden from the user (will wait for CSS
+ transitions to complete).
+
+
+
+
+
+
+ {% highlight js %}
+ $('#myTooltip').on('hidden.bs.tooltip', function () {
+ // do something…
+ })
+ {% endhighlight %}
+
+
+
+
+
+
+
Examples
+
+
Add small overlays of content, like those on the iPad, to any element for housing secondary information.
+
+
+
Plugin dependency
+
+
Popovers require the tooltip plugin to be included in your version of Bootstrap.
+
+
+
Popovers in button groups and input groups require special setting
+
+
When using popovers on elements within a .btn-group
or an .input-group
, you'll have to
+ specify the option container: 'body'
(documented below) to avoid unwanted side effects (such as the
+ element growing wider and/or losing its rounded corners when the popover is triggered).
+
+
+
Popovers on disabled elements require wrapper elements
+
+
To add a popover to a disabled
or .disabled
element, put the element inside of a
+ <div>
or <span>
, and apply the popover to that element instead.
+
+
+
Static popover
+
+
Four options are available: top, right, bottom, and left aligned.
+
+
+
+
+
Popover top
+
+
+
Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam
+ venenatis vestibulum.
+
+
+
+
+
+
Popover right
+
+
+
Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam
+ venenatis vestibulum.
+
+
+
+
+
+
Popover bottom
+
+
+
Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam
+ venenatis vestibulum.
+
+
+
+
+
+
Popover left
+
+
+
Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam
+ venenatis vestibulum.
+
+
+
+
+
+
+
Live demo
+
+
+
+
Four directions
+
+
+
+
+
+
Usage
+
+
Enable popovers via JavaScript:
+{% highlight js %}$('#example').popover(options){% endhighlight %}
+
+
Options
+
+
Options can be passed via data attributes or JavaScript. For data attributes, append the option name to
+ data-
, as in data-animation=""
.
+
+
+
+
+
+ Name
+ type
+ default
+ description
+
+
+
+
+ animation
+ boolean
+ true
+ apply a CSS fade transition to the tooltip
+
+
+ html
+ boolean
+ false
+ Insert HTML into the popover. If false, jQuery's text
method will be used to insert content
+ into the DOM. Use text if you're worried about XSS attacks.
+
+
+
+ placement
+ string | function
+ 'right'
+ how to position the popover - top | bottom | left | right | auto. When "auto" is specified, it will
+ dynamically reorient the popover. For example, if placement is "auto left", the tooltip will display to
+ the left when possible, otherwise it will display right.
+
+
+
+ selector
+ string
+ false
+ if a selector is provided, tooltip objects will be delegated to the specified targets if a selector is
+ provided, tooltip objects will be delegated to the specified targets. in practice, this is used to
+ enable dynamic HTML content to have popovers added. See this and an informative example .
+
+
+
+ trigger
+ string
+ 'click'
+ how popover is triggered - click | hover | focus | manual
+
+
+ title
+ string | function
+ ''
+ default title value if title
attribute isn't present
+
+
+ content
+ string | function
+ ''
+ default content value if data-content
attribute isn't present
+
+
+ delay
+ number | object
+ 0
+
+ delay showing and hiding the popover (ms) - does not apply to manual trigger type
+
+ If a number is supplied, delay is applied to both hide/show
+
+ Object structure is: delay: { show: 500, hide: 100 }
+
+
+
+ container
+ string | false
+ false
+
+ Appends the popover to a specific element. Example: container: 'body'
. This option is
+ particularly useful in that it allows you to position the popover in the flow of the document near
+ the triggering element - which will prevent the popover from floating away from the triggering
+ element during a window resize.
+
+
+
+
+
+
+
+
Data attributes for individual popovers
+
+
Options for individual popovers can alternatively be specified through the use of data attributes, as explained
+ above.
+
+
+
Markup
+
+
For performance reasons, the Tooltip and Popover data-apis are opt in. If you would like to use them just specify a
+ selector option.
+
+
Methods
+
$().popover(options)
+
+
Initializes popovers for an element collection.
+
+
.popover('show')
+
+
Reveals an elements popover.
+{% highlight js %}$('#element').popover('show'){% endhighlight %}
+
+
.popover('hide')
+
+
Hides an elements popover.
+{% highlight js %}$('#element').popover('hide'){% endhighlight %}
+
+
.popover('toggle')
+
+
Toggles an elements popover.
+{% highlight js %}$('#element').popover('toggle'){% endhighlight %}
+
+
.popover('destroy')
+
+
Hides and destroys an element's popover.
+{% highlight js %}$('#element').popover('destroy'){% endhighlight %}
+
Events
+
+
+
+
+
+ Event Type
+ Description
+
+
+
+
+ show.bs.popover
+ This event fires immediately when the show
instance method is called.
+
+
+ shown.bs.popover
+ This event is fired when the popover has been made visible to the user (will wait for CSS transitions to
+ complete).
+
+
+
+ hide.bs.popover
+ This event is fired immediately when the hide
instance method has been called.
+
+
+ hidden.bs.popover
+ This event is fired when the popover has finished being hidden from the user (will wait for CSS
+ transitions to complete).
+
+
+
+
+
+
+{% highlight js %}
+$('#myPopover').on('hidden.bs.popover', function () {
+// do something…
+})
+{% endhighlight %}
+
+
+
+
+
+
+
+
Example alerts
+
+
Add dismiss functionality to all alert messages with this plugin.
+
+
+
+ ×
+ Holy guacamole! Best check yo self, you're not looking too good.
+
+
+
+
+
+
+
×
+
Oh snap! You got an error!
+
+
Change this and that and try again. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget
+ lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum.
+
+
+ Take this action
+ Or do this
+
+
+
+
+
+
+
Usage
+
+
Enable dismissal of an alert via JavaScript:
+ {% highlight js %}$(".alert").alert(){% endhighlight %}
+
+
Markup
+
+
Just add data-dismiss="alert"
to your close button to automatically give an alert close
+ functionality.
+ {% highlight html %}
× {% endhighlight %}
+
+
Methods
+
+
$().alert()
+
+
Wraps all alerts with close functionality. To have your alerts animate out when closed, make sure they have the
+ .fade
and .in
class already applied to them.
+
+
.alert('close')
+
+
Closes an alert.
+ {% highlight js %}$(".alert").alert('close'){% endhighlight %}
+
+
+
Events
+
+
Bootstrap's alert class exposes a few events for hooking into alert functionality.
+
+
+
+
+
+ Event Type
+ Description
+
+
+
+
+ close.bs.alert
+ This event fires immediately when the close
instance method is called.
+
+
+ closed.bs.alert
+ This event is fired when the alert has been closed (will wait for CSS transitions to complete).
+
+
+
+
+
+ {% highlight js %}
+ $('#my-alert').bind('closed.bs.alert', function () {
+ // do something…
+ })
+ {% endhighlight %}
+
+
+
+
+
+
+
+
+
+
Do more with buttons. Control button states or create groups of buttons for more components like toolbars.
+
+
Stateful
+
+
Add data-loading-text="Loading..."
to use a loading state on a button.
+
+
+
+ Loading state
+
+
+
+ {% highlight html %}
+
+ Loading state
+
+ {% endhighlight %}
+
+
Single toggle
+
+
Add data-toggle="button"
to activate toggling on a single button.
+
+
+ Single toggle
+
+
+ {% highlight html %}
+
Single toggle
+ {% endhighlight %}
+
+
Checkbox
+
+
Add data-toggle="buttons"
to a group of checkboxes for checkbox style toggling on btn-group.
+
+
+
+ {% highlight html %}
+
+
+ Option 1
+
+
+ Option 2
+
+
+ Option 3
+
+
+ {% endhighlight %}
+
+
Radio
+
+
Add data-toggle="buttons"
to a group of radio inputs for radio style toggling on btn-group.
+
+
+
+ {% highlight html %}
+
+
+ Option 1
+
+
+ Option 2
+
+
+ Option 3
+
+
+ {% endhighlight %}
+
+
+
+
+
Enable buttons via JavaScript:
+ {% highlight js %}
+ $('.nav-tabs').button()
+ {% endhighlight %}
+
+
Markup
+
+
Data attributes are integral to the button plugin. Check out the example code below for the various markup
+ types.
+
+
Options
+
+
None
+
+
Methods
+
+
$().button('toggle')
+
+
Toggles push state. Gives the button the appearance that it has been activated.
+
+
+
Auto toggling
+
+
You can enable auto toggling of a button by using the data-toggle
attribute.
+
+ {% highlight html %}
+
...
+ {% endhighlight %}
+
+
$().button('loading')
+
+
Sets button state to loading - disables button and swaps text to loading text. Loading text should be defined on
+ the button element using the data attribute data-loading-text
.
+
+ {% highlight html %}
+
...
+ {% endhighlight %}
+
+
+
+
$().button('reset')
+
+
Resets button state - swaps text to original text.
+
+
$().button(string)
+
+
Resets button state - swaps text to any data defined text state.
+ {% highlight html %}
+
...
+
+ {% endhighlight %}
+
+
+
+
+
+
+
+
About
+
+
Get base styles and flexible support for collapsible components like accordions and navigation.
+
+
+
Plugin dependency
+
+
Collapse requires the transitions plugin to be included in your version of Bootstrap.
+
+
+
+
Example accordion
+
+
Using the collapse plugin, we built a simple accordion by extending the panel component.
+
+
+
+
+
+
+
+ Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3
+ wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum
+ eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla
+ assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt
+ sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer
+ farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus
+ labore sustainable VHS.
+
+
+
+
+
+
+
+ Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3
+ wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum
+ eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla
+ assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt
+ sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer
+ farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus
+ labore sustainable VHS.
+
+
+
+
+
+
+
+ Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3
+ wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum
+ eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla
+ assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt
+ sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer
+ farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus
+ labore sustainable VHS.
+
+
+
+
+
+
+{% highlight html %}
+
+
+
+
+
+ Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf
+ moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod.
+ Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda
+ shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea
+ proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim
+ aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
+
+
+
+
+
+
+
+ Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf
+ moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod.
+ Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda
+ shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea
+ proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim
+ aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
+
+
+
+
+
+
+
+ Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf
+ moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod.
+ Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda
+ shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea
+ proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim
+ aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
+
+
+
+
+{% endhighlight %}
+
+
You can also use the plugin without the accordion markup. Make a button toggle the expanding and collapsing of
+ another element.
+{% highlight html %}
+
+ simple collapsible
+
+
+
...
+{% endhighlight %}
+
+
+
Usage
+
+
Via data attributes
+
+
Just add data-toggle="collapse"
and a data-target
to element to automatically assign
+ control of a collapsible element. The data-target
attribute accepts a CSS selector to apply the
+ collapse to. Be sure to add the class collapse
to the collapsible element. If you'd like it to default
+ open, add the additional class in
.
+
+
To add accordion-like group management to a collapsible control, add the data attribute
+ data-parent="#selector"
. Refer to the demo to see this in action.
+
+
Via JavaScript
+
+
Enable manually with:
+{% highlight js %}
+$(".collapse").collapse()
+{% endhighlight %}
+
+
Options
+
+
Options can be passed via data attributes or JavaScript. For data attributes, append the option name to
+ data-
, as in data-parent=""
.
+
+
+
+
+
+ Name
+ type
+ default
+ description
+
+
+
+
+ parent
+ selector
+ false
+ If selector then all collapsible elements under the specified parent will be closed when this
+ collapsible item is shown. (similar to traditional accordion behavior - this dependent on the accordion-group
+ class)
+
+
+
+ toggle
+ boolean
+ true
+ Toggles the collapsible element on invocation
+
+
+
+
+
+
+
Methods
+
+
.collapse(options)
+
+
Activates your content as a collapsible element. Accepts an optional options object
.
+ {% highlight js %}
+ $('#myCollapsible').collapse({
+ toggle: false
+ })
+ {% endhighlight %}
+
+
.collapse('toggle')
+
+
Toggles a collapsible element to shown or hidden.
+
+
.collapse('show')
+
+
Shows a collapsible element.
+
+
.collapse('hide')
+
+
Hides a collapsible element.
+
+
Events
+
+
Bootstrap's collapse class exposes a few events for hooking into collapse functionality.
+
+
+
+
+
+ Event Type
+ Description
+
+
+
+
+ show.bs.collapse
+ This event fires immediately when the show
instance method is called.
+
+
+ shown.bs.collapse
+ This event is fired when a collapse element has been made visible to the user (will wait for CSS
+ transitions to complete).
+
+
+
+ hide.bs.collapse
+
+ This event is fired immediately when the hide
method has been called.
+
+
+
+ hidden.bs.collapse
+ This event is fired when a collapse element has been hidden from the user (will wait for CSS transitions
+ to complete).
+
+
+
+
+
+
+{% highlight js %}
+$('#myCollapsible').on('hidden.bs.collapse', function () {
+// do something…
+})
+{% endhighlight %}
+
+
+
+
+
+
+
+
Examples
+
+
The slideshow below shows a generic plugin and component for cycling through elements like a carousel.
+
+
+
+{% highlight html %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ...
+
+
+ ...
+
+
+
+
+
+
+
+
+
+
+{% endhighlight %}
+
+
Glyphicon Alternative
+
+
With Glyphicons available, you may choose to style the
+ left and right toggle buttons with .glyphicon .glyphicon-chevron-left
and .glyphicon
+ .glyphicon-chevron-right
.
+
+
+
Optional captions
+
+
Add captions to your slides easily with the .carousel-caption
element within any .item
.
+ Place just about any optional HTML within there and it will be automatically aligned and formatted.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
First slide label
+
+
Nulla vitae elit libero, a pharetra augue mollis interdum.
+
+
+
+
+
+
+
Second slide label
+
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+
+
+
+
+
+
+
Third slide label
+
+
Praesent commodo cursus magna, vel scelerisque nisl consectetur.
+
+
+
+
+
+
+
+
+
+
+
+
+{% highlight html %}
+
+
+
+
+
+{% endhighlight %}
+
+
+
Accessibility issue
+
+
The carousel component is generally not compliant with accessibility standards. If you need to be compliant,
+ please consider other options for presenting your content.
+
+
+
Usage
+
+
Via data attributes
+
+
Use data attributes to easily control the position of the carousel. data-slide
accepts the keywords
+ prev
or next
, which alters the slide position relative to its current position.
+ Alternatively, use data-slide-to
to pass a raw slide index to the carousel
+ data-slide-to="2"
, which shifts the slide position to a particular index beginning with 0
.
+
+
+
Via JavaScript
+
+
Call carousel manually with:
+{% highlight js %}
+$('.carousel').carousel()
+{% endhighlight %}
+
+
Options
+
+
Options can be passed via data attributes or JavaScript. For data attributes, append the option name to
+ data-
, as in data-interval=""
.
+
+
+
+
+
+ Name
+ type
+ default
+ description
+
+
+
+
+ interval
+ number
+ 5000
+ The amount of time to delay between automatically cycling an item. If false, carousel will not
+ automatically cycle.
+
+
+
+ pause
+ string
+ "hover"
+ Pauses the cycling of the carousel on mouseenter and resumes the cycling of the carousel on
+ mouseleave.
+
+
+
+ wrap
+ boolean
+ true
+ Whether the carousel should cycle continuously or have hard stops.
+
+
+
+
+
+
+
Methods
+
+
.carousel(options)
+
+
Initializes the carousel with an optional options object
and starts cycling through items.
+{% highlight js %}
+$('.carousel').carousel({
+interval: 2000
+})
+{% endhighlight %}
+
+
.carousel('cycle')
+
+
Cycles through the carousel items from left to right.
+
+
.carousel('pause')
+
+
Stops the carousel from cycling through items.
+
+
+
.carousel(number)
+
+
Cycles the carousel to a particular frame (0 based, similar to an array).
+
+
.carousel('prev')
+
+
Cycles to the previous item.
+
+
.carousel('next')
+
+
Cycles to the next item.
+
+
Events
+
+
Bootstrap's carousel class exposes two events for hooking into carousel functionality.
+
+
+
+
+
+ Event Type
+ Description
+
+
+
+
+ slide.bs.carousel
+ This event fires immediately when the slide
instance method is invoked.
+
+
+ slid.bs.carousel
+ This event is fired when the carousel has completed its slide transition.
+
+
+
+
+
+{% highlight js %}
+$('#myCarousel').on('slide.bs.carousel', function () {
+// do something…
+})
+{% endhighlight %}
+
+
+
+
+
+
+
+
Example
+
+
The subnavigation on the left is a live demo of the affix plugin.
+
+
+
+
Usage
+
+
Via data attributes
+
+
To easily add affix behavior to any element, just add data-spy="affix"
to the element you want to
+ spy on. Then use offsets to define when to toggle the pinning of an element on and off.
+
+ {% highlight html %}
+
...
+ {% endhighlight %}
+
+
+
Requires independent styling ;)
+
+
+ Affix toggles between three states/classes: affix
, affix-top
, and affix-bottom
.
+ You must provide the styles for these classes yourself (independent of this plugin).
+ The affix-top
class should be in the regular flow of the document. The affix
class
+ should be fixed to the page. And affix-bottom
should be positioned absolute. Note, affix-bottom
+ is special in that the plugin will place the element with JS relative to the offset: { bottom: number
+ }
option you've provided.
+
+
+
+
Via JavaScript
+
+
Call the affix plugin via JavaScript:
+ {% highlight js %}
+ $('#myAffix').affix({
+ offset: {
+ top: 100
+ , bottom: function () {
+ return (this.bottom = $('.bs-footer').outerHeight(true))
+ }
+ }
+ })
+ {% endhighlight %}
+
+
+
Options
+
+
Options can be passed via data attributes or JavaScript. For data attributes, append the option name to data-
,
+ as in data-offset-top="200"
.
+
+
+
+
+
+ Name
+ type
+ default
+ description
+
+
+
+
+ offset
+ number | function | object
+ 10
+ Pixels to offset from screen when calculating position of scroll. If a single number is provided,
+ the offset will be applied in both top and bottom directions. To provide a unique, bottom and top
+ offset just provide an object offset: { top: 10 }
or offset: { top: 10, bottom: 5
+ }
. Use a function when you need to dynamically calculate an offset.
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/js/.jshintrc b/vendor/twitter-bootstrap-3/js/.jshintrc
new file mode 100644
index 000000000..e5280bd1f
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/js/.jshintrc
@@ -0,0 +1,14 @@
+{
+ "validthis": true,
+ "laxcomma": true,
+ "laxbreak": true,
+ "browser": true,
+ "eqeqeq": false,
+ "eqnull": true,
+ "debug": true,
+ "devel": true,
+ "curly": false,
+ "boss": true,
+ "expr": true,
+ "asi": true
+}
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/js/affix.js b/vendor/twitter-bootstrap-3/js/affix.js
new file mode 100644
index 000000000..bdda14766
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/js/affix.js
@@ -0,0 +1,137 @@
+/* ========================================================================
+ * Bootstrap: affix.js v3.0.0
+ * http://twbs.github.com/bootstrap/javascript.html#affix
+ * ========================================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ======================================================================== */
+
+
++function ($)
+{
+ "use strict";
+
+ // AFFIX CLASS DEFINITION
+ // ======================
+
+ var Affix = function (element, options)
+ {
+ this.options = $.extend ({}, Affix.DEFAULTS, options)
+ this.$window = $ (window)
+ .on ('scroll.bs.affix.data-api', $.proxy (this.checkPosition, this))
+ .on ('click.bs.affix.data-api', $.proxy (this.checkPositionWithEventLoop, this))
+
+ this.$element = $ (element)
+ this.affixed =
+ this.unpin = null
+
+ this.checkPosition ()
+ }
+
+ Affix.RESET = 'affix affix-top affix-bottom'
+
+ Affix.DEFAULTS = {
+ offset: 0
+ }
+
+ Affix.prototype.checkPositionWithEventLoop = function ()
+ {
+ setTimeout ($.proxy (this.checkPosition, this), 1)
+ }
+
+ Affix.prototype.checkPosition = function ()
+ {
+ if (!this.$element.is (':visible')) return
+
+ var scrollHeight = $ (document).height ()
+ var scrollTop = this.$window.scrollTop ()
+ var position = this.$element.offset ()
+ var offset = this.options.offset
+ var offsetTop = offset.top
+ var offsetBottom = offset.bottom
+
+ if (typeof offset != 'object') offsetBottom = offsetTop = offset
+ if (typeof offsetTop == 'function') offsetTop = offset.top ()
+ if (typeof offsetBottom == 'function') offsetBottom = offset.bottom ()
+
+ var affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? false :
+ offsetBottom != null && (position.top + this.$element.height () >= scrollHeight - offsetBottom) ? 'bottom' :
+ offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false
+
+ if (this.affixed === affix) return
+ if (this.unpin) this.$element.css ('top', '')
+
+ this.affixed = affix
+ this.unpin = affix == 'bottom' ? position.top - scrollTop : null
+
+ this.$element.removeClass (Affix.RESET).addClass ('affix' + (affix ? '-' + affix : ''))
+
+ if (affix == 'bottom')
+ {
+ this.$element.offset ({ top: document.body.offsetHeight - offsetBottom - this.$element.height () })
+ }
+ }
+
+
+ // AFFIX PLUGIN DEFINITION
+ // =======================
+
+ var old = $.fn.affix
+
+ $.fn.affix = function (option)
+ {
+ return this.each (function ()
+ {
+ var $this = $ (this)
+ var data = $this.data ('bs.affix')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data ('bs.affix', (data = new Affix (this, options)))
+ if (typeof option == 'string') data[option] ()
+ })
+ }
+
+ $.fn.affix.Constructor = Affix
+
+
+ // AFFIX NO CONFLICT
+ // =================
+
+ $.fn.affix.noConflict = function ()
+ {
+ $.fn.affix = old
+ return this
+ }
+
+
+ // AFFIX DATA-API
+ // ==============
+
+ $ (window).on ('load', function ()
+ {
+ $ ('[data-spy="affix"]').each (function ()
+ {
+ var $spy = $ (this)
+ var data = $spy.data ()
+
+ data.offset = data.offset || {}
+
+ if (data.offsetBottom) data.offset.bottom = data.offsetBottom
+ if (data.offsetTop) data.offset.top = data.offsetTop
+
+ $spy.affix (data)
+ })
+ })
+
+} (window.jQuery);
diff --git a/vendor/twitter-bootstrap-3/js/alert.js b/vendor/twitter-bootstrap-3/js/alert.js
new file mode 100644
index 000000000..1c387f68c
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/js/alert.js
@@ -0,0 +1,108 @@
+/* ========================================================================
+ * Bootstrap: alert.js v3.0.0
+ * http://twbs.github.com/bootstrap/javascript.html#alerts
+ * ========================================================================
+ * Copyright 2013 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ======================================================================== */
+
+
++function ($)
+{
+ "use strict";
+
+ // ALERT CLASS DEFINITION
+ // ======================
+
+ var dismiss = '[data-dismiss="alert"]'
+ var Alert = function (el)
+ {
+ $ (el).on ('click', dismiss, this.close)
+ }
+
+ Alert.prototype.close = function (e)
+ {
+ var $this = $ (this)
+ var selector = $this.attr ('data-target')
+
+ if (!selector)
+ {
+ selector = $this.attr ('href')
+ selector = selector && selector.replace (/.*(?=#[^\s]*$)/, '') // strip for ie7
+ }
+
+ var $parent = $ (selector)
+
+ if (e) e.preventDefault ()
+
+ if (!$parent.length)
+ {
+ $parent = $this.hasClass ('alert') ? $this : $this.parent ()
+ }
+
+ $parent.trigger (e = $.Event ('close.bs.alert'))
+
+ if (e.isDefaultPrevented ()) return
+
+ $parent.removeClass ('in')
+
+ function removeElement ()
+ {
+ $parent.trigger ('closed.bs.alert').remove ()
+ }
+
+ $.support.transition && $parent.hasClass ('fade') ?
+ $parent
+ .one ($.support.transition.end, removeElement)
+ .emulateTransitionEnd (150) :
+ removeElement ()
+ }
+
+
+ // ALERT PLUGIN DEFINITION
+ // =======================
+
+ var old = $.fn.alert
+
+ $.fn.alert = function (option)
+ {
+ return this.each (function ()
+ {
+ var $this = $ (this)
+ var data = $this.data ('bs.alert')
+
+ if (!data) $this.data ('bs.alert', (data = new Alert (this)))
+ if (typeof option == 'string') data[option].call ($this)
+ })
+ }
+
+ $.fn.alert.Constructor = Alert
+
+
+ // ALERT NO CONFLICT
+ // =================
+
+ $.fn.alert.noConflict = function ()
+ {
+ $.fn.alert = old
+ return this
+ }
+
+
+ // ALERT DATA-API
+ // ==============
+
+ $ (document).on ('click.bs.alert.data-api', dismiss, Alert.prototype.close)
+
+} (window.jQuery);
diff --git a/vendor/twitter-bootstrap-3/js/button.js b/vendor/twitter-bootstrap-3/js/button.js
new file mode 100644
index 000000000..ac182b29d
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/js/button.js
@@ -0,0 +1,120 @@
+/* ========================================================================
+ * Bootstrap: button.js v3.0.0
+ * http://twbs.github.com/bootstrap/javascript.html#buttons
+ * ========================================================================
+ * Copyright 2013 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ======================================================================== */
+
+
++function ($)
+{
+ "use strict";
+
+ // BUTTON PUBLIC CLASS DEFINITION
+ // ==============================
+
+ var Button = function (element, options)
+ {
+ this.$element = $ (element)
+ this.options = $.extend ({}, Button.DEFAULTS, options)
+ }
+
+ Button.DEFAULTS = {
+ loadingText: 'loading...'
+ }
+
+ Button.prototype.setState = function (state)
+ {
+ var d = 'disabled'
+ var $el = this.$element
+ var val = $el.is ('input') ? 'val' : 'html'
+ var data = $el.data ()
+
+ state = state + 'Text'
+
+ if (!data.resetText) $el.data ('resetText', $el[val] ())
+
+ $el[val] (data[state] || this.options[state])
+
+ // push to event loop to allow forms to submit
+ setTimeout (function ()
+ {
+ state == 'loadingText' ?
+ $el.addClass (d).attr (d, d) :
+ $el.removeClass (d).removeAttr (d);
+ }, 0)
+ }
+
+ Button.prototype.toggle = function ()
+ {
+ var $parent = this.$element.closest ('[data-toggle="buttons"]')
+
+ if ($parent.length)
+ {
+ var $input = this.$element.find ('input')
+ .prop ('checked', !this.$element.hasClass ('active'))
+ .trigger ('change')
+ if ($input.prop ('type') === 'radio') $parent.find ('.active').removeClass ('active')
+ }
+
+ this.$element.toggleClass ('active')
+ }
+
+
+ // BUTTON PLUGIN DEFINITION
+ // ========================
+
+ var old = $.fn.button
+
+ $.fn.button = function (option)
+ {
+ return this.each (function ()
+ {
+ var $this = $ (this)
+ var data = $this.data ('bs.button')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data ('bs.button', (data = new Button (this, options)))
+
+ if (option == 'toggle') data.toggle ()
+ else if (option) data.setState (option)
+ })
+ }
+
+ $.fn.button.Constructor = Button
+
+
+ // BUTTON NO CONFLICT
+ // ==================
+
+ $.fn.button.noConflict = function ()
+ {
+ $.fn.button = old
+ return this
+ }
+
+
+ // BUTTON DATA-API
+ // ===============
+
+ $ (document).on ('click.bs.button.data-api', '[data-toggle^=button]', function (e)
+ {
+ var $btn = $ (e.target)
+ if (!$btn.hasClass ('btn')) $btn = $btn.closest ('.btn')
+ $btn.button ('toggle')
+ e.preventDefault ()
+ })
+
+} (window.jQuery);
diff --git a/vendor/twitter-bootstrap-3/js/carousel.js b/vendor/twitter-bootstrap-3/js/carousel.js
new file mode 100644
index 000000000..3fa497890
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/js/carousel.js
@@ -0,0 +1,245 @@
+/* ========================================================================
+ * Bootstrap: carousel.js v3.0.0
+ * http://twbs.github.com/bootstrap/javascript.html#carousel
+ * ========================================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ======================================================================== */
+
+
++function ($)
+{
+ "use strict";
+
+ // CAROUSEL CLASS DEFINITION
+ // =========================
+
+ var Carousel = function (element, options)
+ {
+ this.$element = $ (element)
+ this.$indicators = this.$element.find ('.carousel-indicators')
+ this.options = options
+ this.paused =
+ this.sliding =
+ this.interval =
+ this.$active =
+ this.$items = null
+
+ this.options.pause == 'hover' && this.$element
+ .on ('mouseenter', $.proxy (this.pause, this))
+ .on ('mouseleave', $.proxy (this.cycle, this))
+ }
+
+ Carousel.DEFAULTS = {
+ interval: 5000, pause: 'hover', wrap: true
+ }
+
+ Carousel.prototype.cycle = function (e)
+ {
+ e || (this.paused = false)
+
+ this.interval && clearInterval (this.interval)
+
+ this.options.interval
+ && !this.paused
+ && (this.interval = setInterval ($.proxy (this.next, this), this.options.interval))
+
+ return this
+ }
+
+ Carousel.prototype.getActiveIndex = function ()
+ {
+ this.$active = this.$element.find ('.item.active')
+ this.$items = this.$active.parent ().children ()
+
+ return this.$items.index (this.$active)
+ }
+
+ Carousel.prototype.to = function (pos)
+ {
+ var that = this
+ var activeIndex = this.getActiveIndex ()
+
+ if (pos > (this.$items.length - 1) || pos < 0) return
+
+ if (this.sliding) return this.$element.one ('slid', function ()
+ {
+ that.to (pos)
+ })
+ if (activeIndex == pos) return this.pause ().cycle ()
+
+ return this.slide (pos > activeIndex ? 'next' : 'prev', $ (this.$items[pos]))
+ }
+
+ Carousel.prototype.pause = function (e)
+ {
+ e || (this.paused = true)
+
+ if (this.$element.find ('.next, .prev').length && $.support.transition.end)
+ {
+ this.$element.trigger ($.support.transition.end)
+ this.cycle (true)
+ }
+
+ this.interval = clearInterval (this.interval)
+
+ return this
+ }
+
+ Carousel.prototype.next = function ()
+ {
+ if (this.sliding) return
+ return this.slide ('next')
+ }
+
+ Carousel.prototype.prev = function ()
+ {
+ if (this.sliding) return
+ return this.slide ('prev')
+ }
+
+ Carousel.prototype.slide = function (type, next)
+ {
+ var $active = this.$element.find ('.item.active')
+ var $next = next || $active[type] ()
+ var isCycling = this.interval
+ var direction = type == 'next' ? 'left' : 'right'
+ var fallback = type == 'next' ? 'first' : 'last'
+ var that = this
+
+ if (!$next.length)
+ {
+ if (!this.options.wrap) return
+ $next = this.$element.find ('.item')[fallback] ()
+ }
+
+ this.sliding = true
+
+ isCycling && this.pause ()
+
+ var e = $.Event ('slide.bs.carousel', { relatedTarget: $next[0], direction: direction })
+
+ if ($next.hasClass ('active')) return
+
+ if (this.$indicators.length)
+ {
+ this.$indicators.find ('.active').removeClass ('active')
+ this.$element.one ('slid', function ()
+ {
+ var $nextIndicator = $ (that.$indicators.children ()[that.getActiveIndex ()])
+ $nextIndicator && $nextIndicator.addClass ('active')
+ })
+ }
+
+ if ($.support.transition && this.$element.hasClass ('slide'))
+ {
+ this.$element.trigger (e)
+ if (e.isDefaultPrevented ()) return
+ $next.addClass (type)
+ $next[0].offsetWidth // force reflow
+ $active.addClass (direction)
+ $next.addClass (direction)
+ $active
+ .one ($.support.transition.end, function ()
+ {
+ $next.removeClass ([type, direction].join (' ')).addClass ('active')
+ $active.removeClass (['active', direction].join (' '))
+ that.sliding = false
+ setTimeout (function ()
+ {
+ that.$element.trigger ('slid')
+ }, 0)
+ })
+ .emulateTransitionEnd (600)
+ } else
+ {
+ this.$element.trigger (e)
+ if (e.isDefaultPrevented ()) return
+ $active.removeClass ('active')
+ $next.addClass ('active')
+ this.sliding = false
+ this.$element.trigger ('slid')
+ }
+
+ isCycling && this.cycle ()
+
+ return this
+ }
+
+
+ // CAROUSEL PLUGIN DEFINITION
+ // ==========================
+
+ var old = $.fn.carousel
+
+ $.fn.carousel = function (option)
+ {
+ return this.each (function ()
+ {
+ var $this = $ (this)
+ var data = $this.data ('bs.carousel')
+ var options = $.extend ({}, Carousel.DEFAULTS, $this.data (), typeof option == 'object' && option)
+ var action = typeof option == 'string' ? option : options.slide
+
+ if (!data) $this.data ('bs.carousel', (data = new Carousel (this, options)))
+ if (typeof option == 'number') data.to (option)
+ else if (action) data[action] ()
+ else if (options.interval) data.pause ().cycle ()
+ })
+ }
+
+ $.fn.carousel.Constructor = Carousel
+
+
+ // CAROUSEL NO CONFLICT
+ // ====================
+
+ $.fn.carousel.noConflict = function ()
+ {
+ $.fn.carousel = old
+ return this
+ }
+
+
+ // CAROUSEL DATA-API
+ // =================
+
+ $ (document).on ('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e)
+ {
+ var $this = $ (this), href
+ var $target = $ ($this.attr ('data-target') || (href = $this.attr ('href')) && href.replace (/.*(?=#[^\s]+$)/, '')) //strip for ie7
+ var options = $.extend ({}, $target.data (), $this.data ())
+ var slideIndex = $this.attr ('data-slide-to')
+ if (slideIndex) options.interval = false
+
+ $target.carousel (options)
+
+ if (slideIndex = $this.attr ('data-slide-to'))
+ {
+ $target.data ('bs.carousel').to (slideIndex)
+ }
+
+ e.preventDefault ()
+ })
+
+ $ (window).on ('load', function ()
+ {
+ $ ('[data-ride="carousel"]').each (function ()
+ {
+ var $carousel = $ (this)
+ $carousel.carousel ($carousel.data ())
+ })
+ })
+
+} (window.jQuery);
diff --git a/vendor/twitter-bootstrap-3/js/collapse.js b/vendor/twitter-bootstrap-3/js/collapse.js
new file mode 100644
index 000000000..419eabe09
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/js/collapse.js
@@ -0,0 +1,194 @@
+/* ========================================================================
+ * Bootstrap: collapse.js v3.0.0
+ * http://twbs.github.com/bootstrap/javascript.html#collapse
+ * ========================================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ======================================================================== */
+
+
++function ($)
+{
+ "use strict";
+
+ // COLLAPSE PUBLIC CLASS DEFINITION
+ // ================================
+
+ var Collapse = function (element, options)
+ {
+ this.$element = $ (element)
+ this.options = $.extend ({}, Collapse.DEFAULTS, options)
+ this.transitioning = null
+
+ if (this.options.parent) this.$parent = $ (this.options.parent)
+ if (this.options.toggle) this.toggle ()
+ }
+
+ Collapse.DEFAULTS = {
+ toggle: true
+ }
+
+ Collapse.prototype.dimension = function ()
+ {
+ var hasWidth = this.$element.hasClass ('width')
+ return hasWidth ? 'width' : 'height'
+ }
+
+ Collapse.prototype.show = function ()
+ {
+ if (this.transitioning || this.$element.hasClass ('in')) return
+
+ var startEvent = $.Event ('show.bs.collapse')
+ this.$element.trigger (startEvent)
+ if (startEvent.isDefaultPrevented ()) return
+
+ var actives = this.$parent && this.$parent.find ('> .panel > .in')
+
+ if (actives && actives.length)
+ {
+ var hasData = actives.data ('bs.collapse')
+ if (hasData && hasData.transitioning) return
+ actives.collapse ('hide')
+ hasData || actives.data ('bs.collapse', null)
+ }
+
+ var dimension = this.dimension ()
+
+ this.$element
+ .removeClass ('collapse')
+ .addClass ('collapsing')
+ [dimension] (0)
+
+ this.transitioning = 1
+
+ var complete = function ()
+ {
+ this.$element
+ .removeClass ('collapsing')
+ .addClass ('in')
+ [dimension] ('auto')
+ this.transitioning = 0
+ this.$element.trigger ('shown.bs.collapse')
+ }
+
+ if (!$.support.transition) return complete.call (this)
+
+ var scrollSize = $.camelCase (['scroll', dimension].join ('-'))
+
+ this.$element
+ .one ($.support.transition.end, $.proxy (complete, this))
+ .emulateTransitionEnd (350)
+ [dimension] (this.$element[0][scrollSize])
+ }
+
+ Collapse.prototype.hide = function ()
+ {
+ if (this.transitioning || !this.$element.hasClass ('in')) return
+
+ var startEvent = $.Event ('hide.bs.collapse')
+ this.$element.trigger (startEvent)
+ if (startEvent.isDefaultPrevented ()) return
+
+ var dimension = this.dimension ()
+
+ this.$element
+ [dimension] (this.$element[dimension] ())
+ [0].offsetHeight
+
+ this.$element
+ .addClass ('collapsing')
+ .removeClass ('collapse')
+ .removeClass ('in')
+
+ this.transitioning = 1
+
+ var complete = function ()
+ {
+ this.transitioning = 0
+ this.$element
+ .trigger ('hidden.bs.collapse')
+ .removeClass ('collapsing')
+ .addClass ('collapse')
+ }
+
+ if (!$.support.transition) return complete.call (this)
+
+ this.$element
+ [dimension] (0)
+ .one ($.support.transition.end, $.proxy (complete, this))
+ .emulateTransitionEnd (350)
+ }
+
+ Collapse.prototype.toggle = function ()
+ {
+ this[this.$element.hasClass ('in') ? 'hide' : 'show'] ()
+ }
+
+
+ // COLLAPSE PLUGIN DEFINITION
+ // ==========================
+
+ var old = $.fn.collapse
+
+ $.fn.collapse = function (option)
+ {
+ return this.each (function ()
+ {
+ var $this = $ (this)
+ var data = $this.data ('bs.collapse')
+ var options = $.extend ({}, Collapse.DEFAULTS, $this.data (), typeof option == 'object' && option)
+
+ if (!data) $this.data ('bs.collapse', (data = new Collapse (this, options)))
+ if (typeof option == 'string') data[option] ()
+ })
+ }
+
+ $.fn.collapse.Constructor = Collapse
+
+
+ // COLLAPSE NO CONFLICT
+ // ====================
+
+ $.fn.collapse.noConflict = function ()
+ {
+ $.fn.collapse = old
+ return this
+ }
+
+
+ // COLLAPSE DATA-API
+ // =================
+
+ $ (document).on ('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e)
+ {
+ var $this = $ (this), href
+ var target = $this.attr ('data-target')
+ || e.preventDefault ()
+ || (href = $this.attr ('href')) && href.replace (/.*(?=#[^\s]+$)/, '') //strip for ie7
+ var $target = $ (target)
+ var data = $target.data ('bs.collapse')
+ var option = data ? 'toggle' : $this.data ()
+ var parent = $this.attr ('data-parent')
+ var $parent = parent && $ (parent)
+
+ if (!data || !data.transitioning)
+ {
+ if ($parent) $parent.find ('[data-toggle=collapse][data-parent="' + parent + '"]').not ($this).addClass ('collapsed')
+ $this[$target.hasClass ('in') ? 'addClass' : 'removeClass'] ('collapsed')
+ }
+
+ $target.collapse (option)
+ })
+
+} (window.jQuery);
diff --git a/vendor/twitter-bootstrap-3/js/dropdown.js b/vendor/twitter-bootstrap-3/js/dropdown.js
new file mode 100644
index 000000000..956c6dd9e
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/js/dropdown.js
@@ -0,0 +1,172 @@
+/* ========================================================================
+ * Bootstrap: dropdown.js v3.0.0
+ * http://twbs.github.com/bootstrap/javascript.html#dropdowns
+ * ========================================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ======================================================================== */
+
+
++function ($)
+{
+ "use strict";
+
+ // DROPDOWN CLASS DEFINITION
+ // =========================
+
+ var backdrop = '.dropdown-backdrop'
+ var toggle = '[data-toggle=dropdown]'
+ var Dropdown = function (element)
+ {
+ var $el = $ (element).on ('click.bs.dropdown', this.toggle)
+ }
+
+ Dropdown.prototype.toggle = function (e)
+ {
+ var $this = $ (this)
+
+ if ($this.is ('.disabled, :disabled')) return
+
+ var $parent = getParent ($this)
+ var isActive = $parent.hasClass ('open')
+
+ clearMenus ()
+
+ if (!isActive)
+ {
+ if ('ontouchstart' in document.documentElement && !$parent.closest ('.navbar-nav').length)
+ {
+ // if mobile we we use a backdrop because click events don't delegate
+ $ ('
').insertAfter ($ (this)).on ('click', clearMenus)
+ }
+
+ $parent.trigger (e = $.Event ('show.bs.dropdown'))
+
+ if (e.isDefaultPrevented ()) return
+
+ $parent
+ .toggleClass ('open')
+ .trigger ('shown.bs.dropdown')
+
+ $this.focus ()
+ }
+
+ return false
+ }
+
+ Dropdown.prototype.keydown = function (e)
+ {
+ if (!/(38|40|27)/.test (e.keyCode)) return
+
+ var $this = $ (this)
+
+ e.preventDefault ()
+ e.stopPropagation ()
+
+ if ($this.is ('.disabled, :disabled')) return
+
+ var $parent = getParent ($this)
+ var isActive = $parent.hasClass ('open')
+
+ if (!isActive || (isActive && e.keyCode == 27))
+ {
+ if (e.which == 27) $parent.find (toggle).focus ()
+ return $this.click ()
+ }
+
+ var $items = $ ('[role=menu] li:not(.divider):visible a', $parent)
+
+ if (!$items.length) return
+
+ var index = $items.index ($items.filter (':focus'))
+
+ if (e.keyCode == 38 && index > 0) index-- // up
+ if (e.keyCode == 40 && index < $items.length - 1) index++ // down
+ if (!~index) index = 0
+
+ $items.eq (index).focus ()
+ }
+
+ function clearMenus ()
+ {
+ $ (backdrop).remove ()
+ $ (toggle).each (function (e)
+ {
+ var $parent = getParent ($ (this))
+ if (!$parent.hasClass ('open')) return
+ $parent.trigger (e = $.Event ('hide.bs.dropdown'))
+ if (e.isDefaultPrevented ()) return
+ $parent.removeClass ('open').trigger ('hidden.bs.dropdown')
+ })
+ }
+
+ function getParent ($this)
+ {
+ var selector = $this.attr ('data-target')
+
+ if (!selector)
+ {
+ selector = $this.attr ('href')
+ selector = selector && /#/.test (selector) && selector.replace (/.*(?=#[^\s]*$)/, '') //strip for ie7
+ }
+
+ var $parent = selector && $ (selector)
+
+ return $parent && $parent.length ? $parent : $this.parent ()
+ }
+
+
+ // DROPDOWN PLUGIN DEFINITION
+ // ==========================
+
+ var old = $.fn.dropdown
+
+ $.fn.dropdown = function (option)
+ {
+ return this.each (function ()
+ {
+ var $this = $ (this)
+ var data = $this.data ('dropdown')
+
+ if (!data) $this.data ('dropdown', (data = new Dropdown (this)))
+ if (typeof option == 'string') data[option].call ($this)
+ })
+ }
+
+ $.fn.dropdown.Constructor = Dropdown
+
+
+ // DROPDOWN NO CONFLICT
+ // ====================
+
+ $.fn.dropdown.noConflict = function ()
+ {
+ $.fn.dropdown = old
+ return this
+ }
+
+
+ // APPLY TO STANDARD DROPDOWN ELEMENTS
+ // ===================================
+
+ $ (document)
+ .on ('click.bs.dropdown.data-api', clearMenus)
+ .on ('click.bs.dropdown.data-api', '.dropdown form', function (e)
+ {
+ e.stopPropagation ()
+ })
+ .on ('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
+ .on ('keydown.bs.dropdown.data-api', toggle + ', [role=menu]', Dropdown.prototype.keydown)
+
+} (window.jQuery);
diff --git a/vendor/twitter-bootstrap-3/js/modal.js b/vendor/twitter-bootstrap-3/js/modal.js
new file mode 100644
index 000000000..e8f8ef507
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/js/modal.js
@@ -0,0 +1,280 @@
+/* ========================================================================
+ * Bootstrap: modal.js v3.0.0
+ * http://twbs.github.com/bootstrap/javascript.html#modals
+ * ========================================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ======================================================================== */
+
+
++function ($)
+{
+ "use strict";
+
+ // MODAL CLASS DEFINITION
+ // ======================
+
+ var Modal = function (element, options)
+ {
+ this.options = options
+ this.$element = $ (element)
+ this.$backdrop =
+ this.isShown = null
+
+ if (this.options.remote) this.$element.load (this.options.remote)
+ }
+
+ Modal.DEFAULTS = {
+ backdrop: true, keyboard: true, show: true
+ }
+
+ Modal.prototype.toggle = function (_relatedTarget)
+ {
+ return this[!this.isShown ? 'show' : 'hide'] (_relatedTarget)
+ }
+
+ Modal.prototype.show = function (_relatedTarget)
+ {
+ var that = this
+ var e = $.Event ('show.bs.modal', { relatedTarget: _relatedTarget })
+
+ this.$element.trigger (e)
+
+ if (this.isShown || e.isDefaultPrevented ()) return
+
+ this.isShown = true
+
+ this.escape ()
+
+ this.$element.on ('click.dismiss.modal', '[data-dismiss="modal"]', $.proxy (this.hide, this))
+
+ this.backdrop (function ()
+ {
+ var transition = $.support.transition && that.$element.hasClass ('fade')
+
+ if (!that.$element.parent ().length)
+ {
+ that.$element.appendTo (document.body) // don't move modals dom position
+ }
+
+ that.$element.show ()
+
+ if (transition)
+ {
+ that.$element[0].offsetWidth // force reflow
+ }
+
+ that.$element
+ .addClass ('in')
+ .attr ('aria-hidden', false)
+
+ that.enforceFocus ()
+
+ var e = $.Event ('shown.bs.modal', { relatedTarget: _relatedTarget })
+
+ transition ?
+ that.$element.find ('.modal-dialog') // wait for modal to slide in
+ .one ($.support.transition.end, function ()
+ {
+ that.$element.focus ().trigger (e)
+ })
+ .emulateTransitionEnd (300) :
+ that.$element.focus ().trigger (e)
+ })
+ }
+
+ Modal.prototype.hide = function (e)
+ {
+ if (e) e.preventDefault ()
+
+ e = $.Event ('hide.bs.modal')
+
+ this.$element.trigger (e)
+
+ if (!this.isShown || e.isDefaultPrevented ()) return
+
+ this.isShown = false
+
+ this.escape ()
+
+ $ (document).off ('focusin.bs.modal')
+
+ this.$element
+ .removeClass ('in')
+ .attr ('aria-hidden', true)
+ .off ('click.dismiss.modal')
+
+ $.support.transition && this.$element.hasClass ('fade') ?
+ this.$element
+ .one ($.support.transition.end, $.proxy (this.hideModal, this))
+ .emulateTransitionEnd (300) :
+ this.hideModal ()
+ }
+
+ Modal.prototype.enforceFocus = function ()
+ {
+ $ (document)
+ .off ('focusin.bs.modal') // guard against infinite focus loop
+ .on ('focusin.bs.modal', $.proxy (function (e)
+ {
+ if (this.$element[0] !== e.target && !this.$element.has (e.target).length)
+ {
+ this.$element.focus ()
+ }
+ }, this))
+ }
+
+ Modal.prototype.escape = function ()
+ {
+ if (this.isShown && this.options.keyboard)
+ {
+ this.$element.on ('keyup.dismiss.bs.modal', $.proxy (function (e)
+ {
+ e.which == 27 && this.hide ()
+ }, this))
+ } else if (!this.isShown)
+ {
+ this.$element.off ('keyup.dismiss.bs.modal')
+ }
+ }
+
+ Modal.prototype.hideModal = function ()
+ {
+ var that = this
+ this.$element.hide ()
+ this.backdrop (function ()
+ {
+ that.removeBackdrop ()
+ that.$element.trigger ('hidden.bs.modal')
+ })
+ }
+
+ Modal.prototype.removeBackdrop = function ()
+ {
+ this.$backdrop && this.$backdrop.remove ()
+ this.$backdrop = null
+ }
+
+ Modal.prototype.backdrop = function (callback)
+ {
+ var that = this
+ var animate = this.$element.hasClass ('fade') ? 'fade' : ''
+
+ if (this.isShown && this.options.backdrop)
+ {
+ var doAnimate = $.support.transition && animate
+
+ this.$backdrop = $ ('
')
+ .appendTo (document.body)
+
+ this.$element.on ('click.dismiss.modal', $.proxy (function (e)
+ {
+ if (e.target !== e.currentTarget) return
+ this.options.backdrop == 'static'
+ ? this.$element[0].focus.call (this.$element[0])
+ : this.hide.call (this)
+ }, this))
+
+ if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
+
+ this.$backdrop.addClass ('in')
+
+ if (!callback) return
+
+ doAnimate ?
+ this.$backdrop
+ .one ($.support.transition.end, callback)
+ .emulateTransitionEnd (150) :
+ callback ()
+
+ } else if (!this.isShown && this.$backdrop)
+ {
+ this.$backdrop.removeClass ('in')
+
+ $.support.transition && this.$element.hasClass ('fade') ?
+ this.$backdrop
+ .one ($.support.transition.end, callback)
+ .emulateTransitionEnd (150) :
+ callback ()
+
+ } else if (callback)
+ {
+ callback ()
+ }
+ }
+
+
+ // MODAL PLUGIN DEFINITION
+ // =======================
+
+ var old = $.fn.modal
+
+ $.fn.modal = function (option, _relatedTarget)
+ {
+ return this.each (function ()
+ {
+ var $this = $ (this)
+ var data = $this.data ('bs.modal')
+ var options = $.extend ({}, Modal.DEFAULTS, $this.data (), typeof option == 'object' && option)
+
+ if (!data) $this.data ('bs.modal', (data = new Modal (this, options)))
+ if (typeof option == 'string') data[option] (_relatedTarget)
+ else if (options.show) data.show (_relatedTarget)
+ })
+ }
+
+ $.fn.modal.Constructor = Modal
+
+
+ // MODAL NO CONFLICT
+ // =================
+
+ $.fn.modal.noConflict = function ()
+ {
+ $.fn.modal = old
+ return this
+ }
+
+
+ // MODAL DATA-API
+ // ==============
+
+ $ (document).on ('click.bs.modal.data-api', '[data-toggle="modal"]', function (e)
+ {
+ var $this = $ (this)
+ var href = $this.attr ('href')
+ var $target = $ ($this.attr ('data-target') || (href && href.replace (/.*(?=#[^\s]+$)/, ''))) //strip for ie7
+ var option = $target.data ('modal') ? 'toggle' : $.extend ({ remote: !/#/.test (href) && href }, $target.data (), $this.data ())
+
+ e.preventDefault ()
+
+ $target
+ .modal (option, this)
+ .one ('hide', function ()
+ {
+ $this.is (':visible') && $this.focus ()
+ })
+ })
+
+ $ (document)
+ .on ('show.bs.modal', '.modal', function ()
+ {
+ $ (document.body).addClass ('modal-open')
+ })
+ .on ('hidden.bs.modal', '.modal', function ()
+ {
+ $ (document.body).removeClass ('modal-open')
+ })
+
+} (window.jQuery);
diff --git a/vendor/twitter-bootstrap-3/js/popover.js b/vendor/twitter-bootstrap-3/js/popover.js
new file mode 100644
index 000000000..e765bc835
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/js/popover.js
@@ -0,0 +1,126 @@
+/* ========================================================================
+ * Bootstrap: popover.js v3.0.0
+ * http://twbs.github.com/bootstrap/javascript.html#popovers
+ * ========================================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ======================================================================== */
+
+
++function ($)
+{
+ "use strict";
+
+ // POPOVER PUBLIC CLASS DEFINITION
+ // ===============================
+
+ var Popover = function (element, options)
+ {
+ this.init ('popover', element, options)
+ }
+
+ if (!$.fn.tooltip) throw new Error ('Popover requires tooltip.js')
+
+ Popover.DEFAULTS = $.extend ({}, $.fn.tooltip.Constructor.DEFAULTS, {
+ placement: 'right', trigger: 'click', content: '', template: ''
+ })
+
+
+ // NOTE: POPOVER EXTENDS tooltip.js
+ // ================================
+
+ Popover.prototype = $.extend ({}, $.fn.tooltip.Constructor.prototype)
+
+ Popover.prototype.constructor = Popover
+
+ Popover.prototype.getDefaults = function ()
+ {
+ return Popover.DEFAULTS
+ }
+
+ Popover.prototype.setContent = function ()
+ {
+ var $tip = this.tip ()
+ var title = this.getTitle ()
+ var content = this.getContent ()
+
+ $tip.find ('.popover-title')[this.options.html ? 'html' : 'text'] (title)
+ $tip.find ('.popover-content')[this.options.html ? 'html' : 'text'] (content)
+
+ $tip.removeClass ('fade top bottom left right in')
+
+ // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
+ // this manually by checking the contents.
+ if (!$tip.find ('.popover-title').html ()) $tip.find ('.popover-title').hide ()
+ }
+
+ Popover.prototype.hasContent = function ()
+ {
+ return this.getTitle () || this.getContent ()
+ }
+
+ Popover.prototype.getContent = function ()
+ {
+ var $e = this.$element
+ var o = this.options
+
+ return $e.attr ('data-content')
+ || (typeof o.content == 'function' ?
+ o.content.call ($e[0]) :
+ o.content)
+ }
+
+ Popover.prototype.arrow = function ()
+ {
+ return this.$arrow = this.$arrow || this.tip ().find ('.arrow')
+ }
+
+ Popover.prototype.tip = function ()
+ {
+ if (!this.$tip) this.$tip = $ (this.options.template)
+ return this.$tip
+ }
+
+
+ // POPOVER PLUGIN DEFINITION
+ // =========================
+
+ var old = $.fn.popover
+
+ $.fn.popover = function (option)
+ {
+ return this.each (function ()
+ {
+ var $this = $ (this)
+ var data = $this.data ('bs.popover')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data ('bs.popover', (data = new Popover (this, options)))
+ if (typeof option == 'string') data[option] ()
+ })
+ }
+
+ $.fn.popover.Constructor = Popover
+
+
+ // POPOVER NO CONFLICT
+ // ===================
+
+ $.fn.popover.noConflict = function ()
+ {
+ $.fn.popover = old
+ return this
+ }
+
+} (window.jQuery);
diff --git a/vendor/twitter-bootstrap-3/js/scrollspy.js b/vendor/twitter-bootstrap-3/js/scrollspy.js
new file mode 100644
index 000000000..f5e69613b
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/js/scrollspy.js
@@ -0,0 +1,179 @@
+/* ========================================================================
+ * Bootstrap: scrollspy.js v3.0.0
+ * http://twbs.github.com/bootstrap/javascript.html#scrollspy
+ * ========================================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ======================================================================== */
+
+
++function ($)
+{
+ "use strict";
+
+ // SCROLLSPY CLASS DEFINITION
+ // ==========================
+
+ function ScrollSpy (element, options)
+ {
+ var href
+ var process = $.proxy (this.process, this)
+
+ this.$element = $ (element).is ('body') ? $ (window) : $ (element)
+ this.$body = $ ('body')
+ this.$scrollElement = this.$element.on ('scroll.bs.scroll-spy.data-api', process)
+ this.options = $.extend ({}, ScrollSpy.DEFAULTS, options)
+ this.selector = (this.options.target
+ || ((href = $ (element).attr ('href')) && href.replace (/.*(?=#[^\s]+$)/, '')) //strip for ie7
+ || '') + ' .nav li > a'
+ this.offsets = $ ([])
+ this.targets = $ ([])
+ this.activeTarget = null
+
+ this.refresh ()
+ this.process ()
+ }
+
+ ScrollSpy.DEFAULTS = {
+ offset: 10
+ }
+
+ ScrollSpy.prototype.refresh = function ()
+ {
+ var offsetMethod = this.$element[0] == window ? 'offset' : 'position'
+
+ this.offsets = $ ([])
+ this.targets = $ ([])
+
+ var self = this
+ var $targets = this.$body
+ .find (this.selector)
+ .map (function ()
+ {
+ var $el = $ (this)
+ var href = $el.data ('target') || $el.attr ('href')
+ var $href = /^#\w/.test (href) && $ (href)
+
+ return ($href
+ && $href.length
+ && [
+ [ $href[offsetMethod] ().top + (!$.isWindow (self.$scrollElement.get (0)) && self.$scrollElement.scrollTop ()), href ]
+ ]) || null
+ })
+ .sort (function (a, b)
+ {
+ return a[0] - b[0]
+ })
+ .each (function ()
+ {
+ self.offsets.push (this[0])
+ self.targets.push (this[1])
+ })
+ }
+
+ ScrollSpy.prototype.process = function ()
+ {
+ var scrollTop = this.$scrollElement.scrollTop () + this.options.offset
+ var scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight
+ var maxScroll = scrollHeight - this.$scrollElement.height ()
+ var offsets = this.offsets
+ var targets = this.targets
+ var activeTarget = this.activeTarget
+ var i
+
+ if (scrollTop >= maxScroll)
+ {
+ return activeTarget != (i = targets.last ()[0]) && this.activate (i)
+ }
+
+ for (i = offsets.length; i--;)
+ {
+ activeTarget != targets[i]
+ && scrollTop >= offsets[i]
+ && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
+ && this.activate (targets[i])
+ }
+ }
+
+ ScrollSpy.prototype.activate = function (target)
+ {
+ this.activeTarget = target
+
+ $ (this.selector)
+ .parents ('.active')
+ .removeClass ('active')
+
+ var selector = this.selector
+ + '[data-target="' + target + '"],'
+ + this.selector + '[href="' + target + '"]'
+
+ var active = $ (selector)
+ .parents ('li')
+ .addClass ('active')
+
+ if (active.parent ('.dropdown-menu').length)
+ {
+ active = active
+ .closest ('li.dropdown')
+ .addClass ('active')
+ }
+
+ active.trigger ('activate')
+ }
+
+
+ // SCROLLSPY PLUGIN DEFINITION
+ // ===========================
+
+ var old = $.fn.scrollspy
+
+ $.fn.scrollspy = function (option)
+ {
+ return this.each (function ()
+ {
+ var $this = $ (this)
+ var data = $this.data ('bs.scrollspy')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data ('bs.scrollspy', (data = new ScrollSpy (this, options)))
+ if (typeof option == 'string') data[option] ()
+ })
+ }
+
+ $.fn.scrollspy.Constructor = ScrollSpy
+
+
+ // SCROLLSPY NO CONFLICT
+ // =====================
+
+ $.fn.scrollspy.noConflict = function ()
+ {
+ $.fn.scrollspy = old
+ return this
+ }
+
+
+ // SCROLLSPY DATA-API
+ // ==================
+
+ $ (window).on ('load', function ()
+ {
+ $ ('[data-spy="scroll"]').each (function ()
+ {
+ var $spy = $ (this)
+ $spy.scrollspy ($spy.data ())
+ })
+ })
+
+} (window.jQuery);
diff --git a/vendor/twitter-bootstrap-3/js/tab.js b/vendor/twitter-bootstrap-3/js/tab.js
new file mode 100644
index 000000000..dacd4c4de
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/js/tab.js
@@ -0,0 +1,149 @@
+/* ========================================================================
+ * Bootstrap: tab.js v3.0.0
+ * http://twbs.github.com/bootstrap/javascript.html#tabs
+ * ========================================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ======================================================================== */
+
+
++function ($)
+{
+ "use strict";
+
+ // TAB CLASS DEFINITION
+ // ====================
+
+ var Tab = function (element)
+ {
+ this.element = $ (element)
+ }
+
+ Tab.prototype.show = function ()
+ {
+ var $this = this.element
+ var $ul = $this.closest ('ul:not(.dropdown-menu)')
+ var selector = $this.attr ('data-target')
+
+ if (!selector)
+ {
+ selector = $this.attr ('href')
+ selector = selector && selector.replace (/.*(?=#[^\s]*$)/, '') //strip for ie7
+ }
+
+ if ($this.parent ('li').hasClass ('active')) return
+
+ var previous = $ul.find ('.active:last a')[0]
+ var e = $.Event ('show.bs.tab', {
+ relatedTarget: previous
+ })
+
+ $this.trigger (e)
+
+ if (e.isDefaultPrevented ()) return
+
+ var $target = $ (selector)
+
+ this.activate ($this.parent ('li'), $ul)
+ this.activate ($target, $target.parent (), function ()
+ {
+ $this.trigger ({
+ type: 'shown.bs.tab', relatedTarget: previous
+ })
+ })
+ }
+
+ Tab.prototype.activate = function (element, container, callback)
+ {
+ var $active = container.find ('> .active')
+ var transition = callback
+ && $.support.transition
+ && $active.hasClass ('fade')
+
+ function next ()
+ {
+ $active
+ .removeClass ('active')
+ .find ('> .dropdown-menu > .active')
+ .removeClass ('active')
+
+ element.addClass ('active')
+
+ if (transition)
+ {
+ element[0].offsetWidth // reflow for transition
+ element.addClass ('in')
+ } else
+ {
+ element.removeClass ('fade')
+ }
+
+ if (element.parent ('.dropdown-menu'))
+ {
+ element.closest ('li.dropdown').addClass ('active')
+ }
+
+ callback && callback ()
+ }
+
+ transition ?
+ $active
+ .one ($.support.transition.end, next)
+ .emulateTransitionEnd (150) :
+ next ()
+
+ $active.removeClass ('in')
+ }
+
+
+ // TAB PLUGIN DEFINITION
+ // =====================
+
+ var old = $.fn.tab
+
+ $.fn.tab = function (option)
+ {
+ return this.each (function ()
+ {
+ var $this = $ (this)
+ var data = $this.data ('bs.tab')
+
+ if (!data) $this.data ('bs.tab', (data = new Tab (this)))
+ if (typeof option == 'string') data[option] ()
+ })
+ }
+
+ $.fn.tab.Constructor = Tab
+
+
+ // TAB NO CONFLICT
+ // ===============
+
+ $.fn.tab.noConflict = function ()
+ {
+ $.fn.tab = old
+ return this
+ }
+
+
+ // TAB DATA-API
+ // ============
+
+ $ (document).on ('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e)
+ {
+ e.preventDefault ()
+ $ (this).tab ('show')
+ })
+
+} (window.jQuery);
diff --git a/vendor/twitter-bootstrap-3/js/tests/index.html b/vendor/twitter-bootstrap-3/js/tests/index.html
new file mode 100644
index 000000000..84d436cb6
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/js/tests/index.html
@@ -0,0 +1,53 @@
+
+ Bootstrap Plugin Test Suite
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/js/tests/phantom.js b/vendor/twitter-bootstrap-3/js/tests/phantom.js
new file mode 100644
index 000000000..6ad55f9d9
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/js/tests/phantom.js
@@ -0,0 +1,82 @@
+// Simple phantom.js integration script
+// Adapted from Modernizr
+
+function waitFor (testFx, onReady, timeOutMillis)
+{
+ var maxtimeOutMillis = timeOutMillis ? timeOutMillis : 5001 //< Default Max Timout is 5s
+ , start = new Date ().getTime ()
+ , condition = false
+ , interval = setInterval (function ()
+ {
+ if ((new Date ().getTime () - start < maxtimeOutMillis) && !condition)
+ {
+ // If not time-out yet and condition not yet fulfilled
+ condition = (typeof(testFx) === "string" ? eval (testFx) : testFx ()) //< defensive code
+ } else
+ {
+ if (!condition)
+ {
+ // If condition still not fulfilled (timeout but condition is 'false')
+ console.log ("'waitFor()' timeout")
+ phantom.exit (1)
+ } else
+ {
+ // Condition fulfilled (timeout and/or condition is 'true')
+ typeof(onReady) === "string" ? eval (onReady) : onReady () //< Do what it's supposed to do once the condition is fulfilled
+ clearInterval (interval) //< Stop this interval
+ }
+ }
+ }, 100) //< repeat check every 100ms
+}
+
+
+if (phantom.args.length === 0 || phantom.args.length > 2)
+{
+ console.log ('Usage: phantom.js URL')
+ phantom.exit ()
+}
+
+var page = new WebPage ()
+
+// Route "console.log()" calls from within the Page context to the main Phantom context (i.e. current "this")
+page.onConsoleMessage = function (msg)
+{
+ console.log (msg)
+};
+
+page.open (phantom.args[0], function (status)
+{
+ if (status !== "success")
+ {
+ console.log ("Unable to access network")
+ phantom.exit ()
+ } else
+ {
+ waitFor (function ()
+ {
+ return page.evaluate (function ()
+ {
+ var el = document.getElementById ('qunit-testresult')
+ if (el && el.innerText.match ('completed'))
+ {
+ return true
+ }
+ return false
+ })
+ }, function ()
+ {
+ var failedNum = page.evaluate (function ()
+ {
+ var el = document.getElementById ('qunit-testresult')
+ try
+ {
+ return el.getElementsByClassName ('failed')[0].innerHTML
+ } catch (e)
+ {
+ }
+ return 10000
+ });
+ phantom.exit ((parseInt (failedNum, 10) > 0) ? 1 : 0)
+ })
+ }
+})
diff --git a/vendor/twitter-bootstrap-3/js/tests/server.js b/vendor/twitter-bootstrap-3/js/tests/server.js
new file mode 100644
index 000000000..475b3c952
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/js/tests/server.js
@@ -0,0 +1,14 @@
+/*
+ * Simple connect server for phantom.js
+ * Adapted from Modernizr
+ */
+
+var connect = require ('connect')
+ , http = require ('http')
+ , fs = require ('fs')
+ , app = connect ()
+ .use (connect.static (__dirname + '/../../'));
+
+http.createServer (app).listen (3000);
+
+fs.writeFileSync (__dirname + '/pid.txt', process.pid, 'utf-8')
diff --git a/vendor/twitter-bootstrap-3/js/tests/unit/affix.js b/vendor/twitter-bootstrap-3/js/tests/unit/affix.js
new file mode 100644
index 000000000..52b51eeb1
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/js/tests/unit/affix.js
@@ -0,0 +1,30 @@
+$ (function ()
+{
+
+ module ("affix")
+
+ test ("should provide no conflict", function ()
+ {
+ var affix = $.fn.affix.noConflict ()
+ ok (!$.fn.affix, 'affix was set back to undefined (org value)')
+ $.fn.affix = affix
+ })
+
+ test ("should be defined on jquery object", function ()
+ {
+ ok ($ (document.body).affix, 'affix method is defined')
+ })
+
+ test ("should return element", function ()
+ {
+ ok ($ (document.body).affix ()[0] == document.body, 'document.body returned')
+ })
+
+ test ("should exit early if element is not visible", function ()
+ {
+ var $affix = $ ('
').affix ()
+ $affix.data ('bs.affix').checkPosition ()
+ ok (!$affix.hasClass ('affix'), 'affix class was not added')
+ })
+
+})
diff --git a/vendor/twitter-bootstrap-3/js/tests/unit/alert.js b/vendor/twitter-bootstrap-3/js/tests/unit/alert.js
new file mode 100644
index 000000000..959721120
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/js/tests/unit/alert.js
@@ -0,0 +1,71 @@
+$ (function ()
+{
+
+ module ("alert")
+
+ test ("should provide no conflict", function ()
+ {
+ var alert = $.fn.alert.noConflict ()
+ ok (!$.fn.alert, 'alert was set back to undefined (org value)')
+ $.fn.alert = alert
+ })
+
+ test ("should be defined on jquery object", function ()
+ {
+ ok ($ (document.body).alert, 'alert method is defined')
+ })
+
+ test ("should return element", function ()
+ {
+ ok ($ (document.body).alert ()[0] == document.body, 'document.body returned')
+ })
+
+ test ("should fade element out on clicking .close", function ()
+ {
+ var alertHTML = ''
+ + '
× '
+ + '
Holy guacamole! Best check yo self, you\'re not looking too good.
'
+ + '
'
+ , alert = $ (alertHTML).alert ()
+
+ alert.find ('.close').click ()
+
+ ok (!alert.hasClass ('in'), 'remove .in class on .close click')
+ })
+
+ test ("should remove element when clicking .close", function ()
+ {
+ $.support.transition = false
+
+ var alertHTML = ''
+ + '
× '
+ + '
Holy guacamole! Best check yo self, you\'re not looking too good.
'
+ + '
'
+ , alert = $ (alertHTML).appendTo ('#qunit-fixture').alert ()
+
+ ok ($ ('#qunit-fixture').find ('.alert-message').length, 'element added to dom')
+
+ alert.find ('.close').click ()
+
+ ok (!$ ('#qunit-fixture').find ('.alert-message').length, 'element removed from dom')
+ })
+
+ test ("should not fire closed when close is prevented", function ()
+ {
+ $.support.transition = false
+ stop ();
+ $ ('
')
+ .on ('close.bs.alert', function (e)
+ {
+ e.preventDefault ();
+ ok (true);
+ start ();
+ })
+ .on ('closed.bs.alert', function ()
+ {
+ ok (false);
+ })
+ .alert ('close')
+ })
+
+})
diff --git a/vendor/twitter-bootstrap-3/js/tests/unit/button.js b/vendor/twitter-bootstrap-3/js/tests/unit/button.js
new file mode 100644
index 000000000..15d771b83
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/js/tests/unit/button.js
@@ -0,0 +1,129 @@
+$ (function ()
+{
+
+ module ("button")
+
+ test ("should provide no conflict", function ()
+ {
+ var button = $.fn.button.noConflict ()
+ ok (!$.fn.button, 'button was set back to undefined (org value)')
+ $.fn.button = button
+ })
+
+ test ("should be defined on jquery object", function ()
+ {
+ ok ($ (document.body).button, 'button method is defined')
+ })
+
+ test ("should return element", function ()
+ {
+ ok ($ (document.body).button ()[0] == document.body, 'document.body returned')
+ })
+
+ test ("should return set state to loading", function ()
+ {
+ var btn = $ ('mdo ')
+ equals (btn.html (), 'mdo', 'btn text equals mdo')
+ btn.button ('loading')
+ equals (btn.html (), 'fat', 'btn text equals fat')
+ stop ()
+ setTimeout (function ()
+ {
+ ok (btn.attr ('disabled'), 'btn is disabled')
+ ok (btn.hasClass ('disabled'), 'btn has disabled class')
+ start ()
+ }, 0)
+ })
+
+ test ("should return reset state", function ()
+ {
+ var btn = $ ('mdo ')
+ equals (btn.html (), 'mdo', 'btn text equals mdo')
+ btn.button ('loading')
+ equals (btn.html (), 'fat', 'btn text equals fat')
+ stop ()
+ setTimeout (function ()
+ {
+ ok (btn.attr ('disabled'), 'btn is disabled')
+ ok (btn.hasClass ('disabled'), 'btn has disabled class')
+ start ()
+ stop ()
+ btn.button ('reset')
+ equals (btn.html (), 'mdo', 'btn text equals mdo')
+ setTimeout (function ()
+ {
+ ok (!btn.attr ('disabled'), 'btn is not disabled')
+ ok (!btn.hasClass ('disabled'), 'btn does not have disabled class')
+ start ()
+ }, 0)
+ }, 0)
+
+ })
+
+ test ("should toggle active", function ()
+ {
+ var btn = $ ('mdo ')
+ ok (!btn.hasClass ('active'), 'btn does not have active class')
+ btn.button ('toggle')
+ ok (btn.hasClass ('active'), 'btn has class active')
+ })
+
+ test ("should toggle active when btn children are clicked", function ()
+ {
+ var btn = $ ('mdo ')
+ , inner = $ (' ')
+ btn
+ .append (inner)
+ .appendTo ($ ('#qunit-fixture'))
+ ok (!btn.hasClass ('active'), 'btn does not have active class')
+ inner.click ()
+ ok (btn.hasClass ('active'), 'btn has class active')
+ })
+
+ test ("should toggle active when btn children are clicked within btn-group", function ()
+ {
+ var btngroup = $ ('
')
+ , btn = $ ('fat ')
+ , inner = $ (' ')
+ btngroup
+ .append (btn.append (inner))
+ .appendTo ($ ('#qunit-fixture'))
+ ok (!btn.hasClass ('active'), 'btn does not have active class')
+ inner.click ()
+ ok (btn.hasClass ('active'), 'btn has class active')
+ })
+
+ test ("should check for closest matching toggle", function ()
+ {
+ var group = '' +
+ '' +
+ ' Option 1' +
+ ' ' +
+ '' +
+ ' Option 2' +
+ ' ' +
+ '' +
+ ' Option 3' +
+ ' ' +
+ '
'
+
+ group = $ (group)
+
+ var btn1 = $ (group.children ()[0])
+ var btn2 = $ (group.children ()[1])
+ var btn3 = $ (group.children ()[2])
+
+ group.appendTo ($ ('#qunit-fixture'))
+
+ ok (btn1.hasClass ('active'), 'btn1 has active class')
+ ok (btn1.find ('input').prop ('checked'), 'btn1 is checked')
+ ok (!btn2.hasClass ('active'), 'btn2 does not have active class')
+ ok (!btn2.find ('input').prop ('checked'), 'btn2 is not checked')
+ btn2.find ('input').click ()
+ ok (!btn1.hasClass ('active'), 'btn1 does not have active class')
+ ok (!btn1.find ('input').prop ('checked'), 'btn1 is checked')
+ ok (btn2.hasClass ('active'), 'btn2 has active class')
+ ok (btn2.find ('input').prop ('checked'), 'btn2 is checked')
+ })
+
+})
diff --git a/vendor/twitter-bootstrap-3/js/tests/unit/carousel.js b/vendor/twitter-bootstrap-3/js/tests/unit/carousel.js
new file mode 100644
index 000000000..1d868fa93
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/js/tests/unit/carousel.js
@@ -0,0 +1,99 @@
+$ (function ()
+{
+
+ module ("carousel")
+
+ test ("should provide no conflict", function ()
+ {
+ var carousel = $.fn.carousel.noConflict ()
+ ok (!$.fn.carousel, 'carousel was set back to undefined (org value)')
+ $.fn.carousel = carousel
+ })
+
+ test ("should be defined on jquery object", function ()
+ {
+ ok ($ (document.body).carousel, 'carousel method is defined')
+ })
+
+ test ("should return element", function ()
+ {
+ ok ($ (document.body).carousel ()[0] == document.body, 'document.body returned')
+ })
+
+ test ("should not fire sliden when slide is prevented", function ()
+ {
+ $.support.transition = false
+ stop ()
+ $ ('
')
+ .on ('slide.bs.carousel', function (e)
+ {
+ e.preventDefault ();
+ ok (true);
+ start ();
+ })
+ .on ('slid.bs.carousel', function ()
+ {
+ ok (false);
+ })
+ .carousel ('next')
+ })
+
+ test ("should fire slide event with direction", function ()
+ {
+ var template = '{{_i}}First Thumbnail label{{/i}} Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.
{{_i}}Second Thumbnail label{{/i}} Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.
{{_i}}Third Thumbnail label{{/i}} Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.
‹ › '
+ $.support.transition = false
+ stop ()
+ $ (template).on ('slide.bs.carousel',function (e)
+ {
+ e.preventDefault ()
+ ok (e.direction)
+ ok (e.direction === 'right' || e.direction === 'left')
+ start ()
+ }).carousel ('next')
+ })
+
+ test ("should fire slide event with relatedTarget", function ()
+ {
+ var template = '{{_i}}First Thumbnail label{{/i}} Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.
{{_i}}Second Thumbnail label{{/i}} Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.
{{_i}}Third Thumbnail label{{/i}} Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.
‹ › '
+ $.support.transition = false
+ stop ()
+ $ (template)
+ .on ('slide.bs.carousel', function (e)
+ {
+ e.preventDefault ();
+ ok (e.relatedTarget);
+ ok ($ (e.relatedTarget).hasClass ('item'));
+ start ();
+ })
+ .carousel ('next')
+ })
+
+ test ("should set interval from data attribute", 4, function ()
+ {
+ var template = $ (' {{_i}}First Thumbnail label{{/i}} Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.
{{_i}}Second Thumbnail label{{/i}} Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.
{{_i}}Third Thumbnail label{{/i}} Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.
‹ › ');
+ template.attr ("data-interval", 1814);
+
+ template.appendTo ("body");
+ $ ('[data-slide]').first ().click ();
+ ok ($ ('#myCarousel').data ('bs.carousel').options.interval == 1814);
+ $ ('#myCarousel').remove ();
+
+ template.appendTo ("body").attr ("data-modal", "foobar");
+ $ ('[data-slide]').first ().click ();
+ ok ($ ('#myCarousel').data ('bs.carousel').options.interval == 1814, "even if there is an data-modal attribute set");
+ $ ('#myCarousel').remove ();
+
+ template.appendTo ("body");
+ $ ('[data-slide]').first ().click ();
+ $ ('#myCarousel').attr ('data-interval', 1860);
+ $ ('[data-slide]').first ().click ();
+ ok ($ ('#myCarousel').data ('bs.carousel').options.interval == 1814, "attributes should be read only on intitialization");
+ $ ('#myCarousel').remove ();
+
+ template.attr ("data-interval", false);
+ template.appendTo ("body");
+ $ ('#myCarousel').carousel (1);
+ ok ($ ('#myCarousel').data ('bs.carousel').options.interval === false, "data attribute has higher priority than default options");
+ $ ('#myCarousel').remove ();
+ })
+})
diff --git a/vendor/twitter-bootstrap-3/js/tests/unit/collapse.js b/vendor/twitter-bootstrap-3/js/tests/unit/collapse.js
new file mode 100644
index 000000000..26c0fd844
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/js/tests/unit/collapse.js
@@ -0,0 +1,184 @@
+$ (function ()
+{
+
+ module ("collapse")
+
+ test ("should provide no conflict", function ()
+ {
+ var collapse = $.fn.collapse.noConflict ()
+ ok (!$.fn.collapse, 'collapse was set back to undefined (org value)')
+ $.fn.collapse = collapse
+ })
+
+ test ("should be defined on jquery object", function ()
+ {
+ ok ($ (document.body).collapse, 'collapse method is defined')
+ })
+
+ test ("should return element", function ()
+ {
+ ok ($ (document.body).collapse ()[0] == document.body, 'document.body returned')
+ })
+
+ test ("should show a collapsed element", function ()
+ {
+ var el = $ ('
').collapse ('show')
+ ok (el.hasClass ('in'), 'has class in')
+ ok (/height/.test (el.attr ('style')), 'has height set')
+ })
+
+ test ("should hide a collapsed element", function ()
+ {
+ var el = $ ('
').collapse ('hide')
+ ok (!el.hasClass ('in'), 'does not have class in')
+ ok (/height/.test (el.attr ('style')), 'has height set')
+ })
+
+ test ("should not fire shown when show is prevented", function ()
+ {
+ $.support.transition = false
+ stop ()
+ $ ('
')
+ .on ('show.bs.collapse', function (e)
+ {
+ e.preventDefault ();
+ ok (true);
+ start ();
+ })
+ .on ('shown.bs.collapse', function ()
+ {
+ ok (false);
+ })
+ .collapse ('show')
+ })
+
+ test ("should reset style to auto after finishing opening collapse", function ()
+ {
+ $.support.transition = false
+ stop ()
+ $ ('
')
+ .on ('show.bs.collapse', function ()
+ {
+ ok (this.style.height == '0px')
+ })
+ .on ('shown.bs.collapse', function ()
+ {
+ ok (this.style.height == 'auto')
+ start ()
+ })
+ .collapse ('show')
+ })
+
+ test ("should add active class to target when collapse shown", function ()
+ {
+ $.support.transition = false
+ stop ()
+
+ var target = $ (' ')
+ .appendTo ($ ('#qunit-fixture'))
+
+ var collapsible = $ ('
')
+ .appendTo ($ ('#qunit-fixture'))
+ .on ('show.bs.collapse', function ()
+ {
+ ok (!target.hasClass ('collapsed'))
+ start ()
+ })
+
+ target.click ()
+ })
+
+ test ("should remove active class to target when collapse hidden", function ()
+ {
+ $.support.transition = false
+ stop ()
+
+ var target = $ (' ')
+ .appendTo ($ ('#qunit-fixture'))
+
+ var collapsible = $ ('
')
+ .appendTo ($ ('#qunit-fixture'))
+ .on ('hide.bs.collapse', function ()
+ {
+ ok (target.hasClass ('collapsed'))
+ start ()
+ })
+
+ target.click ()
+ })
+
+ test ("should remove active class from inactive accordion targets", function ()
+ {
+ $.support.transition = false
+ stop ()
+
+ var accordion = $ ('')
+ .appendTo ($ ('#qunit-fixture'))
+
+ var target1 = $ (' ')
+ .appendTo (accordion.find ('.accordion-group').eq (0))
+
+ var collapsible1 = $ ('
')
+ .appendTo (accordion.find ('.accordion-group').eq (0))
+
+ var target2 = $ (' ')
+ .appendTo (accordion.find ('.accordion-group').eq (1))
+
+ var collapsible2 = $ ('
')
+ .appendTo (accordion.find ('.accordion-group').eq (1))
+
+ var target3 = $ (' ')
+ .appendTo (accordion.find ('.accordion-group').eq (2))
+
+ var collapsible3 = $ ('
')
+ .appendTo (accordion.find ('.accordion-group').eq (2))
+ .on ('show.bs.collapse', function ()
+ {
+ ok (target1.hasClass ('collapsed'))
+ ok (target2.hasClass ('collapsed'))
+ ok (!target3.hasClass ('collapsed'))
+
+ start ()
+ })
+
+ target3.click ()
+ })
+
+ test ("should allow dots in data-parent", function ()
+ {
+ $.support.transition = false
+ stop ()
+
+ var accordion = $ ('')
+ .appendTo ($ ('#qunit-fixture'))
+
+ var target1 = $ (' ')
+ .appendTo (accordion.find ('.accordion-group').eq (0))
+
+ var collapsible1 = $ ('
')
+ .appendTo (accordion.find ('.accordion-group').eq (0))
+
+ var target2 = $ (' ')
+ .appendTo (accordion.find ('.accordion-group').eq (1))
+
+ var collapsible2 = $ ('
')
+ .appendTo (accordion.find ('.accordion-group').eq (1))
+
+ var target3 = $ (' ')
+ .appendTo (accordion.find ('.accordion-group').eq (2))
+
+ var collapsible3 = $ ('
')
+ .appendTo (accordion.find ('.accordion-group').eq (2))
+ .on ('show.bs.collapse', function ()
+ {
+ ok (target1.hasClass ('collapsed'))
+ ok (target2.hasClass ('collapsed'))
+ ok (!target3.hasClass ('collapsed'))
+
+ start ()
+ })
+
+ target3.click ()
+ })
+
+})
diff --git a/vendor/twitter-bootstrap-3/js/tests/unit/dropdown.js b/vendor/twitter-bootstrap-3/js/tests/unit/dropdown.js
new file mode 100644
index 000000000..380a6c83b
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/js/tests/unit/dropdown.js
@@ -0,0 +1,235 @@
+$ (function ()
+{
+
+ module ("dropdowns")
+
+ test ("should provide no conflict", function ()
+ {
+ var dropdown = $.fn.dropdown.noConflict ()
+ ok (!$.fn.dropdown, 'dropdown was set back to undefined (org value)')
+ $.fn.dropdown = dropdown
+ })
+
+ test ("should be defined on jquery object", function ()
+ {
+ ok ($ (document.body).dropdown, 'dropdown method is defined')
+ })
+
+ test ("should return element", function ()
+ {
+ var el = $ ("
")
+ ok (el.dropdown ()[0] === el[0], 'same element returned')
+ })
+
+ test ("should not open dropdown if target is disabled", function ()
+ {
+ var dropdownHTML = ''
+ + ''
+ + 'Dropdown '
+ + ''
+ + ' '
+ + ' '
+ , dropdown = $ (dropdownHTML).find ('[data-toggle="dropdown"]').dropdown ().click ()
+
+ ok (!dropdown.parent ('.dropdown').hasClass ('open'), 'open class added on click')
+ })
+
+ test ("should not open dropdown if target is disabled", function ()
+ {
+ var dropdownHTML = ''
+ + ''
+ + 'Dropdown '
+ + ''
+ + ' '
+ + ' '
+ , dropdown = $ (dropdownHTML).find ('[data-toggle="dropdown"]').dropdown ().click ()
+
+ ok (!dropdown.parent ('.dropdown').hasClass ('open'), 'open class added on click')
+ })
+
+ test ("should add class open to menu if clicked", function ()
+ {
+ var dropdownHTML = ''
+ + ''
+ + 'Dropdown '
+ + ''
+ + ' '
+ + ' '
+ , dropdown = $ (dropdownHTML).find ('[data-toggle="dropdown"]').dropdown ().click ()
+
+ ok (dropdown.parent ('.dropdown').hasClass ('open'), 'open class added on click')
+ })
+
+ test ("should test if element has a # before assuming it's a selector", function ()
+ {
+ var dropdownHTML = ''
+ + ''
+ + 'Dropdown '
+ + ''
+ + ' '
+ + ' '
+ , dropdown = $ (dropdownHTML).find ('[data-toggle="dropdown"]').dropdown ().click ()
+
+ ok (dropdown.parent ('.dropdown').hasClass ('open'), 'open class added on click')
+ })
+
+
+ test ("should remove open class if body clicked", function ()
+ {
+ var dropdownHTML = ''
+ + ''
+ + 'Dropdown '
+ + ''
+ + ' '
+ + ' '
+ , dropdown = $ (dropdownHTML)
+ .appendTo ('#qunit-fixture')
+ .find ('[data-toggle="dropdown"]')
+ .dropdown ()
+ .click ()
+
+ ok (dropdown.parent ('.dropdown').hasClass ('open'), 'open class added on click')
+ $ ('body').click ()
+ ok (!dropdown.parent ('.dropdown').hasClass ('open'), 'open class removed')
+ dropdown.remove ()
+ })
+
+ test ("should remove open class if body clicked, with multiple drop downs", function ()
+ {
+ var dropdownHTML =
+ ''
+ + ''
+ + ' Actions '
+ + ' '
+ + ' '
+ + '
'
+ , dropdowns = $ (dropdownHTML).appendTo ('#qunit-fixture').find ('[data-toggle="dropdown"]')
+ , first = dropdowns.first ()
+ , last = dropdowns.last ()
+
+ ok (dropdowns.length == 2, "Should be two dropdowns")
+
+ first.click ()
+ ok (first.parents ('.open').length == 1, 'open class added on click')
+ ok ($ ('#qunit-fixture .open').length == 1, 'only one object is open')
+ $ ('body').click ()
+ ok ($ ("#qunit-fixture .open").length === 0, 'open class removed')
+
+ last.click ()
+ ok (last.parent ('.open').length == 1, 'open class added on click')
+ ok ($ ('#qunit-fixture .open').length == 1, 'only one object is open')
+ $ ('body').click ()
+ ok ($ ("#qunit-fixture .open").length === 0, 'open class removed')
+
+ $ ("#qunit-fixture").html ("")
+ })
+
+ test ("should fire show and hide event", function ()
+ {
+ var dropdownHTML = ''
+ + ''
+ + 'Dropdown '
+ + ''
+ + ' '
+ + ' '
+ , dropdown = $ (dropdownHTML)
+ .appendTo ('#qunit-fixture')
+ .find ('[data-toggle="dropdown"]')
+ .dropdown ()
+
+ stop ()
+
+ dropdown
+ .parent ('.dropdown')
+ .bind ('show.bs.dropdown', function ()
+ {
+ ok (true, 'show was called')
+ })
+ .bind ('hide.bs.dropdown', function ()
+ {
+ ok (true, 'hide was called')
+ start ()
+ })
+
+ dropdown.click ()
+ $ (document.body).click ()
+ })
+
+
+ test ("should fire shown and hiden event", function ()
+ {
+ var dropdownHTML = ''
+ + ''
+ + 'Dropdown '
+ + ''
+ + ' '
+ + ' '
+ , dropdown = $ (dropdownHTML)
+ .appendTo ('#qunit-fixture')
+ .find ('[data-toggle="dropdown"]')
+ .dropdown ()
+
+ stop ()
+
+ dropdown
+ .parent ('.dropdown')
+ .bind ('shown.bs.dropdown', function ()
+ {
+ ok (true, 'show was called')
+ })
+ .bind ('hidden.bs.dropdown', function ()
+ {
+ ok (true, 'hide was called')
+ start ()
+ })
+
+ dropdown.click ()
+ $ (document.body).click ()
+ })
+
+})
diff --git a/vendor/twitter-bootstrap-3/js/tests/unit/modal.js b/vendor/twitter-bootstrap-3/js/tests/unit/modal.js
new file mode 100644
index 000000000..0fa868c08
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/js/tests/unit/modal.js
@@ -0,0 +1,232 @@
+$ (function ()
+{
+
+ module ("modal")
+
+ test ("should provide no conflict", function ()
+ {
+ var modal = $.fn.modal.noConflict ()
+ ok (!$.fn.modal, 'modal was set back to undefined (org value)')
+ $.fn.modal = modal
+ })
+
+ test ("should be defined on jquery object", function ()
+ {
+ var div = $ ("
")
+ ok (div.modal, 'modal method is defined')
+ })
+
+ test ("should return element", function ()
+ {
+ var div = $ ("
")
+ ok (div.modal () == div, 'document.body returned')
+ $ ('#modal-test').remove ()
+ })
+
+ test ("should expose defaults var for settings", function ()
+ {
+ ok ($.fn.modal.Constructor.DEFAULTS, 'default object exposed')
+ })
+
+ test ("should insert into dom when show method is called", function ()
+ {
+ stop ()
+ $.support.transition = false
+ $ ("
")
+ .on ("shown.bs.modal", function ()
+ {
+ ok ($ ('#modal-test').length, 'modal inserted into dom')
+ $ (this).remove ()
+ start ()
+ })
+ .modal ("show")
+ })
+
+ test ("should fire show event", function ()
+ {
+ stop ()
+ $.support.transition = false
+ $ ("
")
+ .on ("show.bs.modal", function ()
+ {
+ ok (true, "show was called")
+ })
+ .on ("shown.bs.modal", function ()
+ {
+ $ (this).remove ()
+ start ()
+ })
+ .modal ("show")
+ })
+
+ test ("should not fire shown when default prevented", function ()
+ {
+ stop ()
+ $.support.transition = false
+ $ ("
")
+ .on ("show.bs.modal", function (e)
+ {
+ e.preventDefault ()
+ ok (true, "show was called")
+ start ()
+ })
+ .on ("shown.bs.modal", function ()
+ {
+ ok (false, "shown was called")
+ })
+ .modal ("show")
+ })
+
+ test ("should hide modal when hide is called", function ()
+ {
+ stop ()
+ $.support.transition = false
+
+ $ ("
")
+ .on ("shown.bs.modal", function ()
+ {
+ ok ($ ('#modal-test').is (":visible"), 'modal visible')
+ ok ($ ('#modal-test').length, 'modal inserted into dom')
+ $ (this).modal ("hide")
+ })
+ .on ("hidden.bs.modal", function ()
+ {
+ ok (!$ ('#modal-test').is (":visible"), 'modal hidden')
+ $ ('#modal-test').remove ()
+ start ()
+ })
+ .modal ("show")
+ })
+
+ test ("should toggle when toggle is called", function ()
+ {
+ stop ()
+ $.support.transition = false
+ var div = $ ("
")
+ div
+ .on ("shown.bs.modal", function ()
+ {
+ ok ($ ('#modal-test').is (":visible"), 'modal visible')
+ ok ($ ('#modal-test').length, 'modal inserted into dom')
+ div.modal ("toggle")
+ })
+ .on ("hidden.bs.modal", function ()
+ {
+ ok (!$ ('#modal-test').is (":visible"), 'modal hidden')
+ div.remove ()
+ start ()
+ })
+ .modal ("toggle")
+ })
+
+ test ("should remove from dom when click [data-dismiss=modal]", function ()
+ {
+ stop ()
+ $.support.transition = false
+ var div = $ ("
")
+ div
+ .on ("shown.bs.modal", function ()
+ {
+ ok ($ ('#modal-test').is (":visible"), 'modal visible')
+ ok ($ ('#modal-test').length, 'modal inserted into dom')
+ div.find ('.close').click ()
+ })
+ .on ("hidden.bs.modal", function ()
+ {
+ ok (!$ ('#modal-test').is (":visible"), 'modal hidden')
+ div.remove ()
+ start ()
+ })
+ .modal ("toggle")
+ })
+
+ test ("should allow modal close with 'backdrop:false'", function ()
+ {
+ stop ()
+ $.support.transition = false
+ var div = $ ("", { id: 'modal-test', "data-backdrop": false })
+ div
+ .on ("shown.bs.modal", function ()
+ {
+ ok ($ ('#modal-test').is (":visible"), 'modal visible')
+ div.modal ("hide")
+ })
+ .on ("hidden.bs.modal", function ()
+ {
+ ok (!$ ('#modal-test').is (":visible"), 'modal hidden')
+ div.remove ()
+ start ()
+ })
+ .modal ("show")
+ })
+
+ test ("should close modal when clicking outside of modal-content", function ()
+ {
+ stop ()
+ $.support.transition = false
+ var div = $ ("
")
+ div
+ .bind ("shown.bs.modal", function ()
+ {
+ ok ($ ('#modal-test').length, 'modal insterted into dom')
+ $ ('.contents').click ()
+ ok ($ ('#modal-test').is (":visible"), 'modal visible')
+ $ ('#modal-test').click ()
+ })
+ .bind ("hidden.bs.modal", function ()
+ {
+ ok (!$ ('#modal-test').is (":visible"), 'modal hidden')
+ div.remove ()
+ start ()
+ })
+ .modal ("show")
+ })
+
+ test ("should trigger hide event once when clicking outside of modal-content", function ()
+ {
+ stop ()
+ $.support.transition = false
+ var div = $ ("
")
+ var triggered
+ div
+ .bind ("shown.bs.modal", function ()
+ {
+ triggered = 0
+ $ ('#modal-test').click ()
+ })
+ .one ("hidden.bs.modal", function ()
+ {
+ div.modal ("show")
+ })
+ .bind ("hide.bs.modal", function ()
+ {
+ triggered += 1
+ ok (triggered === 1, 'modal hide triggered once')
+ start ()
+ })
+ .modal ("show")
+ })
+
+ test ("should close reopened modal with [data-dismiss=modal] click", function ()
+ {
+ stop ()
+ $.support.transition = false
+ var div = $ ("
")
+ div
+ .bind ("shown.bs.modal", function ()
+ {
+ $ ('#close').click ()
+ ok (!$ ('#modal-test').is (":visible"), 'modal hidden')
+ })
+ .one ("hidden.bs.modal", function ()
+ {
+ div.one ('hidden.bs.modal',function ()
+ {
+ start ()
+ }).modal ("show")
+ })
+ .modal ("show")
+
+ div.remove ()
+ })
+})
diff --git a/vendor/twitter-bootstrap-3/js/tests/unit/phantom.js b/vendor/twitter-bootstrap-3/js/tests/unit/phantom.js
new file mode 100644
index 000000000..61f286112
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/js/tests/unit/phantom.js
@@ -0,0 +1,83 @@
+/*
+ * grunt-contrib-qunit
+ * http://gruntjs.com/
+ *
+ * Copyright (c) 2013 "Cowboy" Ben Alman, contributors
+ * Licensed under the MIT license.
+ */
+
+/*global QUnit:true, alert:true*/
+(function ()
+{
+ 'use strict';
+
+ // Don't re-order tests.
+ QUnit.config.reorder = false
+ // Run tests serially, not in parallel.
+ QUnit.config.autorun = false
+
+ // Send messages to the parent PhantomJS process via alert! Good times!!
+ function sendMessage ()
+ {
+ var args = [].slice.call (arguments)
+ alert (JSON.stringify (args))
+ }
+
+ // These methods connect QUnit to PhantomJS.
+ QUnit.log = function (obj)
+ {
+ // What is this I don’t even
+ if (obj.message === '[object Object], undefined:undefined')
+ {
+ return
+ }
+ // Parse some stuff before sending it.
+ var actual = QUnit.jsDump.parse (obj.actual)
+ var expected = QUnit.jsDump.parse (obj.expected)
+ // Send it.
+ sendMessage ('qunit.log', obj.result, actual, expected, obj.message, obj.source)
+ }
+
+ QUnit.testStart = function (obj)
+ {
+ sendMessage ('qunit.testStart', obj.name)
+ }
+
+ QUnit.testDone = function (obj)
+ {
+ sendMessage ('qunit.testDone', obj.name, obj.failed, obj.passed, obj.total)
+ }
+
+ QUnit.moduleStart = function (obj)
+ {
+ sendMessage ('qunit.moduleStart', obj.name)
+ }
+
+ QUnit.begin = function ()
+ {
+ sendMessage ('qunit.begin')
+ console.log ("Starting test suite")
+ console.log ("================================================\n")
+ }
+
+ QUnit.moduleDone = function (opts)
+ {
+ if (opts.failed === 0)
+ {
+ console.log ("\r\u2714 All tests passed in '" + opts.name + "' module")
+ } else
+ {
+ console.log ("\u2716 " + opts.failed + " tests failed in '" + opts.name + "' module")
+ }
+ sendMessage ('qunit.moduleDone', opts.name, opts.failed, opts.passed, opts.total)
+ }
+
+ QUnit.done = function (opts)
+ {
+ console.log ("\n================================================")
+ console.log ("Tests completed in " + opts.runtime + " milliseconds")
+ console.log (opts.passed + " tests of " + opts.total + " passed, " + opts.failed + " failed.")
+ sendMessage ('qunit.done', opts.failed, opts.passed, opts.total, opts.runtime)
+ }
+
+} ())
diff --git a/vendor/twitter-bootstrap-3/js/tests/unit/popover.js b/vendor/twitter-bootstrap-3/js/tests/unit/popover.js
new file mode 100644
index 000000000..6e565d210
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/js/tests/unit/popover.js
@@ -0,0 +1,145 @@
+$ (function ()
+{
+
+ module ("popover")
+
+ test ("should provide no conflict", function ()
+ {
+ var popover = $.fn.popover.noConflict ()
+ ok (!$.fn.popover, 'popover was set back to undefined (org value)')
+ $.fn.popover = popover
+ })
+
+ test ("should be defined on jquery object", function ()
+ {
+ var div = $ ('
')
+ ok (div.popover, 'popover method is defined')
+ })
+
+ test ("should return element", function ()
+ {
+ var div = $ ('
')
+ ok (div.popover () == div, 'document.body returned')
+ })
+
+ test ("should render popover element", function ()
+ {
+ $.support.transition = false
+ var popover = $ ('
@mdo ')
+ .appendTo ('#qunit-fixture')
+ .popover ('show')
+
+ ok ($ ('.popover').length, 'popover was inserted')
+ popover.popover ('hide')
+ ok (!$ (".popover").length, 'popover removed')
+ })
+
+ test ("should store popover instance in popover data object", function ()
+ {
+ $.support.transition = false
+ var popover = $ ('
@mdo ')
+ .popover ()
+
+ ok (!!popover.data ('bs.popover'), 'popover instance exists')
+ })
+
+ test ("should get title and content from options", function ()
+ {
+ $.support.transition = false
+ var popover = $ ('
@fat ')
+ .appendTo ('#qunit-fixture')
+ .popover ({
+ title: function ()
+ {
+ return '@fat'
+ }, content: function ()
+ {
+ return 'loves writing tests (╯°□°)╯︵ ┻━┻'
+ }
+ })
+
+ popover.popover ('show')
+
+ ok ($ ('.popover').length, 'popover was inserted')
+ equals ($ ('.popover .popover-title').text (), '@fat', 'title correctly inserted')
+ equals ($ ('.popover .popover-content').text (), 'loves writing tests (╯°□°)╯︵ ┻━┻', 'content correctly inserted')
+
+ popover.popover ('hide')
+ ok (!$ ('.popover').length, 'popover was removed')
+ $ ('#qunit-fixture').empty ()
+ })
+
+ test ("should get title and content from attributes", function ()
+ {
+ $.support.transition = false
+ var popover = $ ('
@mdo ')
+ .appendTo ('#qunit-fixture')
+ .popover ()
+ .popover ('show')
+
+ ok ($ ('.popover').length, 'popover was inserted')
+ equals ($ ('.popover .popover-title').text (), '@mdo', 'title correctly inserted')
+ equals ($ ('.popover .popover-content').text (), "loves data attributes (づ。◕‿‿◕。)づ ︵ ┻━┻", 'content correctly inserted')
+
+ popover.popover ('hide')
+ ok (!$ ('.popover').length, 'popover was removed')
+ $ ('#qunit-fixture').empty ()
+ })
+
+
+ test ("should get title and content from attributes #2", function ()
+ {
+ $.support.transition = false
+ var popover = $ ('
@mdo ')
+ .appendTo ('#qunit-fixture')
+ .popover ({
+ title: 'ignored title option',
+ content: 'ignored content option'
+ })
+ .popover ('show')
+
+ ok ($ ('.popover').length, 'popover was inserted')
+ equals ($ ('.popover .popover-title').text (), '@mdo', 'title correctly inserted')
+ equals ($ ('.popover .popover-content').text (), "loves data attributes (づ。◕‿‿◕。)づ ︵ ┻━┻", 'content correctly inserted')
+
+ popover.popover ('hide')
+ ok (!$ ('.popover').length, 'popover was removed')
+ $ ('#qunit-fixture').empty ()
+ })
+
+ test ("should respect custom classes", function ()
+ {
+ $.support.transition = false
+ var popover = $ ('
@fat ')
+ .appendTo ('#qunit-fixture')
+ .popover ({
+ title: 'Test', content: 'Test', template: '
'
+ })
+
+ popover.popover ('show')
+
+ ok ($ ('.popover').length, 'popover was inserted')
+ ok ($ ('.popover').hasClass ('foobar'), 'custom class is present')
+
+ popover.popover ('hide')
+ ok (!$ ('.popover').length, 'popover was removed')
+ $ ('#qunit-fixture').empty ()
+ })
+
+ test ("should destroy popover", function ()
+ {
+ var popover = $ ('
').popover ({trigger: 'hover'}).on ('click.foo', function ()
+ {
+ })
+ ok (popover.data ('bs.popover'), 'popover has data')
+ ok ($._data (popover[0], 'events').mouseover && $._data (popover[0], 'events').mouseout, 'popover has hover event')
+ ok ($._data (popover[0], 'events').click[0].namespace == 'foo', 'popover has extra click.foo event')
+ popover.popover ('show')
+ popover.popover ('destroy')
+ ok (!popover.hasClass ('in'), 'popover is hidden')
+ ok (!popover.data ('popover'), 'popover does not have data')
+ ok ($._data (popover[0], 'events').click[0].namespace == 'foo', 'popover still has click.foo')
+ ok (!$._data (popover[0], 'events').mouseover && !$._data (popover[0], 'events').mouseout, 'popover does not have any events')
+ })
+
+})
diff --git a/vendor/twitter-bootstrap-3/js/tests/unit/scrollspy.js b/vendor/twitter-bootstrap-3/js/tests/unit/scrollspy.js
new file mode 100644
index 000000000..4e20339ca
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/js/tests/unit/scrollspy.js
@@ -0,0 +1,42 @@
+$ (function ()
+{
+
+ module ("scrollspy")
+
+ test ("should provide no conflict", function ()
+ {
+ var scrollspy = $.fn.scrollspy.noConflict ()
+ ok (!$.fn.scrollspy, 'scrollspy was set back to undefined (org value)')
+ $.fn.scrollspy = scrollspy
+ })
+
+ test ("should be defined on jquery object", function ()
+ {
+ ok ($ (document.body).scrollspy, 'scrollspy method is defined')
+ })
+
+ test ("should return element", function ()
+ {
+ ok ($ (document.body).scrollspy ()[0] == document.body, 'document.body returned')
+ })
+
+ test ("should switch active class on scroll", function ()
+ {
+ var sectionHTML = '
'
+ , $section = $ (sectionHTML).append ('#qunit-fixture')
+ , topbarHTML = '
'
+ , $topbar = $ (topbarHTML).scrollspy ()
+
+ ok ($topbar.find ('.active', true))
+ })
+
+})
diff --git a/vendor/twitter-bootstrap-3/js/tests/unit/tab.js b/vendor/twitter-bootstrap-3/js/tests/unit/tab.js
new file mode 100644
index 000000000..86d8cffa0
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/js/tests/unit/tab.js
@@ -0,0 +1,98 @@
+$ (function ()
+{
+
+ module ("tabs")
+
+ test ("should provide no conflict", function ()
+ {
+ var tab = $.fn.tab.noConflict ()
+ ok (!$.fn.tab, 'tab was set back to undefined (org value)')
+ $.fn.tab = tab
+ })
+
+ test ("should be defined on jquery object", function ()
+ {
+ ok ($ (document.body).tab, 'tabs method is defined')
+ })
+
+ test ("should return element", function ()
+ {
+ ok ($ (document.body).tab ()[0] == document.body, 'document.body returned')
+ })
+
+ test ("should activate element by tab id", function ()
+ {
+ var tabsHTML =
+ '
'
+
+ $ ('
').appendTo ("#qunit-fixture")
+
+ $ (tabsHTML).find ('li:last a').tab ('show')
+ equals ($ ("#qunit-fixture").find ('.active').attr ('id'), "profile")
+
+ $ (tabsHTML).find ('li:first a').tab ('show')
+ equals ($ ("#qunit-fixture").find ('.active').attr ('id'), "home")
+ })
+
+ test ("should activate element by tab id", function ()
+ {
+ var pillsHTML =
+ '
'
+
+ $ ('
').appendTo ("#qunit-fixture")
+
+ $ (pillsHTML).find ('li:last a').tab ('show')
+ equals ($ ("#qunit-fixture").find ('.active').attr ('id'), "profile")
+
+ $ (pillsHTML).find ('li:first a').tab ('show')
+ equals ($ ("#qunit-fixture").find ('.active').attr ('id'), "home")
+ })
+
+
+ test ("should not fire closed when close is prevented", function ()
+ {
+ $.support.transition = false
+ stop ();
+ $ ('
')
+ .on ('show.bs.tab', function (e)
+ {
+ e.preventDefault ();
+ ok (true);
+ start ();
+ })
+ .on ('shown.bs.tab', function ()
+ {
+ ok (false);
+ })
+ .tab ('show')
+ })
+
+ test ("show and shown events should reference correct relatedTarget", function ()
+ {
+ var dropHTML =
+ '
'
+ + '1 '
+ + ''
+ + ' '
+ + ' '
+
+ $ (dropHTML).find ('ul>li:first a').tab ('show').end ()
+ .find ('ul>li:last a').on ('show',function (event)
+ {
+ equals (event.relatedTarget.hash, "#1-1")
+ }).on ('shown',function (event)
+ {
+ equals (event.relatedTarget.hash, "#1-1")
+ }).tab ('show')
+ })
+
+})
diff --git a/vendor/twitter-bootstrap-3/js/tests/unit/tooltip.js b/vendor/twitter-bootstrap-3/js/tests/unit/tooltip.js
new file mode 100644
index 000000000..e0a19e9da
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/js/tests/unit/tooltip.js
@@ -0,0 +1,494 @@
+$ (function ()
+{
+
+ module ("tooltip")
+
+ test ("should provide no conflict", function ()
+ {
+ var tooltip = $.fn.tooltip.noConflict ()
+ ok (!$.fn.tooltip, 'tooltip was set back to undefined (org value)')
+ $.fn.tooltip = tooltip
+ })
+
+ test ("should be defined on jquery object", function ()
+ {
+ var div = $ ("
")
+ ok (div.tooltip, 'popover method is defined')
+ })
+
+ test ("should return element", function ()
+ {
+ var div = $ ("
")
+ ok (div.tooltip () == div, 'document.body returned')
+ })
+
+ test ("should expose default settings", function ()
+ {
+ ok (!!$.fn.tooltip.Constructor.DEFAULTS, 'defaults is defined')
+ })
+
+ test ("should empty title attribute", function ()
+ {
+ var tooltip = $ ('
').tooltip ()
+ ok (tooltip.attr ('title') === '', 'title attribute was emptied')
+ })
+
+ test ("should add data attribute for referencing original title", function ()
+ {
+ var tooltip = $ ('
').tooltip ()
+ equals (tooltip.attr ('data-original-title'), 'Another tooltip', 'original title preserved in data attribute')
+ })
+
+ test ("should place tooltips relative to placement option", function ()
+ {
+ $.support.transition = false
+ var tooltip = $ ('
')
+ .appendTo ('#qunit-fixture')
+ .tooltip ({placement: 'bottom'})
+ .tooltip ('show')
+
+ ok ($ (".tooltip").is ('.fade.bottom.in'), 'has correct classes applied')
+ tooltip.tooltip ('hide')
+ })
+
+ test ("should allow html entities", function ()
+ {
+ $.support.transition = false
+ var tooltip = $ ('
')
+ .appendTo ('#qunit-fixture')
+ .tooltip ({html: true})
+ .tooltip ('show')
+
+ ok ($ ('.tooltip b').length, 'b tag was inserted')
+ tooltip.tooltip ('hide')
+ ok (!$ (".tooltip").length, 'tooltip removed')
+ })
+
+ test ("should respect custom classes", function ()
+ {
+ var tooltip = $ ('
')
+ .appendTo ('#qunit-fixture')
+ .tooltip ({ template: '
'})
+ .tooltip ('show')
+
+ ok ($ ('.tooltip').hasClass ('some-class'), 'custom class is present')
+ tooltip.tooltip ('hide')
+ ok (!$ (".tooltip").length, 'tooltip removed')
+ })
+
+ test ("should fire show event", function ()
+ {
+ stop ()
+ var tooltip = $ ('
')
+ .on ("show.bs.tooltip", function ()
+ {
+ ok (true, "show was called")
+ start ()
+ })
+ .tooltip ('show')
+ })
+
+ test ("should fire shown event", function ()
+ {
+ stop ()
+ var tooltip = $ ('
')
+ .on ("shown.bs.tooltip", function ()
+ {
+ ok (true, "shown was called")
+ start ()
+ })
+ .tooltip ('show')
+ })
+
+ test ("should not fire shown event when default prevented", function ()
+ {
+ stop ()
+ var tooltip = $ ('
')
+ .on ("show.bs.tooltip", function (e)
+ {
+ e.preventDefault ()
+ ok (true, "show was called")
+ start ()
+ })
+ .on ("shown.bs.tooltip", function ()
+ {
+ ok (false, "shown was called")
+ })
+ .tooltip ('show')
+ })
+
+ test ("should fire hide event", function ()
+ {
+ stop ()
+ var tooltip = $ ('
')
+ .on ("shown.bs.tooltip", function ()
+ {
+ $ (this).tooltip ('hide')
+ })
+ .on ("hide.bs.tooltip", function ()
+ {
+ ok (true, "hide was called")
+ start ()
+ })
+ .tooltip ('show')
+ })
+
+ test ("should fire hidden event", function ()
+ {
+ stop ()
+ var tooltip = $ ('
')
+ .on ("shown.bs.tooltip", function ()
+ {
+ $ (this).tooltip ('hide')
+ })
+ .on ("hidden.bs.tooltip", function ()
+ {
+ ok (true, "hidden was called")
+ start ()
+ })
+ .tooltip ('show')
+ })
+
+ test ("should not fire hidden event when default prevented", function ()
+ {
+ stop ()
+ var tooltip = $ ('
')
+ .on ("shown.bs.tooltip", function ()
+ {
+ $ (this).tooltip ('hide')
+ })
+ .on ("hide.bs.tooltip", function (e)
+ {
+ e.preventDefault ()
+ ok (true, "hide was called")
+ start ()
+ })
+ .on ("hidden.bs.tooltip", function ()
+ {
+ ok (false, "hidden was called")
+ })
+ .tooltip ('show')
+ })
+
+ test ("should not show tooltip if leave event occurs before delay expires", function ()
+ {
+ var tooltip = $ ('
')
+ .appendTo ('#qunit-fixture')
+ .tooltip ({ delay: 200 })
+
+ stop ()
+
+ tooltip.trigger ('mouseenter')
+
+ setTimeout (function ()
+ {
+ ok (!$ (".tooltip").is ('.fade.in'), 'tooltip is not faded in')
+ tooltip.trigger ('mouseout')
+ setTimeout (function ()
+ {
+ ok (!$ (".tooltip").is ('.fade.in'), 'tooltip is not faded in')
+ start ()
+ }, 200)
+ }, 100)
+ })
+
+ test ("should not show tooltip if leave event occurs before delay expires, even if hide delay is 0", function ()
+ {
+ var tooltip = $ ('
')
+ .appendTo ('#qunit-fixture')
+ .tooltip ({ delay: { show: 200, hide: 0} })
+
+ stop ()
+
+ tooltip.trigger ('mouseenter')
+
+ setTimeout (function ()
+ {
+ ok (!$ (".tooltip").is ('.fade.in'), 'tooltip is not faded in')
+ tooltip.trigger ('mouseout')
+ setTimeout (function ()
+ {
+ ok (!$ (".tooltip").is ('.fade.in'), 'tooltip is not faded in')
+ start ()
+ }, 200)
+ }, 100)
+ })
+
+ test ("should wait 200 ms before hiding the tooltip", 3, function ()
+ {
+ var tooltip = $ ('
')
+ .appendTo ('#qunit-fixture')
+ .tooltip ({ delay: { show: 0, hide: 200} })
+
+ stop ()
+
+ tooltip.trigger ('mouseenter')
+
+ setTimeout (function ()
+ {
+ ok ($ (".tooltip").is ('.fade.in'), 'tooltip is faded in')
+ tooltip.trigger ('mouseout')
+ setTimeout (function ()
+ {
+ ok ($ (".tooltip").is ('.fade.in'), '100ms:tooltip is still faded in')
+ setTimeout (function ()
+ {
+ ok (!$ (".tooltip").is ('.in'), 'tooltip removed')
+ start ()
+ }, 150)
+ }, 100)
+ }, 1)
+ })
+
+ test ("should not hide tooltip if leave event occurs, then tooltip is show immediately again", function ()
+ {
+ var tooltip = $ ('
')
+ .appendTo ('#qunit-fixture')
+ .tooltip ({ delay: { show: 0, hide: 200} })
+
+ stop ()
+
+ tooltip.trigger ('mouseenter')
+
+ setTimeout (function ()
+ {
+ ok ($ (".tooltip").is ('.fade.in'), 'tooltip is faded in')
+ tooltip.trigger ('mouseout')
+ setTimeout (function ()
+ {
+ ok ($ (".tooltip").is ('.fade.in'), '100ms:tooltip is still faded in')
+ tooltip.trigger ('mouseenter')
+ setTimeout (function ()
+ {
+ ok ($ (".tooltip").is ('.in'), 'tooltip removed')
+ start ()
+ }, 150)
+ }, 100)
+ }, 1)
+ })
+
+ test ("should not show tooltip if leave event occurs before delay expires", function ()
+ {
+ var tooltip = $ ('
')
+ .appendTo ('#qunit-fixture')
+ .tooltip ({ delay: 100 })
+ stop ()
+ tooltip.trigger ('mouseenter')
+ setTimeout (function ()
+ {
+ ok (!$ (".tooltip").is ('.fade.in'), 'tooltip is not faded in')
+ tooltip.trigger ('mouseout')
+ setTimeout (function ()
+ {
+ ok (!$ (".tooltip").is ('.fade.in'), 'tooltip is not faded in')
+ start ()
+ }, 100)
+ }, 50)
+ })
+
+ test ("should show tooltip if leave event hasn't occured before delay expires", function ()
+ {
+ var tooltip = $ ('
')
+ .appendTo ('#qunit-fixture')
+ .tooltip ({ delay: 150 })
+ stop ()
+ tooltip.trigger ('mouseenter')
+ setTimeout (function ()
+ {
+ ok (!$ (".tooltip").is ('.fade.in'), 'tooltip is not faded in')
+ }, 100)
+ setTimeout (function ()
+ {
+ ok ($ (".tooltip").is ('.fade.in'), 'tooltip has faded in')
+ start ()
+ }, 200)
+ })
+
+ test ("should destroy tooltip", function ()
+ {
+ var tooltip = $ ('
').tooltip ().on ('click.foo', function ()
+ {
+ })
+ ok (tooltip.data ('bs.tooltip'), 'tooltip has data')
+ ok ($._data (tooltip[0], 'events').mouseover && $._data (tooltip[0], 'events').mouseout, 'tooltip has hover event')
+ ok ($._data (tooltip[0], 'events').click[0].namespace == 'foo', 'tooltip has extra click.foo event')
+ tooltip.tooltip ('show')
+ tooltip.tooltip ('destroy')
+ ok (!tooltip.hasClass ('in'), 'tooltip is hidden')
+ ok (!$._data (tooltip[0], 'bs.tooltip'), 'tooltip does not have data')
+ ok ($._data (tooltip[0], 'events').click[0].namespace == 'foo', 'tooltip still has click.foo')
+ ok (!$._data (tooltip[0], 'events').mouseover && !$._data (tooltip[0], 'events').mouseout, 'tooltip does not have any events')
+ })
+
+ test ("should show tooltip with delegate selector on click", function ()
+ {
+ var div = $ ('
')
+ var tooltip = div.appendTo ('#qunit-fixture')
+ .tooltip ({ selector: 'a[rel=tooltip]',
+ trigger: 'click' })
+ div.find ('a').trigger ('click')
+ ok ($ (".tooltip").is ('.fade.in'), 'tooltip is faded in')
+ })
+
+ test ("should show tooltip when toggle is called", function ()
+ {
+ var tooltip = $ ('
')
+ .appendTo ('#qunit-fixture')
+ .tooltip ({trigger: 'manual'})
+ .tooltip ('toggle')
+ ok ($ (".tooltip").is ('.fade.in'), 'tooltip should be toggled in')
+ })
+
+ test ("should place tooltips inside the body", function ()
+ {
+ var tooltip = $ ('
')
+ .appendTo ('#qunit-fixture')
+ .tooltip ({container: 'body'})
+ .tooltip ('show')
+ ok ($ ("body > .tooltip").length, 'inside the body')
+ ok (!$ ("#qunit-fixture > .tooltip").length, 'not found in parent')
+ tooltip.tooltip ('hide')
+ })
+
+ test ("should place tooltip inside window", function ()
+ {
+ var container = $ ("
").appendTo ("body")
+ .css ({position: "absolute", width: 200, height: 200, bottom: 0, left: 0})
+ , tooltip = $ ("
Hover me ")
+ .css ({position: "absolute", top: 0, left: 0})
+ .appendTo (container)
+ .tooltip ({placement: "top", animate: false})
+ .tooltip ("show")
+
+ stop ()
+
+ setTimeout (function ()
+ {
+ ok ($ (".tooltip").offset ().left >= 0)
+
+ start ()
+ container.remove ()
+ }, 100)
+ })
+
+ test ("should place tooltip on top of element", function ()
+ {
+ var container = $ ("
").appendTo ("body")
+ .css ({position: "absolute", bottom: 0, left: 0, textAlign: "right", width: 300, height: 300})
+ , p = $ ("
").appendTo (container)
+ , tooltiped = $ ("
Hover me ")
+ .css ({marginTop: 200})
+ .appendTo (p)
+ .tooltip ({placement: "top", animate: false})
+ .tooltip ("show")
+
+ stop ()
+
+ setTimeout (function ()
+ {
+ var tooltip = container.find (".tooltip")
+
+ start ()
+ ok (tooltip.offset ().top + tooltip.outerHeight () <= tooltiped.offset ().top)
+ container.remove ()
+ }, 100)
+ })
+
+ test ("should add position class before positioning so that position-specific styles are taken into account", function ()
+ {
+ $ ("head").append ('')
+
+ var container = $ ("
").appendTo ("body")
+ , target = $ ('
')
+ .appendTo (container)
+ .tooltip ({placement: 'right'})
+ .tooltip ('show')
+ , tooltip = container.find (".tooltip")
+
+ ok (Math.round (target.offset ().top + target[0].offsetHeight / 2 - tooltip[0].offsetHeight / 2) === Math.round (tooltip.offset ().top))
+ target.tooltip ('hide')
+ })
+
+ test ("tooltip title test #1", function ()
+ {
+ var tooltip = $ ('
')
+ .appendTo ('#qunit-fixture')
+ .tooltip ({
+ })
+ .tooltip ('show')
+ equal ($ ('.tooltip').children ('.tooltip-inner').text (), 'Simple tooltip', 'title from title attribute is set')
+ tooltip.tooltip ('hide')
+ ok (!$ (".tooltip").length, 'tooltip removed')
+ })
+
+ test ("tooltip title test #2", function ()
+ {
+ var tooltip = $ ('
')
+ .appendTo ('#qunit-fixture')
+ .tooltip ({
+ title: 'This is a tooltip with some content'
+ })
+ .tooltip ('show')
+ equal ($ ('.tooltip').children ('.tooltip-inner').text (), 'Simple tooltip', 'title is set from title attribute while prefered over title option')
+ tooltip.tooltip ('hide')
+ ok (!$ (".tooltip").length, 'tooltip removed')
+ })
+
+ test ("tooltip title test #3", function ()
+ {
+ var tooltip = $ ('
')
+ .appendTo ('#qunit-fixture')
+ .tooltip ({
+ title: 'This is a tooltip with some content'
+ })
+ .tooltip ('show')
+ equal ($ ('.tooltip').children ('.tooltip-inner').text (), 'This is a tooltip with some content', 'title from title option is set')
+ tooltip.tooltip ('hide')
+ ok (!$ (".tooltip").length, 'tooltip removed')
+ })
+
+ test ("tooltips should be placed dynamically, with the dynamic placement option", function ()
+ {
+ $.support.transition = false
+ var ttContainer = $ ('
').css ({
+ 'height': 400, 'overflow': 'hidden', 'position': 'absolute', 'top': 0, 'left': 0, 'width': 600})
+ .appendTo ('body')
+
+ var topTooltip = $ ('
Top Dynamic Tooltip
')
+ .appendTo ('#dynamic-tt-test')
+ .tooltip ({placement: 'auto'})
+ .tooltip ('show')
+
+
+ ok ($ (".tooltip").is ('.bottom'), 'top positioned tooltip is dynamically positioned bottom')
+
+ topTooltip.tooltip ('hide')
+
+ var rightTooltip = $ ('
Right Dynamic Tooltip
')
+ .appendTo ('#dynamic-tt-test')
+ .tooltip ({placement: 'right auto'})
+ .tooltip ('show')
+
+ ok ($ (".tooltip").is ('.left'), 'right positioned tooltip is dynamically positioned left')
+ rightTooltip.tooltip ('hide')
+
+ var bottomTooltip = $ ('
Bottom Dynamic Tooltip
')
+ .appendTo ('#dynamic-tt-test')
+ .tooltip ({placement: 'auto bottom'})
+ .tooltip ('show')
+
+ ok ($ (".tooltip").is ('.top'), 'bottom positioned tooltip is dynamically positioned top')
+ bottomTooltip.tooltip ('hide')
+
+ var leftTooltip = $ ('
Left Dynamic Tooltip
')
+ .appendTo ('#dynamic-tt-test')
+ .tooltip ({placement: 'auto left'})
+ .tooltip ('show')
+
+ ok ($ (".tooltip").is ('.right'), 'left positioned tooltip is dynamically positioned right')
+ leftTooltip.tooltip ('hide')
+
+ ttContainer.remove ()
+ })
+
+})
diff --git a/vendor/twitter-bootstrap-3/js/tests/unit/transition.js b/vendor/twitter-bootstrap-3/js/tests/unit/transition.js
new file mode 100644
index 000000000..6877b53d4
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/js/tests/unit/transition.js
@@ -0,0 +1,16 @@
+$ (function ()
+{
+
+ module ("transition")
+
+ test ("should be defined on jquery support object", function ()
+ {
+ ok ($.support.transition !== undefined, 'transition object is defined')
+ })
+
+ test ("should provide an end object", function ()
+ {
+ ok ($.support.transition ? $.support.transition.end : true, 'end string is defined')
+ })
+
+})
diff --git a/vendor/twitter-bootstrap-3/js/tests/vendor/jquery.js b/vendor/twitter-bootstrap-3/js/tests/vendor/jquery.js
new file mode 100644
index 000000000..32e39c4d2
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/js/tests/vendor/jquery.js
@@ -0,0 +1,2960 @@
+/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license
+ //@ sourceMappingURL=jquery-1.10.2.min.map
+ */
+(function (e, t)
+{
+ var n, r, i = typeof t, o = e.location, a = e.document, s = a.documentElement, l = e.jQuery, u = e.$, c = {}, p = [], f = "1.10.2", d = p.concat, h = p.push, g = p.slice, m = p.indexOf, y = c.toString, v = c.hasOwnProperty, b = f.trim, x = function (e, t)
+ {
+ return new x.fn.init (e, t, r)
+ }, w = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, T = /\S+/g, C = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, N = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, k = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, E = /^[\],:{}\s]*$/, S = /(?:^|:|,)(?:\s*\[)+/g, A = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, j = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g, D = /^-ms-/, L = /-([\da-z])/gi, H = function (e, t)
+ {
+ return t.toUpperCase ()
+ }, q = function (e)
+ {
+ (a.addEventListener || "load" === e.type || "complete" === a.readyState) && (_ (), x.ready ())
+ }, _ = function ()
+ {
+ a.addEventListener ? (a.removeEventListener ("DOMContentLoaded", q, !1), e.removeEventListener ("load", q, !1)) : (a.detachEvent ("onreadystatechange", q), e.detachEvent ("onload", q))
+ };
+ x.fn = x.prototype = {jquery: f, constructor: x, init: function (e, n, r)
+ {
+ var i, o;
+ if (!e)return this;
+ if ("string" == typeof e)
+ {
+ if (i = "<" === e.charAt (0) && ">" === e.charAt (e.length - 1) && e.length >= 3 ? [null, e, null] : N.exec (e), !i || !i[1] && n)return!n || n.jquery ? (n || r).find (e) : this.constructor (n).find (e);
+ if (i[1])
+ {
+ if (n = n instanceof x ? n[0] : n, x.merge (this, x.parseHTML (i[1], n && n.nodeType ? n.ownerDocument || n : a, !0)), k.test (i[1]) && x.isPlainObject (n))for (i in n)x.isFunction (this[i]) ? this[i] (n[i]) : this.attr (i, n[i]);
+ return this
+ }
+ if (o = a.getElementById (i[2]), o && o.parentNode)
+ {
+ if (o.id !== i[2])return r.find (e);
+ this.length = 1, this[0] = o
+ }
+ return this.context = a, this.selector = e, this
+ }
+ return e.nodeType ? (this.context = this[0] = e, this.length = 1, this) : x.isFunction (e) ? r.ready (e) : (e.selector !== t && (this.selector = e.selector, this.context = e.context), x.makeArray (e, this))
+ }, selector: "", length: 0, toArray: function ()
+ {
+ return g.call (this)
+ }, get: function (e)
+ {
+ return null == e ? this.toArray () : 0 > e ? this[this.length + e] : this[e]
+ }, pushStack: function (e)
+ {
+ var t = x.merge (this.constructor (), e);
+ return t.prevObject = this, t.context = this.context, t
+ }, each: function (e, t)
+ {
+ return x.each (this, e, t)
+ }, ready: function (e)
+ {
+ return x.ready.promise ().done (e), this
+ }, slice: function ()
+ {
+ return this.pushStack (g.apply (this, arguments))
+ }, first: function ()
+ {
+ return this.eq (0)
+ }, last: function ()
+ {
+ return this.eq (-1)
+ }, eq: function (e)
+ {
+ var t = this.length, n = +e + (0 > e ? t : 0);
+ return this.pushStack (n >= 0 && t > n ? [this[n]] : [])
+ }, map: function (e)
+ {
+ return this.pushStack (x.map (this, function (t, n)
+ {
+ return e.call (t, n, t)
+ }))
+ }, end: function ()
+ {
+ return this.prevObject || this.constructor (null)
+ }, push: h, sort: [].sort, splice: [].splice}, x.fn.init.prototype = x.fn, x.extend = x.fn.extend = function ()
+ {
+ var e, n, r, i, o, a, s = arguments[0] || {}, l = 1, u = arguments.length, c = !1;
+ for ("boolean" == typeof s && (c = s, s = arguments[1] || {}, l = 2), "object" == typeof s || x.isFunction (s) || (s = {}), u === l && (s = this, --l); u > l; l++)if (null != (o = arguments[l]))for (i in o)e = s[i], r = o[i], s !== r && (c && r && (x.isPlainObject (r) || (n = x.isArray (r))) ? (n ? (n = !1, a = e && x.isArray (e) ? e : []) : a = e && x.isPlainObject (e) ? e : {}, s[i] = x.extend (c, a, r)) : r !== t && (s[i] = r));
+ return s
+ }, x.extend ({expando: "jQuery" + (f + Math.random ()).replace (/\D/g, ""), noConflict: function (t)
+ {
+ return e.$ === x && (e.$ = u), t && e.jQuery === x && (e.jQuery = l), x
+ }, isReady: !1, readyWait: 1, holdReady: function (e)
+ {
+ e ? x.readyWait++ : x.ready (!0)
+ }, ready: function (e)
+ {
+ if (e === !0 ? !--x.readyWait : !x.isReady)
+ {
+ if (!a.body)return setTimeout (x.ready);
+ x.isReady = !0, e !== !0 && --x.readyWait > 0 || (n.resolveWith (a, [x]), x.fn.trigger && x (a).trigger ("ready").off ("ready"))
+ }
+ }, isFunction: function (e)
+ {
+ return"function" === x.type (e)
+ }, isArray: Array.isArray || function (e)
+ {
+ return"array" === x.type (e)
+ }, isWindow: function (e)
+ {
+ return null != e && e == e.window
+ }, isNumeric: function (e)
+ {
+ return!isNaN (parseFloat (e)) && isFinite (e)
+ }, type: function (e)
+ {
+ return null == e ? e + "" : "object" == typeof e || "function" == typeof e ? c[y.call (e)] || "object" : typeof e
+ }, isPlainObject: function (e)
+ {
+ var n;
+ if (!e || "object" !== x.type (e) || e.nodeType || x.isWindow (e))return!1;
+ try
+ {
+ if (e.constructor && !v.call (e, "constructor") && !v.call (e.constructor.prototype, "isPrototypeOf"))return!1
+ } catch (r)
+ {
+ return!1
+ }
+ if (x.support.ownLast)for (n in e)return v.call (e, n);
+ for (n in e);
+ return n === t || v.call (e, n)
+ }, isEmptyObject: function (e)
+ {
+ var t;
+ for (t in e)return!1;
+ return!0
+ }, error: function (e)
+ {
+ throw Error (e)
+ }, parseHTML: function (e, t, n)
+ {
+ if (!e || "string" != typeof e)return null;
+ "boolean" == typeof t && (n = t, t = !1), t = t || a;
+ var r = k.exec (e), i = !n && [];
+ return r ? [t.createElement (r[1])] : (r = x.buildFragment ([e], t, i), i && x (i).remove (), x.merge ([], r.childNodes))
+ }, parseJSON: function (n)
+ {
+ return e.JSON && e.JSON.parse ? e.JSON.parse (n) : null === n ? n : "string" == typeof n && (n = x.trim (n), n && E.test (n.replace (A, "@").replace (j, "]").replace (S, ""))) ? Function ("return " + n) () : (x.error ("Invalid JSON: " + n), t)
+ }, parseXML: function (n)
+ {
+ var r, i;
+ if (!n || "string" != typeof n)return null;
+ try
+ {
+ e.DOMParser ? (i = new DOMParser, r = i.parseFromString (n, "text/xml")) : (r = new ActiveXObject ("Microsoft.XMLDOM"), r.async = "false", r.loadXML (n))
+ } catch (o)
+ {
+ r = t
+ }
+ return r && r.documentElement && !r.getElementsByTagName ("parsererror").length || x.error ("Invalid XML: " + n), r
+ }, noop: function ()
+ {
+ }, globalEval: function (t)
+ {
+ t && x.trim (t) && (e.execScript || function (t)
+ {
+ e.eval.call (e, t)
+ }) (t)
+ }, camelCase: function (e)
+ {
+ return e.replace (D, "ms-").replace (L, H)
+ }, nodeName: function (e, t)
+ {
+ return e.nodeName && e.nodeName.toLowerCase () === t.toLowerCase ()
+ }, each: function (e, t, n)
+ {
+ var r, i = 0, o = e.length, a = M (e);
+ if (n)
+ {
+ if (a)
+ {
+ for (; o > i; i++)if (r = t.apply (e[i], n), r === !1)break
+ } else for (i in e)if (r = t.apply (e[i], n), r === !1)break
+ } else if (a)
+ {
+ for (; o > i; i++)if (r = t.call (e[i], i, e[i]), r === !1)break
+ } else for (i in e)if (r = t.call (e[i], i, e[i]), r === !1)break;
+ return e
+ }, trim: b && !b.call ("\ufeff\u00a0") ? function (e)
+ {
+ return null == e ? "" : b.call (e)
+ } : function (e)
+ {
+ return null == e ? "" : (e + "").replace (C, "")
+ }, makeArray: function (e, t)
+ {
+ var n = t || [];
+ return null != e && (M (Object (e)) ? x.merge (n, "string" == typeof e ? [e] : e) : h.call (n, e)), n
+ }, inArray: function (e, t, n)
+ {
+ var r;
+ if (t)
+ {
+ if (m)return m.call (t, e, n);
+ for (r = t.length, n = n ? 0 > n ? Math.max (0, r + n) : n : 0; r > n; n++)if (n in t && t[n] === e)return n
+ }
+ return-1
+ }, merge: function (e, n)
+ {
+ var r = n.length, i = e.length, o = 0;
+ if ("number" == typeof r)for (; r > o; o++)e[i++] = n[o]; else while (n[o] !== t)e[i++] = n[o++];
+ return e.length = i, e
+ }, grep: function (e, t, n)
+ {
+ var r, i = [], o = 0, a = e.length;
+ for (n = !!n; a > o; o++)r = !!t (e[o], o), n !== r && i.push (e[o]);
+ return i
+ }, map: function (e, t, n)
+ {
+ var r, i = 0, o = e.length, a = M (e), s = [];
+ if (a)for (; o > i; i++)r = t (e[i], i, n), null != r && (s[s.length] = r); else for (i in e)r = t (e[i], i, n), null != r && (s[s.length] = r);
+ return d.apply ([], s)
+ }, guid: 1, proxy: function (e, n)
+ {
+ var r, i, o;
+ return"string" == typeof n && (o = e[n], n = e, e = o), x.isFunction (e) ? (r = g.call (arguments, 2), i = function ()
+ {
+ return e.apply (n || this, r.concat (g.call (arguments)))
+ }, i.guid = e.guid = e.guid || x.guid++, i) : t
+ }, access: function (e, n, r, i, o, a, s)
+ {
+ var l = 0, u = e.length, c = null == r;
+ if ("object" === x.type (r))
+ {
+ o = !0;
+ for (l in r)x.access (e, n, l, r[l], !0, a, s)
+ } else if (i !== t && (o = !0, x.isFunction (i) || (s = !0), c && (s ? (n.call (e, i), n = null) : (c = n, n = function (e, t, n)
+ {
+ return c.call (x (e), n)
+ })), n))for (; u > l; l++)n (e[l], r, s ? i : i.call (e[l], l, n (e[l], r)));
+ return o ? e : c ? n.call (e) : u ? n (e[0], r) : a
+ }, now: function ()
+ {
+ return(new Date).getTime ()
+ }, swap: function (e, t, n, r)
+ {
+ var i, o, a = {};
+ for (o in t)a[o] = e.style[o], e.style[o] = t[o];
+ i = n.apply (e, r || []);
+ for (o in t)e.style[o] = a[o];
+ return i
+ }}), x.ready.promise = function (t)
+ {
+ if (!n)if (n = x.Deferred (), "complete" === a.readyState)setTimeout (x.ready); else if (a.addEventListener)a.addEventListener ("DOMContentLoaded", q, !1), e.addEventListener ("load", q, !1); else
+ {
+ a.attachEvent ("onreadystatechange", q), e.attachEvent ("onload", q);
+ var r = !1;
+ try
+ {
+ r = null == e.frameElement && a.documentElement
+ } catch (i)
+ {
+ }
+ r && r.doScroll && function o ()
+ {
+ if (!x.isReady)
+ {
+ try
+ {
+ r.doScroll ("left")
+ } catch (e)
+ {
+ return setTimeout (o, 50)
+ }
+ _ (), x.ready ()
+ }
+ } ()
+ }
+ return n.promise (t)
+ }, x.each ("Boolean Number String Function Array Date RegExp Object Error".split (" "), function (e, t)
+ {
+ c["[object " + t + "]"] = t.toLowerCase ()
+ });
+ function M (e)
+ {
+ var t = e.length, n = x.type (e);
+ return x.isWindow (e) ? !1 : 1 === e.nodeType && t ? !0 : "array" === n || "function" !== n && (0 === t || "number" == typeof t && t > 0 && t - 1 in e)
+ }
+
+ r = x (a), function (e, t)
+ {
+ var n, r, i, o, a, s, l, u, c, p, f, d, h, g, m, y, v, b = "sizzle" + -new Date, w = e.document, T = 0, C = 0, N = st (), k = st (), E = st (), S = !1, A = function (e, t)
+ {
+ return e === t ? (S = !0, 0) : 0
+ }, j = typeof t, D = 1 << 31, L = {}.hasOwnProperty, H = [], q = H.pop, _ = H.push, M = H.push, O = H.slice, F = H.indexOf || function (e)
+ {
+ var t = 0, n = this.length;
+ for (; n > t; t++)if (this[t] === e)return t;
+ return-1
+ }, B = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", P = "[\\x20\\t\\r\\n\\f]", R = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", W = R.replace ("w", "w#"), $ = "\\[" + P + "*(" + R + ")" + P + "*(?:([*^$|!~]?=)" + P + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + W + ")|)|)" + P + "*\\]", I = ":(" + R + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + $.replace (3, 8) + ")*)|.*)\\)|)", z = RegExp ("^" + P + "+|((?:^|[^\\\\])(?:\\\\.)*)" + P + "+$", "g"), X = RegExp ("^" + P + "*," + P + "*"), U = RegExp ("^" + P + "*([>+~]|" + P + ")" + P + "*"), V = RegExp (P + "*[+~]"), Y = RegExp ("=" + P + "*([^\\]'\"]*)" + P + "*\\]", "g"), J = RegExp (I), G = RegExp ("^" + W + "$"), Q = {ID: RegExp ("^#(" + R + ")"), CLASS: RegExp ("^\\.(" + R + ")"), TAG: RegExp ("^(" + R.replace ("w", "w*") + ")"), ATTR: RegExp ("^" + $), PSEUDO: RegExp ("^" + I), CHILD: RegExp ("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + P + "*(even|odd|(([+-]|)(\\d*)n|)" + P + "*(?:([+-]|)" + P + "*(\\d+)|))" + P + "*\\)|)", "i"), bool: RegExp ("^(?:" + B + ")$", "i"), needsContext: RegExp ("^" + P + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + P + "*((?:-\\d)?\\d*)" + P + "*\\)|)(?=[^-]|$)", "i")}, K = /^[^{]+\{\s*\[native \w/, Z = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, et = /^(?:input|select|textarea|button)$/i, tt = /^h\d$/i, nt = /'|\\/g, rt = RegExp ("\\\\([\\da-f]{1,6}" + P + "?|(" + P + ")|.)", "ig"), it = function (e, t, n)
+ {
+ var r = "0x" + t - 65536;
+ return r !== r || n ? t : 0 > r ? String.fromCharCode (r + 65536) : String.fromCharCode (55296 | r >> 10, 56320 | 1023 & r)
+ };
+ try
+ {
+ M.apply (H = O.call (w.childNodes), w.childNodes), H[w.childNodes.length].nodeType
+ } catch (ot)
+ {
+ M = {apply: H.length ? function (e, t)
+ {
+ _.apply (e, O.call (t))
+ } : function (e, t)
+ {
+ var n = e.length, r = 0;
+ while (e[n++] = t[r++]);
+ e.length = n - 1
+ }}
+ }
+ function at (e, t, n, i)
+ {
+ var o, a, s, l, u, c, d, m, y, x;
+ if ((t ? t.ownerDocument || t : w) !== f && p (t), t = t || f, n = n || [], !e || "string" != typeof e)return n;
+ if (1 !== (l = t.nodeType) && 9 !== l)return[];
+ if (h && !i)
+ {
+ if (o = Z.exec (e))if (s = o[1])
+ {
+ if (9 === l)
+ {
+ if (a = t.getElementById (s), !a || !a.parentNode)return n;
+ if (a.id === s)return n.push (a), n
+ } else if (t.ownerDocument && (a = t.ownerDocument.getElementById (s)) && v (t, a) && a.id === s)return n.push (a), n
+ } else
+ {
+ if (o[2])return M.apply (n, t.getElementsByTagName (e)), n;
+ if ((s = o[3]) && r.getElementsByClassName && t.getElementsByClassName)return M.apply (n, t.getElementsByClassName (s)), n
+ }
+ if (r.qsa && (!g || !g.test (e)))
+ {
+ if (m = d = b, y = t, x = 9 === l && e, 1 === l && "object" !== t.nodeName.toLowerCase ())
+ {
+ c = mt (e), (d = t.getAttribute ("id")) ? m = d.replace (nt, "\\$&") : t.setAttribute ("id", m), m = "[id='" + m + "'] ", u = c.length;
+ while (u--)c[u] = m + yt (c[u]);
+ y = V.test (e) && t.parentNode || t, x = c.join (",")
+ }
+ if (x)try
+ {
+ return M.apply (n, y.querySelectorAll (x)), n
+ } catch (T)
+ {
+ } finally
+ {
+ d || t.removeAttribute ("id")
+ }
+ }
+ }
+ return kt (e.replace (z, "$1"), t, n, i)
+ }
+
+ function st ()
+ {
+ var e = [];
+
+ function t (n, r)
+ {
+ return e.push (n += " ") > o.cacheLength && delete t[e.shift ()], t[n] = r
+ }
+
+ return t
+ }
+
+ function lt (e)
+ {
+ return e[b] = !0, e
+ }
+
+ function ut (e)
+ {
+ var t = f.createElement ("div");
+ try
+ {
+ return!!e (t)
+ } catch (n)
+ {
+ return!1
+ } finally
+ {
+ t.parentNode && t.parentNode.removeChild (t), t = null
+ }
+ }
+
+ function ct (e, t)
+ {
+ var n = e.split ("|"), r = e.length;
+ while (r--)o.attrHandle[n[r]] = t
+ }
+
+ function pt (e, t)
+ {
+ var n = t && e, r = n && 1 === e.nodeType && 1 === t.nodeType && (~t.sourceIndex || D) - (~e.sourceIndex || D);
+ if (r)return r;
+ if (n)while (n = n.nextSibling)if (n === t)return-1;
+ return e ? 1 : -1
+ }
+
+ function ft (e)
+ {
+ return function (t)
+ {
+ var n = t.nodeName.toLowerCase ();
+ return"input" === n && t.type === e
+ }
+ }
+
+ function dt (e)
+ {
+ return function (t)
+ {
+ var n = t.nodeName.toLowerCase ();
+ return("input" === n || "button" === n) && t.type === e
+ }
+ }
+
+ function ht (e)
+ {
+ return lt (function (t)
+ {
+ return t = +t, lt (function (n, r)
+ {
+ var i, o = e ([], n.length, t), a = o.length;
+ while (a--)n[i = o[a]] && (n[i] = !(r[i] = n[i]))
+ })
+ })
+ }
+
+ s = at.isXML = function (e)
+ {
+ var t = e && (e.ownerDocument || e).documentElement;
+ return t ? "HTML" !== t.nodeName : !1
+ }, r = at.support = {}, p = at.setDocument = function (e)
+ {
+ var n = e ? e.ownerDocument || e : w, i = n.defaultView;
+ return n !== f && 9 === n.nodeType && n.documentElement ? (f = n, d = n.documentElement, h = !s (n), i && i.attachEvent && i !== i.top && i.attachEvent ("onbeforeunload", function ()
+ {
+ p ()
+ }), r.attributes = ut (function (e)
+ {
+ return e.className = "i", !e.getAttribute ("className")
+ }), r.getElementsByTagName = ut (function (e)
+ {
+ return e.appendChild (n.createComment ("")), !e.getElementsByTagName ("*").length
+ }), r.getElementsByClassName = ut (function (e)
+ {
+ return e.innerHTML = "
", e.firstChild.className = "i", 2 === e.getElementsByClassName ("i").length
+ }), r.getById = ut (function (e)
+ {
+ return d.appendChild (e).id = b, !n.getElementsByName || !n.getElementsByName (b).length
+ }), r.getById ? (o.find.ID = function (e, t)
+ {
+ if (typeof t.getElementById !== j && h)
+ {
+ var n = t.getElementById (e);
+ return n && n.parentNode ? [n] : []
+ }
+ }, o.filter.ID = function (e)
+ {
+ var t = e.replace (rt, it);
+ return function (e)
+ {
+ return e.getAttribute ("id") === t
+ }
+ }) : (delete o.find.ID, o.filter.ID = function (e)
+ {
+ var t = e.replace (rt, it);
+ return function (e)
+ {
+ var n = typeof e.getAttributeNode !== j && e.getAttributeNode ("id");
+ return n && n.value === t
+ }
+ }), o.find.TAG = r.getElementsByTagName ? function (e, n)
+ {
+ return typeof n.getElementsByTagName !== j ? n.getElementsByTagName (e) : t
+ } : function (e, t)
+ {
+ var n, r = [], i = 0, o = t.getElementsByTagName (e);
+ if ("*" === e)
+ {
+ while (n = o[i++])1 === n.nodeType && r.push (n);
+ return r
+ }
+ return o
+ }, o.find.CLASS = r.getElementsByClassName && function (e, n)
+ {
+ return typeof n.getElementsByClassName !== j && h ? n.getElementsByClassName (e) : t
+ }, m = [], g = [], (r.qsa = K.test (n.querySelectorAll)) && (ut (function (e)
+ {
+ e.innerHTML = "
", e.querySelectorAll ("[selected]").length || g.push ("\\[" + P + "*(?:value|" + B + ")"), e.querySelectorAll (":checked").length || g.push (":checked")
+ }), ut (function (e)
+ {
+ var t = n.createElement ("input");
+ t.setAttribute ("type", "hidden"), e.appendChild (t).setAttribute ("t", ""), e.querySelectorAll ("[t^='']").length && g.push ("[*^$]=" + P + "*(?:''|\"\")"), e.querySelectorAll (":enabled").length || g.push (":enabled", ":disabled"), e.querySelectorAll ("*,:x"), g.push (",.*:")
+ })), (r.matchesSelector = K.test (y = d.webkitMatchesSelector || d.mozMatchesSelector || d.oMatchesSelector || d.msMatchesSelector)) && ut (function (e)
+ {
+ r.disconnectedMatch = y.call (e, "div"), y.call (e, "[s!='']:x"), m.push ("!=", I)
+ }), g = g.length && RegExp (g.join ("|")), m = m.length && RegExp (m.join ("|")), v = K.test (d.contains) || d.compareDocumentPosition ? function (e, t)
+ {
+ var n = 9 === e.nodeType ? e.documentElement : e, r = t && t.parentNode;
+ return e === r || !(!r || 1 !== r.nodeType || !(n.contains ? n.contains (r) : e.compareDocumentPosition && 16 & e.compareDocumentPosition (r)))
+ } : function (e, t)
+ {
+ if (t)while (t = t.parentNode)if (t === e)return!0;
+ return!1
+ }, A = d.compareDocumentPosition ? function (e, t)
+ {
+ if (e === t)return S = !0, 0;
+ var i = t.compareDocumentPosition && e.compareDocumentPosition && e.compareDocumentPosition (t);
+ return i ? 1 & i || !r.sortDetached && t.compareDocumentPosition (e) === i ? e === n || v (w, e) ? -1 : t === n || v (w, t) ? 1 : c ? F.call (c, e) - F.call (c, t) : 0 : 4 & i ? -1 : 1 : e.compareDocumentPosition ? -1 : 1
+ } : function (e, t)
+ {
+ var r, i = 0, o = e.parentNode, a = t.parentNode, s = [e], l = [t];
+ if (e === t)return S = !0, 0;
+ if (!o || !a)return e === n ? -1 : t === n ? 1 : o ? -1 : a ? 1 : c ? F.call (c, e) - F.call (c, t) : 0;
+ if (o === a)return pt (e, t);
+ r = e;
+ while (r = r.parentNode)s.unshift (r);
+ r = t;
+ while (r = r.parentNode)l.unshift (r);
+ while (s[i] === l[i])i++;
+ return i ? pt (s[i], l[i]) : s[i] === w ? -1 : l[i] === w ? 1 : 0
+ }, n) : f
+ }, at.matches = function (e, t)
+ {
+ return at (e, null, null, t)
+ }, at.matchesSelector = function (e, t)
+ {
+ if ((e.ownerDocument || e) !== f && p (e), t = t.replace (Y, "='$1']"), !(!r.matchesSelector || !h || m && m.test (t) || g && g.test (t)))try
+ {
+ var n = y.call (e, t);
+ if (n || r.disconnectedMatch || e.document && 11 !== e.document.nodeType)return n
+ } catch (i)
+ {
+ }
+ return at (t, f, null, [e]).length > 0
+ }, at.contains = function (e, t)
+ {
+ return(e.ownerDocument || e) !== f && p (e), v (e, t)
+ }, at.attr = function (e, n)
+ {
+ (e.ownerDocument || e) !== f && p (e);
+ var i = o.attrHandle[n.toLowerCase ()], a = i && L.call (o.attrHandle, n.toLowerCase ()) ? i (e, n, !h) : t;
+ return a === t ? r.attributes || !h ? e.getAttribute (n) : (a = e.getAttributeNode (n)) && a.specified ? a.value : null : a
+ }, at.error = function (e)
+ {
+ throw Error ("Syntax error, unrecognized expression: " + e)
+ }, at.uniqueSort = function (e)
+ {
+ var t, n = [], i = 0, o = 0;
+ if (S = !r.detectDuplicates, c = !r.sortStable && e.slice (0), e.sort (A), S)
+ {
+ while (t = e[o++])t === e[o] && (i = n.push (o));
+ while (i--)e.splice (n[i], 1)
+ }
+ return e
+ }, a = at.getText = function (e)
+ {
+ var t, n = "", r = 0, i = e.nodeType;
+ if (i)
+ {
+ if (1 === i || 9 === i || 11 === i)
+ {
+ if ("string" == typeof e.textContent)return e.textContent;
+ for (e = e.firstChild; e; e = e.nextSibling)n += a (e)
+ } else if (3 === i || 4 === i)return e.nodeValue
+ } else for (; t = e[r]; r++)n += a (t);
+ return n
+ }, o = at.selectors = {cacheLength: 50, createPseudo: lt, match: Q, attrHandle: {}, find: {}, relative: {">": {dir: "parentNode", first: !0}, " ": {dir: "parentNode"}, "+": {dir: "previousSibling", first: !0}, "~": {dir: "previousSibling"}}, preFilter: {ATTR: function (e)
+ {
+ return e[1] = e[1].replace (rt, it), e[3] = (e[4] || e[5] || "").replace (rt, it), "~=" === e[2] && (e[3] = " " + e[3] + " "), e.slice (0, 4)
+ }, CHILD: function (e)
+ {
+ return e[1] = e[1].toLowerCase (), "nth" === e[1].slice (0, 3) ? (e[3] || at.error (e[0]), e[4] = +(e[4] ? e[5] + (e[6] || 1) : 2 * ("even" === e[3] || "odd" === e[3])), e[5] = +(e[7] + e[8] || "odd" === e[3])) : e[3] && at.error (e[0]), e
+ }, PSEUDO: function (e)
+ {
+ var n, r = !e[5] && e[2];
+ return Q.CHILD.test (e[0]) ? null : (e[3] && e[4] !== t ? e[2] = e[4] : r && J.test (r) && (n = mt (r, !0)) && (n = r.indexOf (")", r.length - n) - r.length) && (e[0] = e[0].slice (0, n), e[2] = r.slice (0, n)), e.slice (0, 3))
+ }}, filter: {TAG: function (e)
+ {
+ var t = e.replace (rt, it).toLowerCase ();
+ return"*" === e ? function ()
+ {
+ return!0
+ } : function (e)
+ {
+ return e.nodeName && e.nodeName.toLowerCase () === t
+ }
+ }, CLASS: function (e)
+ {
+ var t = N[e + " "];
+ return t || (t = RegExp ("(^|" + P + ")" + e + "(" + P + "|$)")) && N (e, function (e)
+ {
+ return t.test ("string" == typeof e.className && e.className || typeof e.getAttribute !== j && e.getAttribute ("class") || "")
+ })
+ }, ATTR: function (e, t, n)
+ {
+ return function (r)
+ {
+ var i = at.attr (r, e);
+ return null == i ? "!=" === t : t ? (i += "", "=" === t ? i === n : "!=" === t ? i !== n : "^=" === t ? n && 0 === i.indexOf (n) : "*=" === t ? n && i.indexOf (n) > -1 : "$=" === t ? n && i.slice (-n.length) === n : "~=" === t ? (" " + i + " ").indexOf (n) > -1 : "|=" === t ? i === n || i.slice (0, n.length + 1) === n + "-" : !1) : !0
+ }
+ }, CHILD: function (e, t, n, r, i)
+ {
+ var o = "nth" !== e.slice (0, 3), a = "last" !== e.slice (-4), s = "of-type" === t;
+ return 1 === r && 0 === i ? function (e)
+ {
+ return!!e.parentNode
+ } : function (t, n, l)
+ {
+ var u, c, p, f, d, h, g = o !== a ? "nextSibling" : "previousSibling", m = t.parentNode, y = s && t.nodeName.toLowerCase (), v = !l && !s;
+ if (m)
+ {
+ if (o)
+ {
+ while (g)
+ {
+ p = t;
+ while (p = p[g])if (s ? p.nodeName.toLowerCase () === y : 1 === p.nodeType)return!1;
+ h = g = "only" === e && !h && "nextSibling"
+ }
+ return!0
+ }
+ if (h = [a ? m.firstChild : m.lastChild], a && v)
+ {
+ c = m[b] || (m[b] = {}), u = c[e] || [], d = u[0] === T && u[1], f = u[0] === T && u[2], p = d && m.childNodes[d];
+ while (p = ++d && p && p[g] || (f = d = 0) || h.pop ())if (1 === p.nodeType && ++f && p === t)
+ {
+ c[e] = [T, d, f];
+ break
+ }
+ } else if (v && (u = (t[b] || (t[b] = {}))[e]) && u[0] === T)f = u[1]; else while (p = ++d && p && p[g] || (f = d = 0) || h.pop ())if ((s ? p.nodeName.toLowerCase () === y : 1 === p.nodeType) && ++f && (v && ((p[b] || (p[b] = {}))[e] = [T, f]), p === t))break;
+ return f -= i, f === r || 0 === f % r && f / r >= 0
+ }
+ }
+ }, PSEUDO: function (e, t)
+ {
+ var n, r = o.pseudos[e] || o.setFilters[e.toLowerCase ()] || at.error ("unsupported pseudo: " + e);
+ return r[b] ? r (t) : r.length > 1 ? (n = [e, e, "", t], o.setFilters.hasOwnProperty (e.toLowerCase ()) ? lt (function (e, n)
+ {
+ var i, o = r (e, t), a = o.length;
+ while (a--)i = F.call (e, o[a]), e[i] = !(n[i] = o[a])
+ }) : function (e)
+ {
+ return r (e, 0, n)
+ }) : r
+ }}, pseudos: {not: lt (function (e)
+ {
+ var t = [], n = [], r = l (e.replace (z, "$1"));
+ return r[b] ? lt (function (e, t, n, i)
+ {
+ var o, a = r (e, null, i, []), s = e.length;
+ while (s--)(o = a[s]) && (e[s] = !(t[s] = o))
+ }) : function (e, i, o)
+ {
+ return t[0] = e, r (t, null, o, n), !n.pop ()
+ }
+ }), has: lt (function (e)
+ {
+ return function (t)
+ {
+ return at (e, t).length > 0
+ }
+ }), contains: lt (function (e)
+ {
+ return function (t)
+ {
+ return(t.textContent || t.innerText || a (t)).indexOf (e) > -1
+ }
+ }), lang: lt (function (e)
+ {
+ return G.test (e || "") || at.error ("unsupported lang: " + e), e = e.replace (rt, it).toLowerCase (), function (t)
+ {
+ var n;
+ do if (n = h ? t.lang : t.getAttribute ("xml:lang") || t.getAttribute ("lang"))return n = n.toLowerCase (), n === e || 0 === n.indexOf (e + "-"); while ((t = t.parentNode) && 1 === t.nodeType);
+ return!1
+ }
+ }), target: function (t)
+ {
+ var n = e.location && e.location.hash;
+ return n && n.slice (1) === t.id
+ }, root: function (e)
+ {
+ return e === d
+ }, focus: function (e)
+ {
+ return e === f.activeElement && (!f.hasFocus || f.hasFocus ()) && !!(e.type || e.href || ~e.tabIndex)
+ }, enabled: function (e)
+ {
+ return e.disabled === !1
+ }, disabled: function (e)
+ {
+ return e.disabled === !0
+ }, checked: function (e)
+ {
+ var t = e.nodeName.toLowerCase ();
+ return"input" === t && !!e.checked || "option" === t && !!e.selected
+ }, selected: function (e)
+ {
+ return e.parentNode && e.parentNode.selectedIndex, e.selected === !0
+ }, empty: function (e)
+ {
+ for (e = e.firstChild; e; e = e.nextSibling)if (e.nodeName > "@" || 3 === e.nodeType || 4 === e.nodeType)return!1;
+ return!0
+ }, parent: function (e)
+ {
+ return!o.pseudos.empty (e)
+ }, header: function (e)
+ {
+ return tt.test (e.nodeName)
+ }, input: function (e)
+ {
+ return et.test (e.nodeName)
+ }, button: function (e)
+ {
+ var t = e.nodeName.toLowerCase ();
+ return"input" === t && "button" === e.type || "button" === t
+ }, text: function (e)
+ {
+ var t;
+ return"input" === e.nodeName.toLowerCase () && "text" === e.type && (null == (t = e.getAttribute ("type")) || t.toLowerCase () === e.type)
+ }, first: ht (function ()
+ {
+ return[0]
+ }), last: ht (function (e, t)
+ {
+ return[t - 1]
+ }), eq: ht (function (e, t, n)
+ {
+ return[0 > n ? n + t : n]
+ }), even: ht (function (e, t)
+ {
+ var n = 0;
+ for (; t > n; n += 2)e.push (n);
+ return e
+ }), odd: ht (function (e, t)
+ {
+ var n = 1;
+ for (; t > n; n += 2)e.push (n);
+ return e
+ }), lt: ht (function (e, t, n)
+ {
+ var r = 0 > n ? n + t : n;
+ for (; --r >= 0;)e.push (r);
+ return e
+ }), gt: ht (function (e, t, n)
+ {
+ var r = 0 > n ? n + t : n;
+ for (; t > ++r;)e.push (r);
+ return e
+ })}}, o.pseudos.nth = o.pseudos.eq;
+ for (n in{radio: !0, checkbox: !0, file: !0, password: !0, image: !0})o.pseudos[n] = ft (n);
+ for (n in{submit: !0, reset: !0})o.pseudos[n] = dt (n);
+ function gt ()
+ {
+ }
+
+ gt.prototype = o.filters = o.pseudos, o.setFilters = new gt;
+ function mt (e, t)
+ {
+ var n, r, i, a, s, l, u, c = k[e + " "];
+ if (c)return t ? 0 : c.slice (0);
+ s = e, l = [], u = o.preFilter;
+ while (s)
+ {
+ (!n || (r = X.exec (s))) && (r && (s = s.slice (r[0].length) || s), l.push (i = [])), n = !1, (r = U.exec (s)) && (n = r.shift (), i.push ({value: n, type: r[0].replace (z, " ")}), s = s.slice (n.length));
+ for (a in o.filter)!(r = Q[a].exec (s)) || u[a] && !(r = u[a] (r)) || (n = r.shift (), i.push ({value: n, type: a, matches: r}), s = s.slice (n.length));
+ if (!n)break
+ }
+ return t ? s.length : s ? at.error (e) : k (e, l).slice (0)
+ }
+
+ function yt (e)
+ {
+ var t = 0, n = e.length, r = "";
+ for (; n > t; t++)r += e[t].value;
+ return r
+ }
+
+ function vt (e, t, n)
+ {
+ var r = t.dir, o = n && "parentNode" === r, a = C++;
+ return t.first ? function (t, n, i)
+ {
+ while (t = t[r])if (1 === t.nodeType || o)return e (t, n, i)
+ } : function (t, n, s)
+ {
+ var l, u, c, p = T + " " + a;
+ if (s)
+ {
+ while (t = t[r])if ((1 === t.nodeType || o) && e (t, n, s))return!0
+ } else while (t = t[r])if (1 === t.nodeType || o)if (c = t[b] || (t[b] = {}), (u = c[r]) && u[0] === p)
+ {
+ if ((l = u[1]) === !0 || l === i)return l === !0
+ } else if (u = c[r] = [p], u[1] = e (t, n, s) || i, u[1] === !0)return!0
+ }
+ }
+
+ function bt (e)
+ {
+ return e.length > 1 ? function (t, n, r)
+ {
+ var i = e.length;
+ while (i--)if (!e[i] (t, n, r))return!1;
+ return!0
+ } : e[0]
+ }
+
+ function xt (e, t, n, r, i)
+ {
+ var o, a = [], s = 0, l = e.length, u = null != t;
+ for (; l > s; s++)(o = e[s]) && (!n || n (o, r, i)) && (a.push (o), u && t.push (s));
+ return a
+ }
+
+ function wt (e, t, n, r, i, o)
+ {
+ return r && !r[b] && (r = wt (r)), i && !i[b] && (i = wt (i, o)), lt (function (o, a, s, l)
+ {
+ var u, c, p, f = [], d = [], h = a.length, g = o || Nt (t || "*", s.nodeType ? [s] : s, []), m = !e || !o && t ? g : xt (g, f, e, s, l), y = n ? i || (o ? e : h || r) ? [] : a : m;
+ if (n && n (m, y, s, l), r)
+ {
+ u = xt (y, d), r (u, [], s, l), c = u.length;
+ while (c--)(p = u[c]) && (y[d[c]] = !(m[d[c]] = p))
+ }
+ if (o)
+ {
+ if (i || e)
+ {
+ if (i)
+ {
+ u = [], c = y.length;
+ while (c--)(p = y[c]) && u.push (m[c] = p);
+ i (null, y = [], u, l)
+ }
+ c = y.length;
+ while (c--)(p = y[c]) && (u = i ? F.call (o, p) : f[c]) > -1 && (o[u] = !(a[u] = p))
+ }
+ } else y = xt (y === a ? y.splice (h, y.length) : y), i ? i (null, a, y, l) : M.apply (a, y)
+ })
+ }
+
+ function Tt (e)
+ {
+ var t, n, r, i = e.length, a = o.relative[e[0].type], s = a || o.relative[" "], l = a ? 1 : 0, c = vt (function (e)
+ {
+ return e === t
+ }, s, !0), p = vt (function (e)
+ {
+ return F.call (t, e) > -1
+ }, s, !0), f = [function (e, n, r)
+ {
+ return!a && (r || n !== u) || ((t = n).nodeType ? c (e, n, r) : p (e, n, r))
+ }];
+ for (; i > l; l++)if (n = o.relative[e[l].type])f = [vt (bt (f), n)]; else
+ {
+ if (n = o.filter[e[l].type].apply (null, e[l].matches), n[b])
+ {
+ for (r = ++l; i > r; r++)if (o.relative[e[r].type])break;
+ return wt (l > 1 && bt (f), l > 1 && yt (e.slice (0, l - 1).concat ({value: " " === e[l - 2].type ? "*" : ""})).replace (z, "$1"), n, r > l && Tt (e.slice (l, r)), i > r && Tt (e = e.slice (r)), i > r && yt (e))
+ }
+ f.push (n)
+ }
+ return bt (f)
+ }
+
+ function Ct (e, t)
+ {
+ var n = 0, r = t.length > 0, a = e.length > 0, s = function (s, l, c, p, d)
+ {
+ var h, g, m, y = [], v = 0, b = "0", x = s && [], w = null != d, C = u, N = s || a && o.find.TAG ("*", d && l.parentNode || l), k = T += null == C ? 1 : Math.random () || .1;
+ for (w && (u = l !== f && l, i = n); null != (h = N[b]); b++)
+ {
+ if (a && h)
+ {
+ g = 0;
+ while (m = e[g++])if (m (h, l, c))
+ {
+ p.push (h);
+ break
+ }
+ w && (T = k, i = ++n)
+ }
+ r && ((h = !m && h) && v--, s && x.push (h))
+ }
+ if (v += b, r && b !== v)
+ {
+ g = 0;
+ while (m = t[g++])m (x, y, l, c);
+ if (s)
+ {
+ if (v > 0)while (b--)x[b] || y[b] || (y[b] = q.call (p));
+ y = xt (y)
+ }
+ M.apply (p, y), w && !s && y.length > 0 && v + t.length > 1 && at.uniqueSort (p)
+ }
+ return w && (T = k, u = C), x
+ };
+ return r ? lt (s) : s
+ }
+
+ l = at.compile = function (e, t)
+ {
+ var n, r = [], i = [], o = E[e + " "];
+ if (!o)
+ {
+ t || (t = mt (e)), n = t.length;
+ while (n--)o = Tt (t[n]), o[b] ? r.push (o) : i.push (o);
+ o = E (e, Ct (i, r))
+ }
+ return o
+ };
+ function Nt (e, t, n)
+ {
+ var r = 0, i = t.length;
+ for (; i > r; r++)at (e, t[r], n);
+ return n
+ }
+
+ function kt (e, t, n, i)
+ {
+ var a, s, u, c, p, f = mt (e);
+ if (!i && 1 === f.length)
+ {
+ if (s = f[0] = f[0].slice (0), s.length > 2 && "ID" === (u = s[0]).type && r.getById && 9 === t.nodeType && h && o.relative[s[1].type])
+ {
+ if (t = (o.find.ID (u.matches[0].replace (rt, it), t) || [])[0], !t)return n;
+ e = e.slice (s.shift ().value.length)
+ }
+ a = Q.needsContext.test (e) ? 0 : s.length;
+ while (a--)
+ {
+ if (u = s[a], o.relative[c = u.type])break;
+ if ((p = o.find[c]) && (i = p (u.matches[0].replace (rt, it), V.test (s[0].type) && t.parentNode || t)))
+ {
+ if (s.splice (a, 1), e = i.length && yt (s), !e)return M.apply (n, i), n;
+ break
+ }
+ }
+ }
+ return l (e, f) (i, t, !h, n, V.test (e)), n
+ }
+
+ r.sortStable = b.split ("").sort (A).join ("") === b, r.detectDuplicates = S, p (), r.sortDetached = ut (function (e)
+ {
+ return 1 & e.compareDocumentPosition (f.createElement ("div"))
+ }), ut (function (e)
+ {
+ return e.innerHTML = "
", "#" === e.firstChild.getAttribute ("href")
+ }) || ct ("type|href|height|width", function (e, n, r)
+ {
+ return r ? t : e.getAttribute (n, "type" === n.toLowerCase () ? 1 : 2)
+ }), r.attributes && ut (function (e)
+ {
+ return e.innerHTML = "
", e.firstChild.setAttribute ("value", ""), "" === e.firstChild.getAttribute ("value")
+ }) || ct ("value", function (e, n, r)
+ {
+ return r || "input" !== e.nodeName.toLowerCase () ? t : e.defaultValue
+ }), ut (function (e)
+ {
+ return null == e.getAttribute ("disabled")
+ }) || ct (B, function (e, n, r)
+ {
+ var i;
+ return r ? t : (i = e.getAttributeNode (n)) && i.specified ? i.value : e[n] === !0 ? n.toLowerCase () : null
+ }), x.find = at, x.expr = at.selectors, x.expr[":"] = x.expr.pseudos, x.unique = at.uniqueSort, x.text = at.getText, x.isXMLDoc = at.isXML, x.contains = at.contains
+ } (e);
+ var O = {};
+
+ function F (e)
+ {
+ var t = O[e] = {};
+ return x.each (e.match (T) || [], function (e, n)
+ {
+ t[n] = !0
+ }), t
+ }
+
+ x.Callbacks = function (e)
+ {
+ e = "string" == typeof e ? O[e] || F (e) : x.extend ({}, e);
+ var n, r, i, o, a, s, l = [], u = !e.once && [], c = function (t)
+ {
+ for (r = e.memory && t, i = !0, a = s || 0, s = 0, o = l.length, n = !0; l && o > a; a++)if (l[a].apply (t[0], t[1]) === !1 && e.stopOnFalse)
+ {
+ r = !1;
+ break
+ }
+ n = !1, l && (u ? u.length && c (u.shift ()) : r ? l = [] : p.disable ())
+ }, p = {add: function ()
+ {
+ if (l)
+ {
+ var t = l.length;
+ (function i (t)
+ {
+ x.each (t, function (t, n)
+ {
+ var r = x.type (n);
+ "function" === r ? e.unique && p.has (n) || l.push (n) : n && n.length && "string" !== r && i (n)
+ })
+ }) (arguments), n ? o = l.length : r && (s = t, c (r))
+ }
+ return this
+ }, remove: function ()
+ {
+ return l && x.each (arguments, function (e, t)
+ {
+ var r;
+ while ((r = x.inArray (t, l, r)) > -1)l.splice (r, 1), n && (o >= r && o--, a >= r && a--)
+ }), this
+ }, has: function (e)
+ {
+ return e ? x.inArray (e, l) > -1 : !(!l || !l.length)
+ }, empty: function ()
+ {
+ return l = [], o = 0, this
+ }, disable: function ()
+ {
+ return l = u = r = t, this
+ }, disabled: function ()
+ {
+ return!l
+ }, lock: function ()
+ {
+ return u = t, r || p.disable (), this
+ }, locked: function ()
+ {
+ return!u
+ }, fireWith: function (e, t)
+ {
+ return!l || i && !u || (t = t || [], t = [e, t.slice ? t.slice () : t], n ? u.push (t) : c (t)), this
+ }, fire: function ()
+ {
+ return p.fireWith (this, arguments), this
+ }, fired: function ()
+ {
+ return!!i
+ }};
+ return p
+ }, x.extend ({Deferred: function (e)
+ {
+ var t = [
+ ["resolve", "done", x.Callbacks ("once memory"), "resolved"],
+ ["reject", "fail", x.Callbacks ("once memory"), "rejected"],
+ ["notify", "progress", x.Callbacks ("memory")]
+ ], n = "pending", r = {state: function ()
+ {
+ return n
+ }, always: function ()
+ {
+ return i.done (arguments).fail (arguments), this
+ }, then: function ()
+ {
+ var e = arguments;
+ return x.Deferred (function (n)
+ {
+ x.each (t, function (t, o)
+ {
+ var a = o[0], s = x.isFunction (e[t]) && e[t];
+ i[o[1]] (function ()
+ {
+ var e = s && s.apply (this, arguments);
+ e && x.isFunction (e.promise) ? e.promise ().done (n.resolve).fail (n.reject).progress (n.notify) : n[a + "With"] (this === r ? n.promise () : this, s ? [e] : arguments)
+ })
+ }), e = null
+ }).promise ()
+ }, promise: function (e)
+ {
+ return null != e ? x.extend (e, r) : r
+ }}, i = {};
+ return r.pipe = r.then, x.each (t, function (e, o)
+ {
+ var a = o[2], s = o[3];
+ r[o[1]] = a.add, s && a.add (function ()
+ {
+ n = s
+ }, t[1 ^ e][2].disable, t[2][2].lock), i[o[0]] = function ()
+ {
+ return i[o[0] + "With"] (this === i ? r : this, arguments), this
+ }, i[o[0] + "With"] = a.fireWith
+ }), r.promise (i), e && e.call (i, i), i
+ }, when: function (e)
+ {
+ var t = 0, n = g.call (arguments), r = n.length, i = 1 !== r || e && x.isFunction (e.promise) ? r : 0, o = 1 === i ? e : x.Deferred (), a = function (e, t, n)
+ {
+ return function (r)
+ {
+ t[e] = this, n[e] = arguments.length > 1 ? g.call (arguments) : r, n === s ? o.notifyWith (t, n) : --i || o.resolveWith (t, n)
+ }
+ }, s, l, u;
+ if (r > 1)for (s = Array (r), l = Array (r), u = Array (r); r > t; t++)n[t] && x.isFunction (n[t].promise) ? n[t].promise ().done (a (t, u, n)).fail (o.reject).progress (a (t, l, s)) : --i;
+ return i || o.resolveWith (u, n), o.promise ()
+ }}), x.support = function (t)
+ {
+ var n, r, o, s, l, u, c, p, f, d = a.createElement ("div");
+ if (d.setAttribute ("className", "t"), d.innerHTML = "
a ", n = d.getElementsByTagName ("*") || [], r = d.getElementsByTagName ("a")[0], !r || !r.style || !n.length)return t;
+ s = a.createElement ("select"), u = s.appendChild (a.createElement ("option")), o = d.getElementsByTagName ("input")[0], r.style.cssText = "top:1px;float:left;opacity:.5", t.getSetAttribute = "t" !== d.className, t.leadingWhitespace = 3 === d.firstChild.nodeType, t.tbody = !d.getElementsByTagName ("tbody").length, t.htmlSerialize = !!d.getElementsByTagName ("link").length, t.style = /top/.test (r.getAttribute ("style")), t.hrefNormalized = "/a" === r.getAttribute ("href"), t.opacity = /^0.5/.test (r.style.opacity), t.cssFloat = !!r.style.cssFloat, t.checkOn = !!o.value, t.optSelected = u.selected, t.enctype = !!a.createElement ("form").enctype, t.html5Clone = "<:nav>" !== a.createElement ("nav").cloneNode (!0).outerHTML, t.inlineBlockNeedsLayout = !1, t.shrinkWrapBlocks = !1, t.pixelPosition = !1, t.deleteExpando = !0, t.noCloneEvent = !0, t.reliableMarginRight = !0, t.boxSizingReliable = !0, o.checked = !0, t.noCloneChecked = o.cloneNode (!0).checked, s.disabled = !0, t.optDisabled = !u.disabled;
+ try
+ {
+ delete d.test
+ } catch (h)
+ {
+ t.deleteExpando = !1
+ }
+ o = a.createElement ("input"), o.setAttribute ("value", ""), t.input = "" === o.getAttribute ("value"), o.value = "t", o.setAttribute ("type", "radio"), t.radioValue = "t" === o.value, o.setAttribute ("checked", "t"), o.setAttribute ("name", "t"), l = a.createDocumentFragment (), l.appendChild (o), t.appendChecked = o.checked, t.checkClone = l.cloneNode (!0).cloneNode (!0).lastChild.checked, d.attachEvent && (d.attachEvent ("onclick", function ()
+ {
+ t.noCloneEvent = !1
+ }), d.cloneNode (!0).click ());
+ for (f in{submit: !0, change: !0, focusin: !0})d.setAttribute (c = "on" + f, "t"), t[f + "Bubbles"] = c in e || d.attributes[c].expando === !1;
+ d.style.backgroundClip = "content-box", d.cloneNode (!0).style.backgroundClip = "", t.clearCloneStyle = "content-box" === d.style.backgroundClip;
+ for (f in x (t))break;
+ return t.ownLast = "0" !== f, x (function ()
+ {
+ var n, r, o, s = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;", l = a.getElementsByTagName ("body")[0];
+ l && (n = a.createElement ("div"), n.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px", l.appendChild (n).appendChild (d), d.innerHTML = "
", o = d.getElementsByTagName ("td"), o[0].style.cssText = "padding:0;margin:0;border:0;display:none", p = 0 === o[0].offsetHeight, o[0].style.display = "", o[1].style.display = "none", t.reliableHiddenOffsets = p && 0 === o[0].offsetHeight, d.innerHTML = "", d.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;", x.swap (l, null != l.style.zoom ? {zoom: 1} : {}, function ()
+ {
+ t.boxSizing = 4 === d.offsetWidth
+ }), e.getComputedStyle && (t.pixelPosition = "1%" !== (e.getComputedStyle (d, null) || {}).top, t.boxSizingReliable = "4px" === (e.getComputedStyle (d, null) || {width: "4px"}).width, r = d.appendChild (a.createElement ("div")), r.style.cssText = d.style.cssText = s, r.style.marginRight = r.style.width = "0", d.style.width = "1px", t.reliableMarginRight = !parseFloat ((e.getComputedStyle (r, null) || {}).marginRight)), typeof d.style.zoom !== i && (d.innerHTML = "", d.style.cssText = s + "width:1px;padding:1px;display:inline;zoom:1", t.inlineBlockNeedsLayout = 3 === d.offsetWidth, d.style.display = "block", d.innerHTML = "
", d.firstChild.style.width = "5px", t.shrinkWrapBlocks = 3 !== d.offsetWidth, t.inlineBlockNeedsLayout && (l.style.zoom = 1)), l.removeChild (n), n = d = o = r = null)
+ }), n = s = l = u = r = o = null, t
+ } ({});
+ var B = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/, P = /([A-Z])/g;
+
+ function R (e, n, r, i)
+ {
+ if (x.acceptData (e))
+ {
+ var o, a, s = x.expando, l = e.nodeType, u = l ? x.cache : e, c = l ? e[s] : e[s] && s;
+ if (c && u[c] && (i || u[c].data) || r !== t || "string" != typeof n)return c || (c = l ? e[s] = p.pop () || x.guid++ : s), u[c] || (u[c] = l ? {} : {toJSON: x.noop}), ("object" == typeof n || "function" == typeof n) && (i ? u[c] = x.extend (u[c], n) : u[c].data = x.extend (u[c].data, n)), a = u[c], i || (a.data || (a.data = {}), a = a.data), r !== t && (a[x.camelCase (n)] = r), "string" == typeof n ? (o = a[n], null == o && (o = a[x.camelCase (n)])) : o = a, o
+ }
+ }
+
+ function W (e, t, n)
+ {
+ if (x.acceptData (e))
+ {
+ var r, i, o = e.nodeType, a = o ? x.cache : e, s = o ? e[x.expando] : x.expando;
+ if (a[s])
+ {
+ if (t && (r = n ? a[s] : a[s].data))
+ {
+ x.isArray (t) ? t = t.concat (x.map (t, x.camelCase)) : t in r ? t = [t] : (t = x.camelCase (t), t = t in r ? [t] : t.split (" ")), i = t.length;
+ while (i--)delete r[t[i]];
+ if (n ? !I (r) : !x.isEmptyObject (r))return
+ }
+ (n || (delete a[s].data, I (a[s]))) && (o ? x.cleanData ([e], !0) : x.support.deleteExpando || a != a.window ? delete a[s] : a[s] = null)
+ }
+ }
+ }
+
+ x.extend ({cache: {}, noData: {applet: !0, embed: !0, object: "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"}, hasData: function (e)
+ {
+ return e = e.nodeType ? x.cache[e[x.expando]] : e[x.expando], !!e && !I (e)
+ }, data: function (e, t, n)
+ {
+ return R (e, t, n)
+ }, removeData: function (e, t)
+ {
+ return W (e, t)
+ }, _data: function (e, t, n)
+ {
+ return R (e, t, n, !0)
+ }, _removeData: function (e, t)
+ {
+ return W (e, t, !0)
+ }, acceptData: function (e)
+ {
+ if (e.nodeType && 1 !== e.nodeType && 9 !== e.nodeType)return!1;
+ var t = e.nodeName && x.noData[e.nodeName.toLowerCase ()];
+ return!t || t !== !0 && e.getAttribute ("classid") === t
+ }}), x.fn.extend ({data: function (e, n)
+ {
+ var r, i, o = null, a = 0, s = this[0];
+ if (e === t)
+ {
+ if (this.length && (o = x.data (s), 1 === s.nodeType && !x._data (s, "parsedAttrs")))
+ {
+ for (r = s.attributes; r.length > a; a++)i = r[a].name, 0 === i.indexOf ("data-") && (i = x.camelCase (i.slice (5)), $ (s, i, o[i]));
+ x._data (s, "parsedAttrs", !0)
+ }
+ return o
+ }
+ return"object" == typeof e ? this.each (function ()
+ {
+ x.data (this, e)
+ }) : arguments.length > 1 ? this.each (function ()
+ {
+ x.data (this, e, n)
+ }) : s ? $ (s, e, x.data (s, e)) : null
+ }, removeData: function (e)
+ {
+ return this.each (function ()
+ {
+ x.removeData (this, e)
+ })
+ }});
+ function $ (e, n, r)
+ {
+ if (r === t && 1 === e.nodeType)
+ {
+ var i = "data-" + n.replace (P, "-$1").toLowerCase ();
+ if (r = e.getAttribute (i), "string" == typeof r)
+ {
+ try
+ {
+ r = "true" === r ? !0 : "false" === r ? !1 : "null" === r ? null : +r + "" === r ? +r : B.test (r) ? x.parseJSON (r) : r
+ } catch (o)
+ {
+ }
+ x.data (e, n, r)
+ } else r = t
+ }
+ return r
+ }
+
+ function I (e)
+ {
+ var t;
+ for (t in e)if (("data" !== t || !x.isEmptyObject (e[t])) && "toJSON" !== t)return!1;
+ return!0
+ }
+
+ x.extend ({queue: function (e, n, r)
+ {
+ var i;
+ return e ? (n = (n || "fx") + "queue", i = x._data (e, n), r && (!i || x.isArray (r) ? i = x._data (e, n, x.makeArray (r)) : i.push (r)), i || []) : t
+ }, dequeue: function (e, t)
+ {
+ t = t || "fx";
+ var n = x.queue (e, t), r = n.length, i = n.shift (), o = x._queueHooks (e, t), a = function ()
+ {
+ x.dequeue (e, t)
+ };
+ "inprogress" === i && (i = n.shift (), r--), i && ("fx" === t && n.unshift ("inprogress"), delete o.stop, i.call (e, a, o)), !r && o && o.empty.fire ()
+ }, _queueHooks: function (e, t)
+ {
+ var n = t + "queueHooks";
+ return x._data (e, n) || x._data (e, n, {empty: x.Callbacks ("once memory").add (function ()
+ {
+ x._removeData (e, t + "queue"), x._removeData (e, n)
+ })})
+ }}), x.fn.extend ({queue: function (e, n)
+ {
+ var r = 2;
+ return"string" != typeof e && (n = e, e = "fx", r--), r > arguments.length ? x.queue (this[0], e) : n === t ? this : this.each (function ()
+ {
+ var t = x.queue (this, e, n);
+ x._queueHooks (this, e), "fx" === e && "inprogress" !== t[0] && x.dequeue (this, e)
+ })
+ }, dequeue: function (e)
+ {
+ return this.each (function ()
+ {
+ x.dequeue (this, e)
+ })
+ }, delay: function (e, t)
+ {
+ return e = x.fx ? x.fx.speeds[e] || e : e, t = t || "fx", this.queue (t, function (t, n)
+ {
+ var r = setTimeout (t, e);
+ n.stop = function ()
+ {
+ clearTimeout (r)
+ }
+ })
+ }, clearQueue: function (e)
+ {
+ return this.queue (e || "fx", [])
+ }, promise: function (e, n)
+ {
+ var r, i = 1, o = x.Deferred (), a = this, s = this.length, l = function ()
+ {
+ --i || o.resolveWith (a, [a])
+ };
+ "string" != typeof e && (n = e, e = t), e = e || "fx";
+ while (s--)r = x._data (a[s], e + "queueHooks"), r && r.empty && (i++, r.empty.add (l));
+ return l (), o.promise (n)
+ }});
+ var z, X, U = /[\t\r\n\f]/g, V = /\r/g, Y = /^(?:input|select|textarea|button|object)$/i, J = /^(?:a|area)$/i, G = /^(?:checked|selected)$/i, Q = x.support.getSetAttribute, K = x.support.input;
+ x.fn.extend ({attr: function (e, t)
+ {
+ return x.access (this, x.attr, e, t, arguments.length > 1)
+ }, removeAttr: function (e)
+ {
+ return this.each (function ()
+ {
+ x.removeAttr (this, e)
+ })
+ }, prop: function (e, t)
+ {
+ return x.access (this, x.prop, e, t, arguments.length > 1)
+ }, removeProp: function (e)
+ {
+ return e = x.propFix[e] || e, this.each (function ()
+ {
+ try
+ {
+ this[e] = t, delete this[e]
+ } catch (n)
+ {
+ }
+ })
+ }, addClass: function (e)
+ {
+ var t, n, r, i, o, a = 0, s = this.length, l = "string" == typeof e && e;
+ if (x.isFunction (e))return this.each (function (t)
+ {
+ x (this).addClass (e.call (this, t, this.className))
+ });
+ if (l)for (t = (e || "").match (T) || []; s > a; a++)if (n = this[a], r = 1 === n.nodeType && (n.className ? (" " + n.className + " ").replace (U, " ") : " "))
+ {
+ o = 0;
+ while (i = t[o++])0 > r.indexOf (" " + i + " ") && (r += i + " ");
+ n.className = x.trim (r)
+ }
+ return this
+ }, removeClass: function (e)
+ {
+ var t, n, r, i, o, a = 0, s = this.length, l = 0 === arguments.length || "string" == typeof e && e;
+ if (x.isFunction (e))return this.each (function (t)
+ {
+ x (this).removeClass (e.call (this, t, this.className))
+ });
+ if (l)for (t = (e || "").match (T) || []; s > a; a++)if (n = this[a], r = 1 === n.nodeType && (n.className ? (" " + n.className + " ").replace (U, " ") : ""))
+ {
+ o = 0;
+ while (i = t[o++])while (r.indexOf (" " + i + " ") >= 0)r = r.replace (" " + i + " ", " ");
+ n.className = e ? x.trim (r) : ""
+ }
+ return this
+ }, toggleClass: function (e, t)
+ {
+ var n = typeof e;
+ return"boolean" == typeof t && "string" === n ? t ? this.addClass (e) : this.removeClass (e) : x.isFunction (e) ? this.each (function (n)
+ {
+ x (this).toggleClass (e.call (this, n, this.className, t), t)
+ }) : this.each (function ()
+ {
+ if ("string" === n)
+ {
+ var t, r = 0, o = x (this), a = e.match (T) || [];
+ while (t = a[r++])o.hasClass (t) ? o.removeClass (t) : o.addClass (t)
+ } else(n === i || "boolean" === n) && (this.className && x._data (this, "__className__", this.className), this.className = this.className || e === !1 ? "" : x._data (this, "__className__") || "")
+ })
+ }, hasClass: function (e)
+ {
+ var t = " " + e + " ", n = 0, r = this.length;
+ for (; r > n; n++)if (1 === this[n].nodeType && (" " + this[n].className + " ").replace (U, " ").indexOf (t) >= 0)return!0;
+ return!1
+ }, val: function (e)
+ {
+ var n, r, i, o = this[0];
+ {
+ if (arguments.length)return i = x.isFunction (e), this.each (function (n)
+ {
+ var o;
+ 1 === this.nodeType && (o = i ? e.call (this, n, x (this).val ()) : e, null == o ? o = "" : "number" == typeof o ? o += "" : x.isArray (o) && (o = x.map (o, function (e)
+ {
+ return null == e ? "" : e + ""
+ })), r = x.valHooks[this.type] || x.valHooks[this.nodeName.toLowerCase ()], r && "set"in r && r.set (this, o, "value") !== t || (this.value = o))
+ });
+ if (o)return r = x.valHooks[o.type] || x.valHooks[o.nodeName.toLowerCase ()], r && "get"in r && (n = r.get (o, "value")) !== t ? n : (n = o.value, "string" == typeof n ? n.replace (V, "") : null == n ? "" : n)
+ }
+ }}), x.extend ({valHooks: {option: {get: function (e)
+ {
+ var t = x.find.attr (e, "value");
+ return null != t ? t : e.text
+ }}, select: {get: function (e)
+ {
+ var t, n, r = e.options, i = e.selectedIndex, o = "select-one" === e.type || 0 > i, a = o ? null : [], s = o ? i + 1 : r.length, l = 0 > i ? s : o ? i : 0;
+ for (; s > l; l++)if (n = r[l], !(!n.selected && l !== i || (x.support.optDisabled ? n.disabled : null !== n.getAttribute ("disabled")) || n.parentNode.disabled && x.nodeName (n.parentNode, "optgroup")))
+ {
+ if (t = x (n).val (), o)return t;
+ a.push (t)
+ }
+ return a
+ }, set: function (e, t)
+ {
+ var n, r, i = e.options, o = x.makeArray (t), a = i.length;
+ while (a--)r = i[a], (r.selected = x.inArray (x (r).val (), o) >= 0) && (n = !0);
+ return n || (e.selectedIndex = -1), o
+ }}}, attr: function (e, n, r)
+ {
+ var o, a, s = e.nodeType;
+ if (e && 3 !== s && 8 !== s && 2 !== s)return typeof e.getAttribute === i ? x.prop (e, n, r) : (1 === s && x.isXMLDoc (e) || (n = n.toLowerCase (), o = x.attrHooks[n] || (x.expr.match.bool.test (n) ? X : z)), r === t ? o && "get"in o && null !== (a = o.get (e, n)) ? a : (a = x.find.attr (e, n), null == a ? t : a) : null !== r ? o && "set"in o && (a = o.set (e, r, n)) !== t ? a : (e.setAttribute (n, r + ""), r) : (x.removeAttr (e, n), t))
+ }, removeAttr: function (e, t)
+ {
+ var n, r, i = 0, o = t && t.match (T);
+ if (o && 1 === e.nodeType)while (n = o[i++])r = x.propFix[n] || n, x.expr.match.bool.test (n) ? K && Q || !G.test (n) ? e[r] = !1 : e[x.camelCase ("default-" + n)] = e[r] = !1 : x.attr (e, n, ""), e.removeAttribute (Q ? n : r)
+ }, attrHooks: {type: {set: function (e, t)
+ {
+ if (!x.support.radioValue && "radio" === t && x.nodeName (e, "input"))
+ {
+ var n = e.value;
+ return e.setAttribute ("type", t), n && (e.value = n), t
+ }
+ }}}, propFix: {"for": "htmlFor", "class": "className"}, prop: function (e, n, r)
+ {
+ var i, o, a, s = e.nodeType;
+ if (e && 3 !== s && 8 !== s && 2 !== s)return a = 1 !== s || !x.isXMLDoc (e), a && (n = x.propFix[n] || n, o = x.propHooks[n]), r !== t ? o && "set"in o && (i = o.set (e, r, n)) !== t ? i : e[n] = r : o && "get"in o && null !== (i = o.get (e, n)) ? i : e[n]
+ }, propHooks: {tabIndex: {get: function (e)
+ {
+ var t = x.find.attr (e, "tabindex");
+ return t ? parseInt (t, 10) : Y.test (e.nodeName) || J.test (e.nodeName) && e.href ? 0 : -1
+ }}}}), X = {set: function (e, t, n)
+ {
+ return t === !1 ? x.removeAttr (e, n) : K && Q || !G.test (n) ? e.setAttribute (!Q && x.propFix[n] || n, n) : e[x.camelCase ("default-" + n)] = e[n] = !0, n
+ }}, x.each (x.expr.match.bool.source.match (/\w+/g), function (e, n)
+ {
+ var r = x.expr.attrHandle[n] || x.find.attr;
+ x.expr.attrHandle[n] = K && Q || !G.test (n) ? function (e, n, i)
+ {
+ var o = x.expr.attrHandle[n], a = i ? t : (x.expr.attrHandle[n] = t) != r (e, n, i) ? n.toLowerCase () : null;
+ return x.expr.attrHandle[n] = o, a
+ } : function (e, n, r)
+ {
+ return r ? t : e[x.camelCase ("default-" + n)] ? n.toLowerCase () : null
+ }
+ }), K && Q || (x.attrHooks.value = {set: function (e, n, r)
+ {
+ return x.nodeName (e, "input") ? (e.defaultValue = n, t) : z && z.set (e, n, r)
+ }}), Q || (z = {set: function (e, n, r)
+ {
+ var i = e.getAttributeNode (r);
+ return i || e.setAttributeNode (i = e.ownerDocument.createAttribute (r)), i.value = n += "", "value" === r || n === e.getAttribute (r) ? n : t
+ }}, x.expr.attrHandle.id = x.expr.attrHandle.name = x.expr.attrHandle.coords = function (e, n, r)
+ {
+ var i;
+ return r ? t : (i = e.getAttributeNode (n)) && "" !== i.value ? i.value : null
+ }, x.valHooks.button = {get: function (e, n)
+ {
+ var r = e.getAttributeNode (n);
+ return r && r.specified ? r.value : t
+ }, set: z.set}, x.attrHooks.contenteditable = {set: function (e, t, n)
+ {
+ z.set (e, "" === t ? !1 : t, n)
+ }}, x.each (["width", "height"], function (e, n)
+ {
+ x.attrHooks[n] = {set: function (e, r)
+ {
+ return"" === r ? (e.setAttribute (n, "auto"), r) : t
+ }}
+ })), x.support.hrefNormalized || x.each (["href", "src"], function (e, t)
+ {
+ x.propHooks[t] = {get: function (e)
+ {
+ return e.getAttribute (t, 4)
+ }}
+ }), x.support.style || (x.attrHooks.style = {get: function (e)
+ {
+ return e.style.cssText || t
+ }, set: function (e, t)
+ {
+ return e.style.cssText = t + ""
+ }}), x.support.optSelected || (x.propHooks.selected = {get: function (e)
+ {
+ var t = e.parentNode;
+ return t && (t.selectedIndex, t.parentNode && t.parentNode.selectedIndex), null
+ }}), x.each (["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function ()
+ {
+ x.propFix[this.toLowerCase ()] = this
+ }), x.support.enctype || (x.propFix.enctype = "encoding"), x.each (["radio", "checkbox"], function ()
+ {
+ x.valHooks[this] = {set: function (e, n)
+ {
+ return x.isArray (n) ? e.checked = x.inArray (x (e).val (), n) >= 0 : t
+ }}, x.support.checkOn || (x.valHooks[this].get = function (e)
+ {
+ return null === e.getAttribute ("value") ? "on" : e.value
+ })
+ });
+ var Z = /^(?:input|select|textarea)$/i, et = /^key/, tt = /^(?:mouse|contextmenu)|click/, nt = /^(?:focusinfocus|focusoutblur)$/, rt = /^([^.]*)(?:\.(.+)|)$/;
+
+ function it ()
+ {
+ return!0
+ }
+
+ function ot ()
+ {
+ return!1
+ }
+
+ function at ()
+ {
+ try
+ {
+ return a.activeElement
+ } catch (e)
+ {
+ }
+ }
+
+ x.event = {global: {}, add: function (e, n, r, o, a)
+ {
+ var s, l, u, c, p, f, d, h, g, m, y, v = x._data (e);
+ if (v)
+ {
+ r.handler && (c = r, r = c.handler, a = c.selector), r.guid || (r.guid = x.guid++), (l = v.events) || (l = v.events = {}), (f = v.handle) || (f = v.handle = function (e)
+ {
+ return typeof x === i || e && x.event.triggered === e.type ? t : x.event.dispatch.apply (f.elem, arguments)
+ }, f.elem = e), n = (n || "").match (T) || [""], u = n.length;
+ while (u--)s = rt.exec (n[u]) || [], g = y = s[1], m = (s[2] || "").split (".").sort (), g && (p = x.event.special[g] || {}, g = (a ? p.delegateType : p.bindType) || g, p = x.event.special[g] || {}, d = x.extend ({type: g, origType: y, data: o, handler: r, guid: r.guid, selector: a, needsContext: a && x.expr.match.needsContext.test (a), namespace: m.join (".")}, c), (h = l[g]) || (h = l[g] = [], h.delegateCount = 0, p.setup && p.setup.call (e, o, m, f) !== !1 || (e.addEventListener ? e.addEventListener (g, f, !1) : e.attachEvent && e.attachEvent ("on" + g, f))), p.add && (p.add.call (e, d), d.handler.guid || (d.handler.guid = r.guid)), a ? h.splice (h.delegateCount++, 0, d) : h.push (d), x.event.global[g] = !0);
+ e = null
+ }
+ }, remove: function (e, t, n, r, i)
+ {
+ var o, a, s, l, u, c, p, f, d, h, g, m = x.hasData (e) && x._data (e);
+ if (m && (c = m.events))
+ {
+ t = (t || "").match (T) || [""], u = t.length;
+ while (u--)if (s = rt.exec (t[u]) || [], d = g = s[1], h = (s[2] || "").split (".").sort (), d)
+ {
+ p = x.event.special[d] || {}, d = (r ? p.delegateType : p.bindType) || d, f = c[d] || [], s = s[2] && RegExp ("(^|\\.)" + h.join ("\\.(?:.*\\.|)") + "(\\.|$)"), l = o = f.length;
+ while (o--)a = f[o], !i && g !== a.origType || n && n.guid !== a.guid || s && !s.test (a.namespace) || r && r !== a.selector && ("**" !== r || !a.selector) || (f.splice (o, 1), a.selector && f.delegateCount--, p.remove && p.remove.call (e, a));
+ l && !f.length && (p.teardown && p.teardown.call (e, h, m.handle) !== !1 || x.removeEvent (e, d, m.handle), delete c[d])
+ } else for (d in c)x.event.remove (e, d + t[u], n, r, !0);
+ x.isEmptyObject (c) && (delete m.handle, x._removeData (e, "events"))
+ }
+ }, trigger: function (n, r, i, o)
+ {
+ var s, l, u, c, p, f, d, h = [i || a], g = v.call (n, "type") ? n.type : n, m = v.call (n, "namespace") ? n.namespace.split (".") : [];
+ if (u = f = i = i || a, 3 !== i.nodeType && 8 !== i.nodeType && !nt.test (g + x.event.triggered) && (g.indexOf (".") >= 0 && (m = g.split ("."), g = m.shift (), m.sort ()), l = 0 > g.indexOf (":") && "on" + g, n = n[x.expando] ? n : new x.Event (g, "object" == typeof n && n), n.isTrigger = o ? 2 : 3, n.namespace = m.join ("."), n.namespace_re = n.namespace ? RegExp ("(^|\\.)" + m.join ("\\.(?:.*\\.|)") + "(\\.|$)") : null, n.result = t, n.target || (n.target = i), r = null == r ? [n] : x.makeArray (r, [n]), p = x.event.special[g] || {}, o || !p.trigger || p.trigger.apply (i, r) !== !1))
+ {
+ if (!o && !p.noBubble && !x.isWindow (i))
+ {
+ for (c = p.delegateType || g, nt.test (c + g) || (u = u.parentNode); u; u = u.parentNode)h.push (u), f = u;
+ f === (i.ownerDocument || a) && h.push (f.defaultView || f.parentWindow || e)
+ }
+ d = 0;
+ while ((u = h[d++]) && !n.isPropagationStopped ())n.type = d > 1 ? c : p.bindType || g, s = (x._data (u, "events") || {})[n.type] && x._data (u, "handle"), s && s.apply (u, r), s = l && u[l], s && x.acceptData (u) && s.apply && s.apply (u, r) === !1 && n.preventDefault ();
+ if (n.type = g, !o && !n.isDefaultPrevented () && (!p._default || p._default.apply (h.pop (), r) === !1) && x.acceptData (i) && l && i[g] && !x.isWindow (i))
+ {
+ f = i[l], f && (i[l] = null), x.event.triggered = g;
+ try
+ {
+ i[g] ()
+ } catch (y)
+ {
+ }
+ x.event.triggered = t, f && (i[l] = f)
+ }
+ return n.result
+ }
+ }, dispatch: function (e)
+ {
+ e = x.event.fix (e);
+ var n, r, i, o, a, s = [], l = g.call (arguments), u = (x._data (this, "events") || {})[e.type] || [], c = x.event.special[e.type] || {};
+ if (l[0] = e, e.delegateTarget = this, !c.preDispatch || c.preDispatch.call (this, e) !== !1)
+ {
+ s = x.event.handlers.call (this, e, u), n = 0;
+ while ((o = s[n++]) && !e.isPropagationStopped ())
+ {
+ e.currentTarget = o.elem, a = 0;
+ while ((i = o.handlers[a++]) && !e.isImmediatePropagationStopped ())(!e.namespace_re || e.namespace_re.test (i.namespace)) && (e.handleObj = i, e.data = i.data, r = ((x.event.special[i.origType] || {}).handle || i.handler).apply (o.elem, l), r !== t && (e.result = r) === !1 && (e.preventDefault (), e.stopPropagation ()))
+ }
+ return c.postDispatch && c.postDispatch.call (this, e), e.result
+ }
+ }, handlers: function (e, n)
+ {
+ var r, i, o, a, s = [], l = n.delegateCount, u = e.target;
+ if (l && u.nodeType && (!e.button || "click" !== e.type))for (; u != this; u = u.parentNode || this)if (1 === u.nodeType && (u.disabled !== !0 || "click" !== e.type))
+ {
+ for (o = [], a = 0; l > a; a++)i = n[a], r = i.selector + " ", o[r] === t && (o[r] = i.needsContext ? x (r, this).index (u) >= 0 : x.find (r, this, null, [u]).length), o[r] && o.push (i);
+ o.length && s.push ({elem: u, handlers: o})
+ }
+ return n.length > l && s.push ({elem: this, handlers: n.slice (l)}), s
+ }, fix: function (e)
+ {
+ if (e[x.expando])return e;
+ var t, n, r, i = e.type, o = e, s = this.fixHooks[i];
+ s || (this.fixHooks[i] = s = tt.test (i) ? this.mouseHooks : et.test (i) ? this.keyHooks : {}), r = s.props ? this.props.concat (s.props) : this.props, e = new x.Event (o), t = r.length;
+ while (t--)n = r[t], e[n] = o[n];
+ return e.target || (e.target = o.srcElement || a), 3 === e.target.nodeType && (e.target = e.target.parentNode), e.metaKey = !!e.metaKey, s.filter ? s.filter (e, o) : e
+ }, props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split (" "), fixHooks: {}, keyHooks: {props: "char charCode key keyCode".split (" "), filter: function (e, t)
+ {
+ return null == e.which && (e.which = null != t.charCode ? t.charCode : t.keyCode), e
+ }}, mouseHooks: {props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split (" "), filter: function (e, n)
+ {
+ var r, i, o, s = n.button, l = n.fromElement;
+ return null == e.pageX && null != n.clientX && (i = e.target.ownerDocument || a, o = i.documentElement, r = i.body, e.pageX = n.clientX + (o && o.scrollLeft || r && r.scrollLeft || 0) - (o && o.clientLeft || r && r.clientLeft || 0), e.pageY = n.clientY + (o && o.scrollTop || r && r.scrollTop || 0) - (o && o.clientTop || r && r.clientTop || 0)), !e.relatedTarget && l && (e.relatedTarget = l === e.target ? n.toElement : l), e.which || s === t || (e.which = 1 & s ? 1 : 2 & s ? 3 : 4 & s ? 2 : 0), e
+ }}, special: {load: {noBubble: !0}, focus: {trigger: function ()
+ {
+ if (this !== at () && this.focus)try
+ {
+ return this.focus (), !1
+ } catch (e)
+ {
+ }
+ }, delegateType: "focusin"}, blur: {trigger: function ()
+ {
+ return this === at () && this.blur ? (this.blur (), !1) : t
+ }, delegateType: "focusout"}, click: {trigger: function ()
+ {
+ return x.nodeName (this, "input") && "checkbox" === this.type && this.click ? (this.click (), !1) : t
+ }, _default: function (e)
+ {
+ return x.nodeName (e.target, "a")
+ }}, beforeunload: {postDispatch: function (e)
+ {
+ e.result !== t && (e.originalEvent.returnValue = e.result)
+ }}}, simulate: function (e, t, n, r)
+ {
+ var i = x.extend (new x.Event, n, {type: e, isSimulated: !0, originalEvent: {}});
+ r ? x.event.trigger (i, null, t) : x.event.dispatch.call (t, i), i.isDefaultPrevented () && n.preventDefault ()
+ }}, x.removeEvent = a.removeEventListener ? function (e, t, n)
+ {
+ e.removeEventListener && e.removeEventListener (t, n, !1)
+ } : function (e, t, n)
+ {
+ var r = "on" + t;
+ e.detachEvent && (typeof e[r] === i && (e[r] = null), e.detachEvent (r, n))
+ }, x.Event = function (e, n)
+ {
+ return this instanceof x.Event ? (e && e.type ? (this.originalEvent = e, this.type = e.type, this.isDefaultPrevented = e.defaultPrevented || e.returnValue === !1 || e.getPreventDefault && e.getPreventDefault () ? it : ot) : this.type = e, n && x.extend (this, n), this.timeStamp = e && e.timeStamp || x.now (), this[x.expando] = !0, t) : new x.Event (e, n)
+ }, x.Event.prototype = {isDefaultPrevented: ot, isPropagationStopped: ot, isImmediatePropagationStopped: ot, preventDefault: function ()
+ {
+ var e = this.originalEvent;
+ this.isDefaultPrevented = it, e && (e.preventDefault ? e.preventDefault () : e.returnValue = !1)
+ }, stopPropagation: function ()
+ {
+ var e = this.originalEvent;
+ this.isPropagationStopped = it, e && (e.stopPropagation && e.stopPropagation (), e.cancelBubble = !0)
+ }, stopImmediatePropagation: function ()
+ {
+ this.isImmediatePropagationStopped = it, this.stopPropagation ()
+ }}, x.each ({mouseenter: "mouseover", mouseleave: "mouseout"}, function (e, t)
+ {
+ x.event.special[e] = {delegateType: t, bindType: t, handle: function (e)
+ {
+ var n, r = this, i = e.relatedTarget, o = e.handleObj;
+ return(!i || i !== r && !x.contains (r, i)) && (e.type = o.origType, n = o.handler.apply (this, arguments), e.type = t), n
+ }}
+ }), x.support.submitBubbles || (x.event.special.submit = {setup: function ()
+ {
+ return x.nodeName (this, "form") ? !1 : (x.event.add (this, "click._submit keypress._submit", function (e)
+ {
+ var n = e.target, r = x.nodeName (n, "input") || x.nodeName (n, "button") ? n.form : t;
+ r && !x._data (r, "submitBubbles") && (x.event.add (r, "submit._submit", function (e)
+ {
+ e._submit_bubble = !0
+ }), x._data (r, "submitBubbles", !0))
+ }), t)
+ }, postDispatch: function (e)
+ {
+ e._submit_bubble && (delete e._submit_bubble, this.parentNode && !e.isTrigger && x.event.simulate ("submit", this.parentNode, e, !0))
+ }, teardown: function ()
+ {
+ return x.nodeName (this, "form") ? !1 : (x.event.remove (this, "._submit"), t)
+ }}), x.support.changeBubbles || (x.event.special.change = {setup: function ()
+ {
+ return Z.test (this.nodeName) ? (("checkbox" === this.type || "radio" === this.type) && (x.event.add (this, "propertychange._change", function (e)
+ {
+ "checked" === e.originalEvent.propertyName && (this._just_changed = !0)
+ }), x.event.add (this, "click._change", function (e)
+ {
+ this._just_changed && !e.isTrigger && (this._just_changed = !1), x.event.simulate ("change", this, e, !0)
+ })), !1) : (x.event.add (this, "beforeactivate._change", function (e)
+ {
+ var t = e.target;
+ Z.test (t.nodeName) && !x._data (t, "changeBubbles") && (x.event.add (t, "change._change", function (e)
+ {
+ !this.parentNode || e.isSimulated || e.isTrigger || x.event.simulate ("change", this.parentNode, e, !0)
+ }), x._data (t, "changeBubbles", !0))
+ }), t)
+ }, handle: function (e)
+ {
+ var n = e.target;
+ return this !== n || e.isSimulated || e.isTrigger || "radio" !== n.type && "checkbox" !== n.type ? e.handleObj.handler.apply (this, arguments) : t
+ }, teardown: function ()
+ {
+ return x.event.remove (this, "._change"), !Z.test (this.nodeName)
+ }}), x.support.focusinBubbles || x.each ({focus: "focusin", blur: "focusout"}, function (e, t)
+ {
+ var n = 0, r = function (e)
+ {
+ x.event.simulate (t, e.target, x.event.fix (e), !0)
+ };
+ x.event.special[t] = {setup: function ()
+ {
+ 0 === n++ && a.addEventListener (e, r, !0)
+ }, teardown: function ()
+ {
+ 0 === --n && a.removeEventListener (e, r, !0)
+ }}
+ }), x.fn.extend ({on: function (e, n, r, i, o)
+ {
+ var a, s;
+ if ("object" == typeof e)
+ {
+ "string" != typeof n && (r = r || n, n = t);
+ for (a in e)this.on (a, n, r, e[a], o);
+ return this
+ }
+ if (null == r && null == i ? (i = n, r = n = t) : null == i && ("string" == typeof n ? (i = r, r = t) : (i = r, r = n, n = t)), i === !1)i = ot; else if (!i)return this;
+ return 1 === o && (s = i, i = function (e)
+ {
+ return x ().off (e), s.apply (this, arguments)
+ }, i.guid = s.guid || (s.guid = x.guid++)), this.each (function ()
+ {
+ x.event.add (this, e, i, r, n)
+ })
+ }, one: function (e, t, n, r)
+ {
+ return this.on (e, t, n, r, 1)
+ }, off: function (e, n, r)
+ {
+ var i, o;
+ if (e && e.preventDefault && e.handleObj)return i = e.handleObj, x (e.delegateTarget).off (i.namespace ? i.origType + "." + i.namespace : i.origType, i.selector, i.handler), this;
+ if ("object" == typeof e)
+ {
+ for (o in e)this.off (o, n, e[o]);
+ return this
+ }
+ return(n === !1 || "function" == typeof n) && (r = n, n = t), r === !1 && (r = ot), this.each (function ()
+ {
+ x.event.remove (this, e, r, n)
+ })
+ }, trigger: function (e, t)
+ {
+ return this.each (function ()
+ {
+ x.event.trigger (e, t, this)
+ })
+ }, triggerHandler: function (e, n)
+ {
+ var r = this[0];
+ return r ? x.event.trigger (e, n, r, !0) : t
+ }});
+ var st = /^.[^:#\[\.,]*$/, lt = /^(?:parents|prev(?:Until|All))/, ut = x.expr.match.needsContext, ct = {children: !0, contents: !0, next: !0, prev: !0};
+ x.fn.extend ({find: function (e)
+ {
+ var t, n = [], r = this, i = r.length;
+ if ("string" != typeof e)return this.pushStack (x (e).filter (function ()
+ {
+ for (t = 0; i > t; t++)if (x.contains (r[t], this))return!0
+ }));
+ for (t = 0; i > t; t++)x.find (e, r[t], n);
+ return n = this.pushStack (i > 1 ? x.unique (n) : n), n.selector = this.selector ? this.selector + " " + e : e, n
+ }, has: function (e)
+ {
+ var t, n = x (e, this), r = n.length;
+ return this.filter (function ()
+ {
+ for (t = 0; r > t; t++)if (x.contains (this, n[t]))return!0
+ })
+ }, not: function (e)
+ {
+ return this.pushStack (ft (this, e || [], !0))
+ }, filter: function (e)
+ {
+ return this.pushStack (ft (this, e || [], !1))
+ }, is: function (e)
+ {
+ return!!ft (this, "string" == typeof e && ut.test (e) ? x (e) : e || [], !1).length
+ }, closest: function (e, t)
+ {
+ var n, r = 0, i = this.length, o = [], a = ut.test (e) || "string" != typeof e ? x (e, t || this.context) : 0;
+ for (; i > r; r++)for (n = this[r]; n && n !== t; n = n.parentNode)if (11 > n.nodeType && (a ? a.index (n) > -1 : 1 === n.nodeType && x.find.matchesSelector (n, e)))
+ {
+ n = o.push (n);
+ break
+ }
+ return this.pushStack (o.length > 1 ? x.unique (o) : o)
+ }, index: function (e)
+ {
+ return e ? "string" == typeof e ? x.inArray (this[0], x (e)) : x.inArray (e.jquery ? e[0] : e, this) : this[0] && this[0].parentNode ? this.first ().prevAll ().length : -1
+ }, add: function (e, t)
+ {
+ var n = "string" == typeof e ? x (e, t) : x.makeArray (e && e.nodeType ? [e] : e), r = x.merge (this.get (), n);
+ return this.pushStack (x.unique (r))
+ }, addBack: function (e)
+ {
+ return this.add (null == e ? this.prevObject : this.prevObject.filter (e))
+ }});
+ function pt (e, t)
+ {
+ do e = e[t]; while (e && 1 !== e.nodeType);
+ return e
+ }
+
+ x.each ({parent: function (e)
+ {
+ var t = e.parentNode;
+ return t && 11 !== t.nodeType ? t : null
+ }, parents: function (e)
+ {
+ return x.dir (e, "parentNode")
+ }, parentsUntil: function (e, t, n)
+ {
+ return x.dir (e, "parentNode", n)
+ }, next: function (e)
+ {
+ return pt (e, "nextSibling")
+ }, prev: function (e)
+ {
+ return pt (e, "previousSibling")
+ }, nextAll: function (e)
+ {
+ return x.dir (e, "nextSibling")
+ }, prevAll: function (e)
+ {
+ return x.dir (e, "previousSibling")
+ }, nextUntil: function (e, t, n)
+ {
+ return x.dir (e, "nextSibling", n)
+ }, prevUntil: function (e, t, n)
+ {
+ return x.dir (e, "previousSibling", n)
+ }, siblings: function (e)
+ {
+ return x.sibling ((e.parentNode || {}).firstChild, e)
+ }, children: function (e)
+ {
+ return x.sibling (e.firstChild)
+ }, contents: function (e)
+ {
+ return x.nodeName (e, "iframe") ? e.contentDocument || e.contentWindow.document : x.merge ([], e.childNodes)
+ }}, function (e, t)
+ {
+ x.fn[e] = function (n, r)
+ {
+ var i = x.map (this, t, n);
+ return"Until" !== e.slice (-5) && (r = n), r && "string" == typeof r && (i = x.filter (r, i)), this.length > 1 && (ct[e] || (i = x.unique (i)), lt.test (e) && (i = i.reverse ())), this.pushStack (i)
+ }
+ }), x.extend ({filter: function (e, t, n)
+ {
+ var r = t[0];
+ return n && (e = ":not(" + e + ")"), 1 === t.length && 1 === r.nodeType ? x.find.matchesSelector (r, e) ? [r] : [] : x.find.matches (e, x.grep (t, function (e)
+ {
+ return 1 === e.nodeType
+ }))
+ }, dir: function (e, n, r)
+ {
+ var i = [], o = e[n];
+ while (o && 9 !== o.nodeType && (r === t || 1 !== o.nodeType || !x (o).is (r)))1 === o.nodeType && i.push (o), o = o[n];
+ return i
+ }, sibling: function (e, t)
+ {
+ var n = [];
+ for (; e; e = e.nextSibling)1 === e.nodeType && e !== t && n.push (e);
+ return n
+ }});
+ function ft (e, t, n)
+ {
+ if (x.isFunction (t))return x.grep (e, function (e, r)
+ {
+ return!!t.call (e, r, e) !== n
+ });
+ if (t.nodeType)return x.grep (e, function (e)
+ {
+ return e === t !== n
+ });
+ if ("string" == typeof t)
+ {
+ if (st.test (t))return x.filter (t, e, n);
+ t = x.filter (t, e)
+ }
+ return x.grep (e, function (e)
+ {
+ return x.inArray (e, t) >= 0 !== n
+ })
+ }
+
+ function dt (e)
+ {
+ var t = ht.split ("|"), n = e.createDocumentFragment ();
+ if (n.createElement)while (t.length)n.createElement (t.pop ());
+ return n
+ }
+
+ var ht = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", gt = / jQuery\d+="(?:null|\d+)"/g, mt = RegExp ("<(?:" + ht + ")[\\s/>]", "i"), yt = /^\s+/, vt = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, bt = /<([\w:]+)/, xt = /
\s*$/g, At = {option: [1, "", " "], legend: [1, "", " "], area: [1, "", " "], param: [1, "", " "], thead: [1, ""], tr: [2, ""], col: [2, ""], td: [3, ""], _default: x.support.htmlSerialize ? [0, "", ""] : [1, "X", "
"]}, jt = dt (a), Dt = jt.appendChild (a.createElement ("div"));
+ At.optgroup = At.option, At.tbody = At.tfoot = At.colgroup = At.caption = At.thead, At.th = At.td, x.fn.extend ({text: function (e)
+ {
+ return x.access (this, function (e)
+ {
+ return e === t ? x.text (this) : this.empty ().append ((this[0] && this[0].ownerDocument || a).createTextNode (e))
+ }, null, e, arguments.length)
+ }, append: function ()
+ {
+ return this.domManip (arguments, function (e)
+ {
+ if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType)
+ {
+ var t = Lt (this, e);
+ t.appendChild (e)
+ }
+ })
+ }, prepend: function ()
+ {
+ return this.domManip (arguments, function (e)
+ {
+ if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType)
+ {
+ var t = Lt (this, e);
+ t.insertBefore (e, t.firstChild)
+ }
+ })
+ }, before: function ()
+ {
+ return this.domManip (arguments, function (e)
+ {
+ this.parentNode && this.parentNode.insertBefore (e, this)
+ })
+ }, after: function ()
+ {
+ return this.domManip (arguments, function (e)
+ {
+ this.parentNode && this.parentNode.insertBefore (e, this.nextSibling)
+ })
+ }, remove: function (e, t)
+ {
+ var n, r = e ? x.filter (e, this) : this, i = 0;
+ for (; null != (n = r[i]); i++)t || 1 !== n.nodeType || x.cleanData (Ft (n)), n.parentNode && (t && x.contains (n.ownerDocument, n) && _t (Ft (n, "script")), n.parentNode.removeChild (n));
+ return this
+ }, empty: function ()
+ {
+ var e, t = 0;
+ for (; null != (e = this[t]); t++)
+ {
+ 1 === e.nodeType && x.cleanData (Ft (e, !1));
+ while (e.firstChild)e.removeChild (e.firstChild);
+ e.options && x.nodeName (e, "select") && (e.options.length = 0)
+ }
+ return this
+ }, clone: function (e, t)
+ {
+ return e = null == e ? !1 : e, t = null == t ? e : t, this.map (function ()
+ {
+ return x.clone (this, e, t)
+ })
+ }, html: function (e)
+ {
+ return x.access (this, function (e)
+ {
+ var n = this[0] || {}, r = 0, i = this.length;
+ if (e === t)return 1 === n.nodeType ? n.innerHTML.replace (gt, "") : t;
+ if (!("string" != typeof e || Tt.test (e) || !x.support.htmlSerialize && mt.test (e) || !x.support.leadingWhitespace && yt.test (e) || At[(bt.exec (e) || ["", ""])[1].toLowerCase ()]))
+ {
+ e = e.replace (vt, "<$1>$2>");
+ try
+ {
+ for (; i > r; r++)n = this[r] || {}, 1 === n.nodeType && (x.cleanData (Ft (n, !1)), n.innerHTML = e);
+ n = 0
+ } catch (o)
+ {
+ }
+ }
+ n && this.empty ().append (e)
+ }, null, e, arguments.length)
+ }, replaceWith: function ()
+ {
+ var e = x.map (this, function (e)
+ {
+ return[e.nextSibling, e.parentNode]
+ }), t = 0;
+ return this.domManip (arguments, function (n)
+ {
+ var r = e[t++], i = e[t++];
+ i && (r && r.parentNode !== i && (r = this.nextSibling), x (this).remove (), i.insertBefore (n, r))
+ }, !0), t ? this : this.remove ()
+ }, detach: function (e)
+ {
+ return this.remove (e, !0)
+ }, domManip: function (e, t, n)
+ {
+ e = d.apply ([], e);
+ var r, i, o, a, s, l, u = 0, c = this.length, p = this, f = c - 1, h = e[0], g = x.isFunction (h);
+ if (g || !(1 >= c || "string" != typeof h || x.support.checkClone) && Nt.test (h))return this.each (function (r)
+ {
+ var i = p.eq (r);
+ g && (e[0] = h.call (this, r, i.html ())), i.domManip (e, t, n)
+ });
+ if (c && (l = x.buildFragment (e, this[0].ownerDocument, !1, !n && this), r = l.firstChild, 1 === l.childNodes.length && (l = r), r))
+ {
+ for (a = x.map (Ft (l, "script"), Ht), o = a.length; c > u; u++)i = l, u !== f && (i = x.clone (i, !0, !0), o && x.merge (a, Ft (i, "script"))), t.call (this[u], i, u);
+ if (o)for (s = a[a.length - 1].ownerDocument, x.map (a, qt), u = 0; o > u; u++)i = a[u], kt.test (i.type || "") && !x._data (i, "globalEval") && x.contains (s, i) && (i.src ? x._evalUrl (i.src) : x.globalEval ((i.text || i.textContent || i.innerHTML || "").replace (St, "")));
+ l = r = null
+ }
+ return this
+ }});
+ function Lt (e, t)
+ {
+ return x.nodeName (e, "table") && x.nodeName (1 === t.nodeType ? t : t.firstChild, "tr") ? e.getElementsByTagName ("tbody")[0] || e.appendChild (e.ownerDocument.createElement ("tbody")) : e
+ }
+
+ function Ht (e)
+ {
+ return e.type = (null !== x.find.attr (e, "type")) + "/" + e.type, e
+ }
+
+ function qt (e)
+ {
+ var t = Et.exec (e.type);
+ return t ? e.type = t[1] : e.removeAttribute ("type"), e
+ }
+
+ function _t (e, t)
+ {
+ var n, r = 0;
+ for (; null != (n = e[r]); r++)x._data (n, "globalEval", !t || x._data (t[r], "globalEval"))
+ }
+
+ function Mt (e, t)
+ {
+ if (1 === t.nodeType && x.hasData (e))
+ {
+ var n, r, i, o = x._data (e), a = x._data (t, o), s = o.events;
+ if (s)
+ {
+ delete a.handle, a.events = {};
+ for (n in s)for (r = 0, i = s[n].length; i > r; r++)x.event.add (t, n, s[n][r])
+ }
+ a.data && (a.data = x.extend ({}, a.data))
+ }
+ }
+
+ function Ot (e, t)
+ {
+ var n, r, i;
+ if (1 === t.nodeType)
+ {
+ if (n = t.nodeName.toLowerCase (), !x.support.noCloneEvent && t[x.expando])
+ {
+ i = x._data (t);
+ for (r in i.events)x.removeEvent (t, r, i.handle);
+ t.removeAttribute (x.expando)
+ }
+ "script" === n && t.text !== e.text ? (Ht (t).text = e.text, qt (t)) : "object" === n ? (t.parentNode && (t.outerHTML = e.outerHTML), x.support.html5Clone && e.innerHTML && !x.trim (t.innerHTML) && (t.innerHTML = e.innerHTML)) : "input" === n && Ct.test (e.type) ? (t.defaultChecked = t.checked = e.checked, t.value !== e.value && (t.value = e.value)) : "option" === n ? t.defaultSelected = t.selected = e.defaultSelected : ("input" === n || "textarea" === n) && (t.defaultValue = e.defaultValue)
+ }
+ }
+
+ x.each ({appendTo: "append", prependTo: "prepend", insertBefore: "before", insertAfter: "after", replaceAll: "replaceWith"}, function (e, t)
+ {
+ x.fn[e] = function (e)
+ {
+ var n, r = 0, i = [], o = x (e), a = o.length - 1;
+ for (; a >= r; r++)n = r === a ? this : this.clone (!0), x (o[r])[t] (n), h.apply (i, n.get ());
+ return this.pushStack (i)
+ }
+ });
+ function Ft (e, n)
+ {
+ var r, o, a = 0, s = typeof e.getElementsByTagName !== i ? e.getElementsByTagName (n || "*") : typeof e.querySelectorAll !== i ? e.querySelectorAll (n || "*") : t;
+ if (!s)for (s = [], r = e.childNodes || e; null != (o = r[a]); a++)!n || x.nodeName (o, n) ? s.push (o) : x.merge (s, Ft (o, n));
+ return n === t || n && x.nodeName (e, n) ? x.merge ([e], s) : s
+ }
+
+ function Bt (e)
+ {
+ Ct.test (e.type) && (e.defaultChecked = e.checked)
+ }
+
+ x.extend ({clone: function (e, t, n)
+ {
+ var r, i, o, a, s, l = x.contains (e.ownerDocument, e);
+ if (x.support.html5Clone || x.isXMLDoc (e) || !mt.test ("<" + e.nodeName + ">") ? o = e.cloneNode (!0) : (Dt.innerHTML = e.outerHTML, Dt.removeChild (o = Dt.firstChild)), !(x.support.noCloneEvent && x.support.noCloneChecked || 1 !== e.nodeType && 11 !== e.nodeType || x.isXMLDoc (e)))for (r = Ft (o), s = Ft (e), a = 0; null != (i = s[a]); ++a)r[a] && Ot (i, r[a]);
+ if (t)if (n)for (s = s || Ft (e), r = r || Ft (o), a = 0; null != (i = s[a]); a++)Mt (i, r[a]); else Mt (e, o);
+ return r = Ft (o, "script"), r.length > 0 && _t (r, !l && Ft (e, "script")), r = s = i = null, o
+ }, buildFragment: function (e, t, n, r)
+ {
+ var i, o, a, s, l, u, c, p = e.length, f = dt (t), d = [], h = 0;
+ for (; p > h; h++)if (o = e[h], o || 0 === o)if ("object" === x.type (o))x.merge (d, o.nodeType ? [o] : o); else if (wt.test (o))
+ {
+ s = s || f.appendChild (t.createElement ("div")), l = (bt.exec (o) || ["", ""])[1].toLowerCase (), c = At[l] || At._default, s.innerHTML = c[1] + o.replace (vt, "<$1>$2>") + c[2], i = c[0];
+ while (i--)s = s.lastChild;
+ if (!x.support.leadingWhitespace && yt.test (o) && d.push (t.createTextNode (yt.exec (o)[0])), !x.support.tbody)
+ {
+ o = "table" !== l || xt.test (o) ? "" !== c[1] || xt.test (o) ? 0 : s : s.firstChild, i = o && o.childNodes.length;
+ while (i--)x.nodeName (u = o.childNodes[i], "tbody") && !u.childNodes.length && o.removeChild (u)
+ }
+ x.merge (d, s.childNodes), s.textContent = "";
+ while (s.firstChild)s.removeChild (s.firstChild);
+ s = f.lastChild
+ } else d.push (t.createTextNode (o));
+ s && f.removeChild (s), x.support.appendChecked || x.grep (Ft (d, "input"), Bt), h = 0;
+ while (o = d[h++])if ((!r || -1 === x.inArray (o, r)) && (a = x.contains (o.ownerDocument, o), s = Ft (f.appendChild (o), "script"), a && _t (s), n))
+ {
+ i = 0;
+ while (o = s[i++])kt.test (o.type || "") && n.push (o)
+ }
+ return s = null, f
+ }, cleanData: function (e, t)
+ {
+ var n, r, o, a, s = 0, l = x.expando, u = x.cache, c = x.support.deleteExpando, f = x.event.special;
+ for (; null != (n = e[s]); s++)if ((t || x.acceptData (n)) && (o = n[l], a = o && u[o]))
+ {
+ if (a.events)for (r in a.events)f[r] ? x.event.remove (n, r) : x.removeEvent (n, r, a.handle);
+ u[o] && (delete u[o], c ? delete n[l] : typeof n.removeAttribute !== i ? n.removeAttribute (l) : n[l] = null, p.push (o))
+ }
+ }, _evalUrl: function (e)
+ {
+ return x.ajax ({url: e, type: "GET", dataType: "script", async: !1, global: !1, "throws": !0})
+ }}), x.fn.extend ({wrapAll: function (e)
+ {
+ if (x.isFunction (e))return this.each (function (t)
+ {
+ x (this).wrapAll (e.call (this, t))
+ });
+ if (this[0])
+ {
+ var t = x (e, this[0].ownerDocument).eq (0).clone (!0);
+ this[0].parentNode && t.insertBefore (this[0]), t.map (function ()
+ {
+ var e = this;
+ while (e.firstChild && 1 === e.firstChild.nodeType)e = e.firstChild;
+ return e
+ }).append (this)
+ }
+ return this
+ }, wrapInner: function (e)
+ {
+ return x.isFunction (e) ? this.each (function (t)
+ {
+ x (this).wrapInner (e.call (this, t))
+ }) : this.each (function ()
+ {
+ var t = x (this), n = t.contents ();
+ n.length ? n.wrapAll (e) : t.append (e)
+ })
+ }, wrap: function (e)
+ {
+ var t = x.isFunction (e);
+ return this.each (function (n)
+ {
+ x (this).wrapAll (t ? e.call (this, n) : e)
+ })
+ }, unwrap: function ()
+ {
+ return this.parent ().each (function ()
+ {
+ x.nodeName (this, "body") || x (this).replaceWith (this.childNodes)
+ }).end ()
+ }});
+ var Pt, Rt, Wt, $t = /alpha\([^)]*\)/i, It = /opacity\s*=\s*([^)]*)/, zt = /^(top|right|bottom|left)$/, Xt = /^(none|table(?!-c[ea]).+)/, Ut = /^margin/, Vt = RegExp ("^(" + w + ")(.*)$", "i"), Yt = RegExp ("^(" + w + ")(?!px)[a-z%]+$", "i"), Jt = RegExp ("^([+-])=(" + w + ")", "i"), Gt = {BODY: "block"}, Qt = {position: "absolute", visibility: "hidden", display: "block"}, Kt = {letterSpacing: 0, fontWeight: 400}, Zt = ["Top", "Right", "Bottom", "Left"], en = ["Webkit", "O", "Moz", "ms"];
+
+ function tn (e, t)
+ {
+ if (t in e)return t;
+ var n = t.charAt (0).toUpperCase () + t.slice (1), r = t, i = en.length;
+ while (i--)if (t = en[i] + n, t in e)return t;
+ return r
+ }
+
+ function nn (e, t)
+ {
+ return e = t || e, "none" === x.css (e, "display") || !x.contains (e.ownerDocument, e)
+ }
+
+ function rn (e, t)
+ {
+ var n, r, i, o = [], a = 0, s = e.length;
+ for (; s > a; a++)r = e[a], r.style && (o[a] = x._data (r, "olddisplay"), n = r.style.display, t ? (o[a] || "none" !== n || (r.style.display = ""), "" === r.style.display && nn (r) && (o[a] = x._data (r, "olddisplay", ln (r.nodeName)))) : o[a] || (i = nn (r), (n && "none" !== n || !i) && x._data (r, "olddisplay", i ? n : x.css (r, "display"))));
+ for (a = 0; s > a; a++)r = e[a], r.style && (t && "none" !== r.style.display && "" !== r.style.display || (r.style.display = t ? o[a] || "" : "none"));
+ return e
+ }
+
+ x.fn.extend ({css: function (e, n)
+ {
+ return x.access (this, function (e, n, r)
+ {
+ var i, o, a = {}, s = 0;
+ if (x.isArray (n))
+ {
+ for (o = Rt (e), i = n.length; i > s; s++)a[n[s]] = x.css (e, n[s], !1, o);
+ return a
+ }
+ return r !== t ? x.style (e, n, r) : x.css (e, n)
+ }, e, n, arguments.length > 1)
+ }, show: function ()
+ {
+ return rn (this, !0)
+ }, hide: function ()
+ {
+ return rn (this)
+ }, toggle: function (e)
+ {
+ return"boolean" == typeof e ? e ? this.show () : this.hide () : this.each (function ()
+ {
+ nn (this) ? x (this).show () : x (this).hide ()
+ })
+ }}), x.extend ({cssHooks: {opacity: {get: function (e, t)
+ {
+ if (t)
+ {
+ var n = Wt (e, "opacity");
+ return"" === n ? "1" : n
+ }
+ }}}, cssNumber: {columnCount: !0, fillOpacity: !0, fontWeight: !0, lineHeight: !0, opacity: !0, order: !0, orphans: !0, widows: !0, zIndex: !0, zoom: !0}, cssProps: {"float": x.support.cssFloat ? "cssFloat" : "styleFloat"}, style: function (e, n, r, i)
+ {
+ if (e && 3 !== e.nodeType && 8 !== e.nodeType && e.style)
+ {
+ var o, a, s, l = x.camelCase (n), u = e.style;
+ if (n = x.cssProps[l] || (x.cssProps[l] = tn (u, l)), s = x.cssHooks[n] || x.cssHooks[l], r === t)return s && "get"in s && (o = s.get (e, !1, i)) !== t ? o : u[n];
+ if (a = typeof r, "string" === a && (o = Jt.exec (r)) && (r = (o[1] + 1) * o[2] + parseFloat (x.css (e, n)), a = "number"), !(null == r || "number" === a && isNaN (r) || ("number" !== a || x.cssNumber[l] || (r += "px"), x.support.clearCloneStyle || "" !== r || 0 !== n.indexOf ("background") || (u[n] = "inherit"), s && "set"in s && (r = s.set (e, r, i)) === t)))try
+ {
+ u[n] = r
+ } catch (c)
+ {
+ }
+ }
+ }, css: function (e, n, r, i)
+ {
+ var o, a, s, l = x.camelCase (n);
+ return n = x.cssProps[l] || (x.cssProps[l] = tn (e.style, l)), s = x.cssHooks[n] || x.cssHooks[l], s && "get"in s && (a = s.get (e, !0, r)), a === t && (a = Wt (e, n, i)), "normal" === a && n in Kt && (a = Kt[n]), "" === r || r ? (o = parseFloat (a), r === !0 || x.isNumeric (o) ? o || 0 : a) : a
+ }}), e.getComputedStyle ? (Rt = function (t)
+ {
+ return e.getComputedStyle (t, null)
+ }, Wt = function (e, n, r)
+ {
+ var i, o, a, s = r || Rt (e), l = s ? s.getPropertyValue (n) || s[n] : t, u = e.style;
+ return s && ("" !== l || x.contains (e.ownerDocument, e) || (l = x.style (e, n)), Yt.test (l) && Ut.test (n) && (i = u.width, o = u.minWidth, a = u.maxWidth, u.minWidth = u.maxWidth = u.width = l, l = s.width, u.width = i, u.minWidth = o, u.maxWidth = a)), l
+ }) : a.documentElement.currentStyle && (Rt = function (e)
+ {
+ return e.currentStyle
+ }, Wt = function (e, n, r)
+ {
+ var i, o, a, s = r || Rt (e), l = s ? s[n] : t, u = e.style;
+ return null == l && u && u[n] && (l = u[n]), Yt.test (l) && !zt.test (n) && (i = u.left, o = e.runtimeStyle, a = o && o.left, a && (o.left = e.currentStyle.left), u.left = "fontSize" === n ? "1em" : l, l = u.pixelLeft + "px", u.left = i, a && (o.left = a)), "" === l ? "auto" : l
+ });
+ function on (e, t, n)
+ {
+ var r = Vt.exec (t);
+ return r ? Math.max (0, r[1] - (n || 0)) + (r[2] || "px") : t
+ }
+
+ function an (e, t, n, r, i)
+ {
+ var o = n === (r ? "border" : "content") ? 4 : "width" === t ? 1 : 0, a = 0;
+ for (; 4 > o; o += 2)"margin" === n && (a += x.css (e, n + Zt[o], !0, i)), r ? ("content" === n && (a -= x.css (e, "padding" + Zt[o], !0, i)), "margin" !== n && (a -= x.css (e, "border" + Zt[o] + "Width", !0, i))) : (a += x.css (e, "padding" + Zt[o], !0, i), "padding" !== n && (a += x.css (e, "border" + Zt[o] + "Width", !0, i)));
+ return a
+ }
+
+ function sn (e, t, n)
+ {
+ var r = !0, i = "width" === t ? e.offsetWidth : e.offsetHeight, o = Rt (e), a = x.support.boxSizing && "border-box" === x.css (e, "boxSizing", !1, o);
+ if (0 >= i || null == i)
+ {
+ if (i = Wt (e, t, o), (0 > i || null == i) && (i = e.style[t]), Yt.test (i))return i;
+ r = a && (x.support.boxSizingReliable || i === e.style[t]), i = parseFloat (i) || 0
+ }
+ return i + an (e, t, n || (a ? "border" : "content"), r, o) + "px"
+ }
+
+ function ln (e)
+ {
+ var t = a, n = Gt[e];
+ return n || (n = un (e, t), "none" !== n && n || (Pt = (Pt || x ("").css ("cssText", "display:block !important")).appendTo (t.documentElement), t = (Pt[0].contentWindow || Pt[0].contentDocument).document, t.write (""), t.close (), n = un (e, t), Pt.detach ()), Gt[e] = n), n
+ }
+
+ function un (e, t)
+ {
+ var n = x (t.createElement (e)).appendTo (t.body), r = x.css (n[0], "display");
+ return n.remove (), r
+ }
+
+ x.each (["height", "width"], function (e, n)
+ {
+ x.cssHooks[n] = {get: function (e, r, i)
+ {
+ return r ? 0 === e.offsetWidth && Xt.test (x.css (e, "display")) ? x.swap (e, Qt, function ()
+ {
+ return sn (e, n, i)
+ }) : sn (e, n, i) : t
+ }, set: function (e, t, r)
+ {
+ var i = r && Rt (e);
+ return on (e, t, r ? an (e, n, r, x.support.boxSizing && "border-box" === x.css (e, "boxSizing", !1, i), i) : 0)
+ }}
+ }), x.support.opacity || (x.cssHooks.opacity = {get: function (e, t)
+ {
+ return It.test ((t && e.currentStyle ? e.currentStyle.filter : e.style.filter) || "") ? .01 * parseFloat (RegExp.$1) + "" : t ? "1" : ""
+ }, set: function (e, t)
+ {
+ var n = e.style, r = e.currentStyle, i = x.isNumeric (t) ? "alpha(opacity=" + 100 * t + ")" : "", o = r && r.filter || n.filter || "";
+ n.zoom = 1, (t >= 1 || "" === t) && "" === x.trim (o.replace ($t, "")) && n.removeAttribute && (n.removeAttribute ("filter"), "" === t || r && !r.filter) || (n.filter = $t.test (o) ? o.replace ($t, i) : o + " " + i)
+ }}), x (function ()
+ {
+ x.support.reliableMarginRight || (x.cssHooks.marginRight = {get: function (e, n)
+ {
+ return n ? x.swap (e, {display: "inline-block"}, Wt, [e, "marginRight"]) : t
+ }}), !x.support.pixelPosition && x.fn.position && x.each (["top", "left"], function (e, n)
+ {
+ x.cssHooks[n] = {get: function (e, r)
+ {
+ return r ? (r = Wt (e, n), Yt.test (r) ? x (e).position ()[n] + "px" : r) : t
+ }}
+ })
+ }), x.expr && x.expr.filters && (x.expr.filters.hidden = function (e)
+ {
+ return 0 >= e.offsetWidth && 0 >= e.offsetHeight || !x.support.reliableHiddenOffsets && "none" === (e.style && e.style.display || x.css (e, "display"))
+ }, x.expr.filters.visible = function (e)
+ {
+ return!x.expr.filters.hidden (e)
+ }), x.each ({margin: "", padding: "", border: "Width"}, function (e, t)
+ {
+ x.cssHooks[e + t] = {expand: function (n)
+ {
+ var r = 0, i = {}, o = "string" == typeof n ? n.split (" ") : [n];
+ for (; 4 > r; r++)i[e + Zt[r] + t] = o[r] || o[r - 2] || o[0];
+ return i
+ }}, Ut.test (e) || (x.cssHooks[e + t].set = on)
+ });
+ var cn = /%20/g, pn = /\[\]$/, fn = /\r?\n/g, dn = /^(?:submit|button|image|reset|file)$/i, hn = /^(?:input|select|textarea|keygen)/i;
+ x.fn.extend ({serialize: function ()
+ {
+ return x.param (this.serializeArray ())
+ }, serializeArray: function ()
+ {
+ return this.map (function ()
+ {
+ var e = x.prop (this, "elements");
+ return e ? x.makeArray (e) : this
+ }).filter (function ()
+ {
+ var e = this.type;
+ return this.name && !x (this).is (":disabled") && hn.test (this.nodeName) && !dn.test (e) && (this.checked || !Ct.test (e))
+ }).map (function (e, t)
+ {
+ var n = x (this).val ();
+ return null == n ? null : x.isArray (n) ? x.map (n, function (e)
+ {
+ return{name: t.name, value: e.replace (fn, "\r\n")}
+ }) : {name: t.name, value: n.replace (fn, "\r\n")}
+ }).get ()
+ }}), x.param = function (e, n)
+ {
+ var r, i = [], o = function (e, t)
+ {
+ t = x.isFunction (t) ? t () : null == t ? "" : t, i[i.length] = encodeURIComponent (e) + "=" + encodeURIComponent (t)
+ };
+ if (n === t && (n = x.ajaxSettings && x.ajaxSettings.traditional), x.isArray (e) || e.jquery && !x.isPlainObject (e))x.each (e, function ()
+ {
+ o (this.name, this.value)
+ }); else for (r in e)gn (r, e[r], n, o);
+ return i.join ("&").replace (cn, "+")
+ };
+ function gn (e, t, n, r)
+ {
+ var i;
+ if (x.isArray (t))x.each (t, function (t, i)
+ {
+ n || pn.test (e) ? r (e, i) : gn (e + "[" + ("object" == typeof i ? t : "") + "]", i, n, r)
+ }); else if (n || "object" !== x.type (t))r (e, t); else for (i in t)gn (e + "[" + i + "]", t[i], n, r)
+ }
+
+ x.each ("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split (" "), function (e, t)
+ {
+ x.fn[t] = function (e, n)
+ {
+ return arguments.length > 0 ? this.on (t, null, e, n) : this.trigger (t)
+ }
+ }), x.fn.extend ({hover: function (e, t)
+ {
+ return this.mouseenter (e).mouseleave (t || e)
+ }, bind: function (e, t, n)
+ {
+ return this.on (e, null, t, n)
+ }, unbind: function (e, t)
+ {
+ return this.off (e, null, t)
+ }, delegate: function (e, t, n, r)
+ {
+ return this.on (t, e, n, r)
+ }, undelegate: function (e, t, n)
+ {
+ return 1 === arguments.length ? this.off (e, "**") : this.off (t, e || "**", n)
+ }});
+ var mn, yn, vn = x.now (), bn = /\?/, xn = /#.*$/, wn = /([?&])_=[^&]*/, Tn = /^(.*?):[ \t]*([^\r\n]*)\r?$/gm, Cn = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, Nn = /^(?:GET|HEAD)$/, kn = /^\/\//, En = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/, Sn = x.fn.load, An = {}, jn = {}, Dn = "*/".concat ("*");
+ try
+ {
+ yn = o.href
+ } catch (Ln)
+ {
+ yn = a.createElement ("a"), yn.href = "", yn = yn.href
+ }
+ mn = En.exec (yn.toLowerCase ()) || [];
+ function Hn (e)
+ {
+ return function (t, n)
+ {
+ "string" != typeof t && (n = t, t = "*");
+ var r, i = 0, o = t.toLowerCase ().match (T) || [];
+ if (x.isFunction (n))while (r = o[i++])"+" === r[0] ? (r = r.slice (1) || "*", (e[r] = e[r] || []).unshift (n)) : (e[r] = e[r] || []).push (n)
+ }
+ }
+
+ function qn (e, n, r, i)
+ {
+ var o = {}, a = e === jn;
+
+ function s (l)
+ {
+ var u;
+ return o[l] = !0, x.each (e[l] || [], function (e, l)
+ {
+ var c = l (n, r, i);
+ return"string" != typeof c || a || o[c] ? a ? !(u = c) : t : (n.dataTypes.unshift (c), s (c), !1)
+ }), u
+ }
+
+ return s (n.dataTypes[0]) || !o["*"] && s ("*")
+ }
+
+ function _n (e, n)
+ {
+ var r, i, o = x.ajaxSettings.flatOptions || {};
+ for (i in n)n[i] !== t && ((o[i] ? e : r || (r = {}))[i] = n[i]);
+ return r && x.extend (!0, e, r), e
+ }
+
+ x.fn.load = function (e, n, r)
+ {
+ if ("string" != typeof e && Sn)return Sn.apply (this, arguments);
+ var i, o, a, s = this, l = e.indexOf (" ");
+ return l >= 0 && (i = e.slice (l, e.length), e = e.slice (0, l)), x.isFunction (n) ? (r = n, n = t) : n && "object" == typeof n && (a = "POST"), s.length > 0 && x.ajax ({url: e, type: a, dataType: "html", data: n}).done (function (e)
+ {
+ o = arguments, s.html (i ? x ("").append (x.parseHTML (e)).find (i) : e)
+ }).complete (r && function (e, t)
+ {
+ s.each (r, o || [e.responseText, t, e])
+ }), this
+ }, x.each (["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function (e, t)
+ {
+ x.fn[t] = function (e)
+ {
+ return this.on (t, e)
+ }
+ }), x.extend ({active: 0, lastModified: {}, etag: {}, ajaxSettings: {url: yn, type: "GET", isLocal: Cn.test (mn[1]), global: !0, processData: !0, async: !0, contentType: "application/x-www-form-urlencoded; charset=UTF-8", accepts: {"*": Dn, text: "text/plain", html: "text/html", xml: "application/xml, text/xml", json: "application/json, text/javascript"}, contents: {xml: /xml/, html: /html/, json: /json/}, responseFields: {xml: "responseXML", text: "responseText", json: "responseJSON"}, converters: {"* text": String, "text html": !0, "text json": x.parseJSON, "text xml": x.parseXML}, flatOptions: {url: !0, context: !0}}, ajaxSetup: function (e, t)
+ {
+ return t ? _n (_n (e, x.ajaxSettings), t) : _n (x.ajaxSettings, e)
+ }, ajaxPrefilter: Hn (An), ajaxTransport: Hn (jn), ajax: function (e, n)
+ {
+ "object" == typeof e && (n = e, e = t), n = n || {};
+ var r, i, o, a, s, l, u, c, p = x.ajaxSetup ({}, n), f = p.context || p, d = p.context && (f.nodeType || f.jquery) ? x (f) : x.event, h = x.Deferred (), g = x.Callbacks ("once memory"), m = p.statusCode || {}, y = {}, v = {}, b = 0, w = "canceled", C = {readyState: 0, getResponseHeader: function (e)
+ {
+ var t;
+ if (2 === b)
+ {
+ if (!c)
+ {
+ c = {};
+ while (t = Tn.exec (a))c[t[1].toLowerCase ()] = t[2]
+ }
+ t = c[e.toLowerCase ()]
+ }
+ return null == t ? null : t
+ }, getAllResponseHeaders: function ()
+ {
+ return 2 === b ? a : null
+ }, setRequestHeader: function (e, t)
+ {
+ var n = e.toLowerCase ();
+ return b || (e = v[n] = v[n] || e, y[e] = t), this
+ }, overrideMimeType: function (e)
+ {
+ return b || (p.mimeType = e), this
+ }, statusCode: function (e)
+ {
+ var t;
+ if (e)if (2 > b)for (t in e)m[t] = [m[t], e[t]]; else C.always (e[C.status]);
+ return this
+ }, abort: function (e)
+ {
+ var t = e || w;
+ return u && u.abort (t), k (0, t), this
+ }};
+ if (h.promise (C).complete = g.add, C.success = C.done, C.error = C.fail, p.url = ((e || p.url || yn) + "").replace (xn, "").replace (kn, mn[1] + "//"), p.type = n.method || n.type || p.method || p.type, p.dataTypes = x.trim (p.dataType || "*").toLowerCase ().match (T) || [""], null == p.crossDomain && (r = En.exec (p.url.toLowerCase ()), p.crossDomain = !(!r || r[1] === mn[1] && r[2] === mn[2] && (r[3] || ("http:" === r[1] ? "80" : "443")) === (mn[3] || ("http:" === mn[1] ? "80" : "443")))), p.data && p.processData && "string" != typeof p.data && (p.data = x.param (p.data, p.traditional)), qn (An, p, n, C), 2 === b)return C;
+ l = p.global, l && 0 === x.active++ && x.event.trigger ("ajaxStart"), p.type = p.type.toUpperCase (), p.hasContent = !Nn.test (p.type), o = p.url, p.hasContent || (p.data && (o = p.url += (bn.test (o) ? "&" : "?") + p.data, delete p.data), p.cache === !1 && (p.url = wn.test (o) ? o.replace (wn, "$1_=" + vn++) : o + (bn.test (o) ? "&" : "?") + "_=" + vn++)), p.ifModified && (x.lastModified[o] && C.setRequestHeader ("If-Modified-Since", x.lastModified[o]), x.etag[o] && C.setRequestHeader ("If-None-Match", x.etag[o])), (p.data && p.hasContent && p.contentType !== !1 || n.contentType) && C.setRequestHeader ("Content-Type", p.contentType), C.setRequestHeader ("Accept", p.dataTypes[0] && p.accepts[p.dataTypes[0]] ? p.accepts[p.dataTypes[0]] + ("*" !== p.dataTypes[0] ? ", " + Dn + "; q=0.01" : "") : p.accepts["*"]);
+ for (i in p.headers)C.setRequestHeader (i, p.headers[i]);
+ if (p.beforeSend && (p.beforeSend.call (f, C, p) === !1 || 2 === b))return C.abort ();
+ w = "abort";
+ for (i in{success: 1, error: 1, complete: 1})C[i] (p[i]);
+ if (u = qn (jn, p, n, C))
+ {
+ C.readyState = 1, l && d.trigger ("ajaxSend", [C, p]), p.async && p.timeout > 0 && (s = setTimeout (function ()
+ {
+ C.abort ("timeout")
+ }, p.timeout));
+ try
+ {
+ b = 1, u.send (y, k)
+ } catch (N)
+ {
+ if (!(2 > b))throw N;
+ k (-1, N)
+ }
+ } else k (-1, "No Transport");
+ function k (e, n, r, i)
+ {
+ var c, y, v, w, T, N = n;
+ 2 !== b && (b = 2, s && clearTimeout (s), u = t, a = i || "", C.readyState = e > 0 ? 4 : 0, c = e >= 200 && 300 > e || 304 === e, r && (w = Mn (p, C, r)), w = On (p, w, C, c), c ? (p.ifModified && (T = C.getResponseHeader ("Last-Modified"), T && (x.lastModified[o] = T), T = C.getResponseHeader ("etag"), T && (x.etag[o] = T)), 204 === e || "HEAD" === p.type ? N = "nocontent" : 304 === e ? N = "notmodified" : (N = w.state, y = w.data, v = w.error, c = !v)) : (v = N, (e || !N) && (N = "error", 0 > e && (e = 0))), C.status = e, C.statusText = (n || N) + "", c ? h.resolveWith (f, [y, N, C]) : h.rejectWith (f, [C, N, v]), C.statusCode (m), m = t, l && d.trigger (c ? "ajaxSuccess" : "ajaxError", [C, p, c ? y : v]), g.fireWith (f, [C, N]), l && (d.trigger ("ajaxComplete", [C, p]), --x.active || x.event.trigger ("ajaxStop")))
+ }
+
+ return C
+ }, getJSON: function (e, t, n)
+ {
+ return x.get (e, t, n, "json")
+ }, getScript: function (e, n)
+ {
+ return x.get (e, t, n, "script")
+ }}), x.each (["get", "post"], function (e, n)
+ {
+ x[n] = function (e, r, i, o)
+ {
+ return x.isFunction (r) && (o = o || i, i = r, r = t), x.ajax ({url: e, type: n, dataType: o, data: r, success: i})
+ }
+ });
+ function Mn (e, n, r)
+ {
+ var i, o, a, s, l = e.contents, u = e.dataTypes;
+ while ("*" === u[0])u.shift (), o === t && (o = e.mimeType || n.getResponseHeader ("Content-Type"));
+ if (o)for (s in l)if (l[s] && l[s].test (o))
+ {
+ u.unshift (s);
+ break
+ }
+ if (u[0]in r)a = u[0]; else
+ {
+ for (s in r)
+ {
+ if (!u[0] || e.converters[s + " " + u[0]])
+ {
+ a = s;
+ break
+ }
+ i || (i = s)
+ }
+ a = a || i
+ }
+ return a ? (a !== u[0] && u.unshift (a), r[a]) : t
+ }
+
+ function On (e, t, n, r)
+ {
+ var i, o, a, s, l, u = {}, c = e.dataTypes.slice ();
+ if (c[1])for (a in e.converters)u[a.toLowerCase ()] = e.converters[a];
+ o = c.shift ();
+ while (o)if (e.responseFields[o] && (n[e.responseFields[o]] = t), !l && r && e.dataFilter && (t = e.dataFilter (t, e.dataType)), l = o, o = c.shift ())if ("*" === o)o = l; else if ("*" !== l && l !== o)
+ {
+ if (a = u[l + " " + o] || u["* " + o], !a)for (i in u)if (s = i.split (" "), s[1] === o && (a = u[l + " " + s[0]] || u["* " + s[0]]))
+ {
+ a === !0 ? a = u[i] : u[i] !== !0 && (o = s[0], c.unshift (s[1]));
+ break
+ }
+ if (a !== !0)if (a && e["throws"])t = a (t); else try
+ {
+ t = a (t)
+ } catch (p)
+ {
+ return{state: "parsererror", error: a ? p : "No conversion from " + l + " to " + o}
+ }
+ }
+ return{state: "success", data: t}
+ }
+
+ x.ajaxSetup ({accepts: {script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"}, contents: {script: /(?:java|ecma)script/}, converters: {"text script": function (e)
+ {
+ return x.globalEval (e), e
+ }}}), x.ajaxPrefilter ("script", function (e)
+ {
+ e.cache === t && (e.cache = !1), e.crossDomain && (e.type = "GET", e.global = !1)
+ }), x.ajaxTransport ("script", function (e)
+ {
+ if (e.crossDomain)
+ {
+ var n, r = a.head || x ("head")[0] || a.documentElement;
+ return{send: function (t, i)
+ {
+ n = a.createElement ("script"), n.async = !0, e.scriptCharset && (n.charset = e.scriptCharset), n.src = e.url, n.onload = n.onreadystatechange = function (e, t)
+ {
+ (t || !n.readyState || /loaded|complete/.test (n.readyState)) && (n.onload = n.onreadystatechange = null, n.parentNode && n.parentNode.removeChild (n), n = null, t || i (200, "success"))
+ }, r.insertBefore (n, r.firstChild)
+ }, abort: function ()
+ {
+ n && n.onload (t, !0)
+ }}
+ }
+ });
+ var Fn = [], Bn = /(=)\?(?=&|$)|\?\?/;
+ x.ajaxSetup ({jsonp: "callback", jsonpCallback: function ()
+ {
+ var e = Fn.pop () || x.expando + "_" + vn++;
+ return this[e] = !0, e
+ }}), x.ajaxPrefilter ("json jsonp", function (n, r, i)
+ {
+ var o, a, s, l = n.jsonp !== !1 && (Bn.test (n.url) ? "url" : "string" == typeof n.data && !(n.contentType || "").indexOf ("application/x-www-form-urlencoded") && Bn.test (n.data) && "data");
+ return l || "jsonp" === n.dataTypes[0] ? (o = n.jsonpCallback = x.isFunction (n.jsonpCallback) ? n.jsonpCallback () : n.jsonpCallback, l ? n[l] = n[l].replace (Bn, "$1" + o) : n.jsonp !== !1 && (n.url += (bn.test (n.url) ? "&" : "?") + n.jsonp + "=" + o), n.converters["script json"] = function ()
+ {
+ return s || x.error (o + " was not called"), s[0]
+ }, n.dataTypes[0] = "json", a = e[o], e[o] = function ()
+ {
+ s = arguments
+ }, i.always (function ()
+ {
+ e[o] = a, n[o] && (n.jsonpCallback = r.jsonpCallback, Fn.push (o)), s && x.isFunction (a) && a (s[0]), s = a = t
+ }), "script") : t
+ });
+ var Pn, Rn, Wn = 0, $n = e.ActiveXObject && function ()
+ {
+ var e;
+ for (e in Pn)Pn[e] (t, !0)
+ };
+
+ function In ()
+ {
+ try
+ {
+ return new e.XMLHttpRequest
+ } catch (t)
+ {
+ }
+ }
+
+ function zn ()
+ {
+ try
+ {
+ return new e.ActiveXObject ("Microsoft.XMLHTTP")
+ } catch (t)
+ {
+ }
+ }
+
+ x.ajaxSettings.xhr = e.ActiveXObject ? function ()
+ {
+ return!this.isLocal && In () || zn ()
+ } : In, Rn = x.ajaxSettings.xhr (), x.support.cors = !!Rn && "withCredentials"in Rn, Rn = x.support.ajax = !!Rn, Rn && x.ajaxTransport (function (n)
+ {
+ if (!n.crossDomain || x.support.cors)
+ {
+ var r;
+ return{send: function (i, o)
+ {
+ var a, s, l = n.xhr ();
+ if (n.username ? l.open (n.type, n.url, n.async, n.username, n.password) : l.open (n.type, n.url, n.async), n.xhrFields)for (s in n.xhrFields)l[s] = n.xhrFields[s];
+ n.mimeType && l.overrideMimeType && l.overrideMimeType (n.mimeType), n.crossDomain || i["X-Requested-With"] || (i["X-Requested-With"] = "XMLHttpRequest");
+ try
+ {
+ for (s in i)l.setRequestHeader (s, i[s])
+ } catch (u)
+ {
+ }
+ l.send (n.hasContent && n.data || null), r = function (e, i)
+ {
+ var s, u, c, p;
+ try
+ {
+ if (r && (i || 4 === l.readyState))if (r = t, a && (l.onreadystatechange = x.noop, $n && delete Pn[a]), i)4 !== l.readyState && l.abort (); else
+ {
+ p = {}, s = l.status, u = l.getAllResponseHeaders (), "string" == typeof l.responseText && (p.text = l.responseText);
+ try
+ {
+ c = l.statusText
+ } catch (f)
+ {
+ c = ""
+ }
+ s || !n.isLocal || n.crossDomain ? 1223 === s && (s = 204) : s = p.text ? 200 : 404
+ }
+ } catch (d)
+ {
+ i || o (-1, d)
+ }
+ p && o (s, c, p, u)
+ }, n.async ? 4 === l.readyState ? setTimeout (r) : (a = ++Wn, $n && (Pn || (Pn = {}, x (e).unload ($n)), Pn[a] = r), l.onreadystatechange = r) : r ()
+ }, abort: function ()
+ {
+ r && r (t, !0)
+ }}
+ }
+ });
+ var Xn, Un, Vn = /^(?:toggle|show|hide)$/, Yn = RegExp ("^(?:([+-])=|)(" + w + ")([a-z%]*)$", "i"), Jn = /queueHooks$/, Gn = [nr], Qn = {"*": [function (e, t)
+ {
+ var n = this.createTween (e, t), r = n.cur (), i = Yn.exec (t), o = i && i[3] || (x.cssNumber[e] ? "" : "px"), a = (x.cssNumber[e] || "px" !== o && +r) && Yn.exec (x.css (n.elem, e)), s = 1, l = 20;
+ if (a && a[3] !== o)
+ {
+ o = o || a[3], i = i || [], a = +r || 1;
+ do s = s || ".5", a /= s, x.style (n.elem, e, a + o); while (s !== (s = n.cur () / r) && 1 !== s && --l)
+ }
+ return i && (a = n.start = +a || +r || 0, n.unit = o, n.end = i[1] ? a + (i[1] + 1) * i[2] : +i[2]), n
+ }]};
+
+ function Kn ()
+ {
+ return setTimeout (function ()
+ {
+ Xn = t
+ }), Xn = x.now ()
+ }
+
+ function Zn (e, t, n)
+ {
+ var r, i = (Qn[t] || []).concat (Qn["*"]), o = 0, a = i.length;
+ for (; a > o; o++)if (r = i[o].call (n, t, e))return r
+ }
+
+ function er (e, t, n)
+ {
+ var r, i, o = 0, a = Gn.length, s = x.Deferred ().always (function ()
+ {
+ delete l.elem
+ }), l = function ()
+ {
+ if (i)return!1;
+ var t = Xn || Kn (), n = Math.max (0, u.startTime + u.duration - t), r = n / u.duration || 0, o = 1 - r, a = 0, l = u.tweens.length;
+ for (; l > a; a++)u.tweens[a].run (o);
+ return s.notifyWith (e, [u, o, n]), 1 > o && l ? n : (s.resolveWith (e, [u]), !1)
+ }, u = s.promise ({elem: e, props: x.extend ({}, t), opts: x.extend (!0, {specialEasing: {}}, n), originalProperties: t, originalOptions: n, startTime: Xn || Kn (), duration: n.duration, tweens: [], createTween: function (t, n)
+ {
+ var r = x.Tween (e, u.opts, t, n, u.opts.specialEasing[t] || u.opts.easing);
+ return u.tweens.push (r), r
+ }, stop: function (t)
+ {
+ var n = 0, r = t ? u.tweens.length : 0;
+ if (i)return this;
+ for (i = !0; r > n; n++)u.tweens[n].run (1);
+ return t ? s.resolveWith (e, [u, t]) : s.rejectWith (e, [u, t]), this
+ }}), c = u.props;
+ for (tr (c, u.opts.specialEasing); a > o; o++)if (r = Gn[o].call (u, e, c, u.opts))return r;
+ return x.map (c, Zn, u), x.isFunction (u.opts.start) && u.opts.start.call (e, u), x.fx.timer (x.extend (l, {elem: e, anim: u, queue: u.opts.queue})), u.progress (u.opts.progress).done (u.opts.done, u.opts.complete).fail (u.opts.fail).always (u.opts.always)
+ }
+
+ function tr (e, t)
+ {
+ var n, r, i, o, a;
+ for (n in e)if (r = x.camelCase (n), i = t[r], o = e[n], x.isArray (o) && (i = o[1], o = e[n] = o[0]), n !== r && (e[r] = o, delete e[n]), a = x.cssHooks[r], a && "expand"in a)
+ {
+ o = a.expand (o), delete e[r];
+ for (n in o)n in e || (e[n] = o[n], t[n] = i)
+ } else t[r] = i
+ }
+
+ x.Animation = x.extend (er, {tweener: function (e, t)
+ {
+ x.isFunction (e) ? (t = e, e = ["*"]) : e = e.split (" ");
+ var n, r = 0, i = e.length;
+ for (; i > r; r++)n = e[r], Qn[n] = Qn[n] || [], Qn[n].unshift (t)
+ }, prefilter: function (e, t)
+ {
+ t ? Gn.unshift (e) : Gn.push (e)
+ }});
+ function nr (e, t, n)
+ {
+ var r, i, o, a, s, l, u = this, c = {}, p = e.style, f = e.nodeType && nn (e), d = x._data (e, "fxshow");
+ n.queue || (s = x._queueHooks (e, "fx"), null == s.unqueued && (s.unqueued = 0, l = s.empty.fire, s.empty.fire = function ()
+ {
+ s.unqueued || l ()
+ }), s.unqueued++, u.always (function ()
+ {
+ u.always (function ()
+ {
+ s.unqueued--, x.queue (e, "fx").length || s.empty.fire ()
+ })
+ })), 1 === e.nodeType && ("height"in t || "width"in t) && (n.overflow = [p.overflow, p.overflowX, p.overflowY], "inline" === x.css (e, "display") && "none" === x.css (e, "float") && (x.support.inlineBlockNeedsLayout && "inline" !== ln (e.nodeName) ? p.zoom = 1 : p.display = "inline-block")), n.overflow && (p.overflow = "hidden", x.support.shrinkWrapBlocks || u.always (function ()
+ {
+ p.overflow = n.overflow[0], p.overflowX = n.overflow[1], p.overflowY = n.overflow[2]
+ }));
+ for (r in t)if (i = t[r], Vn.exec (i))
+ {
+ if (delete t[r], o = o || "toggle" === i, i === (f ? "hide" : "show"))continue;
+ c[r] = d && d[r] || x.style (e, r)
+ }
+ if (!x.isEmptyObject (c))
+ {
+ d ? "hidden"in d && (f = d.hidden) : d = x._data (e, "fxshow", {}), o && (d.hidden = !f), f ? x (e).show () : u.done (function ()
+ {
+ x (e).hide ()
+ }), u.done (function ()
+ {
+ var t;
+ x._removeData (e, "fxshow");
+ for (t in c)x.style (e, t, c[t])
+ });
+ for (r in c)a = Zn (f ? d[r] : 0, r, u), r in d || (d[r] = a.start, f && (a.end = a.start, a.start = "width" === r || "height" === r ? 1 : 0))
+ }
+ }
+
+ function rr (e, t, n, r, i)
+ {
+ return new rr.prototype.init (e, t, n, r, i)
+ }
+
+ x.Tween = rr, rr.prototype = {constructor: rr, init: function (e, t, n, r, i, o)
+ {
+ this.elem = e, this.prop = n, this.easing = i || "swing", this.options = t, this.start = this.now = this.cur (), this.end = r, this.unit = o || (x.cssNumber[n] ? "" : "px")
+ }, cur: function ()
+ {
+ var e = rr.propHooks[this.prop];
+ return e && e.get ? e.get (this) : rr.propHooks._default.get (this)
+ }, run: function (e)
+ {
+ var t, n = rr.propHooks[this.prop];
+ return this.pos = t = this.options.duration ? x.easing[this.easing] (e, this.options.duration * e, 0, 1, this.options.duration) : e, this.now = (this.end - this.start) * t + this.start, this.options.step && this.options.step.call (this.elem, this.now, this), n && n.set ? n.set (this) : rr.propHooks._default.set (this), this
+ }}, rr.prototype.init.prototype = rr.prototype, rr.propHooks = {_default: {get: function (e)
+ {
+ var t;
+ return null == e.elem[e.prop] || e.elem.style && null != e.elem.style[e.prop] ? (t = x.css (e.elem, e.prop, ""), t && "auto" !== t ? t : 0) : e.elem[e.prop]
+ }, set: function (e)
+ {
+ x.fx.step[e.prop] ? x.fx.step[e.prop] (e) : e.elem.style && (null != e.elem.style[x.cssProps[e.prop]] || x.cssHooks[e.prop]) ? x.style (e.elem, e.prop, e.now + e.unit) : e.elem[e.prop] = e.now
+ }}}, rr.propHooks.scrollTop = rr.propHooks.scrollLeft = {set: function (e)
+ {
+ e.elem.nodeType && e.elem.parentNode && (e.elem[e.prop] = e.now)
+ }}, x.each (["toggle", "show", "hide"], function (e, t)
+ {
+ var n = x.fn[t];
+ x.fn[t] = function (e, r, i)
+ {
+ return null == e || "boolean" == typeof e ? n.apply (this, arguments) : this.animate (ir (t, !0), e, r, i)
+ }
+ }), x.fn.extend ({fadeTo: function (e, t, n, r)
+ {
+ return this.filter (nn).css ("opacity", 0).show ().end ().animate ({opacity: t}, e, n, r)
+ }, animate: function (e, t, n, r)
+ {
+ var i = x.isEmptyObject (e), o = x.speed (t, n, r), a = function ()
+ {
+ var t = er (this, x.extend ({}, e), o);
+ (i || x._data (this, "finish")) && t.stop (!0)
+ };
+ return a.finish = a, i || o.queue === !1 ? this.each (a) : this.queue (o.queue, a)
+ }, stop: function (e, n, r)
+ {
+ var i = function (e)
+ {
+ var t = e.stop;
+ delete e.stop, t (r)
+ };
+ return"string" != typeof e && (r = n, n = e, e = t), n && e !== !1 && this.queue (e || "fx", []), this.each (function ()
+ {
+ var t = !0, n = null != e && e + "queueHooks", o = x.timers, a = x._data (this);
+ if (n)a[n] && a[n].stop && i (a[n]); else for (n in a)a[n] && a[n].stop && Jn.test (n) && i (a[n]);
+ for (n = o.length; n--;)o[n].elem !== this || null != e && o[n].queue !== e || (o[n].anim.stop (r), t = !1, o.splice (n, 1));
+ (t || !r) && x.dequeue (this, e)
+ })
+ }, finish: function (e)
+ {
+ return e !== !1 && (e = e || "fx"), this.each (function ()
+ {
+ var t, n = x._data (this), r = n[e + "queue"], i = n[e + "queueHooks"], o = x.timers, a = r ? r.length : 0;
+ for (n.finish = !0, x.queue (this, e, []), i && i.stop && i.stop.call (this, !0), t = o.length; t--;)o[t].elem === this && o[t].queue === e && (o[t].anim.stop (!0), o.splice (t, 1));
+ for (t = 0; a > t; t++)r[t] && r[t].finish && r[t].finish.call (this);
+ delete n.finish
+ })
+ }});
+ function ir (e, t)
+ {
+ var n, r = {height: e}, i = 0;
+ for (t = t ? 1 : 0; 4 > i; i += 2 - t)n = Zt[i], r["margin" + n] = r["padding" + n] = e;
+ return t && (r.opacity = r.width = e), r
+ }
+
+ x.each ({slideDown: ir ("show"), slideUp: ir ("hide"), slideToggle: ir ("toggle"), fadeIn: {opacity: "show"}, fadeOut: {opacity: "hide"}, fadeToggle: {opacity: "toggle"}}, function (e, t)
+ {
+ x.fn[e] = function (e, n, r)
+ {
+ return this.animate (t, e, n, r)
+ }
+ }), x.speed = function (e, t, n)
+ {
+ var r = e && "object" == typeof e ? x.extend ({}, e) : {complete: n || !n && t || x.isFunction (e) && e, duration: e, easing: n && t || t && !x.isFunction (t) && t};
+ return r.duration = x.fx.off ? 0 : "number" == typeof r.duration ? r.duration : r.duration in x.fx.speeds ? x.fx.speeds[r.duration] : x.fx.speeds._default, (null == r.queue || r.queue === !0) && (r.queue = "fx"), r.old = r.complete, r.complete = function ()
+ {
+ x.isFunction (r.old) && r.old.call (this), r.queue && x.dequeue (this, r.queue)
+ }, r
+ }, x.easing = {linear: function (e)
+ {
+ return e
+ }, swing: function (e)
+ {
+ return.5 - Math.cos (e * Math.PI) / 2
+ }}, x.timers = [], x.fx = rr.prototype.init, x.fx.tick = function ()
+ {
+ var e, n = x.timers, r = 0;
+ for (Xn = x.now (); n.length > r; r++)e = n[r], e () || n[r] !== e || n.splice (r--, 1);
+ n.length || x.fx.stop (), Xn = t
+ }, x.fx.timer = function (e)
+ {
+ e () && x.timers.push (e) && x.fx.start ()
+ }, x.fx.interval = 13, x.fx.start = function ()
+ {
+ Un || (Un = setInterval (x.fx.tick, x.fx.interval))
+ }, x.fx.stop = function ()
+ {
+ clearInterval (Un), Un = null
+ }, x.fx.speeds = {slow: 600, fast: 200, _default: 400}, x.fx.step = {}, x.expr && x.expr.filters && (x.expr.filters.animated = function (e)
+ {
+ return x.grep (x.timers,function (t)
+ {
+ return e === t.elem
+ }).length
+ }), x.fn.offset = function (e)
+ {
+ if (arguments.length)return e === t ? this : this.each (function (t)
+ {
+ x.offset.setOffset (this, e, t)
+ });
+ var n, r, o = {top: 0, left: 0}, a = this[0], s = a && a.ownerDocument;
+ if (s)return n = s.documentElement, x.contains (n, a) ? (typeof a.getBoundingClientRect !== i && (o = a.getBoundingClientRect ()), r = or (s), {top: o.top + (r.pageYOffset || n.scrollTop) - (n.clientTop || 0), left: o.left + (r.pageXOffset || n.scrollLeft) - (n.clientLeft || 0)}) : o
+ }, x.offset = {setOffset: function (e, t, n)
+ {
+ var r = x.css (e, "position");
+ "static" === r && (e.style.position = "relative");
+ var i = x (e), o = i.offset (), a = x.css (e, "top"), s = x.css (e, "left"), l = ("absolute" === r || "fixed" === r) && x.inArray ("auto", [a, s]) > -1, u = {}, c = {}, p, f;
+ l ? (c = i.position (), p = c.top, f = c.left) : (p = parseFloat (a) || 0, f = parseFloat (s) || 0), x.isFunction (t) && (t = t.call (e, n, o)), null != t.top && (u.top = t.top - o.top + p), null != t.left && (u.left = t.left - o.left + f), "using"in t ? t.using.call (e, u) : i.css (u)
+ }}, x.fn.extend ({position: function ()
+ {
+ if (this[0])
+ {
+ var e, t, n = {top: 0, left: 0}, r = this[0];
+ return"fixed" === x.css (r, "position") ? t = r.getBoundingClientRect () : (e = this.offsetParent (), t = this.offset (), x.nodeName (e[0], "html") || (n = e.offset ()), n.top += x.css (e[0], "borderTopWidth", !0), n.left += x.css (e[0], "borderLeftWidth", !0)), {top: t.top - n.top - x.css (r, "marginTop", !0), left: t.left - n.left - x.css (r, "marginLeft", !0)}
+ }
+ }, offsetParent: function ()
+ {
+ return this.map (function ()
+ {
+ var e = this.offsetParent || s;
+ while (e && !x.nodeName (e, "html") && "static" === x.css (e, "position"))e = e.offsetParent;
+ return e || s
+ })
+ }}), x.each ({scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function (e, n)
+ {
+ var r = /Y/.test (n);
+ x.fn[e] = function (i)
+ {
+ return x.access (this, function (e, i, o)
+ {
+ var a = or (e);
+ return o === t ? a ? n in a ? a[n] : a.document.documentElement[i] : e[i] : (a ? a.scrollTo (r ? x (a).scrollLeft () : o, r ? o : x (a).scrollTop ()) : e[i] = o, t)
+ }, e, i, arguments.length, null)
+ }
+ });
+ function or (e)
+ {
+ return x.isWindow (e) ? e : 9 === e.nodeType ? e.defaultView || e.parentWindow : !1
+ }
+
+ x.each ({Height: "height", Width: "width"}, function (e, n)
+ {
+ x.each ({padding: "inner" + e, content: n, "": "outer" + e}, function (r, i)
+ {
+ x.fn[i] = function (i, o)
+ {
+ var a = arguments.length && (r || "boolean" != typeof i), s = r || (i === !0 || o === !0 ? "margin" : "border");
+ return x.access (this, function (n, r, i)
+ {
+ var o;
+ return x.isWindow (n) ? n.document.documentElement["client" + e] : 9 === n.nodeType ? (o = n.documentElement, Math.max (n.body["scroll" + e], o["scroll" + e], n.body["offset" + e], o["offset" + e], o["client" + e])) : i === t ? x.css (n, r, s) : x.style (n, r, i, s)
+ }, n, a ? i : t, a, null)
+ }
+ })
+ }), x.fn.size = function ()
+ {
+ return this.length
+ }, x.fn.andSelf = x.fn.addBack, "object" == typeof module && module && "object" == typeof module.exports ? module.exports = x : (e.jQuery = e.$ = x, "function" == typeof define && define.amd && define ("jquery", [], function ()
+ {
+ return x
+ }))
+}) (window);
\ No newline at end of file
diff --git a/vendor/twitter-bootstrap-3/js/tests/vendor/qunit.css b/vendor/twitter-bootstrap-3/js/tests/vendor/qunit.css
new file mode 100644
index 000000000..a5a72e793
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/js/tests/vendor/qunit.css
@@ -0,0 +1,265 @@
+/**
+ * QUnit - A JavaScript Unit Testing Framework
+ *
+ * http://docs.jquery.com/QUnit
+ *
+ * Copyright (c) 2012 John Resig, Jörn Zaefferer
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * or GPL (GPL-LICENSE.txt) licenses.
+ */
+
+/** Font Family and Sizes */
+
+#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
+ font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
+}
+
+#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li {
+ font-size: small;
+}
+
+#qunit-tests {
+ font-size: smaller;
+}
+
+/** Resets */
+
+#qunit-tests, #qunit-tests ol, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult {
+ margin: 0;
+ padding: 0;
+}
+
+/** Header */
+
+#qunit-header {
+ padding: 0.5em 0 0.5em 1em;
+
+ color: #8699a4;
+ background-color: #0d3349;
+
+ font-size: 1.5em;
+ line-height: 1em;
+ font-weight: normal;
+
+ border-radius: 15px 15px 0 0;
+ -moz-border-radius: 15px 15px 0 0;
+ -webkit-border-top-right-radius: 15px;
+ -webkit-border-top-left-radius: 15px;
+}
+
+#qunit-header a {
+ text-decoration: none;
+ color: #c2ccd1;
+}
+
+#qunit-header a:hover,
+#qunit-header a:focus {
+ color: #fff;
+}
+
+#qunit-banner {
+ height: 5px;
+}
+
+#qunit-testrunner-toolbar {
+ padding: 0.5em 0 0.5em 2em;
+ color: #5E740B;
+ background-color: #eee;
+}
+
+#qunit-userAgent {
+ padding: 0.5em 0 0.5em 2.5em;
+ background-color: #2b81af;
+ color: #fff;
+ text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
+}
+
+/** Tests: Pass/Fail */
+
+#qunit-tests {
+ list-style-position: inside;
+}
+
+#qunit-tests li {
+ padding: 0.4em 0.5em 0.4em 2.5em;
+ border-bottom: 1px solid #fff;
+ list-style-position: inside;
+}
+
+#qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running {
+ display: none;
+}
+
+#qunit-tests li strong {
+ cursor: pointer;
+}
+
+#qunit-tests li a {
+ padding: 0.5em;
+ color: #c2ccd1;
+ text-decoration: none;
+}
+
+#qunit-tests li a:hover,
+#qunit-tests li a:focus {
+ color: #000;
+}
+
+#qunit-tests ol {
+ margin-top: 0.5em;
+ padding: 0.5em;
+
+ background-color: #fff;
+
+ border-radius: 15px;
+ -moz-border-radius: 15px;
+ -webkit-border-radius: 15px;
+
+ box-shadow: inset 0px 2px 13px #999;
+ -moz-box-shadow: inset 0px 2px 13px #999;
+ -webkit-box-shadow: inset 0px 2px 13px #999;
+}
+
+#qunit-tests table {
+ border-collapse: collapse;
+ margin-top: .2em;
+}
+
+#qunit-tests th {
+ text-align: right;
+ vertical-align: top;
+ padding: 0 .5em 0 0;
+}
+
+#qunit-tests td {
+ vertical-align: top;
+}
+
+#qunit-tests pre {
+ margin: 0;
+ white-space: pre-wrap;
+ word-wrap: break-word;
+}
+
+#qunit-tests del {
+ background-color: #e0f2be;
+ color: #374e0c;
+ text-decoration: none;
+}
+
+#qunit-tests ins {
+ background-color: #ffcaca;
+ color: #500;
+ text-decoration: none;
+}
+
+/*** Test Counts */
+
+#qunit-tests b.counts {
+ color: black;
+}
+
+#qunit-tests b.passed {
+ color: #5E740B;
+}
+
+#qunit-tests b.failed {
+ color: #710909;
+}
+
+#qunit-tests li li {
+ margin: 0.5em;
+ padding: 0.4em 0.5em 0.4em 0.5em;
+ background-color: #fff;
+ border-bottom: none;
+ list-style-position: inside;
+}
+
+/*** Passing Styles */
+
+#qunit-tests li li.pass {
+ color: #5E740B;
+ background-color: #fff;
+ border-left: 26px solid #C6E746;
+}
+
+#qunit-tests .pass {
+ color: #528CE0;
+ background-color: #D2E0E6;
+}
+
+#qunit-tests .pass .test-name {
+ color: #366097;
+}
+
+#qunit-tests .pass .test-actual,
+#qunit-tests .pass .test-expected {
+ color: #999999;
+}
+
+#qunit-banner.qunit-pass {
+ background-color: #C6E746;
+}
+
+/*** Failing Styles */
+
+#qunit-tests li li.fail {
+ color: #710909;
+ background-color: #fff;
+ border-left: 26px solid #EE5757;
+ white-space: pre;
+}
+
+#qunit-tests > li:last-child {
+ border-radius: 0 0 15px 15px;
+ -moz-border-radius: 0 0 15px 15px;
+ -webkit-border-bottom-right-radius: 15px;
+ -webkit-border-bottom-left-radius: 15px;
+}
+
+#qunit-tests .fail {
+ color: #000000;
+ background-color: #EE5757;
+}
+
+#qunit-tests .fail .test-name,
+#qunit-tests .fail .module-name {
+ color: #000000;
+}
+
+#qunit-tests .fail .test-actual {
+ color: #EE5757;
+}
+
+#qunit-tests .fail .test-expected {
+ color: green;
+}
+
+#qunit-banner.qunit-fail {
+ background-color: #EE5757;
+}
+
+/** Result */
+
+#qunit-testresult {
+ padding: 0.5em 0.5em 0.5em 2.5em;
+
+ color: #2b81af;
+ background-color: #D2E0E6;
+
+ border-bottom: 1px solid white;
+}
+
+/** Fixture */
+
+#qunit-fixture {
+ position: absolute;
+ top: -10000px;
+ left: -10000px;
+}
+
+/** Runoff */
+
+#qunit-fixture {
+ display: none;
+}
diff --git a/vendor/twitter-bootstrap-3/js/tests/vendor/qunit.js b/vendor/twitter-bootstrap-3/js/tests/vendor/qunit.js
new file mode 100644
index 000000000..a29e1d853
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/js/tests/vendor/qunit.js
@@ -0,0 +1,1813 @@
+/**
+ * QUnit - A JavaScript Unit Testing Framework
+ *
+ * http://docs.jquery.com/QUnit
+ *
+ * Copyright (c) 2012 John Resig, Jörn Zaefferer
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * or GPL (GPL-LICENSE.txt) licenses.
+ */
+
+(function (window)
+{
+
+ var defined = {
+ setTimeout: typeof window.setTimeout !== "undefined",
+ sessionStorage: (function ()
+ {
+ try
+ {
+ return !!sessionStorage.getItem;
+ } catch (e)
+ {
+ return false;
+ }
+ }) ()
+ };
+
+ var testId = 0;
+
+ var Test = function (name, testName, expected, testEnvironmentArg, async, callback)
+ {
+ this.name = name;
+ this.testName = testName;
+ this.expected = expected;
+ this.testEnvironmentArg = testEnvironmentArg;
+ this.async = async;
+ this.callback = callback;
+ this.assertions = [];
+ };
+ Test.prototype = {
+ init: function ()
+ {
+ var tests = id ("qunit-tests");
+ if (tests)
+ {
+ var b = document.createElement ("strong");
+ b.innerHTML = "Running " + this.name;
+ var li = document.createElement ("li");
+ li.appendChild (b);
+ li.className = "running";
+ li.id = this.id = "test-output" + testId++;
+ tests.appendChild (li);
+ }
+ },
+ setup: function ()
+ {
+ if (this.module != config.previousModule)
+ {
+ if (config.previousModule)
+ {
+ QUnit.moduleDone ({
+ name: config.previousModule,
+ failed: config.moduleStats.bad,
+ passed: config.moduleStats.all - config.moduleStats.bad,
+ total: config.moduleStats.all
+ });
+ }
+ config.previousModule = this.module;
+ config.moduleStats = { all: 0, bad: 0 };
+ QUnit.moduleStart ({
+ name: this.module
+ });
+ }
+
+ config.current = this;
+ this.testEnvironment = extend ({
+ setup: function ()
+ {
+ },
+ teardown: function ()
+ {
+ }
+ }, this.moduleTestEnvironment);
+ if (this.testEnvironmentArg)
+ {
+ extend (this.testEnvironment, this.testEnvironmentArg);
+ }
+
+ QUnit.testStart ({
+ name: this.testName
+ });
+
+ // allow utility functions to access the current test environment
+ // TODO why??
+ QUnit.current_testEnvironment = this.testEnvironment;
+
+ try
+ {
+ if (!config.pollution)
+ {
+ saveGlobal ();
+ }
+
+ this.testEnvironment.setup.call (this.testEnvironment);
+ } catch (e)
+ {
+ QUnit.ok (false, "Setup failed on " + this.testName + ": " + e.message);
+ }
+ },
+ run: function ()
+ {
+ if (this.async)
+ {
+ QUnit.stop ();
+ }
+
+ if (config.notrycatch)
+ {
+ this.callback.call (this.testEnvironment);
+ return;
+ }
+ try
+ {
+ this.callback.call (this.testEnvironment);
+ } catch (e)
+ {
+ fail ("Test " + this.testName + " died, exception and test follows", e, this.callback);
+ QUnit.ok (false, "Died on test #" + (this.assertions.length + 1) + ": " + e.message + " - " + QUnit.jsDump.parse (e));
+ // else next test will carry the responsibility
+ saveGlobal ();
+
+ // Restart the tests if they're blocking
+ if (config.blocking)
+ {
+ start ();
+ }
+ }
+ },
+ teardown: function ()
+ {
+ try
+ {
+ this.testEnvironment.teardown.call (this.testEnvironment);
+ checkPollution ();
+ } catch (e)
+ {
+ QUnit.ok (false, "Teardown failed on " + this.testName + ": " + e.message);
+ }
+ },
+ finish: function ()
+ {
+ if (this.expected && this.expected != this.assertions.length)
+ {
+ QUnit.ok (false, "Expected " + this.expected + " assertions, but " + this.assertions.length + " were run");
+ }
+
+ var good = 0, bad = 0,
+ tests = id ("qunit-tests");
+
+ config.stats.all += this.assertions.length;
+ config.moduleStats.all += this.assertions.length;
+
+ if (tests)
+ {
+ var ol = document.createElement ("ol");
+
+ for (var i = 0; i < this.assertions.length; i++)
+ {
+ var assertion = this.assertions[i];
+
+ var li = document.createElement ("li");
+ li.className = assertion.result ? "pass" : "fail";
+ li.innerHTML = assertion.message || (assertion.result ? "okay" : "failed");
+ ol.appendChild (li);
+
+ if (assertion.result)
+ {
+ good++;
+ } else
+ {
+ bad++;
+ config.stats.bad++;
+ config.moduleStats.bad++;
+ }
+ }
+
+ // store result when possible
+ if (QUnit.config.reorder && defined.sessionStorage)
+ {
+ if (bad)
+ {
+ sessionStorage.setItem ("qunit-" + this.module + "-" + this.testName, bad);
+ } else
+ {
+ sessionStorage.removeItem ("qunit-" + this.module + "-" + this.testName);
+ }
+ }
+
+ if (bad == 0)
+ {
+ ol.style.display = "none";
+ }
+
+ var b = document.createElement ("strong");
+ b.innerHTML = this.name + "
(" + bad + " , " + good + " , " + this.assertions.length + ") ";
+
+ var a = document.createElement ("a");
+ a.innerHTML = "Rerun";
+ a.href = QUnit.url ({ filter: getText ([b]).replace (/\([^)]+\)$/, "").replace (/(^\s*|\s*$)/g, "") });
+
+ addEvent (b, "click", function ()
+ {
+ var next = b.nextSibling.nextSibling,
+ display = next.style.display;
+ next.style.display = display === "none" ? "block" : "none";
+ });
+
+ addEvent (b, "dblclick", function (e)
+ {
+ var target = e && e.target ? e.target : window.event.srcElement;
+ if (target.nodeName.toLowerCase () == "span" || target.nodeName.toLowerCase () == "b")
+ {
+ target = target.parentNode;
+ }
+ if (window.location && target.nodeName.toLowerCase () === "strong")
+ {
+ window.location = QUnit.url ({ filter: getText ([target]).replace (/\([^)]+\)$/, "").replace (/(^\s*|\s*$)/g, "") });
+ }
+ });
+
+ var li = id (this.id);
+ li.className = bad ? "fail" : "pass";
+ li.removeChild (li.firstChild);
+ li.appendChild (b);
+ li.appendChild (a);
+ li.appendChild (ol);
+
+ } else
+ {
+ for (var i = 0; i < this.assertions.length; i++)
+ {
+ if (!this.assertions[i].result)
+ {
+ bad++;
+ config.stats.bad++;
+ config.moduleStats.bad++;
+ }
+ }
+ }
+
+ try
+ {
+ QUnit.reset ();
+ } catch (e)
+ {
+ fail ("reset() failed, following Test " + this.testName + ", exception and reset fn follows", e, QUnit.reset);
+ }
+
+ QUnit.testDone ({
+ name: this.testName,
+ failed: bad,
+ passed: this.assertions.length - bad,
+ total: this.assertions.length
+ });
+ },
+
+ queue: function ()
+ {
+ var test = this;
+ synchronize (function ()
+ {
+ test.init ();
+ });
+ function run ()
+ {
+ // each of these can by async
+ synchronize (function ()
+ {
+ test.setup ();
+ });
+ synchronize (function ()
+ {
+ test.run ();
+ });
+ synchronize (function ()
+ {
+ test.teardown ();
+ });
+ synchronize (function ()
+ {
+ test.finish ();
+ });
+ }
+
+ // defer when previous test run passed, if storage is available
+ var bad = QUnit.config.reorder && defined.sessionStorage && +sessionStorage.getItem ("qunit-" + this.module + "-" + this.testName);
+ if (bad)
+ {
+ run ();
+ } else
+ {
+ synchronize (run);
+ }
+ ;
+ }
+
+ };
+
+ var QUnit = {
+
+ // call on start of module test to prepend name to all tests
+ module: function (name, testEnvironment)
+ {
+ config.currentModule = name;
+ config.currentModuleTestEnviroment = testEnvironment;
+ },
+
+ asyncTest: function (testName, expected, callback)
+ {
+ if (arguments.length === 2)
+ {
+ callback = expected;
+ expected = 0;
+ }
+
+ QUnit.test (testName, expected, callback, true);
+ },
+
+ test: function (testName, expected, callback, async)
+ {
+ var name = '
' + testName + ' ', testEnvironmentArg;
+
+ if (arguments.length === 2)
+ {
+ callback = expected;
+ expected = null;
+ }
+ // is 2nd argument a testEnvironment?
+ if (expected && typeof expected === 'object')
+ {
+ testEnvironmentArg = expected;
+ expected = null;
+ }
+
+ if (config.currentModule)
+ {
+ name = '
' + config.currentModule + " : " + name;
+ }
+
+ if (!validTest (config.currentModule + ": " + testName))
+ {
+ return;
+ }
+
+ var test = new Test (name, testName, expected, testEnvironmentArg, async, callback);
+ test.module = config.currentModule;
+ test.moduleTestEnvironment = config.currentModuleTestEnviroment;
+ test.queue ();
+ },
+
+ /**
+ * Specify the number of expected assertions to gurantee that failed test (no assertions are run at all) don't slip through.
+ */
+ expect: function (asserts)
+ {
+ config.current.expected = asserts;
+ },
+
+ /**
+ * Asserts true.
+ * @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" );
+ */
+ ok: function (a, msg)
+ {
+ a = !!a;
+ var details = {
+ result: a,
+ message: msg
+ };
+ msg = escapeHtml (msg);
+ QUnit.log (details);
+ config.current.assertions.push ({
+ result: a,
+ message: msg
+ });
+ },
+
+ /**
+ * Checks that the first two arguments are equal, with an optional message.
+ * Prints out both actual and expected values.
+ *
+ * Prefered to ok( actual == expected, message )
+ *
+ * @example equal( format("Received {0} bytes.", 2), "Received 2 bytes." );
+ *
+ * @param Object actual
+ * @param Object expected
+ * @param String message (optional)
+ */
+ equal: function (actual, expected, message)
+ {
+ QUnit.push (expected == actual, actual, expected, message);
+ },
+
+ notEqual: function (actual, expected, message)
+ {
+ QUnit.push (expected != actual, actual, expected, message);
+ },
+
+ deepEqual: function (actual, expected, message)
+ {
+ QUnit.push (QUnit.equiv (actual, expected), actual, expected, message);
+ },
+
+ notDeepEqual: function (actual, expected, message)
+ {
+ QUnit.push (!QUnit.equiv (actual, expected), actual, expected, message);
+ },
+
+ strictEqual: function (actual, expected, message)
+ {
+ QUnit.push (expected === actual, actual, expected, message);
+ },
+
+ notStrictEqual: function (actual, expected, message)
+ {
+ QUnit.push (expected !== actual, actual, expected, message);
+ },
+
+ raises: function (block, expected, message)
+ {
+ var actual, ok = false;
+
+ if (typeof expected === 'string')
+ {
+ message = expected;
+ expected = null;
+ }
+
+ try
+ {
+ block ();
+ } catch (e)
+ {
+ actual = e;
+ }
+
+ if (actual)
+ {
+ // we don't want to validate thrown error
+ if (!expected)
+ {
+ ok = true;
+ // expected is a regexp
+ } else if (QUnit.objectType (expected) === "regexp")
+ {
+ ok = expected.test (actual);
+ // expected is a constructor
+ } else if (actual instanceof expected)
+ {
+ ok = true;
+ // expected is a validation function which returns true is validation passed
+ } else if (expected.call ({}, actual) === true)
+ {
+ ok = true;
+ }
+ }
+
+ QUnit.ok (ok, message);
+ },
+
+ start: function ()
+ {
+ config.semaphore--;
+ if (config.semaphore > 0)
+ {
+ // don't start until equal number of stop-calls
+ return;
+ }
+ if (config.semaphore < 0)
+ {
+ // ignore if start is called more often then stop
+ config.semaphore = 0;
+ }
+ // A slight delay, to avoid any current callbacks
+ if (defined.setTimeout)
+ {
+ window.setTimeout (function ()
+ {
+ if (config.semaphore > 0)
+ {
+ return;
+ }
+ if (config.timeout)
+ {
+ clearTimeout (config.timeout);
+ }
+
+ config.blocking = false;
+ process ();
+ }, 13);
+ } else
+ {
+ config.blocking = false;
+ process ();
+ }
+ },
+
+ stop: function (timeout)
+ {
+ config.semaphore++;
+ config.blocking = true;
+
+ if (timeout && defined.setTimeout)
+ {
+ clearTimeout (config.timeout);
+ config.timeout = window.setTimeout (function ()
+ {
+ QUnit.ok (false, "Test timed out");
+ QUnit.start ();
+ }, timeout);
+ }
+ }
+ };
+
+ // Backwards compatibility, deprecated
+ QUnit.equals = QUnit.equal;
+ QUnit.same = QUnit.deepEqual;
+
+ // Maintain internal state
+ var config = {
+ // The queue of tests to run
+ queue: [],
+
+ // block until document ready
+ blocking: true,
+
+ // when enabled, show only failing tests
+ // gets persisted through sessionStorage and can be changed in UI via checkbox
+ hidepassed: false,
+
+ // by default, run previously failed tests first
+ // very useful in combination with "Hide passed tests" checked
+ reorder: true,
+
+ // by default, modify document.title when suite is done
+ altertitle: true,
+
+ urlConfig: ['noglobals', 'notrycatch']
+ };
+
+ // Load paramaters
+ (function ()
+ {
+ var location = window.location || { search: "", protocol: "file:" },
+ params = location.search.slice (1).split ("&"),
+ length = params.length,
+ urlParams = {},
+ current;
+
+ if (params[ 0 ])
+ {
+ for (var i = 0; i < length; i++)
+ {
+ current = params[ i ].split ("=");
+ current[ 0 ] = decodeURIComponent (current[ 0 ]);
+ // allow just a key to turn on a flag, e.g., test.html?noglobals
+ current[ 1 ] = current[ 1 ] ? decodeURIComponent (current[ 1 ]) : true;
+ urlParams[ current[ 0 ] ] = current[ 1 ];
+ }
+ }
+
+ QUnit.urlParams = urlParams;
+ config.filter = urlParams.filter;
+
+ // Figure out if we're running the tests from a server or not
+ QUnit.isLocal = !!(location.protocol === 'file:');
+ }) ();
+
+ // Expose the API as global variables, unless an 'exports'
+ // object exists, in that case we assume we're in CommonJS
+ if (typeof exports === "undefined" || typeof require === "undefined")
+ {
+ extend (window, QUnit);
+ window.QUnit = QUnit;
+ } else
+ {
+ extend (exports, QUnit);
+ exports.QUnit = QUnit;
+ }
+
+ // define these after exposing globals to keep them in these QUnit namespace only
+ extend (QUnit, {
+ config: config,
+
+ // Initialize the configuration options
+ init: function ()
+ {
+ extend (config, {
+ stats: { all: 0, bad: 0 },
+ moduleStats: { all: 0, bad: 0 },
+ started: +new Date,
+ updateRate: 1000,
+ blocking: false,
+ autostart: true,
+ autorun: false,
+ filter: "",
+ queue: [],
+ semaphore: 0
+ });
+
+ var tests = id ("qunit-tests"),
+ banner = id ("qunit-banner"),
+ result = id ("qunit-testresult");
+
+ if (tests)
+ {
+ tests.innerHTML = "";
+ }
+
+ if (banner)
+ {
+ banner.className = "";
+ }
+
+ if (result)
+ {
+ result.parentNode.removeChild (result);
+ }
+
+ if (tests)
+ {
+ result = document.createElement ("p");
+ result.id = "qunit-testresult";
+ result.className = "result";
+ tests.parentNode.insertBefore (result, tests);
+ result.innerHTML = 'Running...
';
+ }
+ },
+
+ /**
+ * Resets the test setup. Useful for tests that modify the DOM.
+ *
+ * If jQuery is available, uses jQuery's html(), otherwise just innerHTML.
+ */
+ reset: function ()
+ {
+ if (window.jQuery)
+ {
+ jQuery ("#qunit-fixture").html (config.fixture);
+ } else
+ {
+ var main = id ('qunit-fixture');
+ if (main)
+ {
+ main.innerHTML = config.fixture;
+ }
+ }
+ },
+
+ /**
+ * Trigger an event on an element.
+ *
+ * @example triggerEvent( document.body, "click" );
+ *
+ * @param DOMElement elem
+ * @param String type
+ */
+ triggerEvent: function (elem, type, event)
+ {
+ if (document.createEvent)
+ {
+ event = document.createEvent ("MouseEvents");
+ event.initMouseEvent (type, true, true, elem.ownerDocument.defaultView,
+ 0, 0, 0, 0, 0, false, false, false, false, 0, null);
+ elem.dispatchEvent (event);
+
+ } else if (elem.fireEvent)
+ {
+ elem.fireEvent ("on" + type);
+ }
+ },
+
+ // Safe object type checking
+ is: function (type, obj)
+ {
+ return QUnit.objectType (obj) == type;
+ },
+
+ objectType: function (obj)
+ {
+ if (typeof obj === "undefined")
+ {
+ return "undefined";
+
+ // consider: typeof null === object
+ }
+ if (obj === null)
+ {
+ return "null";
+ }
+
+ var type = Object.prototype.toString.call (obj)
+ .match (/^\[object\s(.*)\]$/)[1] || '';
+
+ switch (type)
+ {
+ case 'Number':
+ if (isNaN (obj))
+ {
+ return "nan";
+ } else
+ {
+ return "number";
+ }
+ case 'String':
+ case 'Boolean':
+ case 'Array':
+ case 'Date':
+ case 'RegExp':
+ case 'Function':
+ return type.toLowerCase ();
+ }
+ if (typeof obj === "object")
+ {
+ return "object";
+ }
+ return undefined;
+ },
+
+ push: function (result, actual, expected, message)
+ {
+ var details = {
+ result: result,
+ message: message,
+ actual: actual,
+ expected: expected
+ };
+
+ message = escapeHtml (message) || (result ? "okay" : "failed");
+ message = '
' + message + " ";
+ expected = escapeHtml (QUnit.jsDump.parse (expected));
+ actual = escapeHtml (QUnit.jsDump.parse (actual));
+ var output = message + '
Expected: ' + expected + ' ';
+ if (actual != expected)
+ {
+ output += 'Result: ' + actual + ' ';
+ output += 'Diff: ' + QUnit.diff (expected, actual) + ' ';
+ }
+ if (!result)
+ {
+ var source = sourceFromStacktrace ();
+ if (source)
+ {
+ details.source = source;
+ output += 'Source: ' + escapeHtml (source) + ' ';
+ }
+ }
+ output += "
";
+
+ QUnit.log (details);
+
+ config.current.assertions.push ({
+ result: !!result,
+ message: output
+ });
+ },
+
+ url: function (params)
+ {
+ params = extend (extend ({}, QUnit.urlParams), params);
+ var querystring = "?",
+ key;
+ for (key in params)
+ {
+ querystring += encodeURIComponent (key) + "=" +
+ encodeURIComponent (params[ key ]) + "&";
+ }
+ return window.location.pathname + querystring.slice (0, -1);
+ },
+
+ extend: extend,
+ id: id,
+ addEvent: addEvent,
+
+ // Logging callbacks; all receive a single argument with the listed properties
+ // run test/logs.html for any related changes
+ begin: function ()
+ {
+ },
+ // done: { failed, passed, total, runtime }
+ done: function ()
+ {
+ },
+ // log: { result, actual, expected, message }
+ log: function ()
+ {
+ },
+ // testStart: { name }
+ testStart: function ()
+ {
+ },
+ // testDone: { name, failed, passed, total }
+ testDone: function ()
+ {
+ },
+ // moduleStart: { name }
+ moduleStart: function ()
+ {
+ },
+ // moduleDone: { name, failed, passed, total }
+ moduleDone: function ()
+ {
+ }
+ });
+
+ if (typeof document === "undefined" || document.readyState === "complete")
+ {
+ config.autorun = true;
+ }
+
+ QUnit.load = function ()
+ {
+ QUnit.begin ({});
+
+ // Initialize the config, saving the execution queue
+ var oldconfig = extend ({}, config);
+ QUnit.init ();
+ extend (config, oldconfig);
+
+ config.blocking = false;
+
+ var urlConfigHtml = '', len = config.urlConfig.length;
+ for (var i = 0, val; i < len, val = config.urlConfig[i]; i++)
+ {
+ config[val] = QUnit.urlParams[val];
+ urlConfigHtml += '
' + val + '';
+ }
+
+ var userAgent = id ("qunit-userAgent");
+ if (userAgent)
+ {
+ userAgent.innerHTML = navigator.userAgent;
+ }
+ var banner = id ("qunit-header");
+ if (banner)
+ {
+ banner.innerHTML = '
' + banner.innerHTML + ' ' + urlConfigHtml;
+ addEvent (banner, "change", function (event)
+ {
+ var params = {};
+ params[ event.target.name ] = event.target.checked ? true : undefined;
+ window.location = QUnit.url (params);
+ });
+ }
+
+ var toolbar = id ("qunit-testrunner-toolbar");
+ if (toolbar)
+ {
+ var filter = document.createElement ("input");
+ filter.type = "checkbox";
+ filter.id = "qunit-filter-pass";
+ addEvent (filter, "click", function ()
+ {
+ var ol = document.getElementById ("qunit-tests");
+ if (filter.checked)
+ {
+ ol.className = ol.className + " hidepass";
+ } else
+ {
+ var tmp = " " + ol.className.replace (/[\n\t\r]/g, " ") + " ";
+ ol.className = tmp.replace (/ hidepass /, " ");
+ }
+ if (defined.sessionStorage)
+ {
+ if (filter.checked)
+ {
+ sessionStorage.setItem ("qunit-filter-passed-tests", "true");
+ } else
+ {
+ sessionStorage.removeItem ("qunit-filter-passed-tests");
+ }
+ }
+ });
+ if (config.hidepassed || defined.sessionStorage && sessionStorage.getItem ("qunit-filter-passed-tests"))
+ {
+ filter.checked = true;
+ var ol = document.getElementById ("qunit-tests");
+ ol.className = ol.className + " hidepass";
+ }
+ toolbar.appendChild (filter);
+
+ var label = document.createElement ("label");
+ label.setAttribute ("for", "qunit-filter-pass");
+ label.innerHTML = "Hide passed tests";
+ toolbar.appendChild (label);
+ }
+
+ var main = id ('qunit-fixture');
+ if (main)
+ {
+ config.fixture = main.innerHTML;
+ }
+
+ if (config.autostart)
+ {
+ QUnit.start ();
+ }
+ };
+
+ addEvent (window, "load", QUnit.load);
+
+ function done ()
+ {
+ config.autorun = true;
+
+ // Log the last module results
+ if (config.currentModule)
+ {
+ QUnit.moduleDone ({
+ name: config.currentModule,
+ failed: config.moduleStats.bad,
+ passed: config.moduleStats.all - config.moduleStats.bad,
+ total: config.moduleStats.all
+ });
+ }
+
+ var banner = id ("qunit-banner"),
+ tests = id ("qunit-tests"),
+ runtime = +new Date - config.started,
+ passed = config.stats.all - config.stats.bad,
+ html = [
+ 'Tests completed in ',
+ runtime,
+ ' milliseconds.
',
+ '
',
+ passed,
+ ' tests of
',
+ config.stats.all,
+ ' passed,
',
+ config.stats.bad,
+ ' failed.'
+ ].join ('');
+
+ if (banner)
+ {
+ banner.className = (config.stats.bad ? "qunit-fail" : "qunit-pass");
+ }
+
+ if (tests)
+ {
+ id ("qunit-testresult").innerHTML = html;
+ }
+
+ if (config.altertitle && typeof document !== "undefined" && document.title)
+ {
+ // show ✖ for good, ✔ for bad suite result in title
+ // use escape sequences in case file gets loaded with non-utf-8-charset
+ document.title = [
+ (config.stats.bad ? "\u2716" : "\u2714"),
+ document.title.replace (/^[\u2714\u2716] /i, "")
+ ].join (" ");
+ }
+
+ QUnit.done ({
+ failed: config.stats.bad,
+ passed: passed,
+ total: config.stats.all,
+ runtime: runtime
+ });
+ }
+
+ function validTest (name)
+ {
+ var filter = config.filter,
+ run = false;
+
+ if (!filter)
+ {
+ return true;
+ }
+
+ var not = filter.charAt (0) === "!";
+ if (not)
+ {
+ filter = filter.slice (1);
+ }
+
+ if (name.indexOf (filter) !== -1)
+ {
+ return !not;
+ }
+
+ if (not)
+ {
+ run = true;
+ }
+
+ return run;
+ }
+
+ // so far supports only Firefox, Chrome and Opera (buggy)
+ // could be extended in the future to use something like https://github.com/csnover/TraceKit
+ function sourceFromStacktrace ()
+ {
+ try
+ {
+ throw new Error ();
+ } catch (e)
+ {
+ if (e.stacktrace)
+ {
+ // Opera
+ return e.stacktrace.split ("\n")[6];
+ } else if (e.stack)
+ {
+ // Firefox, Chrome
+ return e.stack.split ("\n")[4];
+ } else if (e.sourceURL)
+ {
+ // Safari, PhantomJS
+ // TODO sourceURL points at the 'throw new Error' line above, useless
+ //return e.sourceURL + ":" + e.line;
+ }
+ }
+ }
+
+ function escapeHtml (s)
+ {
+ if (!s)
+ {
+ return "";
+ }
+ s = s + "";
+ return s.replace (/[\&"<>\\]/g, function (s)
+ {
+ switch (s)
+ {
+ case "&":
+ return "&";
+ case "\\":
+ return "\\\\";
+ case '"':
+ return '\"';
+ case "<":
+ return "<";
+ case ">":
+ return ">";
+ default:
+ return s;
+ }
+ });
+ }
+
+ function synchronize (callback)
+ {
+ config.queue.push (callback);
+
+ if (config.autorun && !config.blocking)
+ {
+ process ();
+ }
+ }
+
+ function process ()
+ {
+ var start = (new Date ()).getTime ();
+
+ while (config.queue.length && !config.blocking)
+ {
+ if (config.updateRate <= 0 || (((new Date ()).getTime () - start) < config.updateRate))
+ {
+ config.queue.shift () ();
+ } else
+ {
+ window.setTimeout (process, 13);
+ break;
+ }
+ }
+ if (!config.blocking && !config.queue.length)
+ {
+ done ();
+ }
+ }
+
+ function saveGlobal ()
+ {
+ config.pollution = [];
+
+ if (config.noglobals)
+ {
+ for (var key in window)
+ {
+ config.pollution.push (key);
+ }
+ }
+ }
+
+ function checkPollution (name)
+ {
+ var old = config.pollution;
+ saveGlobal ();
+
+ var newGlobals = diff (config.pollution, old);
+ if (newGlobals.length > 0)
+ {
+ ok (false, "Introduced global variable(s): " + newGlobals.join (", "));
+ }
+
+ var deletedGlobals = diff (old, config.pollution);
+ if (deletedGlobals.length > 0)
+ {
+ ok (false, "Deleted global variable(s): " + deletedGlobals.join (", "));
+ }
+ }
+
+ // returns a new Array with the elements that are in a but not in b
+ function diff (a, b)
+ {
+ var result = a.slice ();
+ for (var i = 0; i < result.length; i++)
+ {
+ for (var j = 0; j < b.length; j++)
+ {
+ if (result[i] === b[j])
+ {
+ result.splice (i, 1);
+ i--;
+ break;
+ }
+ }
+ }
+ return result;
+ }
+
+ function fail (message, exception, callback)
+ {
+ if (typeof console !== "undefined" && console.error && console.warn)
+ {
+ console.error (message);
+ console.error (exception);
+ console.warn (callback.toString ());
+
+ } else if (window.opera && opera.postError)
+ {
+ opera.postError (message, exception, callback.toString);
+ }
+ }
+
+ function extend (a, b)
+ {
+ for (var prop in b)
+ {
+ if (b[prop] === undefined)
+ {
+ delete a[prop];
+ } else
+ {
+ a[prop] = b[prop];
+ }
+ }
+
+ return a;
+ }
+
+ function addEvent (elem, type, fn)
+ {
+ if (elem.addEventListener)
+ {
+ elem.addEventListener (type, fn, false);
+ } else if (elem.attachEvent)
+ {
+ elem.attachEvent ("on" + type, fn);
+ } else
+ {
+ fn ();
+ }
+ }
+
+ function id (name)
+ {
+ return !!(typeof document !== "undefined" && document && document.getElementById) &&
+ document.getElementById (name);
+ }
+
+ // Test for equality any JavaScript type.
+ // Discussions and reference: http://philrathe.com/articles/equiv
+ // Test suites: http://philrathe.com/tests/equiv
+ // Author: Philippe Rathé
+ QUnit.equiv = function ()
+ {
+
+ var innerEquiv; // the real equiv function
+ var callers = []; // stack to decide between skip/abort functions
+ var parents = []; // stack to avoiding loops from circular referencing
+
+ // Call the o related callback with the given arguments.
+ function bindCallbacks (o, callbacks, args)
+ {
+ var prop = QUnit.objectType (o);
+ if (prop)
+ {
+ if (QUnit.objectType (callbacks[prop]) === "function")
+ {
+ return callbacks[prop].apply (callbacks, args);
+ } else
+ {
+ return callbacks[prop]; // or undefined
+ }
+ }
+ }
+
+ var callbacks = function ()
+ {
+
+ // for string, boolean, number and null
+ function useStrictEquality (b, a)
+ {
+ if (b instanceof a.constructor || a instanceof b.constructor)
+ {
+ // to catch short annotaion VS 'new' annotation of a
+ // declaration
+ // e.g. var i = 1;
+ // var j = new Number(1);
+ return a == b;
+ } else
+ {
+ return a === b;
+ }
+ }
+
+ return {
+ "string": useStrictEquality,
+ "boolean": useStrictEquality,
+ "number": useStrictEquality,
+ "null": useStrictEquality,
+ "undefined": useStrictEquality,
+
+ "nan": function (b)
+ {
+ return isNaN (b);
+ },
+
+ "date": function (b, a)
+ {
+ return QUnit.objectType (b) === "date"
+ && a.valueOf () === b.valueOf ();
+ },
+
+ "regexp": function (b, a)
+ {
+ return QUnit.objectType (b) === "regexp"
+ && a.source === b.source && // the regex itself
+ a.global === b.global && // and its modifers
+ // (gmi) ...
+ a.ignoreCase === b.ignoreCase
+ && a.multiline === b.multiline;
+ },
+
+ // - skip when the property is a method of an instance (OOP)
+ // - abort otherwise,
+ // initial === would have catch identical references anyway
+ "function": function ()
+ {
+ var caller = callers[callers.length - 1];
+ return caller !== Object && typeof caller !== "undefined";
+ },
+
+ "array": function (b, a)
+ {
+ var i, j, loop;
+ var len;
+
+ // b could be an object literal here
+ if (!(QUnit.objectType (b) === "array"))
+ {
+ return false;
+ }
+
+ len = a.length;
+ if (len !== b.length)
+ { // safe and faster
+ return false;
+ }
+
+ // track reference to avoid circular references
+ parents.push (a);
+ for (i = 0; i < len; i++)
+ {
+ loop = false;
+ for (j = 0; j < parents.length; j++)
+ {
+ if (parents[j] === a[i])
+ {
+ loop = true;// dont rewalk array
+ }
+ }
+ if (!loop && !innerEquiv (a[i], b[i]))
+ {
+ parents.pop ();
+ return false;
+ }
+ }
+ parents.pop ();
+ return true;
+ },
+
+ "object": function (b, a)
+ {
+ var i, j, loop;
+ var eq = true; // unless we can proove it
+ var aProperties = [], bProperties = []; // collection of
+ // strings
+
+ // comparing constructors is more strict than using
+ // instanceof
+ if (a.constructor !== b.constructor)
+ {
+ return false;
+ }
+
+ // stack constructor before traversing properties
+ callers.push (a.constructor);
+ // track reference to avoid circular references
+ parents.push (a);
+
+ for (i in a)
+ { // be strict: don't ensures hasOwnProperty
+ // and go deep
+ loop = false;
+ for (j = 0; j < parents.length; j++)
+ {
+ if (parents[j] === a[i])
+ loop = true; // don't go down the same path
+ // twice
+ }
+ aProperties.push (i); // collect a's properties
+
+ if (!loop && !innerEquiv (a[i], b[i]))
+ {
+ eq = false;
+ break;
+ }
+ }
+
+ callers.pop (); // unstack, we are done
+ parents.pop ();
+
+ for (i in b)
+ {
+ bProperties.push (i); // collect b's properties
+ }
+
+ // Ensures identical properties name
+ return eq
+ && innerEquiv (aProperties.sort (), bProperties
+ .sort ());
+ }
+ };
+ } ();
+
+ innerEquiv = function ()
+ { // can take multiple arguments
+ var args = Array.prototype.slice.apply (arguments);
+ if (args.length < 2)
+ {
+ return true; // end transition
+ }
+
+ return (function (a, b)
+ {
+ if (a === b)
+ {
+ return true; // catch the most you can
+ } else if (a === null || b === null || typeof a === "undefined"
+ || typeof b === "undefined"
+ || QUnit.objectType (a) !== QUnit.objectType (b))
+ {
+ return false; // don't lose time with error prone cases
+ } else
+ {
+ return bindCallbacks (a, callbacks, [ b, a ]);
+ }
+
+ // apply transition with (1..n) arguments
+ }) (args[0], args[1])
+ && arguments.callee.apply (this, args.splice (1,
+ args.length - 1));
+ };
+
+ return innerEquiv;
+
+ } ();
+
+ /**
+ * jsDump Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com |
+ * http://flesler.blogspot.com Licensed under BSD
+ * (http://www.opensource.org/licenses/bsd-license.php) Date: 5/15/2008
+ *
+ * @projectDescription Advanced and extensible data dumping for Javascript.
+ * @version 1.0.0
+ * @author Ariel Flesler
+ * @link {http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html}
+ */
+ QUnit.jsDump = (function ()
+ {
+ function quote (str)
+ {
+ return '"' + str.toString ().replace (/"/g, '\\"') + '"';
+ };
+ function literal (o)
+ {
+ return o + '';
+ };
+ function join (pre, arr, post)
+ {
+ var s = jsDump.separator (),
+ base = jsDump.indent (),
+ inner = jsDump.indent (1);
+ if (arr.join)
+ arr = arr.join (',' + s + inner);
+ if (!arr)
+ return pre + post;
+ return [ pre, inner + arr, base + post ].join (s);
+ };
+ function array (arr, stack)
+ {
+ var i = arr.length, ret = Array (i);
+ this.up ();
+ while (i--)
+ ret[i] = this.parse (arr[i], undefined, stack);
+ this.down ();
+ return join ('[', ret, ']');
+ };
+
+ var reName = /^function (\w+)/;
+
+ var jsDump = {
+ parse: function (obj, type, stack)
+ { //type is used mostly internally, you can fix a (custom)type in advance
+ stack = stack || [ ];
+ var parser = this.parsers[ type || this.typeOf (obj) ];
+ type = typeof parser;
+ var inStack = inArray (obj, stack);
+ if (inStack != -1)
+ {
+ return 'recursion(' + (inStack - stack.length) + ')';
+ }
+ //else
+ if (type == 'function')
+ {
+ stack.push (obj);
+ var res = parser.call (this, obj, stack);
+ stack.pop ();
+ return res;
+ }
+ // else
+ return (type == 'string') ? parser : this.parsers.error;
+ },
+ typeOf: function (obj)
+ {
+ var type;
+ if (obj === null)
+ {
+ type = "null";
+ } else if (typeof obj === "undefined")
+ {
+ type = "undefined";
+ } else if (QUnit.is ("RegExp", obj))
+ {
+ type = "regexp";
+ } else if (QUnit.is ("Date", obj))
+ {
+ type = "date";
+ } else if (QUnit.is ("Function", obj))
+ {
+ type = "function";
+ } else if (typeof obj.setInterval !== undefined && typeof obj.document !== "undefined" && typeof obj.nodeType === "undefined")
+ {
+ type = "window";
+ } else if (obj.nodeType === 9)
+ {
+ type = "document";
+ } else if (obj.nodeType)
+ {
+ type = "node";
+ } else if (typeof obj === "object" && typeof obj.length === "number" && obj.length >= 0)
+ {
+ type = "array";
+ } else
+ {
+ type = typeof obj;
+ }
+ return type;
+ },
+ separator: function ()
+ {
+ return this.multiline ? this.HTML ? ' ' : '\n' : this.HTML ? ' ' : ' ';
+ },
+ indent: function (extra)
+ {// extra can be a number, shortcut for increasing-calling-decreasing
+ if (!this.multiline)
+ return '';
+ var chr = this.indentChar;
+ if (this.HTML)
+ chr = chr.replace (/\t/g, ' ').replace (/ /g, ' ');
+ return Array (this._depth_ + (extra || 0)).join (chr);
+ },
+ up: function (a)
+ {
+ this._depth_ += a || 1;
+ },
+ down: function (a)
+ {
+ this._depth_ -= a || 1;
+ },
+ setParser: function (name, parser)
+ {
+ this.parsers[name] = parser;
+ },
+ // The next 3 are exposed so you can use them
+ quote: quote,
+ literal: literal,
+ join: join,
+ //
+ _depth_: 1,
+ // This is the list of parsers, to modify them, use jsDump.setParser
+ parsers: {
+ window: '[Window]',
+ document: '[Document]',
+ error: '[ERROR]', //when no parser is found, shouldn't happen
+ unknown: '[Unknown]',
+ 'null': 'null',
+ 'undefined': 'undefined',
+ 'function': function (fn)
+ {
+ var ret = 'function',
+ name = 'name' in fn ? fn.name : (reName.exec (fn) || [])[1];//functions never have name in IE
+ if (name)
+ ret += ' ' + name;
+ ret += '(';
+
+ ret = [ ret, QUnit.jsDump.parse (fn, 'functionArgs'), '){'].join ('');
+ return join (ret, QUnit.jsDump.parse (fn, 'functionCode'), '}');
+ },
+ array: array,
+ nodelist: array,
+ arguments: array,
+ object: function (map, stack)
+ {
+ var ret = [ ];
+ QUnit.jsDump.up ();
+ for (var key in map)
+ {
+ var val = map[key];
+ ret.push (QUnit.jsDump.parse (key, 'key') + ': ' + QUnit.jsDump.parse (val, undefined, stack));
+ }
+ QUnit.jsDump.down ();
+ return join ('{', ret, '}');
+ },
+ node: function (node)
+ {
+ var open = QUnit.jsDump.HTML ? '<' : '<',
+ close = QUnit.jsDump.HTML ? '>' : '>';
+
+ var tag = node.nodeName.toLowerCase (),
+ ret = open + tag;
+
+ for (var a in QUnit.jsDump.DOMAttrs)
+ {
+ var val = node[QUnit.jsDump.DOMAttrs[a]];
+ if (val)
+ ret += ' ' + a + '=' + QUnit.jsDump.parse (val, 'attribute');
+ }
+ return ret + close + open + '/' + tag + close;
+ },
+ functionArgs: function (fn)
+ {//function calls it internally, it's the arguments part of the function
+ var l = fn.length;
+ if (!l) return '';
+
+ var args = Array (l);
+ while (l--)
+ args[l] = String.fromCharCode (97 + l);//97 is 'a'
+ return ' ' + args.join (', ') + ' ';
+ },
+ key: quote, //object calls it internally, the key part of an item in a map
+ functionCode: '[code]', //function calls it internally, it's the content of the function
+ attribute: quote, //node calls it internally, it's an html attribute value
+ string: quote,
+ date: quote,
+ regexp: literal, //regex
+ number: literal,
+ 'boolean': literal
+ },
+ DOMAttrs: {//attributes to dump from nodes, name=>realName
+ id: 'id',
+ name: 'name',
+ 'class': 'className'
+ },
+ HTML: false,//if true, entities are escaped ( <, >, \t, space and \n )
+ indentChar: ' ',//indentation unit
+ multiline: true //if true, items in a collection, are separated by a \n, else just a space.
+ };
+
+ return jsDump;
+ }) ();
+
+ // from Sizzle.js
+ function getText (elems)
+ {
+ var ret = "", elem;
+
+ for (var i = 0; elems[i]; i++)
+ {
+ elem = elems[i];
+
+ // Get the text from text nodes and CDATA nodes
+ if (elem.nodeType === 3 || elem.nodeType === 4)
+ {
+ ret += elem.nodeValue;
+
+ // Traverse everything else, except comment nodes
+ } else if (elem.nodeType !== 8)
+ {
+ ret += getText (elem.childNodes);
+ }
+ }
+
+ return ret;
+ };
+
+ //from jquery.js
+ function inArray (elem, array)
+ {
+ if (array.indexOf)
+ {
+ return array.indexOf (elem);
+ }
+
+ for (var i = 0, length = array.length; i < length; i++)
+ {
+ if (array[ i ] === elem)
+ {
+ return i;
+ }
+ }
+
+ return -1;
+ }
+
+ /*
+ * Javascript Diff Algorithm
+ * By John Resig (http://ejohn.org/)
+ * Modified by Chu Alan "sprite"
+ *
+ * Released under the MIT license.
+ *
+ * More Info:
+ * http://ejohn.org/projects/javascript-diff-algorithm/
+ *
+ * Usage: QUnit.diff(expected, actual)
+ *
+ * QUnit.diff("the quick brown fox jumped over", "the quick fox jumps over") == "the quick brown fox jumped jumps over"
+ */
+ QUnit.diff = (function ()
+ {
+ function diff (o, n)
+ {
+ var ns = {};
+ var os = {};
+
+ for (var i = 0; i < n.length; i++)
+ {
+ if (ns[n[i]] == null)
+ ns[n[i]] = {
+ rows: [],
+ o: null
+ };
+ ns[n[i]].rows.push (i);
+ }
+
+ for (var i = 0; i < o.length; i++)
+ {
+ if (os[o[i]] == null)
+ os[o[i]] = {
+ rows: [],
+ n: null
+ };
+ os[o[i]].rows.push (i);
+ }
+
+ for (var i in ns)
+ {
+ if (ns[i].rows.length == 1 && typeof(os[i]) != "undefined" && os[i].rows.length == 1)
+ {
+ n[ns[i].rows[0]] = {
+ text: n[ns[i].rows[0]],
+ row: os[i].rows[0]
+ };
+ o[os[i].rows[0]] = {
+ text: o[os[i].rows[0]],
+ row: ns[i].rows[0]
+ };
+ }
+ }
+
+ for (var i = 0; i < n.length - 1; i++)
+ {
+ if (n[i].text != null && n[i + 1].text == null && n[i].row + 1 < o.length && o[n[i].row + 1].text == null &&
+ n[i + 1] == o[n[i].row + 1])
+ {
+ n[i + 1] = {
+ text: n[i + 1],
+ row: n[i].row + 1
+ };
+ o[n[i].row + 1] = {
+ text: o[n[i].row + 1],
+ row: i + 1
+ };
+ }
+ }
+
+ for (var i = n.length - 1; i > 0; i--)
+ {
+ if (n[i].text != null && n[i - 1].text == null && n[i].row > 0 && o[n[i].row - 1].text == null &&
+ n[i - 1] == o[n[i].row - 1])
+ {
+ n[i - 1] = {
+ text: n[i - 1],
+ row: n[i].row - 1
+ };
+ o[n[i].row - 1] = {
+ text: o[n[i].row - 1],
+ row: i - 1
+ };
+ }
+ }
+
+ return {
+ o: o,
+ n: n
+ };
+ }
+
+ return function (o, n)
+ {
+ o = o.replace (/\s+$/, '');
+ n = n.replace (/\s+$/, '');
+ var out = diff (o == "" ? [] : o.split (/\s+/), n == "" ? [] : n.split (/\s+/));
+
+ var str = "";
+
+ var oSpace = o.match (/\s+/g);
+ if (oSpace == null)
+ {
+ oSpace = [" "];
+ }
+ else
+ {
+ oSpace.push (" ");
+ }
+ var nSpace = n.match (/\s+/g);
+ if (nSpace == null)
+ {
+ nSpace = [" "];
+ }
+ else
+ {
+ nSpace.push (" ");
+ }
+
+ if (out.n.length == 0)
+ {
+ for (var i = 0; i < out.o.length; i++)
+ {
+ str += '' + out.o[i] + oSpace[i] + "";
+ }
+ }
+ else
+ {
+ if (out.n[0].text == null)
+ {
+ for (n = 0; n < out.o.length && out.o[n].text == null; n++)
+ {
+ str += '' + out.o[n] + oSpace[n] + "";
+ }
+ }
+
+ for (var i = 0; i < out.n.length; i++)
+ {
+ if (out.n[i].text == null)
+ {
+ str += '' + out.n[i] + nSpace[i] + " ";
+ }
+ else
+ {
+ var pre = "";
+
+ for (n = out.n[i].row + 1; n < out.o.length && out.o[n].text == null; n++)
+ {
+ pre += '' + out.o[n] + oSpace[n] + "";
+ }
+ str += " " + out.n[i].text + nSpace[i] + pre;
+ }
+ }
+ }
+
+ return str;
+ };
+ }) ();
+
+}) (this);
diff --git a/vendor/twitter-bootstrap-3/js/tooltip.js b/vendor/twitter-bootstrap-3/js/tooltip.js
new file mode 100644
index 000000000..d4728387c
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/js/tooltip.js
@@ -0,0 +1,422 @@
+/* ========================================================================
+ * Bootstrap: tooltip.js v3.0.0
+ * http://twbs.github.com/bootstrap/javascript.html#tooltip
+ * Inspired by the original jQuery.tipsy by Jason Frame
+ * ========================================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ======================================================================== */
+
+
++function ($)
+{
+ "use strict";
+
+ // TOOLTIP PUBLIC CLASS DEFINITION
+ // ===============================
+
+ var Tooltip = function (element, options)
+ {
+ this.type =
+ this.options =
+ this.enabled =
+ this.timeout =
+ this.hoverState =
+ this.$element = null
+
+ this.init ('tooltip', element, options)
+ }
+
+ Tooltip.DEFAULTS = {
+ animation: true, placement: 'top', selector: false, template: '', trigger: 'hover focus', title: '', delay: 0, html: false, container: false
+ }
+
+ Tooltip.prototype.init = function (type, element, options)
+ {
+ this.enabled = true
+ this.type = type
+ this.$element = $ (element)
+ this.options = this.getOptions (options)
+
+ var triggers = this.options.trigger.split (' ')
+
+ for (var i = triggers.length; i--;)
+ {
+ var trigger = triggers[i]
+
+ if (trigger == 'click')
+ {
+ this.$element.on ('click.' + this.type, this.options.selector, $.proxy (this.toggle, this))
+ } else if (trigger != 'manual')
+ {
+ var eventIn = trigger == 'hover' ? 'mouseenter' : 'focus'
+ var eventOut = trigger == 'hover' ? 'mouseleave' : 'blur'
+
+ this.$element.on (eventIn + '.' + this.type, this.options.selector, $.proxy (this.enter, this))
+ this.$element.on (eventOut + '.' + this.type, this.options.selector, $.proxy (this.leave, this))
+ }
+ }
+
+ this.options.selector ?
+ (this._options = $.extend ({}, this.options, { trigger: 'manual', selector: '' })) :
+ this.fixTitle ()
+ }
+
+ Tooltip.prototype.getDefaults = function ()
+ {
+ return Tooltip.DEFAULTS
+ }
+
+ Tooltip.prototype.getOptions = function (options)
+ {
+ options = $.extend ({}, this.getDefaults (), this.$element.data (), options)
+
+ if (options.delay && typeof options.delay == 'number')
+ {
+ options.delay = {
+ show: options.delay, hide: options.delay
+ }
+ }
+
+ return options
+ }
+
+ Tooltip.prototype.getDelegateOptions = function ()
+ {
+ var options = {}
+ var defaults = this.getDefaults ()
+
+ this._options && $.each (this._options, function (key, value)
+ {
+ if (defaults[key] != value) options[key] = value
+ })
+
+ return options
+ }
+
+ Tooltip.prototype.enter = function (obj)
+ {
+ var self = obj instanceof this.constructor ?
+ obj : $ (obj.currentTarget)[this.type] (this.getDelegateOptions ()).data ('bs.' + this.type)
+
+ clearTimeout (self.timeout)
+
+ self.hoverState = 'in'
+
+ if (!self.options.delay || !self.options.delay.show) return self.show ()
+
+ self.timeout = setTimeout (function ()
+ {
+ if (self.hoverState == 'in') self.show ()
+ }, self.options.delay.show)
+ }
+
+ Tooltip.prototype.leave = function (obj)
+ {
+ var self = obj instanceof this.constructor ?
+ obj : $ (obj.currentTarget)[this.type] (this.getDelegateOptions ()).data ('bs.' + this.type)
+
+ clearTimeout (self.timeout)
+
+ self.hoverState = 'out'
+
+ if (!self.options.delay || !self.options.delay.hide) return self.hide ()
+
+ self.timeout = setTimeout (function ()
+ {
+ if (self.hoverState == 'out') self.hide ()
+ }, self.options.delay.hide)
+ }
+
+ Tooltip.prototype.show = function ()
+ {
+ var e = $.Event ('show.bs.' + this.type)
+
+ if (this.hasContent () && this.enabled)
+ {
+ this.$element.trigger (e)
+
+ if (e.isDefaultPrevented ()) return
+
+ var $tip = this.tip ()
+
+ this.setContent ()
+
+ if (this.options.animation) $tip.addClass ('fade')
+
+ var placement = typeof this.options.placement == 'function' ?
+ this.options.placement.call (this, $tip[0], this.$element[0]) :
+ this.options.placement
+
+ var autoToken = /\s?auto?\s?/i
+ var autoPlace = autoToken.test (placement)
+ if (autoPlace) placement = placement.replace (autoToken, '') || 'top'
+
+ $tip
+ .detach ()
+ .css ({ top: 0, left: 0, display: 'block' })
+ .addClass (placement)
+
+ this.options.container ? $tip.appendTo (this.options.container) : $tip.insertAfter (this.$element)
+
+ var pos = this.getPosition ()
+ var actualWidth = $tip[0].offsetWidth
+ var actualHeight = $tip[0].offsetHeight
+
+ if (autoPlace)
+ {
+ var $parent = this.$element.parent ()
+
+ var orgPlacement = placement
+ var docScroll = document.documentElement.scrollTop || document.body.scrollTop
+ var parentWidth = this.options.container == 'body' ? window.innerWidth : $parent.outerWidth ()
+ var parentHeight = this.options.container == 'body' ? window.innerHeight : $parent.outerHeight ()
+ var parentLeft = this.options.container == 'body' ? 0 : $parent.offset ().left
+
+ placement = placement == 'bottom' && pos.top + pos.height + actualHeight - docScroll > parentHeight ? 'top' :
+ placement == 'top' && pos.top - docScroll - actualHeight < 0 ? 'bottom' :
+ placement == 'right' && pos.right + actualWidth > parentWidth ? 'left' :
+ placement == 'left' && pos.left - actualWidth < parentLeft ? 'right' :
+ placement
+
+ $tip
+ .removeClass (orgPlacement)
+ .addClass (placement)
+ }
+
+ var calculatedOffset = this.getCalculatedOffset (placement, pos, actualWidth, actualHeight)
+
+ this.applyPlacement (calculatedOffset, placement)
+ this.$element.trigger ('shown.bs.' + this.type)
+ }
+ }
+
+ Tooltip.prototype.applyPlacement = function (offset, placement)
+ {
+ var replace
+ var $tip = this.tip ()
+ var width = $tip[0].offsetWidth
+ var height = $tip[0].offsetHeight
+
+ // manually read margins because getBoundingClientRect includes difference
+ var marginTop = parseInt ($tip.css ('margin-top'), 10)
+ var marginLeft = parseInt ($tip.css ('margin-left'), 10)
+
+ // we must check for NaN for ie 8/9
+ if (isNaN (marginTop)) marginTop = 0
+ if (isNaN (marginLeft)) marginLeft = 0
+
+ offset.top = offset.top + marginTop
+ offset.left = offset.left + marginLeft
+
+ $tip
+ .offset (offset)
+ .addClass ('in')
+
+ // check to see if placing tip in new offset caused the tip to resize itself
+ var actualWidth = $tip[0].offsetWidth
+ var actualHeight = $tip[0].offsetHeight
+
+ if (placement == 'top' && actualHeight != height)
+ {
+ replace = true
+ offset.top = offset.top + height - actualHeight
+ }
+
+ if (/bottom|top/.test (placement))
+ {
+ var delta = 0
+
+ if (offset.left < 0)
+ {
+ delta = offset.left * -2
+ offset.left = 0
+
+ $tip.offset (offset)
+
+ actualWidth = $tip[0].offsetWidth
+ actualHeight = $tip[0].offsetHeight
+ }
+
+ this.replaceArrow (delta - width + actualWidth, actualWidth, 'left')
+ } else
+ {
+ this.replaceArrow (actualHeight - height, actualHeight, 'top')
+ }
+
+ if (replace) $tip.offset (offset)
+ }
+
+ Tooltip.prototype.replaceArrow = function (delta, dimension, position)
+ {
+ this.arrow ().css (position, delta ? (50 * (1 - delta / dimension) + "%") : '')
+ }
+
+ Tooltip.prototype.setContent = function ()
+ {
+ var $tip = this.tip ()
+ var title = this.getTitle ()
+
+ $tip.find ('.tooltip-inner')[this.options.html ? 'html' : 'text'] (title)
+ $tip.removeClass ('fade in top bottom left right')
+ }
+
+ Tooltip.prototype.hide = function ()
+ {
+ var that = this
+ var $tip = this.tip ()
+ var e = $.Event ('hide.bs.' + this.type)
+
+ function complete ()
+ {
+ if (that.hoverState != 'in') $tip.detach ()
+ }
+
+ this.$element.trigger (e)
+
+ if (e.isDefaultPrevented ()) return
+
+ $tip.removeClass ('in')
+
+ $.support.transition && this.$tip.hasClass ('fade') ?
+ $tip
+ .one ($.support.transition.end, complete)
+ .emulateTransitionEnd (150) :
+ complete ()
+
+ this.$element.trigger ('hidden.bs.' + this.type)
+
+ return this
+ }
+
+ Tooltip.prototype.fixTitle = function ()
+ {
+ var $e = this.$element
+ if ($e.attr ('title') || typeof($e.attr ('data-original-title')) != 'string')
+ {
+ $e.attr ('data-original-title', $e.attr ('title') || '').attr ('title', '')
+ }
+ }
+
+ Tooltip.prototype.hasContent = function ()
+ {
+ return this.getTitle ()
+ }
+
+ Tooltip.prototype.getPosition = function ()
+ {
+ var el = this.$element[0]
+ return $.extend ({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect () : {
+ width: el.offsetWidth, height: el.offsetHeight
+ }, this.$element.offset ())
+ }
+
+ Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight)
+ {
+ return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
+ placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
+ placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
+ /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
+ }
+
+ Tooltip.prototype.getTitle = function ()
+ {
+ var title
+ var $e = this.$element
+ var o = this.options
+
+ title = $e.attr ('data-original-title')
+ || (typeof o.title == 'function' ? o.title.call ($e[0]) : o.title)
+
+ return title
+ }
+
+ Tooltip.prototype.tip = function ()
+ {
+ return this.$tip = this.$tip || $ (this.options.template)
+ }
+
+ Tooltip.prototype.arrow = function ()
+ {
+ return this.$arrow = this.$arrow || this.tip ().find ('.tooltip-arrow')
+ }
+
+ Tooltip.prototype.validate = function ()
+ {
+ if (!this.$element[0].parentNode)
+ {
+ this.hide ()
+ this.$element = null
+ this.options = null
+ }
+ }
+
+ Tooltip.prototype.enable = function ()
+ {
+ this.enabled = true
+ }
+
+ Tooltip.prototype.disable = function ()
+ {
+ this.enabled = false
+ }
+
+ Tooltip.prototype.toggleEnabled = function ()
+ {
+ this.enabled = !this.enabled
+ }
+
+ Tooltip.prototype.toggle = function (e)
+ {
+ var self = e ? $ (e.currentTarget)[this.type] (this.getDelegateOptions ()).data ('bs.' + this.type) : this
+ self.tip ().hasClass ('in') ? self.leave (self) : self.enter (self)
+ }
+
+ Tooltip.prototype.destroy = function ()
+ {
+ this.hide ().$element.off ('.' + this.type).removeData ('bs.' + this.type)
+ }
+
+
+ // TOOLTIP PLUGIN DEFINITION
+ // =========================
+
+ var old = $.fn.tooltip
+
+ $.fn.tooltip = function (option)
+ {
+ return this.each (function ()
+ {
+ var $this = $ (this)
+ var data = $this.data ('bs.tooltip')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data ('bs.tooltip', (data = new Tooltip (this, options)))
+ if (typeof option == 'string') data[option] ()
+ })
+ }
+
+ $.fn.tooltip.Constructor = Tooltip
+
+
+ // TOOLTIP NO CONFLICT
+ // ===================
+
+ $.fn.tooltip.noConflict = function ()
+ {
+ $.fn.tooltip = old
+ return this
+ }
+
+} (window.jQuery);
diff --git a/vendor/twitter-bootstrap-3/js/transition.js b/vendor/twitter-bootstrap-3/js/transition.js
new file mode 100644
index 000000000..4aa6bc088
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/js/transition.js
@@ -0,0 +1,66 @@
+/* ========================================================================
+ * Bootstrap: transition.js v3.0.0
+ * http://twbs.github.com/bootstrap/javascript.html#transitions
+ * ========================================================================
+ * Copyright 2013 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ======================================================================== */
+
+
++function ($)
+{
+ "use strict";
+
+ // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
+ // ============================================================
+
+ function transitionEnd ()
+ {
+ var el = document.createElement ('bootstrap')
+
+ var transEndEventNames = {
+ 'WebkitTransition': 'webkitTransitionEnd', 'MozTransition': 'transitionend', 'OTransition': 'oTransitionEnd otransitionend', 'transition': 'transitionend'
+ }
+
+ for (var name in transEndEventNames)
+ {
+ if (el.style[name] !== undefined)
+ {
+ return { end: transEndEventNames[name] }
+ }
+ }
+ }
+
+ // http://blog.alexmaccaw.com/css-transitions
+ $.fn.emulateTransitionEnd = function (duration)
+ {
+ var called = false, $el = this
+ $ (this).one ($.support.transition.end, function ()
+ {
+ called = true
+ })
+ var callback = function ()
+ {
+ if (!called) $ ($el).trigger ($.support.transition.end)
+ }
+ setTimeout (callback, duration)
+ return this
+ }
+
+ $ (function ()
+ {
+ $.support.transition = transitionEnd ()
+ })
+
+} (window.jQuery);
diff --git a/vendor/twitter-bootstrap-3/less/alerts.less b/vendor/twitter-bootstrap-3/less/alerts.less
new file mode 100644
index 000000000..123973ff6
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/alerts.less
@@ -0,0 +1,69 @@
+//
+// Alerts
+// --------------------------------------------------
+
+// Base styles
+// -------------------------
+
+.alert {
+ padding: @alert-padding;
+ margin-bottom: @line-height-computed;
+ border: 1px solid transparent;
+ border-radius: @alert-border-radius;
+
+ // Headings for larger alerts
+ h4 {
+ margin-top: 0;
+ // Specified for the h4 to prevent conflicts of changing @headingsColor
+ color: inherit;
+ }
+ // Provide class for links that match alerts
+ .alert-link {
+ font-weight: @alert-link-font-weight;
+ }
+
+ // Improve alignment and spacing of inner content
+ > p,
+ > ul {
+ margin-bottom: 0;
+ }
+ > p + p {
+ margin-top: 5px;
+ }
+}
+
+// Dismissable alerts
+//
+// Expand the right padding and account for the close button's positioning.
+
+.alert-dismissable {
+ padding-right: (@alert-padding + 20);
+
+ // Adjust close link position
+ .close {
+ position: relative;
+ top: -2px;
+ right: -21px;
+ color: inherit;
+ }
+}
+
+// Alternate styles
+//
+// Generate contextual modifier classes for colorizing the alert.
+
+.alert-success {
+ .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);
+}
+
+.alert-info {
+ .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);
+}
+
+.alert-warning {
+ .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);
+}
+
+.alert-danger {
+ .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);
+}
diff --git a/vendor/twitter-bootstrap-3/less/badges.less b/vendor/twitter-bootstrap-3/less/badges.less
new file mode 100644
index 000000000..1642cd601
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/badges.less
@@ -0,0 +1,51 @@
+//
+// Badges
+// --------------------------------------------------
+
+// Base classes
+.badge {
+ display: inline-block;
+ min-width: 10px;
+ padding: 3px 7px;
+ font-size: @font-size-small;
+ font-weight: @badge-font-weight;
+ color: @badge-color;
+ line-height: @badge-line-height;
+ vertical-align: baseline;
+ white-space: nowrap;
+ text-align: center;
+ background-color: @badge-bg;
+ border-radius: @badge-border-radius;
+
+ // Empty badges collapse automatically (not available in IE8)
+ &:empty {
+ display: none;
+ }
+}
+
+// Hover state, but only for links
+a.badge {
+ &:hover,
+ &:focus {
+ color: @badge-link-hover-color;
+ text-decoration: none;
+ cursor: pointer;
+ }
+}
+
+// Quick fix for labels/badges in buttons
+.btn .badge {
+ position: relative;
+ top: -1px;
+}
+
+// Account for counters in navs
+a.list-group-item.active > .badge,
+.nav-pills > .active > a > .badge {
+ color: @badge-active-color;
+ background-color: @badge-active-bg;
+}
+
+.nav-pills > li > a > .badge {
+ margin-left: 3px;
+}
diff --git a/vendor/twitter-bootstrap-3/less/bootstrap.less b/vendor/twitter-bootstrap-3/less/bootstrap.less
new file mode 100644
index 000000000..de5654f97
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/bootstrap.less
@@ -0,0 +1,53 @@
+/*!
+ * Bootstrap v3.0.0
+ *
+ * Copyright 2013 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world by @mdo and @fat.
+ */
+// Core variables and mixins
+@import "variables.less";
+@import "mixins.less";
+// Reset
+@import "normalize.less";
+@import "print.less";
+// Core CSS
+@import "scaffolding.less";
+@import "type.less";
+@import "code.less";
+@import "grid.less";
+@import "tables.less";
+@import "forms.less";
+@import "buttons.less";
+// Components
+@import "component-animations.less";
+@import "glyphicons.less";
+@import "dropdowns.less";
+@import "button-groups.less";
+@import "input-groups.less";
+@import "navs.less";
+@import "navbar.less";
+@import "breadcrumbs.less";
+@import "pagination.less";
+@import "pager.less";
+@import "labels.less";
+@import "badges.less";
+@import "jumbotron.less";
+@import "thumbnails.less";
+@import "alerts.less";
+@import "progress-bars.less";
+@import "media.less";
+@import "list-group.less";
+@import "panels.less";
+@import "wells.less";
+@import "close.less";
+// Components w/ JavaScript
+@import "modals.less";
+@import "tooltip.less";
+@import "popovers.less";
+@import "carousel.less";
+// Utility classes
+@import "utilities.less";
+@import "responsive-utilities.less";
diff --git a/vendor/twitter-bootstrap-3/less/breadcrumbs.less b/vendor/twitter-bootstrap-3/less/breadcrumbs.less
new file mode 100644
index 000000000..9a2dabe52
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/breadcrumbs.less
@@ -0,0 +1,22 @@
+//
+// Breadcrumbs
+// --------------------------------------------------
+
+.breadcrumb {
+ padding: 8px 15px;
+ margin-bottom: @line-height-computed;
+ list-style: none;
+ background-color: @breadcrumb-bg;
+ border-radius: @border-radius-base;
+ > li {
+ display: inline-block;
+ & + li:before {
+ content: "/\00a0"; // Unicode space added since inline-block means non-collapsing white-space
+ padding: 0 5px;
+ color: @breadcrumb-color;
+ }
+ }
+ > .active {
+ color: @breadcrumb-active-color;
+ }
+}
diff --git a/vendor/twitter-bootstrap-3/less/button-groups.less b/vendor/twitter-bootstrap-3/less/button-groups.less
new file mode 100644
index 000000000..92cbaacd3
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/button-groups.less
@@ -0,0 +1,260 @@
+//
+// Button groups
+// --------------------------------------------------
+
+// Button carets
+//
+// Match the button text color to the arrow/caret for indicating dropdown-ness.
+
+.caret {
+ .btn-default & {
+ border-top-color: @btn-default-color;
+ }
+ .btn-primary &,
+ .btn-success &,
+ .btn-warning &,
+ .btn-danger &,
+ .btn-info & {
+ border-top-color: #fff;
+ }
+}
+
+.dropup {
+ & .btn-default .caret {
+ border-bottom-color: @btn-default-color;
+ }
+ .btn-primary,
+ .btn-success,
+ .btn-warning,
+ .btn-danger,
+ .btn-info {
+ .caret {
+ border-bottom-color: #fff;
+ }
+ }
+}
+
+// Make the div behave like a button
+.btn-group,
+.btn-group-vertical {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle; // match .btn alignment given font-size hack above
+ > .btn {
+ position: relative;
+ float: left;
+ // Bring the "active" button to the front
+ &:hover,
+ &:focus,
+ &:active,
+ &.active {
+ z-index: 2;
+ }
+ &:focus {
+ // Remove focus outline when dropdown JS adds it after closing the menu
+ outline: none;
+ }
+ }
+}
+
+// Prevent double borders when buttons are next to each other
+.btn-group {
+ .btn + .btn,
+ .btn + .btn-group,
+ .btn-group + .btn,
+ .btn-group + .btn-group {
+ margin-left: -1px;
+ }
+}
+
+// Optional: Group multiple button groups together for a toolbar
+.btn-toolbar {
+ .clearfix();
+
+ .btn-group {
+ float: left;
+ }
+ // Space out series of button groups
+ > .btn,
+ > .btn-group {
+ + .btn,
+ + .btn-group {
+ margin-left: 5px;
+ }
+ }
+}
+
+.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
+ border-radius: 0;
+}
+
+// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match
+.btn-group > .btn:first-child {
+ margin-left: 0;
+ &:not(:last-child):not(.dropdown-toggle) {
+ .border-right-radius(0);
+ }
+}
+
+// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it
+.btn-group > .btn:last-child:not(:first-child),
+.btn-group > .dropdown-toggle:not(:first-child) {
+ .border-left-radius(0);
+}
+
+// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)
+.btn-group > .btn-group {
+ float: left;
+}
+
+.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
+ border-radius: 0;
+}
+
+.btn-group > .btn-group:first-child {
+ > .btn:last-child,
+ > .dropdown-toggle {
+ .border-right-radius(0);
+ }
+}
+
+.btn-group > .btn-group:last-child > .btn:first-child {
+ .border-left-radius(0);
+}
+
+// On active and open, don't show outline
+.btn-group .dropdown-toggle:active,
+.btn-group.open .dropdown-toggle {
+ outline: 0;
+}
+
+// Sizing
+//
+// Remix the default button sizing classes into new ones for easier manipulation.
+
+.btn-group-xs > .btn {
+ .btn-xs();
+}
+
+.btn-group-sm > .btn {
+ .btn-sm();
+}
+
+.btn-group-lg > .btn {
+ .btn-lg();
+}
+
+// Split button dropdowns
+// ----------------------
+
+// Give the line between buttons some depth
+.btn-group > .btn + .dropdown-toggle {
+ padding-left: 8px;
+ padding-right: 8px;
+}
+
+.btn-group > .btn-lg + .dropdown-toggle {
+ padding-left: 12px;
+ padding-right: 12px;
+}
+
+// The clickable button for toggling the menu
+// Remove the gradient and set the same inset shadow as the :active state
+.btn-group.open .dropdown-toggle {
+ .box-shadow(inset 0 3px 5px rgba(0, 0, 0, .125));
+}
+
+// Reposition the caret
+.btn .caret {
+ margin-left: 0;
+}
+
+// Carets in other button sizes
+.btn-lg .caret {
+ border-width: @caret-width-large @caret-width-large 0;
+ border-bottom-width: 0;
+}
+
+// Upside down carets for .dropup
+.dropup .btn-lg .caret {
+ border-width: 0 @caret-width-large @caret-width-large;
+}
+
+// Vertical button groups
+// ----------------------
+
+.btn-group-vertical {
+ > .btn,
+ > .btn-group {
+ display: block;
+ float: none;
+ width: 100%;
+ max-width: 100%;
+ }
+
+ // Clear floats so dropdown menus can be properly placed
+ > .btn-group {
+ .clearfix();
+ > .btn {
+ float: none;
+ }
+ }
+
+ > .btn + .btn,
+ > .btn + .btn-group,
+ > .btn-group + .btn,
+ > .btn-group + .btn-group {
+ margin-top: -1px;
+ margin-left: 0;
+ }
+}
+
+.btn-group-vertical > .btn {
+ &:not(:first-child):not(:last-child) {
+ border-radius: 0;
+ }
+ &:first-child:not(:last-child) {
+ border-top-right-radius: @border-radius-base;
+ .border-bottom-radius(0);
+ }
+ &:last-child:not(:first-child) {
+ border-bottom-left-radius: @border-radius-base;
+ .border-top-radius(0);
+ }
+}
+
+.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
+ border-radius: 0;
+}
+
+.btn-group-vertical > .btn-group:first-child {
+ > .btn:last-child,
+ > .dropdown-toggle {
+ .border-bottom-radius(0);
+ }
+}
+
+.btn-group-vertical > .btn-group:last-child > .btn:first-child {
+ .border-top-radius(0);
+}
+
+// Justified button groups
+// ----------------------
+
+.btn-group-justified {
+ display: table;
+ width: 100%;
+ table-layout: fixed;
+ border-collapse: separate;
+ .btn {
+ float: none;
+ display: table-cell;
+ width: 1%;
+ }
+}
+
+// Checkbox and radio options
+[data-toggle="buttons"] > .btn > input[type="radio"],
+[data-toggle="buttons"] > .btn > input[type="checkbox"] {
+ display: none;
+}
diff --git a/vendor/twitter-bootstrap-3/less/buttons.less b/vendor/twitter-bootstrap-3/less/buttons.less
new file mode 100644
index 000000000..8b2057e92
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/buttons.less
@@ -0,0 +1,162 @@
+//
+// Buttons
+// --------------------------------------------------
+
+// Base styles
+// --------------------------------------------------
+
+// Core styles
+.btn {
+ display: inline-block;
+ padding: @padding-base-vertical @padding-base-horizontal;
+ margin-bottom: 0; // For input.btn
+ font-size: @font-size-base;
+ font-weight: @btn-font-weight;
+ line-height: @line-height-base;
+ text-align: center;
+ vertical-align: middle;
+ cursor: pointer;
+ border: 1px solid transparent;
+ border-radius: @border-radius-base;
+ white-space: nowrap;
+ .user-select(none);
+
+ &:focus {
+ .tab-focus();
+ }
+
+ &:hover,
+ &:focus {
+ color: @btn-default-color;
+ text-decoration: none;
+ }
+
+ &:active,
+ &.active {
+ outline: 0;
+ background-image: none;
+ .box-shadow(inset 0 3px 5px rgba(0, 0, 0, .125));
+ }
+
+ &.disabled,
+ &[disabled],
+ fieldset[disabled] & {
+ cursor: not-allowed;
+ pointer-events: none; // Future-proof disabling of clicks
+ .opacity(.65);
+ .box-shadow(none);
+ }
+
+}
+
+// Alternate buttons
+// --------------------------------------------------
+
+.btn-default {
+ .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);
+}
+
+.btn-primary {
+ .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);
+}
+
+// Warning appears as orange
+.btn-warning {
+ .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);
+}
+
+// Danger and error appear as red
+.btn-danger {
+ .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);
+}
+
+// Success appears as green
+.btn-success {
+ .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);
+}
+
+// Info appears as blue-green
+.btn-info {
+ .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);
+}
+
+// Link buttons
+// -------------------------
+
+// Make a button look and behave like a link
+.btn-link {
+ color: @link-color;
+ font-weight: normal;
+ cursor: pointer;
+ border-radius: 0;
+
+ &,
+ &:active,
+ &[disabled],
+ fieldset[disabled] & {
+ background-color: transparent;
+ .box-shadow(none);
+ }
+ &,
+ &:hover,
+ &:focus,
+ &:active {
+ border-color: transparent;
+ }
+ &:hover,
+ &:focus {
+ color: @link-hover-color;
+ text-decoration: underline;
+ background-color: transparent;
+ }
+ &[disabled],
+ fieldset[disabled] & {
+ &:hover,
+ &:focus {
+ color: @btn-link-disabled-color;
+ text-decoration: none;
+ }
+ }
+}
+
+// Button Sizes
+// --------------------------------------------------
+
+.btn-lg {
+ // line-height: ensure even-numbered height of button next to large input
+ .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);
+}
+
+.btn-sm,
+.btn-xs {
+ // line-height: ensure proper height of button next to small input
+ .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);
+}
+
+.btn-xs {
+ padding: 1px 5px;
+}
+
+// Block button
+// --------------------------------------------------
+
+.btn-block {
+ display: block;
+ width: 100%;
+ padding-left: 0;
+ padding-right: 0;
+}
+
+// Vertically space out multiple block buttons
+.btn-block + .btn-block {
+ margin-top: 5px;
+}
+
+// Specificity overrides
+input[type="submit"],
+input[type="reset"],
+input[type="button"] {
+ &.btn-block {
+ width: 100%;
+ }
+}
diff --git a/vendor/twitter-bootstrap-3/less/carousel.less b/vendor/twitter-bootstrap-3/less/carousel.less
new file mode 100644
index 000000000..ce0f8232b
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/carousel.less
@@ -0,0 +1,209 @@
+//
+// Carousel
+// --------------------------------------------------
+
+// Wrapper for the slide container and indicators
+.carousel {
+ position: relative;
+}
+
+.carousel-inner {
+ position: relative;
+ overflow: hidden;
+ width: 100%;
+
+ > .item {
+ display: none;
+ position: relative;
+ .transition(.6s ease-in-out left);
+
+ // Account for jankitude on images
+ > img,
+ > a > img {
+ .img-responsive();
+ line-height: 1;
+ }
+ }
+
+ > .active,
+ > .next,
+ > .prev {
+ display: block;
+ }
+
+ > .active {
+ left: 0;
+ }
+
+ > .next,
+ > .prev {
+ position: absolute;
+ top: 0;
+ width: 100%;
+ }
+
+ > .next {
+ left: 100%;
+ }
+ > .prev {
+ left: -100%;
+ }
+ > .next.left,
+ > .prev.right {
+ left: 0;
+ }
+
+ > .active.left {
+ left: -100%;
+ }
+ > .active.right {
+ left: 100%;
+ }
+
+}
+
+// Left/right controls for nav
+// ---------------------------
+
+.carousel-control {
+ position: absolute;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ width: @carousel-control-width;
+ .opacity(@carousel-control-opacity);
+ font-size: @carousel-control-font-size;
+ color: @carousel-control-color;
+ text-align: center;
+ text-shadow: @carousel-text-shadow;
+ // We can't have this transition here because webkit cancels the carousel
+ // animation if you trip this while in the middle of another animation.
+
+ // Set gradients for backgrounds
+ &.left {
+ #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));
+ }
+ &.right {
+ left: auto;
+ right: 0;
+ #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));
+ }
+
+ // Hover/focus state
+ &:hover,
+ &:focus {
+ color: @carousel-control-color;
+ text-decoration: none;
+ .opacity(.9);
+ }
+
+ // Toggles
+ .icon-prev,
+ .icon-next,
+ .glyphicon-chevron-left,
+ .glyphicon-chevron-right {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ z-index: 5;
+ display: inline-block;
+ }
+ .icon-prev,
+ .icon-next {
+ width: 20px;
+ height: 20px;
+ margin-top: -10px;
+ margin-left: -10px;
+ font-family: serif;
+ }
+
+ .icon-prev {
+ &:before {
+ content: '\2039'; // SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)
+ }
+ }
+ .icon-next {
+ &:before {
+ content: '\203a'; // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)
+ }
+ }
+}
+
+// Optional indicator pips
+//
+// Add an unordered list with the following class and add a list item for each
+// slide your carousel holds.
+
+.carousel-indicators {
+ position: absolute;
+ bottom: 10px;
+ left: 50%;
+ z-index: 15;
+ width: 60%;
+ margin-left: -30%;
+ padding-left: 0;
+ list-style: none;
+ text-align: center;
+
+ li {
+ display: inline-block;
+ width: 10px;
+ height: 10px;
+ margin: 1px;
+ text-indent: -999px;
+ border: 1px solid @carousel-indicator-border-color;
+ border-radius: 10px;
+ cursor: pointer;
+ }
+ .active {
+ margin: 0;
+ width: 12px;
+ height: 12px;
+ background-color: @carousel-indicator-active-bg;
+ }
+}
+
+// Optional captions
+// -----------------------------
+// Hidden by default for smaller viewports
+.carousel-caption {
+ position: absolute;
+ left: 15%;
+ right: 15%;
+ bottom: 20px;
+ z-index: 10;
+ padding-top: 20px;
+ padding-bottom: 20px;
+ color: @carousel-caption-color;
+ text-align: center;
+ text-shadow: @carousel-text-shadow;
+ & .btn {
+ text-shadow: none; // No shadow for button elements in carousel-caption
+ }
+}
+
+// Scale up controls for tablets and up
+@media screen and (min-width: @screen-sm) {
+
+ // Scale up the controls a smidge
+ .carousel-control .icon-prev,
+ .carousel-control .icon-next {
+ width: 30px;
+ height: 30px;
+ margin-top: -15px;
+ margin-left: -15px;
+ font-size: 30px;
+ }
+
+ // Show and left align the captions
+ .carousel-caption {
+ left: 20%;
+ right: 20%;
+ padding-bottom: 30px;
+ }
+
+ // Move up the indicators
+ .carousel-indicators {
+ bottom: 20px;
+ }
+}
diff --git a/vendor/twitter-bootstrap-3/less/close.less b/vendor/twitter-bootstrap-3/less/close.less
new file mode 100644
index 000000000..12bf0ea8b
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/close.less
@@ -0,0 +1,32 @@
+//
+// Close icons
+// --------------------------------------------------
+
+.close {
+ float: right;
+ font-size: (@font-size-base * 1.5);
+ font-weight: @close-font-weight;
+ line-height: 1;
+ color: @close-color;
+ text-shadow: @close-text-shadow;
+ .opacity(.2);
+
+ &:hover,
+ &:focus {
+ color: @close-color;
+ text-decoration: none;
+ cursor: pointer;
+ .opacity(.5);
+ }
+
+ // Additional properties for button version
+ // iOS requires the button element instead of an anchor tag.
+ // If you want the anchor version, it requires `href="#"`.
+ button & {
+ padding: 0;
+ cursor: pointer;
+ background: transparent;
+ border: 0;
+ -webkit-appearance: none;
+ }
+}
diff --git a/vendor/twitter-bootstrap-3/less/code.less b/vendor/twitter-bootstrap-3/less/code.less
new file mode 100644
index 000000000..1a06ede81
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/code.less
@@ -0,0 +1,56 @@
+//
+// Code (inline and blocK)
+// --------------------------------------------------
+
+// Inline and block code styles
+code,
+pre {
+ font-family: @font-family-monospace;
+}
+
+// Inline code
+code {
+ padding: 2px 4px;
+ font-size: 90%;
+ color: @code-color;
+ background-color: @code-bg;
+ white-space: nowrap;
+ border-radius: @border-radius-base;
+ border: 1px solid #e1e1e8;
+}
+
+// Blocks of code
+pre {
+ display: block;
+ padding: ((@line-height-computed - 1) / 2);
+ margin: 0 0 (@line-height-computed / 2);
+ font-size: (@font-size-base - 1); // 14px to 13px
+ line-height: @line-height-base;
+ word-break: break-all;
+ word-wrap: break-word;
+ color: @pre-color;
+ background-color: @pre-bg;
+ border: 1px solid @pre-border-color;
+ border-radius: @border-radius-base;
+
+ // Make prettyprint styles more spaced out for readability
+ &.prettyprint {
+ margin-bottom: @line-height-computed;
+ }
+
+ // Account for some code outputs that place code tags in pre tags
+ code {
+ padding: 0;
+ font-size: inherit;
+ color: inherit;
+ white-space: pre-wrap;
+ background-color: transparent;
+ border: 0;
+ }
+}
+
+// Enable scrollable blocks of code
+.pre-scrollable {
+ max-height: @pre-scrollable-max-height;
+ overflow-y: scroll;
+}
diff --git a/vendor/twitter-bootstrap-3/less/component-animations.less b/vendor/twitter-bootstrap-3/less/component-animations.less
new file mode 100644
index 000000000..c5cae0f3e
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/component-animations.less
@@ -0,0 +1,30 @@
+//
+// Component animations
+// --------------------------------------------------
+
+// Heads up!
+//
+// We don't use the `.opacity()` mixin here since it causes a bug with text
+// fields in IE7-8. Source: https://github.com/twitter/bootstrap/pull/3552.
+
+.fade {
+ opacity: 0;
+ .transition(opacity .15s linear);
+ &.in {
+ opacity: 1;
+ }
+}
+
+.collapse {
+ display: none;
+ &.in {
+ display: block;
+ }
+}
+
+.collapsing {
+ position: relative;
+ height: 0;
+ overflow: hidden;
+ .transition(height .35s ease);
+}
diff --git a/vendor/twitter-bootstrap-3/less/dropdowns.less b/vendor/twitter-bootstrap-3/less/dropdowns.less
new file mode 100644
index 000000000..4e6238169
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/dropdowns.less
@@ -0,0 +1,192 @@
+//
+// Dropdown menus
+// --------------------------------------------------
+
+// Dropdown arrow/caret
+.caret {
+ display: inline-block;
+ width: 0;
+ height: 0;
+ margin-left: 2px;
+ vertical-align: middle;
+ border-top: @caret-width-base solid @dropdown-caret-color;
+ border-right: @caret-width-base solid transparent;
+ border-left: @caret-width-base solid transparent;
+ // Firefox fix for https://github.com/twbs/bootstrap/issues/9538. Once fixed,
+ // we can just straight up remove this.
+ border-bottom: 0 dotted;
+ content: "";
+}
+
+// The dropdown wrapper (div)
+.dropdown {
+ position: relative;
+}
+
+// Prevent the focus on the dropdown toggle when closing dropdowns
+.dropdown-toggle:focus {
+ outline: 0;
+}
+
+// The dropdown menu (ul)
+.dropdown-menu {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: @zindex-dropdown;
+ display: none; // none by default, but block on "open" of the menu
+ float: left;
+ min-width: 160px;
+ padding: 5px 0;
+ margin: 2px 0 0; // override default ul
+ list-style: none;
+ font-size: @font-size-base;
+ background-color: @dropdown-bg;
+ border: 1px solid @dropdown-fallback-border; // IE8 fallback
+ border: 1px solid @dropdown-border;
+ border-radius: @border-radius-base;
+ .box-shadow(0 6px 12px rgba(0, 0, 0, .175));
+ background-clip: padding-box;
+
+ // Aligns the dropdown menu to right
+ &.pull-right {
+ right: 0;
+ left: auto;
+ }
+
+ // Dividers (basically an hr) within the dropdown
+ .divider {
+ .nav-divider(@dropdown-divider-bg);
+ }
+
+ // Links within the dropdown menu
+ > li > a {
+ display: block;
+ padding: 3px 20px;
+ clear: both;
+ font-weight: normal;
+ line-height: @line-height-base;
+ color: @dropdown-link-color;
+ white-space: nowrap; // prevent links from randomly breaking onto new lines
+ }
+}
+
+// Hover/Focus state
+.dropdown-menu > li > a {
+ &:hover,
+ &:focus {
+ text-decoration: none;
+ color: @dropdown-link-hover-color;
+ background-color: @dropdown-link-hover-bg;
+ }
+}
+
+// Active state
+.dropdown-menu > .active > a {
+ &,
+ &:hover,
+ &:focus {
+ color: @dropdown-link-active-color;
+ text-decoration: none;
+ outline: 0;
+ background-color: @dropdown-link-active-bg;
+ }
+}
+
+// Disabled state
+//
+// Gray out text and ensure the hover/focus state remains gray
+
+.dropdown-menu > .disabled > a {
+ &,
+ &:hover,
+ &:focus {
+ color: @dropdown-link-disabled-color;
+ }
+}
+
+// Nuke hover/focus effects
+.dropdown-menu > .disabled > a {
+ &:hover,
+ &:focus {
+ text-decoration: none;
+ background-color: transparent;
+ background-image: none; // Remove CSS gradient
+ .reset-filter();
+ cursor: not-allowed;
+ }
+}
+
+// Open state for the dropdown
+.open {
+ // Show the menu
+ > .dropdown-menu {
+ display: block;
+ }
+
+ // Remove the outline when :focus is triggered
+ > a {
+ outline: 0;
+ }
+}
+
+// Dropdown section headers
+.dropdown-header {
+ display: block;
+ padding: 3px 20px;
+ font-size: @font-size-small;
+ line-height: @line-height-base;
+ color: @dropdown-header-color;
+}
+
+// Backdrop to catch body clicks on mobile, etc.
+.dropdown-backdrop {
+ position: fixed;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ top: 0;
+ z-index: @zindex-dropdown - 10;
+}
+
+// Right aligned dropdowns
+.pull-right > .dropdown-menu {
+ right: 0;
+ left: auto;
+}
+
+// Allow for dropdowns to go bottom up (aka, dropup-menu)
+//
+// Just add .dropup after the standard .dropdown class and you're set, bro.
+// TODO: abstract this so that the navbar fixed styles are not placed here?
+
+.dropup,
+.navbar-fixed-bottom .dropdown {
+ // Reverse the caret
+ .caret {
+ // Firefox fix for https://github.com/twbs/bootstrap/issues/9538. Once this
+ // gets fixed, restore `border-top: 0;`.
+ border-top: 0 dotted;
+ border-bottom: 4px solid @dropdown-caret-color;
+ content: "";
+ }
+ // Different positioning for bottom up menu
+ .dropdown-menu {
+ top: auto;
+ bottom: 100%;
+ margin-bottom: 1px;
+ }
+}
+
+// Component alignment
+//
+// Reiterate per navbar.less and the modified component alignment there.
+
+@media (min-width: @grid-float-breakpoint) {
+ .navbar-right {
+ .dropdown-menu {
+ .pull-right > .dropdown-menu();
+ }
+ }
+}
+
diff --git a/vendor/twitter-bootstrap-3/less/forms.less b/vendor/twitter-bootstrap-3/less/forms.less
new file mode 100644
index 000000000..19484085d
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/forms.less
@@ -0,0 +1,357 @@
+//
+// Forms
+// --------------------------------------------------
+
+// Normalize non-controls
+//
+// Restyle and baseline non-control form elements.
+
+fieldset {
+ padding: 0;
+ margin: 0;
+ border: 0;
+}
+
+legend {
+ display: block;
+ width: 100%;
+ padding: 0;
+ margin-bottom: @line-height-computed;
+ font-size: (@font-size-base * 1.5);
+ line-height: inherit;
+ color: @legend-color;
+ border: 0;
+ border-bottom: 1px solid @legend-border-color;
+}
+
+label {
+ display: inline-block;
+ margin-bottom: 5px;
+ font-weight: bold;
+}
+
+// Normalize form controls
+
+// Override content-box in Normalize (* isn't specific enough)
+input[type="search"] {
+ .box-sizing(border-box);
+}
+
+// Position radios and checkboxes better
+input[type="radio"],
+input[type="checkbox"] {
+ margin: 4px 0 0;
+ margin-top: 1px \9; /* IE8-9 */
+ line-height: normal;
+}
+
+// Set the height of select and file controls to match text inputs
+input[type="file"] {
+ display: block;
+}
+
+// Make multiple select elements height not fixed
+select[multiple],
+select[size] {
+ height: auto;
+}
+
+// Fix optgroup Firefox bug per https://github.com/twbs/bootstrap/issues/7611
+select optgroup {
+ font-size: inherit;
+ font-style: inherit;
+ font-family: inherit;
+}
+
+// Focus for select, file, radio, and checkbox
+input[type="file"]:focus,
+input[type="radio"]:focus,
+input[type="checkbox"]:focus {
+ .tab-focus();
+}
+
+// Fix for Chrome number input
+// Setting certain font-sizes causes the `I` bar to appear on hover of the bottom increment button.
+// See https://github.com/twbs/bootstrap/issues/8350 for more.
+input[type="number"] {
+ &::-webkit-outer-spin-button,
+ &::-webkit-inner-spin-button {
+ height: auto;
+ }
+}
+
+// Adjust output element
+output {
+ display: block;
+ padding-top: (@padding-base-vertical + 1);
+ font-size: @font-size-base;
+ line-height: @line-height-base;
+ color: @input-color;
+ vertical-align: middle;
+}
+
+// Placeholder
+//
+// Placeholder text gets special styles because when browsers invalidate entire
+// lines if it doesn't understand a selector/
+.form-control {
+ .placeholder();
+}
+
+// Common form controls
+//
+// Shared size and type resets for form controls. Apply `.form-control` to any
+// of the following form controls:
+//
+// 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"]
+
+.form-control {
+ display: block;
+ width: 100%;
+ height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)
+ padding: @padding-base-vertical @padding-base-horizontal;
+ font-size: @font-size-base;
+ line-height: @line-height-base;
+ color: @input-color;
+ vertical-align: middle;
+ background-color: @input-bg;
+ border: 1px solid @input-border;
+ border-radius: @input-border-radius;
+ .box-shadow(inset 0 1px 1px rgba(0, 0, 0, .075));
+ .transition(~"border-color ease-in-out .15s, box-shadow ease-in-out .15s");
+
+ // Customize the `:focus` state to imitate native WebKit styles.
+ .form-control-focus();
+
+ // Disabled and read-only inputs
+ // Note: HTML5 says that controls under a fieldset > legend:first-child won't
+ // be disabled if the fieldset is disabled. Due to implementation difficulty,
+ // we don't honor that edge case; we style them as disabled anyway.
+ &[disabled],
+ &[readonly],
+ fieldset[disabled] & {
+ cursor: not-allowed;
+ background-color: @input-bg-disabled;
+ }
+
+ // Reset height for `textarea`s
+ textarea & {
+ height: auto;
+ }
+}
+
+// Form groups
+//
+// Designed to help with the organization and spacing of vertical forms. For
+// horizontal forms, use the predefined grid classes.
+
+.form-group {
+ margin-bottom: 15px;
+}
+
+// Checkboxes and radios
+//
+// Indent the labels to position radios/checkboxes as hanging controls.
+
+.radio,
+.checkbox {
+ display: block;
+ min-height: @line-height-computed; // clear the floating input if there is no label text
+ margin-top: 10px;
+ margin-bottom: 10px;
+ padding-left: 20px;
+ vertical-align: middle;
+ label {
+ display: inline;
+ margin-bottom: 0;
+ font-weight: normal;
+ cursor: pointer;
+ }
+}
+
+.radio input[type="radio"],
+.radio-inline input[type="radio"],
+.checkbox input[type="checkbox"],
+.checkbox-inline input[type="checkbox"] {
+ float: left;
+ margin-left: -20px;
+}
+
+.radio + .radio,
+.checkbox + .checkbox {
+ margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing
+}
+
+// Radios and checkboxes on same line
+.radio-inline,
+.checkbox-inline {
+ display: inline-block;
+ padding-left: 20px;
+ margin-bottom: 0;
+ vertical-align: middle;
+ font-weight: normal;
+ cursor: pointer;
+}
+
+.radio-inline + .radio-inline,
+.checkbox-inline + .checkbox-inline {
+ margin-top: 0;
+ margin-left: 10px; // space out consecutive inline controls
+}
+
+// Apply same disabled cursor tweak as for inputs
+//
+// Note: Neither radios nor checkboxes can be readonly.
+input[type="radio"],
+input[type="checkbox"],
+.radio,
+.radio-inline,
+.checkbox,
+.checkbox-inline {
+ &[disabled],
+ fieldset[disabled] & {
+ cursor: not-allowed;
+ }
+}
+
+// Form control sizing
+.input-sm {
+ .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);
+}
+
+.input-lg {
+ .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);
+}
+
+// Form control feedback states
+//
+// Apply contextual and semantic states to individual form controls.
+
+// Warning
+.has-warning {
+ .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);
+}
+
+// Error
+.has-error {
+ .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);
+}
+
+// Success
+.has-success {
+ .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);
+}
+
+// Static form control text
+//
+// Apply class to a `p` element to make any string of text align with labels in
+// a horizontal form layout.
+
+.form-control-static {
+ margin-bottom: 0; // Remove default margin from `p`
+ padding-top: (@padding-base-vertical + 1);
+}
+
+// Help text
+//
+// Apply to any element you wish to create light text for placement immediately
+// below a form control. Use for general help, formatting, or instructional text.
+
+.help-block {
+ display: block; // account for any element using help-block
+ margin-top: 5px;
+ margin-bottom: 10px;
+ color: lighten(@text-color, 25%); // lighten the text some for contrast
+}
+
+// Inline forms
+//
+// Make forms appear inline(-block) by adding the `.form-inline` class. Inline
+// forms begin stacked on extra small (mobile) devices and then go inline when
+// viewports reach <768px.
+//
+// Requires wrapping inputs and labels with `.form-group` for proper display of
+// default HTML form controls and our custom form controls (e.g., input groups).
+//
+// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.
+
+.form-inline {
+
+ // Kick in the inline
+ @media (min-width: @screen-sm) {
+ // Inline-block all the things for "inline"
+ .form-group {
+ display: inline-block;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+
+ // In navbar-form, allow folks to *not* use `.form-group`
+ .form-control {
+ display: inline-block;
+ }
+
+ // Remove default margin on radios/checkboxes that were used for stacking, and
+ // then undo the floating of radios and checkboxes to match (which also avoids
+ // a bug in WebKit: https://github.com/twbs/bootstrap/issues/1969).
+ .radio,
+ .checkbox {
+ display: inline-block;
+ margin-top: 0;
+ margin-bottom: 0;
+ padding-left: 0;
+ }
+
+ .radio input[type="radio"],
+ .checkbox input[type="checkbox"] {
+ float: none;
+ margin-left: 0;
+ }
+ }
+}
+
+// Horizontal forms
+//
+// Horizontal forms are built on grid classes and allow you to create forms with
+// labels on the left and inputs on the right.
+
+.form-horizontal {
+
+ // Consistent vertical alignment of labels, radios, and checkboxes
+ .control-label,
+ .radio,
+ .checkbox,
+ .radio-inline,
+ .checkbox-inline {
+ margin-top: 0;
+ margin-bottom: 0;
+ padding-top: (@padding-base-vertical + 1); // Default padding plus a border
+ }
+
+ // Make form groups behave like rows
+ .form-group {
+ .make-row();
+ }
+
+ // Only right align form labels here when the columns stop stacking
+ @media (min-width: @screen-sm) {
+ .control-label {
+ text-align: right;
+ }
+ }
+}
diff --git a/vendor/twitter-bootstrap-3/less/glyphicons.less b/vendor/twitter-bootstrap-3/less/glyphicons.less
new file mode 100644
index 000000000..cf673ee6b
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/glyphicons.less
@@ -0,0 +1,1232 @@
+//
+// Glyphicons for Bootstrap
+//
+// Since icons are fonts, they can be placed anywhere text is placed and are
+// thus automatically sized to match the surrounding child. To use, create an
+// inline element with the appropriate classes, like so:
+//
+// Star
+
+// Import the fonts
+@font-face {
+ font-family: 'Glyphicons Halflings';
+ src: url('@{icon-font-path}@{icon-font-name}.eot');
+ src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'), url('@{icon-font-path}@{icon-font-name}.woff') format('woff'), url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'), url('@{icon-font-path}@{icon-font-name}.svg#glyphicons-halflingsregular') format('svg');
+}
+
+// Catchall baseclass
+.glyphicon {
+ position: relative;
+ top: 1px;
+ display: inline-block;
+ font-family: 'Glyphicons Halflings';
+ font-style: normal;
+ font-weight: normal;
+ line-height: 1;
+ -webkit-font-smoothing: antialiased;
+
+ &:empty {
+ width: 1em;
+ }
+}
+
+// Individual icons
+.glyphicon-asterisk {
+ &:before {
+ content: "\2a";
+ }
+}
+
+.glyphicon-plus {
+ &:before {
+ content: "\2b";
+ }
+}
+
+.glyphicon-euro {
+ &:before {
+ content: "\20ac";
+ }
+}
+
+.glyphicon-minus {
+ &:before {
+ content: "\2212";
+ }
+}
+
+.glyphicon-cloud {
+ &:before {
+ content: "\2601";
+ }
+}
+
+.glyphicon-envelope {
+ &:before {
+ content: "\2709";
+ }
+}
+
+.glyphicon-pencil {
+ &:before {
+ content: "\270f";
+ }
+}
+
+.glyphicon-glass {
+ &:before {
+ content: "\e001";
+ }
+}
+
+.glyphicon-music {
+ &:before {
+ content: "\e002";
+ }
+}
+
+.glyphicon-search {
+ &:before {
+ content: "\e003";
+ }
+}
+
+.glyphicon-heart {
+ &:before {
+ content: "\e005";
+ }
+}
+
+.glyphicon-star {
+ &:before {
+ content: "\e006";
+ }
+}
+
+.glyphicon-star-empty {
+ &:before {
+ content: "\e007";
+ }
+}
+
+.glyphicon-user {
+ &:before {
+ content: "\e008";
+ }
+}
+
+.glyphicon-film {
+ &:before {
+ content: "\e009";
+ }
+}
+
+.glyphicon-th-large {
+ &:before {
+ content: "\e010";
+ }
+}
+
+.glyphicon-th {
+ &:before {
+ content: "\e011";
+ }
+}
+
+.glyphicon-th-list {
+ &:before {
+ content: "\e012";
+ }
+}
+
+.glyphicon-ok {
+ &:before {
+ content: "\e013";
+ }
+}
+
+.glyphicon-remove {
+ &:before {
+ content: "\e014";
+ }
+}
+
+.glyphicon-zoom-in {
+ &:before {
+ content: "\e015";
+ }
+}
+
+.glyphicon-zoom-out {
+ &:before {
+ content: "\e016";
+ }
+}
+
+.glyphicon-off {
+ &:before {
+ content: "\e017";
+ }
+}
+
+.glyphicon-signal {
+ &:before {
+ content: "\e018";
+ }
+}
+
+.glyphicon-cog {
+ &:before {
+ content: "\e019";
+ }
+}
+
+.glyphicon-trash {
+ &:before {
+ content: "\e020";
+ }
+}
+
+.glyphicon-home {
+ &:before {
+ content: "\e021";
+ }
+}
+
+.glyphicon-file {
+ &:before {
+ content: "\e022";
+ }
+}
+
+.glyphicon-time {
+ &:before {
+ content: "\e023";
+ }
+}
+
+.glyphicon-road {
+ &:before {
+ content: "\e024";
+ }
+}
+
+.glyphicon-download-alt {
+ &:before {
+ content: "\e025";
+ }
+}
+
+.glyphicon-download {
+ &:before {
+ content: "\e026";
+ }
+}
+
+.glyphicon-upload {
+ &:before {
+ content: "\e027";
+ }
+}
+
+.glyphicon-inbox {
+ &:before {
+ content: "\e028";
+ }
+}
+
+.glyphicon-play-circle {
+ &:before {
+ content: "\e029";
+ }
+}
+
+.glyphicon-repeat {
+ &:before {
+ content: "\e030";
+ }
+}
+
+.glyphicon-refresh {
+ &:before {
+ content: "\e031";
+ }
+}
+
+.glyphicon-list-alt {
+ &:before {
+ content: "\e032";
+ }
+}
+
+.glyphicon-flag {
+ &:before {
+ content: "\e034";
+ }
+}
+
+.glyphicon-headphones {
+ &:before {
+ content: "\e035";
+ }
+}
+
+.glyphicon-volume-off {
+ &:before {
+ content: "\e036";
+ }
+}
+
+.glyphicon-volume-down {
+ &:before {
+ content: "\e037";
+ }
+}
+
+.glyphicon-volume-up {
+ &:before {
+ content: "\e038";
+ }
+}
+
+.glyphicon-qrcode {
+ &:before {
+ content: "\e039";
+ }
+}
+
+.glyphicon-barcode {
+ &:before {
+ content: "\e040";
+ }
+}
+
+.glyphicon-tag {
+ &:before {
+ content: "\e041";
+ }
+}
+
+.glyphicon-tags {
+ &:before {
+ content: "\e042";
+ }
+}
+
+.glyphicon-book {
+ &:before {
+ content: "\e043";
+ }
+}
+
+.glyphicon-print {
+ &:before {
+ content: "\e045";
+ }
+}
+
+.glyphicon-font {
+ &:before {
+ content: "\e047";
+ }
+}
+
+.glyphicon-bold {
+ &:before {
+ content: "\e048";
+ }
+}
+
+.glyphicon-italic {
+ &:before {
+ content: "\e049";
+ }
+}
+
+.glyphicon-text-height {
+ &:before {
+ content: "\e050";
+ }
+}
+
+.glyphicon-text-width {
+ &:before {
+ content: "\e051";
+ }
+}
+
+.glyphicon-align-left {
+ &:before {
+ content: "\e052";
+ }
+}
+
+.glyphicon-align-center {
+ &:before {
+ content: "\e053";
+ }
+}
+
+.glyphicon-align-right {
+ &:before {
+ content: "\e054";
+ }
+}
+
+.glyphicon-align-justify {
+ &:before {
+ content: "\e055";
+ }
+}
+
+.glyphicon-list {
+ &:before {
+ content: "\e056";
+ }
+}
+
+.glyphicon-indent-left {
+ &:before {
+ content: "\e057";
+ }
+}
+
+.glyphicon-indent-right {
+ &:before {
+ content: "\e058";
+ }
+}
+
+.glyphicon-facetime-video {
+ &:before {
+ content: "\e059";
+ }
+}
+
+.glyphicon-picture {
+ &:before {
+ content: "\e060";
+ }
+}
+
+.glyphicon-map-marker {
+ &:before {
+ content: "\e062";
+ }
+}
+
+.glyphicon-adjust {
+ &:before {
+ content: "\e063";
+ }
+}
+
+.glyphicon-tint {
+ &:before {
+ content: "\e064";
+ }
+}
+
+.glyphicon-edit {
+ &:before {
+ content: "\e065";
+ }
+}
+
+.glyphicon-share {
+ &:before {
+ content: "\e066";
+ }
+}
+
+.glyphicon-check {
+ &:before {
+ content: "\e067";
+ }
+}
+
+.glyphicon-move {
+ &:before {
+ content: "\e068";
+ }
+}
+
+.glyphicon-step-backward {
+ &:before {
+ content: "\e069";
+ }
+}
+
+.glyphicon-fast-backward {
+ &:before {
+ content: "\e070";
+ }
+}
+
+.glyphicon-backward {
+ &:before {
+ content: "\e071";
+ }
+}
+
+.glyphicon-play {
+ &:before {
+ content: "\e072";
+ }
+}
+
+.glyphicon-pause {
+ &:before {
+ content: "\e073";
+ }
+}
+
+.glyphicon-stop {
+ &:before {
+ content: "\e074";
+ }
+}
+
+.glyphicon-forward {
+ &:before {
+ content: "\e075";
+ }
+}
+
+.glyphicon-fast-forward {
+ &:before {
+ content: "\e076";
+ }
+}
+
+.glyphicon-step-forward {
+ &:before {
+ content: "\e077";
+ }
+}
+
+.glyphicon-eject {
+ &:before {
+ content: "\e078";
+ }
+}
+
+.glyphicon-chevron-left {
+ &:before {
+ content: "\e079";
+ }
+}
+
+.glyphicon-chevron-right {
+ &:before {
+ content: "\e080";
+ }
+}
+
+.glyphicon-plus-sign {
+ &:before {
+ content: "\e081";
+ }
+}
+
+.glyphicon-minus-sign {
+ &:before {
+ content: "\e082";
+ }
+}
+
+.glyphicon-remove-sign {
+ &:before {
+ content: "\e083";
+ }
+}
+
+.glyphicon-ok-sign {
+ &:before {
+ content: "\e084";
+ }
+}
+
+.glyphicon-question-sign {
+ &:before {
+ content: "\e085";
+ }
+}
+
+.glyphicon-info-sign {
+ &:before {
+ content: "\e086";
+ }
+}
+
+.glyphicon-screenshot {
+ &:before {
+ content: "\e087";
+ }
+}
+
+.glyphicon-remove-circle {
+ &:before {
+ content: "\e088";
+ }
+}
+
+.glyphicon-ok-circle {
+ &:before {
+ content: "\e089";
+ }
+}
+
+.glyphicon-ban-circle {
+ &:before {
+ content: "\e090";
+ }
+}
+
+.glyphicon-arrow-left {
+ &:before {
+ content: "\e091";
+ }
+}
+
+.glyphicon-arrow-right {
+ &:before {
+ content: "\e092";
+ }
+}
+
+.glyphicon-arrow-up {
+ &:before {
+ content: "\e093";
+ }
+}
+
+.glyphicon-arrow-down {
+ &:before {
+ content: "\e094";
+ }
+}
+
+.glyphicon-share-alt {
+ &:before {
+ content: "\e095";
+ }
+}
+
+.glyphicon-resize-full {
+ &:before {
+ content: "\e096";
+ }
+}
+
+.glyphicon-resize-small {
+ &:before {
+ content: "\e097";
+ }
+}
+
+.glyphicon-exclamation-sign {
+ &:before {
+ content: "\e101";
+ }
+}
+
+.glyphicon-gift {
+ &:before {
+ content: "\e102";
+ }
+}
+
+.glyphicon-leaf {
+ &:before {
+ content: "\e103";
+ }
+}
+
+.glyphicon-eye-open {
+ &:before {
+ content: "\e105";
+ }
+}
+
+.glyphicon-eye-close {
+ &:before {
+ content: "\e106";
+ }
+}
+
+.glyphicon-warning-sign {
+ &:before {
+ content: "\e107";
+ }
+}
+
+.glyphicon-plane {
+ &:before {
+ content: "\e108";
+ }
+}
+
+.glyphicon-random {
+ &:before {
+ content: "\e110";
+ }
+}
+
+.glyphicon-comment {
+ &:before {
+ content: "\e111";
+ }
+}
+
+.glyphicon-magnet {
+ &:before {
+ content: "\e112";
+ }
+}
+
+.glyphicon-chevron-up {
+ &:before {
+ content: "\e113";
+ }
+}
+
+.glyphicon-chevron-down {
+ &:before {
+ content: "\e114";
+ }
+}
+
+.glyphicon-retweet {
+ &:before {
+ content: "\e115";
+ }
+}
+
+.glyphicon-shopping-cart {
+ &:before {
+ content: "\e116";
+ }
+}
+
+.glyphicon-folder-close {
+ &:before {
+ content: "\e117";
+ }
+}
+
+.glyphicon-folder-open {
+ &:before {
+ content: "\e118";
+ }
+}
+
+.glyphicon-resize-vertical {
+ &:before {
+ content: "\e119";
+ }
+}
+
+.glyphicon-resize-horizontal {
+ &:before {
+ content: "\e120";
+ }
+}
+
+.glyphicon-hdd {
+ &:before {
+ content: "\e121";
+ }
+}
+
+.glyphicon-bullhorn {
+ &:before {
+ content: "\e122";
+ }
+}
+
+.glyphicon-certificate {
+ &:before {
+ content: "\e124";
+ }
+}
+
+.glyphicon-thumbs-up {
+ &:before {
+ content: "\e125";
+ }
+}
+
+.glyphicon-thumbs-down {
+ &:before {
+ content: "\e126";
+ }
+}
+
+.glyphicon-hand-right {
+ &:before {
+ content: "\e127";
+ }
+}
+
+.glyphicon-hand-left {
+ &:before {
+ content: "\e128";
+ }
+}
+
+.glyphicon-hand-up {
+ &:before {
+ content: "\e129";
+ }
+}
+
+.glyphicon-hand-down {
+ &:before {
+ content: "\e130";
+ }
+}
+
+.glyphicon-circle-arrow-right {
+ &:before {
+ content: "\e131";
+ }
+}
+
+.glyphicon-circle-arrow-left {
+ &:before {
+ content: "\e132";
+ }
+}
+
+.glyphicon-circle-arrow-up {
+ &:before {
+ content: "\e133";
+ }
+}
+
+.glyphicon-circle-arrow-down {
+ &:before {
+ content: "\e134";
+ }
+}
+
+.glyphicon-globe {
+ &:before {
+ content: "\e135";
+ }
+}
+
+.glyphicon-tasks {
+ &:before {
+ content: "\e137";
+ }
+}
+
+.glyphicon-filter {
+ &:before {
+ content: "\e138";
+ }
+}
+
+.glyphicon-fullscreen {
+ &:before {
+ content: "\e140";
+ }
+}
+
+.glyphicon-dashboard {
+ &:before {
+ content: "\e141";
+ }
+}
+
+.glyphicon-heart-empty {
+ &:before {
+ content: "\e143";
+ }
+}
+
+.glyphicon-link {
+ &:before {
+ content: "\e144";
+ }
+}
+
+.glyphicon-phone {
+ &:before {
+ content: "\e145";
+ }
+}
+
+.glyphicon-usd {
+ &:before {
+ content: "\e148";
+ }
+}
+
+.glyphicon-gbp {
+ &:before {
+ content: "\e149";
+ }
+}
+
+.glyphicon-sort {
+ &:before {
+ content: "\e150";
+ }
+}
+
+.glyphicon-sort-by-alphabet {
+ &:before {
+ content: "\e151";
+ }
+}
+
+.glyphicon-sort-by-alphabet-alt {
+ &:before {
+ content: "\e152";
+ }
+}
+
+.glyphicon-sort-by-order {
+ &:before {
+ content: "\e153";
+ }
+}
+
+.glyphicon-sort-by-order-alt {
+ &:before {
+ content: "\e154";
+ }
+}
+
+.glyphicon-sort-by-attributes {
+ &:before {
+ content: "\e155";
+ }
+}
+
+.glyphicon-sort-by-attributes-alt {
+ &:before {
+ content: "\e156";
+ }
+}
+
+.glyphicon-unchecked {
+ &:before {
+ content: "\e157";
+ }
+}
+
+.glyphicon-expand {
+ &:before {
+ content: "\e158";
+ }
+}
+
+.glyphicon-collapse-down {
+ &:before {
+ content: "\e159";
+ }
+}
+
+.glyphicon-collapse-up {
+ &:before {
+ content: "\e160";
+ }
+}
+
+.glyphicon-log-in {
+ &:before {
+ content: "\e161";
+ }
+}
+
+.glyphicon-flash {
+ &:before {
+ content: "\e162";
+ }
+}
+
+.glyphicon-log-out {
+ &:before {
+ content: "\e163";
+ }
+}
+
+.glyphicon-new-window {
+ &:before {
+ content: "\e164";
+ }
+}
+
+.glyphicon-record {
+ &:before {
+ content: "\e165";
+ }
+}
+
+.glyphicon-save {
+ &:before {
+ content: "\e166";
+ }
+}
+
+.glyphicon-open {
+ &:before {
+ content: "\e167";
+ }
+}
+
+.glyphicon-saved {
+ &:before {
+ content: "\e168";
+ }
+}
+
+.glyphicon-import {
+ &:before {
+ content: "\e169";
+ }
+}
+
+.glyphicon-export {
+ &:before {
+ content: "\e170";
+ }
+}
+
+.glyphicon-send {
+ &:before {
+ content: "\e171";
+ }
+}
+
+.glyphicon-floppy-disk {
+ &:before {
+ content: "\e172";
+ }
+}
+
+.glyphicon-floppy-saved {
+ &:before {
+ content: "\e173";
+ }
+}
+
+.glyphicon-floppy-remove {
+ &:before {
+ content: "\e174";
+ }
+}
+
+.glyphicon-floppy-save {
+ &:before {
+ content: "\e175";
+ }
+}
+
+.glyphicon-floppy-open {
+ &:before {
+ content: "\e176";
+ }
+}
+
+.glyphicon-credit-card {
+ &:before {
+ content: "\e177";
+ }
+}
+
+.glyphicon-transfer {
+ &:before {
+ content: "\e178";
+ }
+}
+
+.glyphicon-cutlery {
+ &:before {
+ content: "\e179";
+ }
+}
+
+.glyphicon-header {
+ &:before {
+ content: "\e180";
+ }
+}
+
+.glyphicon-compressed {
+ &:before {
+ content: "\e181";
+ }
+}
+
+.glyphicon-earphone {
+ &:before {
+ content: "\e182";
+ }
+}
+
+.glyphicon-phone-alt {
+ &:before {
+ content: "\e183";
+ }
+}
+
+.glyphicon-tower {
+ &:before {
+ content: "\e184";
+ }
+}
+
+.glyphicon-stats {
+ &:before {
+ content: "\e185";
+ }
+}
+
+.glyphicon-sd-video {
+ &:before {
+ content: "\e186";
+ }
+}
+
+.glyphicon-hd-video {
+ &:before {
+ content: "\e187";
+ }
+}
+
+.glyphicon-subtitles {
+ &:before {
+ content: "\e188";
+ }
+}
+
+.glyphicon-sound-stereo {
+ &:before {
+ content: "\e189";
+ }
+}
+
+.glyphicon-sound-dolby {
+ &:before {
+ content: "\e190";
+ }
+}
+
+.glyphicon-sound-5-1 {
+ &:before {
+ content: "\e191";
+ }
+}
+
+.glyphicon-sound-6-1 {
+ &:before {
+ content: "\e192";
+ }
+}
+
+.glyphicon-sound-7-1 {
+ &:before {
+ content: "\e193";
+ }
+}
+
+.glyphicon-copyright-mark {
+ &:before {
+ content: "\e194";
+ }
+}
+
+.glyphicon-registration-mark {
+ &:before {
+ content: "\e195";
+ }
+}
+
+.glyphicon-cloud-download {
+ &:before {
+ content: "\e197";
+ }
+}
+
+.glyphicon-cloud-upload {
+ &:before {
+ content: "\e198";
+ }
+}
+
+.glyphicon-tree-conifer {
+ &:before {
+ content: "\e199";
+ }
+}
+
+.glyphicon-tree-deciduous {
+ &:before {
+ content: "\e200";
+ }
+}
+
+.glyphicon-briefcase {
+ &:before {
+ content: "\1f4bc";
+ }
+}
+
+.glyphicon-calendar {
+ &:before {
+ content: "\1f4c5";
+ }
+}
+
+.glyphicon-pushpin {
+ &:before {
+ content: "\1f4cc";
+ }
+}
+
+.glyphicon-paperclip {
+ &:before {
+ content: "\1f4ce";
+ }
+}
+
+.glyphicon-camera {
+ &:before {
+ content: "\1f4f7";
+ }
+}
+
+.glyphicon-lock {
+ &:before {
+ content: "\1f512";
+ }
+}
+
+.glyphicon-bell {
+ &:before {
+ content: "\1f514";
+ }
+}
+
+.glyphicon-bookmark {
+ &:before {
+ content: "\1f516";
+ }
+}
+
+.glyphicon-fire {
+ &:before {
+ content: "\1f525";
+ }
+}
+
+.glyphicon-wrench {
+ &:before {
+ content: "\1f527";
+ }
+}
diff --git a/vendor/twitter-bootstrap-3/less/grid.less b/vendor/twitter-bootstrap-3/less/grid.less
new file mode 100644
index 000000000..e11218a60
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/grid.less
@@ -0,0 +1,792 @@
+//
+// Grid system
+// --------------------------------------------------
+
+// Set the container width, and override it for fixed navbars in media queries
+.container {
+ .container-fixed();
+}
+
+// mobile first defaults
+.row {
+ .make-row();
+}
+
+// Common styles for small and large grid columns
+.col-xs-1,
+.col-xs-2,
+.col-xs-3,
+.col-xs-4,
+.col-xs-5,
+.col-xs-6,
+.col-xs-7,
+.col-xs-8,
+.col-xs-9,
+.col-xs-10,
+.col-xs-11,
+.col-xs-12,
+.col-sm-1,
+.col-sm-2,
+.col-sm-3,
+.col-sm-4,
+.col-sm-5,
+.col-sm-6,
+.col-sm-7,
+.col-sm-8,
+.col-sm-9,
+.col-sm-10,
+.col-sm-11,
+.col-sm-12,
+.col-md-1,
+.col-md-2,
+.col-md-3,
+.col-md-4,
+.col-md-5,
+.col-md-6,
+.col-md-7,
+.col-md-8,
+.col-md-9,
+.col-md-10,
+.col-md-11,
+.col-md-12,
+.col-lg-1,
+.col-lg-2,
+.col-lg-3,
+.col-lg-4,
+.col-lg-5,
+.col-lg-6,
+.col-lg-7,
+.col-lg-8,
+.col-lg-9,
+.col-lg-10,
+.col-lg-11,
+.col-lg-12 {
+ position: relative;
+ // Prevent columns from collapsing when empty
+ min-height: 1px;
+ // Inner gutter via padding
+ padding-left: (@grid-gutter-width / 2);
+ padding-right: (@grid-gutter-width / 2);
+}
+
+// Extra small grid
+//
+// Grid classes for extra small devices like smartphones. No offset, push, or
+// pull classes are present here due to the size of the target.
+//
+// Note that `.col-xs-12` doesn't get floated on purpose—there's no need since
+// it's full-width.
+
+.col-xs-1,
+.col-xs-2,
+.col-xs-3,
+.col-xs-4,
+.col-xs-5,
+.col-xs-6,
+.col-xs-7,
+.col-xs-8,
+.col-xs-9,
+.col-xs-10,
+.col-xs-11 {
+ float: left;
+}
+
+.col-xs-1 {
+ width: percentage((1 / @grid-columns));
+}
+
+.col-xs-2 {
+ width: percentage((2 / @grid-columns));
+}
+
+.col-xs-3 {
+ width: percentage((3 / @grid-columns));
+}
+
+.col-xs-4 {
+ width: percentage((4 / @grid-columns));
+}
+
+.col-xs-5 {
+ width: percentage((5 / @grid-columns));
+}
+
+.col-xs-6 {
+ width: percentage((6 / @grid-columns));
+}
+
+.col-xs-7 {
+ width: percentage((7 / @grid-columns));
+}
+
+.col-xs-8 {
+ width: percentage((8 / @grid-columns));
+}
+
+.col-xs-9 {
+ width: percentage((9 / @grid-columns));
+}
+
+.col-xs-10 {
+ width: percentage((10/ @grid-columns));
+}
+
+.col-xs-11 {
+ width: percentage((11/ @grid-columns));
+}
+
+.col-xs-12 {
+ width: 100%;
+}
+
+// Small grid
+//
+// Columns, offsets, pushes, and pulls for the small device range, from phones
+// to tablets.
+//
+// Note that `.col-sm-12` doesn't get floated on purpose—there's no need since
+// it's full-width.
+
+@media (min-width: @screen-sm) {
+ .container {
+ max-width: @container-tablet;
+ }
+
+ .col-sm-1,
+ .col-sm-2,
+ .col-sm-3,
+ .col-sm-4,
+ .col-sm-5,
+ .col-sm-6,
+ .col-sm-7,
+ .col-sm-8,
+ .col-sm-9,
+ .col-sm-10,
+ .col-sm-11 {
+ float: left;
+ }
+
+ .col-sm-1 {
+ width: percentage((1 / @grid-columns));
+ }
+
+ .col-sm-2 {
+ width: percentage((2 / @grid-columns));
+ }
+
+ .col-sm-3 {
+ width: percentage((3 / @grid-columns));
+ }
+
+ .col-sm-4 {
+ width: percentage((4 / @grid-columns));
+ }
+
+ .col-sm-5 {
+ width: percentage((5 / @grid-columns));
+ }
+
+ .col-sm-6 {
+ width: percentage((6 / @grid-columns));
+ }
+
+ .col-sm-7 {
+ width: percentage((7 / @grid-columns));
+ }
+
+ .col-sm-8 {
+ width: percentage((8 / @grid-columns));
+ }
+
+ .col-sm-9 {
+ width: percentage((9 / @grid-columns));
+ }
+
+ .col-sm-10 {
+ width: percentage((10/ @grid-columns));
+ }
+
+ .col-sm-11 {
+ width: percentage((11/ @grid-columns));
+ }
+
+ .col-sm-12 {
+ width: 100%;
+ }
+
+ // Push and pull columns for source order changes
+ .col-sm-push-1 {
+ left: percentage((1 / @grid-columns));
+ }
+
+ .col-sm-push-2 {
+ left: percentage((2 / @grid-columns));
+ }
+
+ .col-sm-push-3 {
+ left: percentage((3 / @grid-columns));
+ }
+
+ .col-sm-push-4 {
+ left: percentage((4 / @grid-columns));
+ }
+
+ .col-sm-push-5 {
+ left: percentage((5 / @grid-columns));
+ }
+
+ .col-sm-push-6 {
+ left: percentage((6 / @grid-columns));
+ }
+
+ .col-sm-push-7 {
+ left: percentage((7 / @grid-columns));
+ }
+
+ .col-sm-push-8 {
+ left: percentage((8 / @grid-columns));
+ }
+
+ .col-sm-push-9 {
+ left: percentage((9 / @grid-columns));
+ }
+
+ .col-sm-push-10 {
+ left: percentage((10/ @grid-columns));
+ }
+
+ .col-sm-push-11 {
+ left: percentage((11/ @grid-columns));
+ }
+
+ .col-sm-pull-1 {
+ right: percentage((1 / @grid-columns));
+ }
+
+ .col-sm-pull-2 {
+ right: percentage((2 / @grid-columns));
+ }
+
+ .col-sm-pull-3 {
+ right: percentage((3 / @grid-columns));
+ }
+
+ .col-sm-pull-4 {
+ right: percentage((4 / @grid-columns));
+ }
+
+ .col-sm-pull-5 {
+ right: percentage((5 / @grid-columns));
+ }
+
+ .col-sm-pull-6 {
+ right: percentage((6 / @grid-columns));
+ }
+
+ .col-sm-pull-7 {
+ right: percentage((7 / @grid-columns));
+ }
+
+ .col-sm-pull-8 {
+ right: percentage((8 / @grid-columns));
+ }
+
+ .col-sm-pull-9 {
+ right: percentage((9 / @grid-columns));
+ }
+
+ .col-sm-pull-10 {
+ right: percentage((10/ @grid-columns));
+ }
+
+ .col-sm-pull-11 {
+ right: percentage((11/ @grid-columns));
+ }
+
+ // Offsets
+ .col-sm-offset-1 {
+ margin-left: percentage((1 / @grid-columns));
+ }
+
+ .col-sm-offset-2 {
+ margin-left: percentage((2 / @grid-columns));
+ }
+
+ .col-sm-offset-3 {
+ margin-left: percentage((3 / @grid-columns));
+ }
+
+ .col-sm-offset-4 {
+ margin-left: percentage((4 / @grid-columns));
+ }
+
+ .col-sm-offset-5 {
+ margin-left: percentage((5 / @grid-columns));
+ }
+
+ .col-sm-offset-6 {
+ margin-left: percentage((6 / @grid-columns));
+ }
+
+ .col-sm-offset-7 {
+ margin-left: percentage((7 / @grid-columns));
+ }
+
+ .col-sm-offset-8 {
+ margin-left: percentage((8 / @grid-columns));
+ }
+
+ .col-sm-offset-9 {
+ margin-left: percentage((9 / @grid-columns));
+ }
+
+ .col-sm-offset-10 {
+ margin-left: percentage((10/ @grid-columns));
+ }
+
+ .col-sm-offset-11 {
+ margin-left: percentage((11/ @grid-columns));
+ }
+}
+
+// Medium grid
+//
+// Columns, offsets, pushes, and pulls for the desktop device range.
+//
+// Note that `.col-md-12` doesn't get floated on purpose—there's no need since
+// it's full-width.
+
+@media (min-width: @screen-md) {
+ .container {
+ max-width: @container-desktop;
+ }
+
+ .col-md-1,
+ .col-md-2,
+ .col-md-3,
+ .col-md-4,
+ .col-md-5,
+ .col-md-6,
+ .col-md-7,
+ .col-md-8,
+ .col-md-9,
+ .col-md-10,
+ .col-md-11 {
+ float: left;
+ }
+
+ .col-md-1 {
+ width: percentage((1 / @grid-columns));
+ }
+
+ .col-md-2 {
+ width: percentage((2 / @grid-columns));
+ }
+
+ .col-md-3 {
+ width: percentage((3 / @grid-columns));
+ }
+
+ .col-md-4 {
+ width: percentage((4 / @grid-columns));
+ }
+
+ .col-md-5 {
+ width: percentage((5 / @grid-columns));
+ }
+
+ .col-md-6 {
+ width: percentage((6 / @grid-columns));
+ }
+
+ .col-md-7 {
+ width: percentage((7 / @grid-columns));
+ }
+
+ .col-md-8 {
+ width: percentage((8 / @grid-columns));
+ }
+
+ .col-md-9 {
+ width: percentage((9 / @grid-columns));
+ }
+
+ .col-md-10 {
+ width: percentage((10/ @grid-columns));
+ }
+
+ .col-md-11 {
+ width: percentage((11/ @grid-columns));
+ }
+
+ .col-md-12 {
+ width: 100%;
+ }
+
+ // Push and pull columns for source order changes
+ .col-md-push-0 {
+ left: auto;
+ }
+
+ .col-md-push-1 {
+ left: percentage((1 / @grid-columns));
+ }
+
+ .col-md-push-2 {
+ left: percentage((2 / @grid-columns));
+ }
+
+ .col-md-push-3 {
+ left: percentage((3 / @grid-columns));
+ }
+
+ .col-md-push-4 {
+ left: percentage((4 / @grid-columns));
+ }
+
+ .col-md-push-5 {
+ left: percentage((5 / @grid-columns));
+ }
+
+ .col-md-push-6 {
+ left: percentage((6 / @grid-columns));
+ }
+
+ .col-md-push-7 {
+ left: percentage((7 / @grid-columns));
+ }
+
+ .col-md-push-8 {
+ left: percentage((8 / @grid-columns));
+ }
+
+ .col-md-push-9 {
+ left: percentage((9 / @grid-columns));
+ }
+
+ .col-md-push-10 {
+ left: percentage((10/ @grid-columns));
+ }
+
+ .col-md-push-11 {
+ left: percentage((11/ @grid-columns));
+ }
+
+ .col-md-pull-0 {
+ right: auto;
+ }
+
+ .col-md-pull-1 {
+ right: percentage((1 / @grid-columns));
+ }
+
+ .col-md-pull-2 {
+ right: percentage((2 / @grid-columns));
+ }
+
+ .col-md-pull-3 {
+ right: percentage((3 / @grid-columns));
+ }
+
+ .col-md-pull-4 {
+ right: percentage((4 / @grid-columns));
+ }
+
+ .col-md-pull-5 {
+ right: percentage((5 / @grid-columns));
+ }
+
+ .col-md-pull-6 {
+ right: percentage((6 / @grid-columns));
+ }
+
+ .col-md-pull-7 {
+ right: percentage((7 / @grid-columns));
+ }
+
+ .col-md-pull-8 {
+ right: percentage((8 / @grid-columns));
+ }
+
+ .col-md-pull-9 {
+ right: percentage((9 / @grid-columns));
+ }
+
+ .col-md-pull-10 {
+ right: percentage((10/ @grid-columns));
+ }
+
+ .col-md-pull-11 {
+ right: percentage((11/ @grid-columns));
+ }
+
+ // Offsets
+ .col-md-offset-0 {
+ margin-left: 0;
+ }
+
+ .col-md-offset-1 {
+ margin-left: percentage((1 / @grid-columns));
+ }
+
+ .col-md-offset-2 {
+ margin-left: percentage((2 / @grid-columns));
+ }
+
+ .col-md-offset-3 {
+ margin-left: percentage((3 / @grid-columns));
+ }
+
+ .col-md-offset-4 {
+ margin-left: percentage((4 / @grid-columns));
+ }
+
+ .col-md-offset-5 {
+ margin-left: percentage((5 / @grid-columns));
+ }
+
+ .col-md-offset-6 {
+ margin-left: percentage((6 / @grid-columns));
+ }
+
+ .col-md-offset-7 {
+ margin-left: percentage((7 / @grid-columns));
+ }
+
+ .col-md-offset-8 {
+ margin-left: percentage((8 / @grid-columns));
+ }
+
+ .col-md-offset-9 {
+ margin-left: percentage((9 / @grid-columns));
+ }
+
+ .col-md-offset-10 {
+ margin-left: percentage((10/ @grid-columns));
+ }
+
+ .col-md-offset-11 {
+ margin-left: percentage((11/ @grid-columns));
+ }
+}
+
+// Large grid
+//
+// Columns, offsets, pushes, and pulls for the large desktop device range.
+//
+// Note that `.col-lg-12` doesn't get floated on purpose—there's no need since
+// it's full-width.
+
+@media (min-width: @screen-lg-desktop) {
+ .container {
+ max-width: @container-lg-desktop;
+ }
+
+ .col-lg-1,
+ .col-lg-2,
+ .col-lg-3,
+ .col-lg-4,
+ .col-lg-5,
+ .col-lg-6,
+ .col-lg-7,
+ .col-lg-8,
+ .col-lg-9,
+ .col-lg-10,
+ .col-lg-11 {
+ float: left;
+ }
+
+ .col-lg-1 {
+ width: percentage((1 / @grid-columns));
+ }
+
+ .col-lg-2 {
+ width: percentage((2 / @grid-columns));
+ }
+
+ .col-lg-3 {
+ width: percentage((3 / @grid-columns));
+ }
+
+ .col-lg-4 {
+ width: percentage((4 / @grid-columns));
+ }
+
+ .col-lg-5 {
+ width: percentage((5 / @grid-columns));
+ }
+
+ .col-lg-6 {
+ width: percentage((6 / @grid-columns));
+ }
+
+ .col-lg-7 {
+ width: percentage((7 / @grid-columns));
+ }
+
+ .col-lg-8 {
+ width: percentage((8 / @grid-columns));
+ }
+
+ .col-lg-9 {
+ width: percentage((9 / @grid-columns));
+ }
+
+ .col-lg-10 {
+ width: percentage((10/ @grid-columns));
+ }
+
+ .col-lg-11 {
+ width: percentage((11/ @grid-columns));
+ }
+
+ .col-lg-12 {
+ width: 100%;
+ }
+
+ // Push and pull columns for source order changes
+ .col-lg-push-0 {
+ left: auto;
+ }
+
+ .col-lg-push-1 {
+ left: percentage((1 / @grid-columns));
+ }
+
+ .col-lg-push-2 {
+ left: percentage((2 / @grid-columns));
+ }
+
+ .col-lg-push-3 {
+ left: percentage((3 / @grid-columns));
+ }
+
+ .col-lg-push-4 {
+ left: percentage((4 / @grid-columns));
+ }
+
+ .col-lg-push-5 {
+ left: percentage((5 / @grid-columns));
+ }
+
+ .col-lg-push-6 {
+ left: percentage((6 / @grid-columns));
+ }
+
+ .col-lg-push-7 {
+ left: percentage((7 / @grid-columns));
+ }
+
+ .col-lg-push-8 {
+ left: percentage((8 / @grid-columns));
+ }
+
+ .col-lg-push-9 {
+ left: percentage((9 / @grid-columns));
+ }
+
+ .col-lg-push-10 {
+ left: percentage((10/ @grid-columns));
+ }
+
+ .col-lg-push-11 {
+ left: percentage((11/ @grid-columns));
+ }
+
+ .col-lg-pull-0 {
+ right: auto;
+ }
+
+ .col-lg-pull-1 {
+ right: percentage((1 / @grid-columns));
+ }
+
+ .col-lg-pull-2 {
+ right: percentage((2 / @grid-columns));
+ }
+
+ .col-lg-pull-3 {
+ right: percentage((3 / @grid-columns));
+ }
+
+ .col-lg-pull-4 {
+ right: percentage((4 / @grid-columns));
+ }
+
+ .col-lg-pull-5 {
+ right: percentage((5 / @grid-columns));
+ }
+
+ .col-lg-pull-6 {
+ right: percentage((6 / @grid-columns));
+ }
+
+ .col-lg-pull-7 {
+ right: percentage((7 / @grid-columns));
+ }
+
+ .col-lg-pull-8 {
+ right: percentage((8 / @grid-columns));
+ }
+
+ .col-lg-pull-9 {
+ right: percentage((9 / @grid-columns));
+ }
+
+ .col-lg-pull-10 {
+ right: percentage((10/ @grid-columns));
+ }
+
+ .col-lg-pull-11 {
+ right: percentage((11/ @grid-columns));
+ }
+
+ // Offsets
+ .col-lg-offset-0 {
+ margin-left: 0;
+ }
+
+ .col-lg-offset-1 {
+ margin-left: percentage((1 / @grid-columns));
+ }
+
+ .col-lg-offset-2 {
+ margin-left: percentage((2 / @grid-columns));
+ }
+
+ .col-lg-offset-3 {
+ margin-left: percentage((3 / @grid-columns));
+ }
+
+ .col-lg-offset-4 {
+ margin-left: percentage((4 / @grid-columns));
+ }
+
+ .col-lg-offset-5 {
+ margin-left: percentage((5 / @grid-columns));
+ }
+
+ .col-lg-offset-6 {
+ margin-left: percentage((6 / @grid-columns));
+ }
+
+ .col-lg-offset-7 {
+ margin-left: percentage((7 / @grid-columns));
+ }
+
+ .col-lg-offset-8 {
+ margin-left: percentage((8 / @grid-columns));
+ }
+
+ .col-lg-offset-9 {
+ margin-left: percentage((9 / @grid-columns));
+ }
+
+ .col-lg-offset-10 {
+ margin-left: percentage((10/ @grid-columns));
+ }
+
+ .col-lg-offset-11 {
+ margin-left: percentage((11/ @grid-columns));
+ }
+}
diff --git a/vendor/twitter-bootstrap-3/less/input-groups.less b/vendor/twitter-bootstrap-3/less/input-groups.less
new file mode 100644
index 000000000..a5575b0d8
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/input-groups.less
@@ -0,0 +1,136 @@
+//
+// Input groups
+// --------------------------------------------------
+
+// Base styles
+// -------------------------
+.input-group {
+ position: relative; // For dropdowns
+ display: table;
+ border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table
+
+ // Undo padding and float of grid classes
+ &.col {
+ float: none;
+ padding-left: 0;
+ padding-right: 0;
+ }
+
+ .form-control {
+ width: 100%;
+ margin-bottom: 0;
+ }
+}
+
+// Sizing options
+//
+// Remix the default form control sizing classes into new ones for easier
+// manipulation.
+
+.input-group-lg > .form-control,
+.input-group-lg > .input-group-addon,
+.input-group-lg > .input-group-btn > .btn {
+ .input-lg();
+}
+
+.input-group-sm > .form-control,
+.input-group-sm > .input-group-addon,
+.input-group-sm > .input-group-btn > .btn {
+ .input-sm();
+}
+
+// Display as table-cell
+// -------------------------
+.input-group-addon,
+.input-group-btn,
+.input-group .form-control {
+ display: table-cell;
+
+ &:not(:first-child):not(:last-child) {
+ border-radius: 0;
+ }
+}
+
+// Addon and addon wrapper for buttons
+.input-group-addon,
+.input-group-btn {
+ width: 1%;
+ white-space: nowrap;
+ vertical-align: middle; // Match the inputs
+}
+
+// Text input groups
+// -------------------------
+.input-group-addon {
+ padding: @padding-base-vertical @padding-base-horizontal;
+ font-size: @font-size-base;
+ font-weight: normal;
+ line-height: 1;
+ text-align: center;
+ background-color: @input-group-addon-bg;
+ border: 1px solid @input-group-addon-border-color;
+ border-radius: @border-radius-base;
+
+ // Sizing
+ &.input-sm {
+ padding: @padding-small-vertical @padding-small-horizontal;
+ font-size: @font-size-small;
+ border-radius: @border-radius-small;
+ }
+ &.input-lg {
+ padding: @padding-large-vertical @padding-large-horizontal;
+ font-size: @font-size-large;
+ border-radius: @border-radius-large;
+ }
+
+ // Nuke default margins from checkboxes and radios to vertically center within.
+ input[type="radio"],
+ input[type="checkbox"] {
+ margin-top: 0;
+ }
+}
+
+// Reset rounded corners
+.input-group .form-control:first-child,
+.input-group-addon:first-child,
+.input-group-btn:first-child > .btn,
+.input-group-btn:first-child > .dropdown-toggle,
+.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) {
+ .border-right-radius(0);
+}
+
+.input-group-addon:first-child {
+ border-right: 0;
+}
+
+.input-group .form-control:last-child,
+.input-group-addon:last-child,
+.input-group-btn:last-child > .btn,
+.input-group-btn:last-child > .dropdown-toggle,
+.input-group-btn:first-child > .btn:not(:first-child) {
+ .border-left-radius(0);
+}
+
+.input-group-addon:last-child {
+ border-left: 0;
+}
+
+// Button input groups
+// -------------------------
+.input-group-btn {
+ position: relative;
+ white-space: nowrap;
+}
+
+.input-group-btn > .btn {
+ position: relative;
+ // Jankily prevent input button groups from wrapping
+ + .btn {
+ margin-left: -4px;
+ }
+ // Bring the "active" button to the front
+ &:hover,
+ &:active {
+ z-index: 2;
+ }
+}
diff --git a/vendor/twitter-bootstrap-3/less/jumbotron.less b/vendor/twitter-bootstrap-3/less/jumbotron.less
new file mode 100644
index 000000000..b8a0af60e
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/jumbotron.less
@@ -0,0 +1,39 @@
+//
+// Jumbotron
+// --------------------------------------------------
+
+.jumbotron {
+ padding: @jumbotron-padding;
+ margin-bottom: @jumbotron-padding;
+ font-size: (@font-size-base * 1.5);
+ font-weight: 200;
+ line-height: (@line-height-base * 1.5);
+ color: @jumbotron-color;
+ background-color: @jumbotron-bg;
+
+ h1 {
+ line-height: 1;
+ color: @jumbotron-heading-color;
+ }
+ p {
+ line-height: 1.4;
+ }
+
+ .container & {
+ border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container
+ }
+
+ @media screen and (min-width: @screen-sm) {
+ padding-top: (@jumbotron-padding * 1.6);
+ padding-bottom: (@jumbotron-padding * 1.6);
+
+ .container & {
+ padding-left: (@jumbotron-padding * 2);
+ padding-right: (@jumbotron-padding * 2);
+ }
+
+ h1 {
+ font-size: (@font-size-base * 4.5);
+ }
+ }
+}
diff --git a/vendor/twitter-bootstrap-3/less/labels.less b/vendor/twitter-bootstrap-3/less/labels.less
new file mode 100644
index 000000000..cad5ce516
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/labels.less
@@ -0,0 +1,58 @@
+//
+// Labels
+// --------------------------------------------------
+
+.label {
+ display: inline;
+ padding: .2em .6em .3em;
+ font-size: 75%;
+ font-weight: bold;
+ line-height: 1;
+ color: @label-color;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: baseline;
+ border-radius: .25em;
+
+ // Add hover effects, but only for links
+ &[href] {
+ &:hover,
+ &:focus {
+ color: @label-link-hover-color;
+ text-decoration: none;
+ cursor: pointer;
+ }
+ }
+
+ // Empty labels collapse automatically (not available in IE8)
+ &:empty {
+ display: none;
+ }
+}
+
+// Colors
+// Contextual variations (linked labels get darker on :hover)
+
+.label-default {
+ .label-variant(@label-default-bg);
+}
+
+.label-primary {
+ .label-variant(@label-primary-bg);
+}
+
+.label-success {
+ .label-variant(@label-success-bg);
+}
+
+.label-info {
+ .label-variant(@label-info-bg);
+}
+
+.label-warning {
+ .label-variant(@label-warning-bg);
+}
+
+.label-danger {
+ .label-variant(@label-danger-bg);
+}
diff --git a/vendor/twitter-bootstrap-3/less/list-group.less b/vendor/twitter-bootstrap-3/less/list-group.less
new file mode 100644
index 000000000..657c0581d
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/list-group.less
@@ -0,0 +1,89 @@
+//
+// List groups
+// --------------------------------------------------
+
+// Base class
+//
+// Easily usable on , , or .
+.list-group {
+ // No need to set list-style: none; since .list-group-item is block level
+ margin-bottom: 20px;
+ padding-left: 0; // reset padding because ul and ol
+}
+
+// Individual list items
+// -------------------------
+
+.list-group-item {
+ position: relative;
+ display: block;
+ padding: 10px 15px;
+ // Place the border on the list items and negative margin up for better styling
+ margin-bottom: -1px;
+ background-color: @list-group-bg;
+ border: 1px solid @list-group-border;
+
+ // Round the first and last items
+ &:first-child {
+ .border-top-radius(@list-group-border-radius);
+ }
+ &:last-child {
+ margin-bottom: 0;
+ .border-bottom-radius(@list-group-border-radius);
+ }
+
+ // Align badges within list items
+ > .badge {
+ float: right;
+ }
+ > .badge + .badge {
+ margin-right: 5px;
+ }
+
+ // Linked list items
+ a & {
+ color: @list-group-link-color;
+
+ .list-group-item-heading {
+ color: @list-group-link-heading-color;
+ }
+
+ // Hover state
+ &:hover,
+ &:focus {
+ text-decoration: none;
+ background-color: @list-group-hover-bg;
+ }
+ }
+
+ // Active class on item itself, not parent
+ &.active,
+ &.active:hover,
+ &.active:focus {
+ z-index: 2; // Place active items above their siblings for proper border styling
+ color: @list-group-active-color;
+ background-color: @list-group-active-bg;
+ border-color: @list-group-active-border;
+
+ // Force color to inherit for custom content
+ .list-group-item-heading {
+ color: inherit;
+ }
+ .list-group-item-text {
+ color: lighten(@list-group-active-bg, 40%);
+ }
+ }
+}
+
+// Custom content options
+// -------------------------
+
+.list-group-item-heading {
+ margin-top: 0;
+ margin-bottom: 5px;
+}
+
+.list-group-item-text {
+ margin-bottom: 0;
+ line-height: 1.3;
+}
diff --git a/vendor/twitter-bootstrap-3/less/media.less b/vendor/twitter-bootstrap-3/less/media.less
new file mode 100644
index 000000000..13f2308a8
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/media.less
@@ -0,0 +1,54 @@
+// Media objects
+// Source: http://stubbornella.org/content/?p=497
+// --------------------------------------------------
+
+// Common styles
+// -------------------------
+
+// Clear the floats
+.media,
+.media-body {
+ overflow: hidden;
+ zoom: 1;
+}
+
+// Proper spacing between instances of .media
+.media,
+.media .media {
+ margin-top: 15px;
+}
+
+.media:first-child {
+ margin-top: 0;
+}
+
+// For images and videos, set to block
+.media-object {
+ display: block;
+}
+
+// Reset margins on headings for tighter default spacing
+.media-heading {
+ margin: 0 0 5px;
+}
+
+// Media image alignment
+// -------------------------
+
+.media {
+ > .pull-left {
+ margin-right: 10px;
+ }
+ > .pull-right {
+ margin-left: 10px;
+ }
+}
+
+// Media list variation
+// -------------------------
+
+// Undo default ul/ol styles
+.media-list {
+ padding-left: 0;
+ list-style: none;
+}
diff --git a/vendor/twitter-bootstrap-3/less/mixins.less b/vendor/twitter-bootstrap-3/less/mixins.less
new file mode 100644
index 000000000..63f7c02bb
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/mixins.less
@@ -0,0 +1,767 @@
+//
+// Mixins
+// --------------------------------------------------
+
+// Utilities
+// -------------------------
+
+// Clearfix
+// Source: http://nicolasgallagher.com/micro-clearfix-hack/
+//
+// For modern browsers
+// 1. The space content is one way to avoid an Opera bug when the
+// contenteditable attribute is included anywhere else in the document.
+// Otherwise it causes space to appear at the top and bottom of elements
+// that are clearfixed.
+// 2. The use of `table` rather than `block` is only necessary if using
+// `:before` to contain the top-margins of child elements.
+.clearfix() {
+ &:before,
+ &:after {
+ content: " "; /* 1 */
+ display: table; /* 2 */
+ }
+ &:after {
+ clear: both;
+ }
+}
+
+// Webkit-style focus
+.tab-focus() {
+ // Default
+ outline: thin dotted #333;
+ // Webkit
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+
+// Center-align a block level element
+.center-block() {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+// Sizing shortcuts
+.size(@width; @height) {
+ width: @width;
+ height: @height;
+}
+
+.square(@size) {
+ .size(@size; @size);
+}
+
+// Placeholder text
+.placeholder(@color: @input-color-placeholder) {
+ &:-moz-placeholder {
+ color: @color;
+ }
+ // Firefox 4-18
+ &::-moz-placeholder {
+ color: @color;
+ }
+ // Firefox 19+
+ &:-ms-input-placeholder {
+ color: @color;
+ }
+ // Internet Explorer 10+
+ &::-webkit-input-placeholder {
+ color: @color;
+ }
+ // Safari and Chrome
+}
+
+// Text overflow
+// Requires inline-block or block for proper styling
+.text-overflow() {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+// CSS image replacement
+//
+// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for
+// mixins being reused as classes with the same name, this doesn't hold up. As
+// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`. Note
+// that we cannot chain the mixins together in Less, so they are repeated.
+//
+// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757
+
+// Deprecated as of v3.0.1 (will be removed in v4)
+.hide-text() {
+ font: ~"0/0" a;
+ color: transparent;
+ text-shadow: none;
+ background-color: transparent;
+ border: 0;
+}
+
+// New mixin to use as of v3.0.1
+.text-hide() {
+ font: ~"0/0" a;
+ color: transparent;
+ text-shadow: none;
+ background-color: transparent;
+ border: 0;
+}
+
+// CSS3 PROPERTIES
+// --------------------------------------------------
+
+// Single side border-radius
+.border-top-radius(@radius) {
+ border-top-right-radius: @radius;
+ border-top-left-radius: @radius;
+}
+
+.border-right-radius(@radius) {
+ border-bottom-right-radius: @radius;
+ border-top-right-radius: @radius;
+}
+
+.border-bottom-radius(@radius) {
+ border-bottom-right-radius: @radius;
+ border-bottom-left-radius: @radius;
+}
+
+.border-left-radius(@radius) {
+ border-bottom-left-radius: @radius;
+ border-top-left-radius: @radius;
+}
+
+// Drop shadows
+.box-shadow(@shadow) {
+ -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1
+ box-shadow: @shadow;
+}
+
+// Transitions
+.transition(@transition) {
+ -webkit-transition: @transition;
+ transition: @transition;
+}
+
+.transition-property(@transition-property) {
+ -webkit-transition-property: @transition-property;
+ transition-property: @transition-property;
+}
+
+.transition-delay(@transition-delay) {
+ -webkit-transition-delay: @transition-delay;
+ transition-delay: @transition-delay;
+}
+
+.transition-duration(@transition-duration) {
+ -webkit-transition-duration: @transition-duration;
+ transition-duration: @transition-duration;
+}
+
+.transition-transform(@transition) {
+ -webkit-transition: -webkit-transform @transition;
+ -moz-transition: -moz-transform @transition;
+ -o-transition: -o-transform @transition;
+ transition: transform @transition;
+}
+
+// Transformations
+.rotate(@degrees) {
+ -webkit-transform: rotate(@degrees);
+ -ms-transform: rotate(@degrees); // IE9+
+ transform: rotate(@degrees);
+}
+
+.scale(@ratio) {
+ -webkit-transform: scale(@ratio);
+ -ms-transform: scale(@ratio); // IE9+
+ transform: scale(@ratio);
+}
+
+.translate(@x; @y) {
+ -webkit-transform: translate(@x, @y);
+ -ms-transform: translate(@x, @y); // IE9+
+ transform: translate(@x, @y);
+}
+
+.skew(@x; @y) {
+ -webkit-transform: skew(@x, @y);
+ -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+
+ transform: skew(@x, @y);
+}
+
+.translate3d(@x; @y; @z) {
+ -webkit-transform: translate3d(@x, @y, @z);
+ transform: translate3d(@x, @y, @z);
+}
+
+// Backface visibility
+// Prevent browsers from flickering when using CSS 3D transforms.
+// Default value is `visible`, but can be changed to `hidden`
+// See git pull https://github.com/dannykeane/bootstrap.git backface-visibility for examples
+.backface-visibility(@visibility) {
+ -webkit-backface-visibility: @visibility;
+ -moz-backface-visibility: @visibility;
+ backface-visibility: @visibility;
+}
+
+// Box sizing
+.box-sizing(@boxmodel) {
+ -webkit-box-sizing: @boxmodel;
+ -moz-box-sizing: @boxmodel;
+ box-sizing: @boxmodel;
+}
+
+// User select
+// For selecting text on the page
+.user-select(@select) {
+ -webkit-user-select: @select;
+ -moz-user-select: @select;
+ -ms-user-select: @select; // IE10+
+ -o-user-select: @select;
+ user-select: @select;
+}
+
+// Resize anything
+.resizable(@direction) {
+ resize: @direction; // Options: horizontal, vertical, both
+ overflow: auto; // Safari fix
+}
+
+// CSS3 Content Columns
+.content-columns(@column-count; @column-gap: @grid-gutter-width) {
+ -webkit-column-count: @column-count;
+ -moz-column-count: @column-count;
+ column-count: @column-count;
+ -webkit-column-gap: @column-gap;
+ -moz-column-gap: @column-gap;
+ column-gap: @column-gap;
+}
+
+// Optional hyphenation
+.hyphens(@mode: auto) {
+ word-wrap: break-word;
+ -webkit-hyphens: @mode;
+ -moz-hyphens: @mode;
+ -ms-hyphens: @mode; // IE10+
+ -o-hyphens: @mode;
+ hyphens: @mode;
+}
+
+// Opacity
+.opacity(@opacity) {
+ opacity: @opacity;
+ // IE8 filter
+ @opacity-ie: (@opacity * 100);
+ filter: ~"alpha(opacity=@{opacity-ie})";
+}
+
+// GRADIENTS
+// --------------------------------------------------
+
+#gradient {
+
+ // Horizontal gradient, from left to right
+ //
+ // Creates two color stops, start and end, by specifying a color and position for each color stop.
+ // Color stops are not available in IE9 and below.
+ .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {
+ background-image: -webkit-gradient(linear, @start-percent top, @end-percent top, from(@start-color), to(@end-color)); // Safari 4+, Chrome 2+
+ background-image: -webkit-linear-gradient(left, color-stop(@start-color @start-percent), color-stop(@end-color @end-percent)); // Safari 5.1+, Chrome 10+
+ background-image: -moz-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // FF 3.6+
+ background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10
+ background-repeat: repeat-x;
+ filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@start-color), argb(@end-color))); // IE9 and down
+ }
+
+ // Vertical gradient, from top to bottom
+ //
+ // Creates two color stops, start and end, by specifying a color and position for each color stop.
+ // Color stops are not available in IE9 and below.
+ .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {
+ background-image: -webkit-gradient(linear, left @start-percent, left @end-percent, from(@start-color), to(@end-color)); // Safari 4+, Chrome 2+
+ background-image: -webkit-linear-gradient(top, @start-color, @start-percent, @end-color, @end-percent); // Safari 5.1+, Chrome 10+
+ background-image: -moz-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // FF 3.6+
+ background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10
+ background-repeat: repeat-x;
+ filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@start-color), argb(@end-color))); // IE9 and down
+ }
+
+ .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {
+ background-repeat: repeat-x;
+ background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1+, Chrome 10+
+ background-image: -moz-linear-gradient(@deg, @start-color, @end-color); // FF 3.6+
+ background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10
+ }
+ .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {
+ background-image: -webkit-gradient(left, linear, 0 0, 0 100%, from(@start-color), color-stop(@color-stop, @mid-color), to(@end-color));
+ background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);
+ background-image: -moz-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);
+ background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);
+ background-repeat: no-repeat;
+ filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@start-color), argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback
+ }
+ .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@start-color), color-stop(@color-stop, @mid-color), to(@end-color));
+ background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);
+ background-image: -moz-linear-gradient(top, @start-color, @mid-color @color-stop, @end-color);
+ background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);
+ background-repeat: no-repeat;
+ filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@start-color), argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback
+ }
+ .radial(@inner-color: #555; @outer-color: #333) {
+ background-image: -webkit-gradient(radial, center center, 0, center center, 460, from(@inner-color), to(@outer-color));
+ background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);
+ background-image: -moz-radial-gradient(circle, @inner-color, @outer-color);
+ background-image: radial-gradient(circle, @inner-color, @outer-color);
+ background-repeat: no-repeat;
+ }
+ .striped(@color: #555; @angle: 45deg) {
+ background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255, 255, 255, .15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255, 255, 255, .15)), color-stop(.75, rgba(255, 255, 255, .15)), color-stop(.75, transparent), to(transparent));
+ background-image: -webkit-linear-gradient(@angle, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -moz-linear-gradient(@angle, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(@angle, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ }
+}
+
+// Reset filters for IE
+//
+// When you need to remove a gradient background, do not forget to use this to reset
+// the IE filter for IE9 and below.
+.reset-filter() {
+ filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)"));
+}
+
+// Retina images
+//
+// Short retina mixin for setting background-image and -size
+
+.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {
+ background-image: url("@{file-1x}");
+
+ @media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and ( min--moz-device-pixel-ratio: 2), only screen and ( -o-min-device-pixel-ratio: 2/1), only screen and ( min-device-pixel-ratio: 2), only screen and ( min-resolution: 192dpi), only screen and ( min-resolution: 2dppx) {
+ background-image: url("@{file-2x}");
+ background-size: @width-1x @height-1x;
+ }
+}
+
+// Responsive image
+//
+// Keep images from scaling beyond the width of their parents.
+
+.img-responsive(@display: block;) {
+ display: @display;
+ max-width: 100%; // Part 1: Set a maximum relative to the parent
+ height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching
+}
+
+// COMPONENT MIXINS
+// --------------------------------------------------
+
+// Horizontal dividers
+// -------------------------
+// Dividers (basically an hr) within dropdowns and nav lists
+.nav-divider(@color: #e5e5e5) {
+ height: 1px;
+ margin: ((@line-height-computed / 2) - 1) 0;
+ overflow: hidden;
+ background-color: @color;
+}
+
+// Panels
+// -------------------------
+.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border;) {
+ border-color: @border;
+ & > .panel-heading {
+ color: @heading-text-color;
+ background-color: @heading-bg-color;
+ border-color: @heading-border;
+ + .panel-collapse .panel-body {
+ border-top-color: @border;
+ }
+ }
+ & > .panel-footer {
+ + .panel-collapse .panel-body {
+ border-bottom-color: @border;
+ }
+ }
+}
+
+// Alerts
+// -------------------------
+.alert-variant(@background; @border; @text-color) {
+ background-color: @background;
+ border-color: @border;
+ color: @text-color;
+ hr {
+ border-top-color: darken(@border, 5%);
+ }
+ .alert-link {
+ color: darken(@text-color, 10%);
+ }
+}
+
+// Tables
+// -------------------------
+.table-row-variant(@state; @background; @border) {
+ // Exact selectors below required to override `.table-striped` and prevent
+ // inheritance to nested tables.
+ .table > thead > tr,
+ .table > tbody > tr,
+ .table > tfoot > tr {
+ > td.@{state},
+ > th.@{state},
+ &.@{state} > td,
+ &.@{state} > th {
+ background-color: @background;
+ border-color: @border;
+ }
+ }
+
+ // Hover states for `.table-hover`
+ // Note: this is not available for cells or rows within `thead` or `tfoot`.
+ .table-hover > tbody > tr {
+ > td.@{state}:hover,
+ > th.@{state}:hover,
+ &.@{state}:hover > td,
+ &.@{state}:hover > th {
+ background-color: darken(@background, 5%);
+ border-color: darken(@border, 5%);
+ }
+ }
+}
+
+// Button variants
+// -------------------------
+// Easily pump out default styles, as well as :hover, :focus, :active,
+// and disabled options for all buttons
+.button-variant(@color; @background; @border) {
+ color: @color;
+ background-color: @background;
+ border-color: @border;
+
+ &:hover,
+ &:focus,
+ &:active,
+ &.active,
+ .open .dropdown-toggle & {
+ color: @color;
+ background-color: darken(@background, 8%);
+ border-color: darken(@border, 12%);
+ }
+ &:active,
+ &.active,
+ .open .dropdown-toggle & {
+ background-image: none;
+ }
+ &.disabled,
+ &[disabled],
+ fieldset[disabled] & {
+ &,
+ &:hover,
+ &:focus,
+ &:active,
+ &.active {
+ background-color: @background;
+ border-color: @border
+ }
+ }
+}
+
+// Button sizes
+// -------------------------
+.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {
+ padding: @padding-vertical @padding-horizontal;
+ font-size: @font-size;
+ line-height: @line-height;
+ border-radius: @border-radius;
+}
+
+// Pagination
+// -------------------------
+.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @border-radius) {
+ > li {
+ > a,
+ > span {
+ padding: @padding-vertical @padding-horizontal;
+ font-size: @font-size;
+ }
+ &:first-child {
+ > a,
+ > span {
+ .border-left-radius(@border-radius);
+ }
+ }
+ &:last-child {
+ > a,
+ > span {
+ .border-right-radius(@border-radius);
+ }
+ }
+ }
+}
+
+// Labels
+// -------------------------
+.label-variant(@color) {
+ background-color: @color;
+ &[href] {
+ &:hover,
+ &:focus {
+ background-color: darken(@color, 10%);
+ }
+ }
+}
+
+// Navbar vertical align
+// -------------------------
+// Vertically center elements in the navbar.
+// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.
+.navbar-vertical-align(@element-height) {
+ margin-top: ((@navbar-height - @element-height) / 2);
+ margin-bottom: ((@navbar-height - @element-height) / 2);
+}
+
+// Progress bars
+// -------------------------
+.progress-bar-variant(@color) {
+ background-color: @color;
+ .progress-striped & {
+ #gradient > .striped(@color);
+ }
+}
+
+// Responsive utilities
+// -------------------------
+// More easily include all the states for responsive-utilities.less.
+.responsive-visibility() {
+ display: block !important;
+ tr & {
+ display: table-row !important;
+ }
+ th &,
+ td & {
+ display: table-cell !important;
+ }
+}
+
+.responsive-invisibility() {
+ display: none !important;
+ tr & {
+ display: none !important;
+ }
+ th &,
+ td & {
+ display: none !important;
+ }
+}
+
+// Grid System
+// -----------
+
+// Centered container element
+.container-fixed() {
+ margin-right: auto;
+ margin-left: auto;
+ padding-left: (@grid-gutter-width / 2);
+ padding-right: (@grid-gutter-width / 2);
+ .clearfix();
+}
+
+// Creates a wrapper for a series of columns
+.make-row(@gutter: @grid-gutter-width) {
+ margin-left: (@gutter / -2);
+ margin-right: (@gutter / -2);
+ .clearfix();
+}
+
+// Generate the extra small columns
+.make-xs-column(@columns; @gutter: @grid-gutter-width) {
+ position: relative;
+ float: left;
+ width: percentage((@columns / @grid-columns));
+ // Prevent columns from collapsing when empty
+ min-height: 1px;
+ // Inner gutter via padding
+ padding-left: (@gutter / 2);
+ padding-right: (@gutter / 2);
+}
+
+// Generate the small columns
+.make-sm-column(@columns; @gutter: @grid-gutter-width) {
+ position: relative;
+ // Prevent columns from collapsing when empty
+ min-height: 1px;
+ // Inner gutter via padding
+ padding-left: (@gutter / 2);
+ padding-right: (@gutter / 2);
+
+ // Calculate width based on number of columns available
+ @media (min-width: @screen-sm-min) {
+ float: left;
+ width: percentage((@columns / @grid-columns));
+ }
+}
+
+// Generate the small column offsets
+.make-sm-column-offset(@columns) {
+ @media (min-width: @screen-sm-min) {
+ margin-left: percentage((@columns / @grid-columns));
+ }
+}
+
+.make-sm-column-push(@columns) {
+ @media (min-width: @screen-sm-min) {
+ left: percentage((@columns / @grid-columns));
+ }
+}
+
+.make-sm-column-pull(@columns) {
+ @media (min-width: @screen-sm-min) {
+ right: percentage((@columns / @grid-columns));
+ }
+}
+
+// Generate the medium columns
+.make-md-column(@columns; @gutter: @grid-gutter-width) {
+ position: relative;
+ // Prevent columns from collapsing when empty
+ min-height: 1px;
+ // Inner gutter via padding
+ padding-left: (@gutter / 2);
+ padding-right: (@gutter / 2);
+
+ // Calculate width based on number of columns available
+ @media (min-width: @screen-md-min) {
+ float: left;
+ width: percentage((@columns / @grid-columns));
+ }
+}
+
+// Generate the large column offsets
+.make-md-column-offset(@columns) {
+ @media (min-width: @screen-md-min) {
+ margin-left: percentage((@columns / @grid-columns));
+ }
+}
+
+.make-md-column-push(@columns) {
+ @media (min-width: @screen-md) {
+ left: percentage((@columns / @grid-columns));
+ }
+}
+
+.make-md-column-pull(@columns) {
+ @media (min-width: @screen-md-min) {
+ right: percentage((@columns / @grid-columns));
+ }
+}
+
+// Generate the large columns
+.make-lg-column(@columns; @gutter: @grid-gutter-width) {
+ position: relative;
+ // Prevent columns from collapsing when empty
+ min-height: 1px;
+ // Inner gutter via padding
+ padding-left: (@gutter / 2);
+ padding-right: (@gutter / 2);
+
+ // Calculate width based on number of columns available
+ @media (min-width: @screen-lg-min) {
+ float: left;
+ width: percentage((@columns / @grid-columns));
+ }
+}
+
+// Generate the large column offsets
+.make-lg-column-offset(@columns) {
+ @media (min-width: @screen-lg-min) {
+ margin-left: percentage((@columns / @grid-columns));
+ }
+}
+
+.make-lg-column-push(@columns) {
+ @media (min-width: @screen-lg-min) {
+ left: percentage((@columns / @grid-columns));
+ }
+}
+
+.make-lg-column-pull(@columns) {
+ @media (min-width: @screen-lg-min) {
+ right: percentage((@columns / @grid-columns));
+ }
+}
+
+// Form validation states
+//
+// Used in forms.less to generate the form validation CSS for warnings, errors,
+// and successes.
+
+.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {
+ // Color the label and help text
+ .help-block,
+ .control-label {
+ color: @text-color;
+ }
+ // Set the border and box shadow on specific inputs to match
+ .form-control {
+ border-color: @border-color;
+ .box-shadow(inset 0 1px 1px rgba(0, 0, 0, .075)); // Redeclare so transitions work
+ &:focus {
+ border-color: darken(@border-color, 10%);
+ @shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px lighten(@border-color, 20%);
+ .box-shadow(@shadow);
+ }
+ }
+ // Set validation states also for addons
+ .input-group-addon {
+ color: @text-color;
+ border-color: @border-color;
+ background-color: @background-color;
+ }
+}
+
+// Form control focus state
+//
+// Generate a customized focus state and for any input with the specified color,
+// which defaults to the `@input-focus-border` variable.
+//
+// We highly encourage you to not customize the default value, but instead use
+// this to tweak colors on an as-needed basis. This aesthetic change is based on
+// WebKit's default styles, but applicable to a wider range of browsers. Its
+// usability and accessibility should be taken into account with any change.
+//
+// Example usage: change the default blue border and shadow to white for better
+// contrast against a dark gray background.
+
+.form-control-focus(@color: @input-border-focus) {
+ @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);
+ &:focus {
+ border-color: @color;
+ outline: 0;
+ .box-shadow(~"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}");
+ }
+}
+
+// Form control sizing
+//
+// Relative text size, padding, and border-radii changes for form controls. For
+// horizontal sizing, wrap controls in the predefined grid classes. ``
+// element gets special love because it's special, and that's a fact!
+
+.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {
+ height: @input-height;
+ padding: @padding-vertical @padding-horizontal;
+ font-size: @font-size;
+ line-height: @line-height;
+ border-radius: @border-radius;
+
+ select & {
+ height: @input-height;
+ line-height: @input-height;
+ }
+
+ textarea & {
+ height: auto;
+ }
+}
diff --git a/vendor/twitter-bootstrap-3/less/modals.less b/vendor/twitter-bootstrap-3/less/modals.less
new file mode 100644
index 000000000..b373ecd1e
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/modals.less
@@ -0,0 +1,148 @@
+//
+// Modals
+// --------------------------------------------------
+
+// .modal-open - body class for killing the scroll
+// .modal - container to scroll within
+// .modal-dialog - positioning shell for the actual modal
+// .modal-content - actual modal w/ bg and corners and shit
+
+// Kill the scroll on the body
+.modal-open {
+ overflow: hidden;
+
+ // Account for hiding of scrollbar
+ body &,
+ .navbar-fixed-top,
+ .navbar-fixed-bottom {
+ margin-right: 15px
+ }
+}
+
+// Container that the modal scrolls within
+.modal {
+ display: none;
+ overflow: auto;
+ overflow-y: scroll;
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: @zindex-modal-background;
+
+ // When fading in the modal, animate it to slide down
+ &.fade .modal-dialog {
+ .translate(0, -25%);
+ .transition-transform(~"0.3s ease-out");
+ }
+ &.in .modal-dialog {
+ .translate(0, 0)
+ }
+}
+
+// Shell div to position the modal with bottom padding
+.modal-dialog {
+ margin-left: auto;
+ margin-right: auto;
+ width: auto;
+ padding: 10px;
+ z-index: (@zindex-modal-background + 10);
+}
+
+// Actual modal
+.modal-content {
+ position: relative;
+ background-color: @modal-content-bg;
+ border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)
+ border: 1px solid @modal-content-border-color;
+ border-radius: @border-radius-large;
+ .box-shadow(0 3px 9px rgba(0, 0, 0, .5));
+ background-clip: padding-box;
+ // Remove focus outline from opened modal
+ outline: none;
+}
+
+// Modal background
+.modal-backdrop {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: (@zindex-modal-background - 10);
+ background-color: @modal-backdrop-bg;
+ // Fade for backdrop
+ &.fade {
+ .opacity(0);
+ }
+ &.in {
+ .opacity(.5);
+ }
+}
+
+// Modal header
+// Top section of the modal w/ title and dismiss
+.modal-header {
+ padding: @modal-title-padding;
+ border-bottom: 1px solid @modal-header-border-color;
+ min-height: (@modal-title-padding + @modal-title-line-height);
+}
+
+// Close icon
+.modal-header .close {
+ margin-top: -2px;
+}
+
+// Title text within header
+.modal-title {
+ margin: 0;
+ line-height: @modal-title-line-height;
+}
+
+// Modal body
+// Where all modal content resides (sibling of .modal-header and .modal-footer)
+.modal-body {
+ position: relative;
+ padding: @modal-inner-padding;
+}
+
+// Footer (for actions)
+.modal-footer {
+ margin-top: 15px;
+ padding: (@modal-inner-padding - 1) @modal-inner-padding @modal-inner-padding;
+ text-align: right; // right align buttons
+ border-top: 1px solid @modal-footer-border-color;
+ .clearfix(); // clear it in case folks use .pull-* classes on buttons
+
+ // Properly space out buttons
+ .btn + .btn {
+ margin-left: 5px;
+ margin-bottom: 0; // account for input[type="submit"] which gets the bottom margin like all other inputs
+ }
+ // but override that for button groups
+ .btn-group .btn + .btn {
+ margin-left: -1px;
+ }
+ // and override it for block buttons as well
+ .btn-block + .btn-block {
+ margin-left: 0;
+ }
+}
+
+// Scale up the modal
+@media screen and (min-width: @screen-sm) {
+
+ .modal-dialog {
+ left: 50%;
+ right: auto;
+ width: 600px;
+ padding-top: 30px;
+ padding-bottom: 30px;
+ }
+
+ .modal-content {
+ .box-shadow(0 5px 15px rgba(0, 0, 0, .5));
+ }
+
+}
diff --git a/vendor/twitter-bootstrap-3/less/navbar.less b/vendor/twitter-bootstrap-3/less/navbar.less
new file mode 100644
index 000000000..515b3c6ce
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/navbar.less
@@ -0,0 +1,616 @@
+//
+// Navbars
+// --------------------------------------------------
+
+// Wrapper and base class
+//
+// Provide a static navbar from which we expand to create full-width, fixed, and
+// other navbar variations.
+
+.navbar {
+ position: relative;
+ z-index: @zindex-navbar;
+ min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)
+ margin-bottom: @navbar-margin-bottom;
+ border: 1px solid transparent;
+
+ // Prevent floats from breaking the navbar
+ .clearfix();
+
+ @media (min-width: @grid-float-breakpoint) {
+ border-radius: @navbar-border-radius;
+ }
+}
+
+// Navbar heading
+//
+// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy
+// styling of responsive aspects.
+
+.navbar-header {
+ .clearfix();
+
+ @media (min-width: @grid-float-breakpoint) {
+ float: left;
+ }
+}
+
+// Navbar collapse (body)
+//
+// Group your navbar content into this for easy collapsing and expanding across
+// various device sizes. By default, this content is collapsed when <768px, but
+// will expand past that for a horizontal display.
+//
+// To start (on mobile devices) the navbar links, forms, and buttons are stacked
+// vertically and include a `max-height` to overflow in case you have too much
+// content for the user's viewport.
+
+.navbar-collapse {
+ max-height: 340px;
+ overflow-x: visible;
+ padding-right: @navbar-padding-horizontal;
+ padding-left: @navbar-padding-horizontal;
+ border-top: 1px solid transparent;
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
+ .clearfix();
+ -webkit-overflow-scrolling: touch;
+
+ &.in {
+ overflow-y: auto;
+ }
+
+ @media (min-width: @grid-float-breakpoint) {
+ width: auto;
+ border-top: 0;
+ box-shadow: none;
+
+ &.collapse {
+ display: block !important;
+ height: auto !important;
+ padding-bottom: 0; // Override default setting
+ overflow: visible !important;
+ }
+
+ &.in {
+ overflow-y: visible;
+ }
+
+ // Account for first and last children spacing
+ .navbar-nav.navbar-left:first-child {
+ margin-left: -@navbar-padding-horizontal;
+ }
+
+ .navbar-nav.navbar-right:last-child {
+ margin-right: -@navbar-padding-horizontal;
+ }
+
+ .navbar-text:last-child {
+ margin-right: 0;
+ }
+ }
+}
+
+// Both navbar header and collapse
+//
+// When a container is present, change the behavior of the header and collapse.
+
+.container > .navbar-header,
+.container > .navbar-collapse {
+ margin-right: -@navbar-padding-horizontal;
+ margin-left: -@navbar-padding-horizontal;
+
+ @media (min-width: @grid-float-breakpoint) {
+ margin-right: 0;
+ margin-left: 0;
+ }
+}
+
+//
+// Navbar alignment options
+//
+// Display the navbar across the entirity of the page or fixed it to the top or
+// bottom of the page.
+
+// Static top (unfixed, but 100% wide) navbar
+.navbar-static-top {
+ border-width: 0 0 1px;
+ @media (min-width: @grid-float-breakpoint) {
+ border-radius: 0;
+ }
+}
+
+// Fix the top/bottom navbars when screen real estate supports it
+.navbar-fixed-top,
+.navbar-fixed-bottom {
+ position: fixed;
+ right: 0;
+ left: 0;
+ border-width: 0 0 1px;
+
+ // Undo the rounded corners
+ @media (min-width: @grid-float-breakpoint) {
+ border-radius: 0;
+ }
+}
+
+.navbar-fixed-top {
+ z-index: @zindex-navbar-fixed;
+ top: 0;
+}
+
+.navbar-fixed-bottom {
+ bottom: 0;
+ margin-bottom: 0; // override .navbar defaults
+}
+
+// Brand/project name
+
+.navbar-brand {
+ float: left;
+ padding: @navbar-padding-vertical @navbar-padding-horizontal;
+ font-size: @font-size-large;
+ line-height: @line-height-computed;
+ &:hover,
+ &:focus {
+ text-decoration: none;
+ }
+
+ @media (min-width: @grid-float-breakpoint) {
+ .navbar > .container & {
+ margin-left: -@navbar-padding-horizontal;
+ }
+ }
+}
+
+// Navbar toggle
+//
+// Custom button for toggling the `.navbar-collapse`, powered by the collapse
+// JavaScript plugin.
+
+.navbar-toggle {
+ position: relative;
+ float: right;
+ margin-right: @navbar-padding-horizontal;
+ padding: 9px 10px;
+ .navbar-vertical-align(34px);
+ background-color: transparent;
+ border: 1px solid transparent;
+ border-radius: @border-radius-base;
+
+ // Bars
+ .icon-bar {
+ display: block;
+ width: 22px;
+ height: 2px;
+ border-radius: 1px;
+ }
+ .icon-bar + .icon-bar {
+ margin-top: 4px;
+ }
+
+ @media (min-width: @grid-float-breakpoint) {
+ display: none;
+ }
+}
+
+// Navbar nav links
+//
+// Builds on top of the `.nav` components with it's own modifier class to make
+// the nav the full height of the horizontal nav (above 768px).
+
+.navbar-nav {
+ margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;
+
+ > li > a {
+ padding-top: 10px;
+ padding-bottom: 10px;
+ line-height: @line-height-computed;
+ }
+
+ @media (max-width: @screen-xs-max) {
+ // Dropdowns get custom display when collapsed
+ .open .dropdown-menu {
+ position: static;
+ float: none;
+ width: auto;
+ margin-top: 0;
+ background-color: transparent;
+ border: 0;
+ box-shadow: none;
+ > li > a,
+ .dropdown-header {
+ padding: 5px 15px 5px 25px;
+ }
+ > li > a {
+ line-height: @line-height-computed;
+ &:hover,
+ &:focus {
+ background-image: none;
+ }
+ }
+ }
+ }
+
+ // Uncollapse the nav
+ @media (min-width: @grid-float-breakpoint) {
+ float: left;
+ margin: 0;
+
+ > li {
+ float: left;
+ > a {
+ padding-top: ((@navbar-height - @line-height-computed) / 2);
+ padding-bottom: ((@navbar-height - @line-height-computed) / 2);
+ }
+ }
+ }
+
+}
+
+// Component alignment
+//
+// Repurpose the pull utilities as their own navbar utilities to avoid specifity
+// issues with parents and chaining. Only do this when the navbar is uncollapsed
+// though so that navbar contents properly stack and align in mobile.
+
+@media (min-width: @grid-float-breakpoint) {
+ .navbar-left {
+ .pull-left();
+ }
+
+ .navbar-right {
+ .pull-right();
+ }
+}
+
+// Navbar form
+//
+// Extension of the `.form-inline` with some extra flavor for optimum display in
+// our navbars.
+
+.navbar-form {
+ margin-left: -@navbar-padding-horizontal;
+ margin-right: -@navbar-padding-horizontal;
+ padding: 10px @navbar-padding-horizontal;
+ border-top: 1px solid transparent;
+ border-bottom: 1px solid transparent;
+ @shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
+ .box-shadow(@shadow);
+
+ // Mixin behavior for optimum display
+ .form-inline();
+
+ .form-group {
+ @media (max-width: @screen-xs-max) {
+ margin-bottom: 5px;
+ }
+ }
+
+ // Vertically center in expanded, horizontal navbar
+ .navbar-vertical-align(@input-height-base);
+
+ // Undo 100% width for pull classes
+ @media (min-width: @grid-float-breakpoint) {
+ width: auto;
+ border: 0;
+ margin-left: 0;
+ margin-right: 0;
+ padding-top: 0;
+ padding-bottom: 0;
+ .box-shadow(none);
+ }
+}
+
+// Dropdown menus
+
+// Menu position and menu carets
+.navbar-nav > li > .dropdown-menu {
+ margin-top: 0;
+ .border-top-radius(0);
+}
+
+// Menu position and menu caret support for dropups via extra dropup class
+.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
+ .border-bottom-radius(0);
+}
+
+// Right aligned menus need alt position
+.navbar-nav.pull-right > li > .dropdown-menu,
+.navbar-nav > li > .dropdown-menu.pull-right {
+ left: auto;
+ right: 0;
+}
+
+// Buttons in navbars
+//
+// Vertically center a button within a navbar (when *not* in a form).
+
+.navbar-btn {
+ .navbar-vertical-align(@input-height-base);
+}
+
+// Text in navbars
+//
+// Add a class to make any element properly align itself vertically within the navbars.
+
+.navbar-text {
+ float: left;
+ .navbar-vertical-align(@line-height-computed);
+
+ @media (min-width: @grid-float-breakpoint) {
+ margin-left: @navbar-padding-horizontal;
+ margin-right: @navbar-padding-horizontal;
+ }
+}
+
+// Alternate navbars
+// --------------------------------------------------
+
+// Default navbar
+.navbar-default {
+ background-color: @navbar-default-bg;
+ border-color: @navbar-default-border;
+
+ .navbar-brand {
+ color: @navbar-default-brand-color;
+ &:hover,
+ &:focus {
+ color: @navbar-default-brand-hover-color;
+ background-color: @navbar-default-brand-hover-bg;
+ }
+ }
+
+ .navbar-text {
+ color: @navbar-default-color;
+ }
+
+ .navbar-nav {
+ > li > a {
+ color: @navbar-default-link-color;
+
+ &:hover,
+ &:focus {
+ color: @navbar-default-link-hover-color;
+ background-color: @navbar-default-link-hover-bg;
+ }
+ }
+ > .active > a {
+ &,
+ &:hover,
+ &:focus {
+ color: @navbar-default-link-active-color;
+ background-color: @navbar-default-link-active-bg;
+ }
+ }
+ > .disabled > a {
+ &,
+ &:hover,
+ &:focus {
+ color: @navbar-default-link-disabled-color;
+ background-color: @navbar-default-link-disabled-bg;
+ }
+ }
+ }
+
+ .navbar-toggle {
+ border-color: @navbar-default-toggle-border-color;
+ &:hover,
+ &:focus {
+ background-color: @navbar-default-toggle-hover-bg;
+ }
+ .icon-bar {
+ background-color: @navbar-default-toggle-icon-bar-bg;
+ }
+ }
+
+ .navbar-collapse,
+ .navbar-form {
+ border-color: darken(@navbar-default-bg, 7%);
+ }
+
+ // Dropdown menu items and carets
+ .navbar-nav {
+ // Caret should match text color on hover
+ > .dropdown > a:hover .caret,
+ > .dropdown > a:focus .caret {
+ border-top-color: @navbar-default-link-hover-color;
+ border-bottom-color: @navbar-default-link-hover-color;
+ }
+
+ // Remove background color from open dropdown
+ > .open > a {
+ &,
+ &:hover,
+ &:focus {
+ background-color: @navbar-default-link-active-bg;
+ color: @navbar-default-link-active-color;
+ .caret {
+ border-top-color: @navbar-default-link-active-color;
+ border-bottom-color: @navbar-default-link-active-color;
+ }
+ }
+ }
+ > .dropdown > a .caret {
+ border-top-color: @navbar-default-link-color;
+ border-bottom-color: @navbar-default-link-color;
+ }
+
+ @media (max-width: @screen-xs-max) {
+ // Dropdowns get custom display when collapsed
+ .open .dropdown-menu {
+ > li > a {
+ color: @navbar-default-link-color;
+ &:hover,
+ &:focus {
+ color: @navbar-default-link-hover-color;
+ background-color: @navbar-default-link-hover-bg;
+ }
+ }
+ > .active > a {
+ &,
+ &:hover,
+ &:focus {
+ color: @navbar-default-link-active-color;
+ background-color: @navbar-default-link-active-bg;
+ }
+ }
+ > .disabled > a {
+ &,
+ &:hover,
+ &:focus {
+ color: @navbar-default-link-disabled-color;
+ background-color: @navbar-default-link-disabled-bg;
+ }
+ }
+ }
+ }
+ }
+
+ // Links in navbars
+ //
+ // Add a class to ensure links outside the navbar nav are colored correctly.
+
+ .navbar-link {
+ color: @navbar-default-link-color;
+ &:hover {
+ color: @navbar-default-link-hover-color;
+ }
+ }
+
+}
+
+// Inverse navbar
+
+.navbar-inverse {
+ background-color: @navbar-inverse-bg;
+ border-color: @navbar-inverse-border;
+
+ .navbar-brand {
+ color: @navbar-inverse-brand-color;
+ &:hover,
+ &:focus {
+ color: @navbar-inverse-brand-hover-color;
+ background-color: @navbar-inverse-brand-hover-bg;
+ }
+ }
+
+ .navbar-text {
+ color: @navbar-inverse-color;
+ }
+
+ .navbar-nav {
+ > li > a {
+ color: @navbar-inverse-link-color;
+
+ &:hover,
+ &:focus {
+ color: @navbar-inverse-link-hover-color;
+ background-color: @navbar-inverse-link-hover-bg;
+ }
+ }
+ > .active > a {
+ &,
+ &:hover,
+ &:focus {
+ color: @navbar-inverse-link-active-color;
+ background-color: @navbar-inverse-link-active-bg;
+ }
+ }
+ > .disabled > a {
+ &,
+ &:hover,
+ &:focus {
+ color: @navbar-inverse-link-disabled-color;
+ background-color: @navbar-inverse-link-disabled-bg;
+ }
+ }
+ }
+
+ // Darken the responsive nav toggle
+ .navbar-toggle {
+ border-color: @navbar-inverse-toggle-border-color;
+ &:hover,
+ &:focus {
+ background-color: @navbar-inverse-toggle-hover-bg;
+ }
+ .icon-bar {
+ background-color: @navbar-inverse-toggle-icon-bar-bg;
+ }
+ }
+
+ .navbar-collapse,
+ .navbar-form {
+ border-color: darken(@navbar-inverse-bg, 7%);
+ }
+
+ // Dropdowns
+ .navbar-nav {
+ > .open > a {
+ &,
+ &:hover,
+ &:focus {
+ background-color: @navbar-inverse-link-active-bg;
+ color: @navbar-inverse-link-active-color;
+ }
+ }
+ > .dropdown > a:hover .caret {
+ border-top-color: @navbar-inverse-link-hover-color;
+ border-bottom-color: @navbar-inverse-link-hover-color;
+ }
+ > .dropdown > a .caret {
+ border-top-color: @navbar-inverse-link-color;
+ border-bottom-color: @navbar-inverse-link-color;
+ }
+ > .open > a {
+ &,
+ &:hover,
+ &:focus {
+ .caret {
+ border-top-color: @navbar-inverse-link-active-color;
+ border-bottom-color: @navbar-inverse-link-active-color;
+ }
+ }
+ }
+
+ @media (max-width: @screen-xs-max) {
+ // Dropdowns get custom display
+ .open .dropdown-menu {
+ > .dropdown-header {
+ border-color: @navbar-inverse-border;
+ }
+ > li > a {
+ color: @navbar-inverse-link-color;
+ &:hover,
+ &:focus {
+ color: @navbar-inverse-link-hover-color;
+ background-color: @navbar-inverse-link-hover-bg;
+ }
+ }
+ > .active > a {
+ &,
+ &:hover,
+ &:focus {
+ color: @navbar-inverse-link-active-color;
+ background-color: @navbar-inverse-link-active-bg;
+ }
+ }
+ > .disabled > a {
+ &,
+ &:hover,
+ &:focus {
+ color: @navbar-inverse-link-disabled-color;
+ background-color: @navbar-inverse-link-disabled-bg;
+ }
+ }
+ }
+ }
+ }
+
+ .navbar-link {
+ color: @navbar-inverse-link-color;
+ &:hover {
+ color: @navbar-inverse-link-hover-color;
+ }
+ }
+
+}
diff --git a/vendor/twitter-bootstrap-3/less/navs.less b/vendor/twitter-bootstrap-3/less/navs.less
new file mode 100644
index 000000000..75c2a23dd
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/navs.less
@@ -0,0 +1,223 @@
+//
+// Navs
+// --------------------------------------------------
+
+// Base class
+// --------------------------------------------------
+
+.nav {
+ margin-bottom: 0;
+ padding-left: 0; // Override default ul/ol
+ list-style: none;
+ .clearfix();
+
+ > li {
+ position: relative;
+ display: block;
+
+ > a {
+ position: relative;
+ display: block;
+ padding: @nav-link-padding;
+ &:hover,
+ &:focus {
+ text-decoration: none;
+ background-color: @nav-link-hover-bg;
+ }
+ }
+
+ // Disabled state sets text to gray and nukes hover/tab effects
+ &.disabled > a {
+ color: @nav-disabled-link-color;
+
+ &:hover,
+ &:focus {
+ color: @nav-disabled-link-hover-color;
+ text-decoration: none;
+ background-color: transparent;
+ cursor: not-allowed;
+ }
+ }
+ }
+
+ // Open dropdowns
+ .open > a {
+ &,
+ &:hover,
+ &:focus {
+ background-color: @nav-link-hover-bg;
+ border-color: @link-color;
+ }
+ }
+
+ // Dividers (basically an hr) within the dropdown
+ .nav-divider {
+ .nav-divider();
+ }
+
+ // Prevent IE8 from misplacing imgs
+ // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989
+ > li > a > img {
+ max-width: none;
+ }
+}
+
+// Tabs
+// -------------------------
+
+// Give the tabs something to sit on
+.nav-tabs {
+ border-bottom: 1px solid @nav-tabs-border-color;
+ > li {
+ float: left;
+ // Make the list-items overlay the bottom border
+ margin-bottom: -1px;
+
+ // Actual tabs (as links)
+ > a {
+ margin-right: 2px;
+ line-height: @line-height-base;
+ border: 1px solid transparent;
+ border-radius: @border-radius-base @border-radius-base 0 0;
+ &:hover {
+ border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;
+ }
+ }
+
+ // Active state, and it's :hover to override normal :hover
+ &.active > a {
+ &,
+ &:hover,
+ &:focus {
+ color: @nav-tabs-active-link-hover-color;
+ background-color: @nav-tabs-active-link-hover-bg;
+ border: 1px solid @nav-tabs-active-link-hover-border-color;
+ border-bottom-color: transparent;
+ cursor: default;
+ }
+ }
+ }
+ // pulling this in mainly for less shorthand
+ &.nav-justified {
+ .nav-justified();
+ .nav-tabs-justified();
+ }
+}
+
+// Pills
+// -------------------------
+.nav-pills {
+ > li {
+ float: left;
+
+ // Links rendered as pills
+ > a {
+ border-radius: 5px;
+ }
+ + li {
+ margin-left: 2px;
+ }
+
+ // Active state
+ &.active > a {
+ &,
+ &:hover,
+ &:focus {
+ color: @nav-pills-active-link-hover-color;
+ background-color: @nav-pills-active-link-hover-bg;
+ }
+ }
+ }
+}
+
+// Stacked pills
+.nav-stacked {
+ > li {
+ float: none;
+ + li {
+ margin-top: 2px;
+ margin-left: 0; // no need for this gap between nav items
+ }
+ }
+}
+
+// Nav variations
+// --------------------------------------------------
+
+// Justified nav links
+// -------------------------
+
+.nav-justified {
+ width: 100%;
+
+ > li {
+ float: none;
+ > a {
+ text-align: center;
+ }
+ }
+
+ @media (min-width: @screen-sm-min) {
+ > li {
+ display: table-cell;
+ width: 1%;
+ }
+ }
+}
+
+// Move borders to anchors instead of bottom of list
+.nav-tabs-justified {
+ border-bottom: 0;
+ > li > a {
+ border-bottom: 1px solid @nav-tabs-justified-link-border-color;
+
+ // Override margin from .nav-tabs
+ margin-right: 0;
+ }
+ > .active > a {
+ border-bottom-color: @nav-tabs-justified-active-link-border-color;
+ }
+}
+
+// Tabbable tabs
+// -------------------------
+
+// Clear any floats
+.tabbable {
+ .clearfix();
+}
+
+// Show/hide tabbable areas
+.tab-content > .tab-pane,
+.pill-content > .pill-pane {
+ display: none;
+}
+
+.tab-content,
+.pill-content {
+ > .active {
+ display: block;
+ }
+}
+
+// Dropdowns
+// -------------------------
+
+// Make dropdown carets use link color in navs
+.nav .caret {
+ border-top-color: @link-color;
+ border-bottom-color: @link-color;
+}
+
+.nav a:hover .caret {
+ border-top-color: @link-hover-color;
+ border-bottom-color: @link-hover-color;
+}
+
+// Specific dropdowns
+.nav-tabs .dropdown-menu {
+ // make dropdown border overlap tab border
+ margin-top: -1px;
+ // Remove the top rounded corners here since there is a hard edge above the menu
+ .border-top-radius(0);
+}
diff --git a/vendor/twitter-bootstrap-3/less/normalize.less b/vendor/twitter-bootstrap-3/less/normalize.less
new file mode 100644
index 000000000..a2e9c6485
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/normalize.less
@@ -0,0 +1,396 @@
+/*! normalize.css v2.1.0 | MIT License | git.io/normalize */
+
+// ==========================================================================
+// HTML5 display definitions
+// ==========================================================================
+
+//
+// Correct `block` display not defined in IE 8/9.
+//
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+nav,
+section,
+summary {
+ display: block;
+}
+
+//
+// Correct `inline-block` display not defined in IE 8/9.
+//
+
+audio,
+canvas,
+video {
+ display: inline-block;
+}
+
+//
+// Prevent modern browsers from displaying `audio` without controls.
+// Remove excess height in iOS 5 devices.
+//
+
+audio:not([controls]) {
+ display: none;
+ height: 0;
+}
+
+//
+// Address styling not present in IE 8/9.
+//
+
+[hidden] {
+ display: none;
+}
+
+// ==========================================================================
+// Base
+// ==========================================================================
+
+//
+// 1. Set default font family to sans-serif.
+// 2. Prevent iOS text size adjust after orientation change, without disabling
+// user zoom.
+//
+
+html {
+ font-family: sans-serif; // 1
+ -webkit-text-size-adjust: 100%; // 2
+ -ms-text-size-adjust: 100%; // 2
+}
+
+//
+// Remove default margin.
+//
+
+body {
+ margin: 0;
+}
+
+// ==========================================================================
+// Links
+// ==========================================================================
+
+//
+// Address `outline` inconsistency between Chrome and other browsers.
+//
+
+a:focus {
+ outline: thin dotted;
+}
+
+//
+// Improve readability when focused and also mouse hovered in all browsers.
+//
+
+a:active,
+a:hover {
+ outline: 0;
+}
+
+// ==========================================================================
+// Typography
+// ==========================================================================
+
+//
+// Address variable `h1` font-size and margin within `section` and `article`
+// contexts in Firefox 4+, Safari 5, and Chrome.
+//
+
+h1 {
+ font-size: 2em;
+ margin: 0.67em 0;
+}
+
+//
+// Address styling not present in IE 8/9, Safari 5, and Chrome.
+//
+
+abbr[title] {
+ border-bottom: 1px dotted;
+}
+
+//
+// Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.
+//
+
+b,
+strong {
+ font-weight: bold;
+}
+
+//
+// Address styling not present in Safari 5 and Chrome.
+//
+
+dfn {
+ font-style: italic;
+}
+
+//
+// Address differences between Firefox and other browsers.
+//
+
+hr {
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ height: 0;
+}
+
+//
+// Address styling not present in IE 8/9.
+//
+
+mark {
+ background: #ff0;
+ color: #000;
+}
+
+//
+// Correct font family set oddly in Safari 5 and Chrome.
+//
+
+code,
+kbd,
+pre,
+samp {
+ font-family: monospace, serif;
+ font-size: 1em;
+}
+
+//
+// Improve readability of pre-formatted text in all browsers.
+//
+
+pre {
+ white-space: pre-wrap;
+}
+
+//
+// Set consistent quote types.
+//
+
+q {
+ quotes: "\201C" "\201D" "\2018" "\2019";
+}
+
+//
+// Address inconsistent and variable font size in all browsers.
+//
+
+small {
+ font-size: 80%;
+}
+
+//
+// Prevent `sub` and `sup` affecting `line-height` in all browsers.
+//
+
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sup {
+ top: -0.5em;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+// ==========================================================================
+// Embedded content
+// ==========================================================================
+
+//
+// Remove border when inside `a` element in IE 8/9.
+//
+
+img {
+ border: 0;
+}
+
+//
+// Correct overflow displayed oddly in IE 9.
+//
+
+svg:not(:root) {
+ overflow: hidden;
+}
+
+// ==========================================================================
+// Figures
+// ==========================================================================
+
+//
+// Address margin not present in IE 8/9 and Safari 5.
+//
+
+figure {
+ margin: 0;
+}
+
+// ==========================================================================
+// Forms
+// ==========================================================================
+
+//
+// Define consistent border, margin, and padding.
+//
+
+fieldset {
+ border: 1px solid #c0c0c0;
+ margin: 0 2px;
+ padding: 0.35em 0.625em 0.75em;
+}
+
+//
+// 1. Correct `color` not being inherited in IE 8/9.
+// 2. Remove padding so people aren't caught out if they zero out fieldsets.
+//
+
+legend {
+ border: 0; // 1
+ padding: 0; // 2
+}
+
+//
+// 1. Correct font family not being inherited in all browsers.
+// 2. Correct font size not being inherited in all browsers.
+// 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.
+//
+
+button,
+input,
+select,
+textarea {
+ font-family: inherit; // 1
+ font-size: 100%; // 2
+ margin: 0; // 3
+}
+
+//
+// Address Firefox 4+ setting `line-height` on `input` using `!important` in
+// the UA stylesheet.
+//
+
+button,
+input {
+ line-height: normal;
+}
+
+//
+// Address inconsistent `text-transform` inheritance for `button` and `select`.
+// All other form control elements do not inherit `text-transform` values.
+// Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+.
+// Correct `select` style inheritance in Firefox 4+ and Opera.
+//
+
+button,
+select {
+ text-transform: none;
+}
+
+//
+// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
+// and `video` controls.
+// 2. Correct inability to style clickable `input` types in iOS.
+// 3. Improve usability and consistency of cursor style between image-type
+// `input` and others.
+//
+
+button,
+html input[type="button"], // 1
+input[type="reset"],
+input[type="submit"] {
+ -webkit-appearance: button; // 2
+ cursor: pointer; // 3
+}
+
+//
+// Re-set default cursor for disabled elements.
+//
+
+button[disabled],
+html input[disabled] {
+ cursor: default;
+}
+
+//
+// 1. Address box sizing set to `content-box` in IE 8/9.
+// 2. Remove excess padding in IE 8/9.
+//
+
+input[type="checkbox"],
+input[type="radio"] {
+ box-sizing: border-box; // 1
+ padding: 0; // 2
+}
+
+//
+// 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.
+// 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome
+// (include `-moz` to future-proof).
+//
+
+input[type="search"] {
+ -webkit-appearance: textfield; // 1
+ -moz-box-sizing: content-box;
+ -webkit-box-sizing: content-box; // 2
+ box-sizing: content-box;
+}
+
+//
+// Remove inner padding and search cancel button in Safari 5 and Chrome
+// on OS X.
+//
+
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+//
+// Remove inner padding and border in Firefox 4+.
+//
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+
+//
+// 1. Remove default vertical scrollbar in IE 8/9.
+// 2. Improve readability and alignment in all browsers.
+//
+
+textarea {
+ overflow: auto; // 1
+ vertical-align: top; // 2
+}
+
+// ==========================================================================
+// Tables
+// ==========================================================================
+
+//
+// Remove most spacing between table cells.
+//
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
diff --git a/vendor/twitter-bootstrap-3/less/pager.less b/vendor/twitter-bootstrap-3/less/pager.less
new file mode 100644
index 000000000..33c5646b9
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/pager.less
@@ -0,0 +1,54 @@
+//
+// Pager pagination
+// --------------------------------------------------
+
+.pager {
+ padding-left: 0;
+ margin: @line-height-computed 0;
+ list-style: none;
+ text-align: center;
+ .clearfix();
+ li {
+ display: inline;
+ > a,
+ > span {
+ display: inline-block;
+ padding: 5px 14px;
+ background-color: @pagination-bg;
+ border: 1px solid @pagination-border;
+ border-radius: @pager-border-radius;
+ }
+
+ > a:hover,
+ > a:focus {
+ text-decoration: none;
+ background-color: @pagination-hover-bg;
+ }
+ }
+
+ .next {
+ > a,
+ > span {
+ float: right;
+ }
+ }
+
+ .previous {
+ > a,
+ > span {
+ float: left;
+ }
+ }
+
+ .disabled {
+ > a,
+ > a:hover,
+ > a:focus,
+ > span {
+ color: @pager-disabled-color;
+ background-color: @pagination-bg;
+ cursor: not-allowed;
+ }
+ }
+
+}
diff --git a/vendor/twitter-bootstrap-3/less/pagination.less b/vendor/twitter-bootstrap-3/less/pagination.less
new file mode 100644
index 000000000..5c68b8bbb
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/pagination.less
@@ -0,0 +1,85 @@
+//
+// Pagination (multiple pages)
+// --------------------------------------------------
+.pagination {
+ display: inline-block;
+ padding-left: 0;
+ margin: @line-height-computed 0;
+ border-radius: @border-radius-base;
+
+ > li {
+ display: inline; // Remove list-style and block-level defaults
+ > a,
+ > span {
+ position: relative;
+ float: left; // Collapse white-space
+ padding: @padding-base-vertical @padding-base-horizontal;
+ line-height: @line-height-base;
+ text-decoration: none;
+ background-color: @pagination-bg;
+ border: 1px solid @pagination-border;
+ margin-left: -1px;
+ }
+ &:first-child {
+ > a,
+ > span {
+ margin-left: 0;
+ .border-left-radius(@border-radius-base);
+ }
+ }
+ &:last-child {
+ > a,
+ > span {
+ .border-right-radius(@border-radius-base);
+ }
+ }
+ }
+
+ > li > a,
+ > li > span {
+ &:hover,
+ &:focus {
+ background-color: @pagination-hover-bg;
+ }
+ }
+
+ > .active > a,
+ > .active > span {
+ &,
+ &:hover,
+ &:focus {
+ z-index: 2;
+ color: @pagination-active-color;
+ background-color: @pagination-active-bg;
+ border-color: @pagination-active-bg;
+ cursor: default;
+ }
+ }
+
+ > .disabled {
+ > span,
+ > span:hover,
+ > span:focus,
+ > a,
+ > a:hover,
+ > a:focus {
+ color: @pagination-disabled-color;
+ background-color: @pagination-bg;
+ border-color: @pagination-border;
+ cursor: not-allowed;
+ }
+ }
+}
+
+// Sizing
+// --------------------------------------------------
+
+// Large
+.pagination-lg {
+ .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @border-radius-large);
+}
+
+// Small
+.pagination-sm {
+ .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @border-radius-small);
+}
diff --git a/vendor/twitter-bootstrap-3/less/panels.less b/vendor/twitter-bootstrap-3/less/panels.less
new file mode 100644
index 000000000..bfa60a7b8
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/panels.less
@@ -0,0 +1,148 @@
+//
+// Panels
+// --------------------------------------------------
+
+// Base class
+.panel {
+ margin-bottom: @line-height-computed;
+ background-color: @panel-bg;
+ border: 1px solid transparent;
+ border-radius: @panel-border-radius;
+ .box-shadow(0 1px 1px rgba(0, 0, 0, .05));
+}
+
+// Panel contents
+.panel-body {
+ padding: 15px;
+ .clearfix();
+}
+
+// List groups in panels
+//
+// By default, space out list group content from panel headings to account for
+// any kind of custom content between the two.
+
+.panel {
+ > .list-group {
+ margin-bottom: 0;
+
+ .list-group-item {
+ border-width: 1px 0;
+
+ // Remove border radius for top one
+ &:first-child {
+ .border-top-radius(0);
+ }
+ // But keep it for the last one
+ &:last-child {
+ border-bottom: 0;
+ }
+ }
+ }
+}
+
+// Collapse space between when there's no additional content.
+.panel-heading + .list-group {
+ .list-group-item:first-child {
+ border-top-width: 0;
+ }
+}
+
+// Tables in panels
+//
+// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and
+// watch it go full width.
+
+.panel {
+ > .table {
+ margin-bottom: 0;
+ }
+ > .panel-body + .table {
+ border-top: 1px solid @table-border-color;
+ }
+}
+
+// Optional heading
+.panel-heading {
+ padding: 10px 15px;
+ border-bottom: 1px solid transparent;
+ .border-top-radius(@panel-border-radius - 1);
+}
+
+// Within heading, strip any `h*` tag of it's default margins for spacing.
+.panel-title {
+ margin-top: 0;
+ margin-bottom: 0;
+ font-size: ceil((@font-size-base * 1.125));
+ > a {
+ color: inherit;
+ }
+}
+
+// Optional footer (stays gray in every modifier class)
+.panel-footer {
+ padding: 10px 15px;
+ background-color: @panel-footer-bg;
+ border-top: 1px solid @panel-inner-border;
+ .border-bottom-radius(@panel-border-radius - 1);
+}
+
+// Collapsable panels (aka, accordion)
+//
+// Wrap a series of panels in `.panel-group` to turn them into an accordion with
+// the help of our collapse JavaScript plugin.
+
+.panel-group {
+ // Tighten up margin so it's only between panels
+ .panel {
+ margin-bottom: 0;
+ border-radius: @panel-border-radius;
+ overflow: hidden; // crop contents when collapsed
+ + .panel {
+ margin-top: 5px;
+ }
+ }
+
+ .panel-heading {
+ border-bottom: 0;
+ + .panel-collapse .panel-body {
+ border-top: 1px solid @panel-inner-border;
+ }
+ }
+ .panel-footer {
+ border-top: 0;
+ + .panel-collapse .panel-body {
+ border-bottom: 1px solid @panel-inner-border;
+ }
+ }
+
+ // New subcomponent for wrapping collapsable content for proper animations
+ .panel-collapse {
+
+ }
+}
+
+// Contextual variations
+.panel-default {
+ .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border);
+}
+
+.panel-primary {
+ .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border);
+}
+
+.panel-success {
+ .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border);
+}
+
+.panel-warning {
+ .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border);
+}
+
+.panel-danger {
+ .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border);
+}
+
+.panel-info {
+ .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border);
+}
diff --git a/vendor/twitter-bootstrap-3/less/popovers.less b/vendor/twitter-bootstrap-3/less/popovers.less
new file mode 100644
index 000000000..b656d0290
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/popovers.less
@@ -0,0 +1,142 @@
+//
+// Popovers
+// --------------------------------------------------
+
+.popover {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: @zindex-popover;
+ display: none;
+ max-width: @popover-max-width;
+ padding: 1px;
+ text-align: left; // Reset given new insertion method
+ background-color: @popover-bg;
+ background-clip: padding-box;
+ border: 1px solid @popover-fallback-border-color;
+ border: 1px solid @popover-border-color;
+ border-radius: @border-radius-large;
+ .box-shadow(0 5px 10px rgba(0, 0, 0, .2));
+
+ // Overrides for proper insertion
+ white-space: normal;
+
+ // Offset the popover to account for the popover arrow
+ &.top {
+ margin-top: -10px;
+ }
+ &.right {
+ margin-left: 10px;
+ }
+ &.bottom {
+ margin-top: 10px;
+ }
+ &.left {
+ margin-left: -10px;
+ }
+}
+
+.popover-title {
+ margin: 0; // reset heading margin
+ padding: 8px 14px;
+ font-size: @font-size-base;
+ font-weight: normal;
+ line-height: 18px;
+ background-color: @popover-title-bg;
+ border-bottom: 1px solid darken(@popover-title-bg, 5%);
+ border-radius: 5px 5px 0 0;
+}
+
+.popover-content {
+ padding: 9px 14px;
+}
+
+// Arrows
+//
+// .arrow is outer, .arrow:after is inner
+
+.popover .arrow {
+ &,
+ &:after {
+ position: absolute;
+ display: block;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid;
+ }
+}
+
+.popover .arrow {
+ border-width: @popover-arrow-outer-width;
+}
+
+.popover .arrow:after {
+ border-width: @popover-arrow-width;
+ content: "";
+}
+
+.popover {
+ &.top .arrow {
+ left: 50%;
+ margin-left: -@popover-arrow-outer-width;
+ border-bottom-width: 0;
+ border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback
+ border-top-color: @popover-arrow-outer-color;
+ bottom: -@popover-arrow-outer-width;
+ &:after {
+ content: " ";
+ bottom: 1px;
+ margin-left: -@popover-arrow-width;
+ border-bottom-width: 0;
+ border-top-color: @popover-arrow-color;
+ }
+ }
+ &.right .arrow {
+ top: 50%;
+ left: -@popover-arrow-outer-width;
+ margin-top: -@popover-arrow-outer-width;
+ border-left-width: 0;
+ border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback
+ border-right-color: @popover-arrow-outer-color;
+ &:after {
+ content: " ";
+ left: 1px;
+ bottom: -@popover-arrow-width;
+ border-left-width: 0;
+ border-right-color: @popover-arrow-color;
+ }
+ }
+ &.bottom .arrow {
+ left: 50%;
+ margin-left: -@popover-arrow-outer-width;
+ border-top-width: 0;
+ border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback
+ border-bottom-color: @popover-arrow-outer-color;
+ top: -@popover-arrow-outer-width;
+ &:after {
+ content: " ";
+ top: 1px;
+ margin-left: -@popover-arrow-width;
+ border-top-width: 0;
+ border-bottom-color: @popover-arrow-color;
+ }
+ }
+
+ &.left .arrow {
+ top: 50%;
+ right: -@popover-arrow-outer-width;
+ margin-top: -@popover-arrow-outer-width;
+ border-right-width: 0;
+ border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback
+ border-left-color: @popover-arrow-outer-color;
+ &:after {
+ content: " ";
+ right: 1px;
+ border-right-width: 0;
+ border-left-color: @popover-arrow-color;
+ bottom: -@popover-arrow-width;
+ }
+ }
+
+}
diff --git a/vendor/twitter-bootstrap-3/less/print.less b/vendor/twitter-bootstrap-3/less/print.less
new file mode 100644
index 000000000..ed13770c2
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/print.less
@@ -0,0 +1,104 @@
+//
+// Basic print styles
+// --------------------------------------------------
+// Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css
+
+@media print {
+
+ * {
+ text-shadow: none !important;
+ color: #000 !important; // Black prints faster: h5bp.com/s
+ background: transparent !important;
+ box-shadow: none !important;
+ }
+
+ a,
+ a:visited {
+ text-decoration: underline;
+ }
+
+ a[href]:after {
+ content: " (" attr(href) ")";
+ }
+
+ abbr[title]:after {
+ content: " (" attr(title) ")";
+ }
+
+ // Don't show links for images, or javascript/internal links
+ .ir a:after,
+ a[href^="javascript:"]:after,
+ a[href^="#"]:after {
+ content: "";
+ }
+
+ pre,
+ blockquote {
+ border: 1px solid #999;
+ page-break-inside: avoid;
+ }
+
+ thead {
+ display: table-header-group; // h5bp.com/t
+ }
+
+ tr,
+ img {
+ page-break-inside: avoid;
+ }
+
+ img {
+ max-width: 100% !important;
+ }
+
+ @page {
+ margin: 2cm .5cm;
+ }
+
+ p,
+ h2,
+ h3 {
+ orphans: 3;
+ widows: 3;
+ }
+
+ h2,
+ h3 {
+ page-break-after: avoid;
+ }
+
+ // Bootstrap components
+ .navbar {
+ display: none;
+ }
+
+ .table {
+ td,
+ th {
+ background-color: #fff !important;
+ }
+ }
+
+ .btn,
+ .dropup > .btn {
+ > .caret {
+ border-top-color: #000 !important;
+ }
+ }
+
+ .label {
+ border: 1px solid #000;
+ }
+
+ .table {
+ border-collapse: collapse !important;
+ }
+
+ .table-bordered {
+ th,
+ td {
+ border: 1px solid #ddd !important;
+ }
+ }
+
+}
diff --git a/vendor/twitter-bootstrap-3/less/progress-bars.less b/vendor/twitter-bootstrap-3/less/progress-bars.less
new file mode 100644
index 000000000..597b404aa
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/progress-bars.less
@@ -0,0 +1,106 @@
+//
+// Progress bars
+// --------------------------------------------------
+
+// Bar animations
+// -------------------------
+
+// Webkit
+@-webkit-keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
+}
+
+// Firefox
+@-moz-keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
+}
+
+// Opera
+@-o-keyframes progress-bar-stripes {
+ from {
+ background-position: 0 0;
+ }
+ to {
+ background-position: 40px 0;
+ }
+}
+
+// Spec and IE10+
+@keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
+}
+
+// Bar itself
+// -------------------------
+
+// Outer container
+.progress {
+ overflow: hidden;
+ height: @line-height-computed;
+ margin-bottom: @line-height-computed;
+ background-color: @progress-bg;
+ border-radius: @border-radius-base;
+ .box-shadow(inset 0 1px 2px rgba(0, 0, 0, .1));
+}
+
+// Bar of progress
+.progress-bar {
+ float: left;
+ width: 0%;
+ height: 100%;
+ font-size: @font-size-small;
+ color: @progress-bar-color;
+ text-align: center;
+ background-color: @progress-bar-bg;
+ .box-shadow(inset 0 -1px 0 rgba(0, 0, 0, .15));
+ .transition(width .6s ease);
+}
+
+// Striped bars
+.progress-striped .progress-bar {
+ #gradient > .striped(@progress-bar-bg);
+ background-size: 40px 40px;
+}
+
+// Call animation for the active one
+.progress.active .progress-bar {
+ -webkit-animation: progress-bar-stripes 2s linear infinite;
+ -moz-animation: progress-bar-stripes 2s linear infinite;
+ -ms-animation: progress-bar-stripes 2s linear infinite;
+ -o-animation: progress-bar-stripes 2s linear infinite;
+ animation: progress-bar-stripes 2s linear infinite;
+}
+
+// Variations
+// -------------------------
+
+.progress-bar-success {
+ .progress-bar-variant(@progress-bar-success-bg);
+}
+
+.progress-bar-info {
+ .progress-bar-variant(@progress-bar-info-bg);
+}
+
+.progress-bar-warning {
+ .progress-bar-variant(@progress-bar-warning-bg);
+}
+
+.progress-bar-danger {
+ .progress-bar-variant(@progress-bar-danger-bg);
+}
diff --git a/vendor/twitter-bootstrap-3/less/responsive-utilities.less b/vendor/twitter-bootstrap-3/less/responsive-utilities.less
new file mode 100644
index 000000000..0c6c9779f
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/responsive-utilities.less
@@ -0,0 +1,226 @@
+//
+// Responsive: Utility classes
+// --------------------------------------------------
+
+// IE10 Metro responsive
+// Required for Windows 8 Metro split-screen snapping with IE10
+//
+// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/
+@-ms-viewport {
+ width: device-width;
+}
+
+// IE10 on Windows Phone 8
+// IE10 on WP8 doesn't report CSS pixels, but actual device pixels. In
+// other words, say on a Lumia, you'll get 768px as the device width,
+// meaning users will see the tablet styles and not phone styles.
+//
+// Alternatively you can override this with JS (see source below), but
+// we won't be doing that here given our limited scope.
+//
+// Source: http://timkadlec.com/2013/01/windows-phone-8-and-device-width/
+@media screen and (max-width: 400px) {
+ @-ms-viewport {
+ width: 320px;
+ }
+}
+
+// Hide from screenreaders and browsers
+// Credit: HTML5 Boilerplate
+.hidden {
+ display: none !important;
+ visibility: hidden !important;
+}
+
+// Visibility utilities
+
+.visible-xs {
+ .responsive-invisibility();
+ @media (max-width: @screen-xs-max) {
+ .responsive-visibility();
+ }
+ &.visible-sm {
+ @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {
+ .responsive-visibility();
+ }
+ }
+ &.visible-md {
+ @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {
+ .responsive-visibility();
+ }
+ }
+ &.visible-lg {
+ @media (min-width: @screen-lg-min) {
+ .responsive-visibility();
+ }
+ }
+}
+
+.visible-sm {
+ .responsive-invisibility();
+ &.visible-xs {
+ @media (max-width: @screen-xs-max) {
+ .responsive-visibility();
+ }
+ }
+ @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {
+ .responsive-visibility();
+ }
+ &.visible-md {
+ @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {
+ .responsive-visibility();
+ }
+ }
+ &.visible-lg {
+ @media (min-width: @screen-lg-min) {
+ .responsive-visibility();
+ }
+ }
+}
+
+.visible-md {
+ .responsive-invisibility();
+ &.visible-xs {
+ @media (max-width: @screen-xs-max) {
+ .responsive-visibility();
+ }
+ }
+ &.visible-sm {
+ @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {
+ .responsive-visibility();
+ }
+ }
+ @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {
+ .responsive-visibility();
+ }
+ &.visible-lg {
+ @media (min-width: @screen-lg-min) {
+ .responsive-visibility();
+ }
+ }
+}
+
+.visible-lg {
+ .responsive-invisibility();
+ &.visible-xs {
+ @media (max-width: @screen-xs-max) {
+ .responsive-visibility();
+ }
+ }
+ &.visible-sm {
+ @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {
+ .responsive-visibility();
+ }
+ }
+ &.visible-md {
+ @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {
+ .responsive-visibility();
+ }
+ }
+ @media (min-width: @screen-lg-min) {
+ .responsive-visibility();
+ }
+}
+
+.hidden-xs {
+ .responsive-visibility();
+ @media (max-width: @screen-xs-max) {
+ .responsive-invisibility();
+ }
+ &.hidden-sm {
+ @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {
+ .responsive-invisibility();
+ }
+ }
+ &.hidden-md {
+ @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {
+ .responsive-invisibility();
+ }
+ }
+ &.hidden-lg {
+ @media (min-width: @screen-lg-min) {
+ .responsive-invisibility();
+ }
+ }
+}
+
+.hidden-sm {
+ .responsive-visibility();
+ &.hidden-xs {
+ @media (max-width: @screen-xs-max) {
+ .responsive-invisibility();
+ }
+ }
+ @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {
+ .responsive-invisibility();
+ }
+ &.hidden-md {
+ @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {
+ .responsive-invisibility();
+ }
+ }
+ &.hidden-lg {
+ @media (min-width: @screen-lg-min) {
+ .responsive-invisibility();
+ }
+ }
+}
+
+.hidden-md {
+ .responsive-visibility();
+ &.hidden-xs {
+ @media (max-width: @screen-xs-max) {
+ .responsive-invisibility();
+ }
+ }
+ &.hidden-sm {
+ @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {
+ .responsive-invisibility();
+ }
+ }
+ @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {
+ .responsive-invisibility();
+ }
+ &.hidden-lg {
+ @media (min-width: @screen-lg-min) {
+ .responsive-invisibility();
+ }
+ }
+}
+
+.hidden-lg {
+ .responsive-visibility();
+ &.hidden-xs {
+ @media (max-width: @screen-xs-max) {
+ .responsive-invisibility();
+ }
+ }
+ &.hidden-sm {
+ @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {
+ .responsive-invisibility();
+ }
+ }
+ &.hidden-md {
+ @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {
+ .responsive-invisibility();
+ }
+ }
+ @media (min-width: @screen-lg-min) {
+ .responsive-invisibility();
+ }
+}
+
+// Print utilities
+.visible-print {
+ .responsive-invisibility();
+}
+
+@media print {
+ .visible-print {
+ .responsive-visibility();
+ }
+
+ .hidden-print {
+ .responsive-invisibility();
+ }
+}
diff --git a/vendor/twitter-bootstrap-3/less/scaffolding.less b/vendor/twitter-bootstrap-3/less/scaffolding.less
new file mode 100644
index 000000000..7c7075b21
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/scaffolding.less
@@ -0,0 +1,124 @@
+//
+// Scaffolding
+// --------------------------------------------------
+
+// Reset the box-sizing
+
+*,
+*:before,
+*:after {
+ .box-sizing(border-box);
+}
+
+// Body reset
+
+html {
+ font-size: 62.5%;
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+
+body {
+ font-family: @font-family-base;
+ font-size: @font-size-base;
+ line-height: @line-height-base;
+ color: @text-color;
+ background-color: @body-bg;
+}
+
+// Reset fonts for relevant elements
+input,
+button,
+select,
+textarea {
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+}
+
+// Reset unusual Firefox-on-Android default style.
+//
+// See https://github.com/necolas/normalize.css/issues/214
+
+button,
+input,
+select[multiple],
+textarea {
+ background-image: none;
+}
+
+// Links
+
+a {
+ color: @link-color;
+ text-decoration: none;
+
+ &:hover,
+ &:focus {
+ color: @link-hover-color;
+ text-decoration: underline;
+ }
+
+ &:focus {
+ .tab-focus();
+ }
+}
+
+// Images
+
+img {
+ vertical-align: middle;
+}
+
+// Responsive images (ensure images don't scale beyond their parents)
+.img-responsive {
+ .img-responsive();
+}
+
+// Rounded corners
+.img-rounded {
+ border-radius: @border-radius-large;
+}
+
+// Image thumbnails
+//
+// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.
+.img-thumbnail {
+ padding: @thumbnail-padding;
+ line-height: @line-height-base;
+ background-color: @thumbnail-bg;
+ border: 1px solid @thumbnail-border;
+ border-radius: @thumbnail-border-radius;
+ .transition(all .2s ease-in-out);
+
+ // Keep them at most 100% wide
+ .img-responsive(inline-block);
+}
+
+// Perfect circle
+.img-circle {
+ border-radius: 50%; // set radius in percents
+}
+
+// Horizontal rules
+
+hr {
+ margin-top: @line-height-computed;
+ margin-bottom: @line-height-computed;
+ border: 0;
+ border-top: 1px solid @hr-border;
+}
+
+// Only display content to screen readers
+//
+// See: http://a11yproject.com/posts/how-to-hide-content/
+
+.sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ margin: -1px;
+ padding: 0;
+ overflow: hidden;
+ clip: rect(0 0 0 0);
+ border: 0;
+}
diff --git a/vendor/twitter-bootstrap-3/less/tables.less b/vendor/twitter-bootstrap-3/less/tables.less
new file mode 100644
index 000000000..edf605a6f
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/tables.less
@@ -0,0 +1,231 @@
+//
+// Tables
+// --------------------------------------------------
+
+table {
+ max-width: 100%;
+ background-color: @table-bg;
+}
+
+th {
+ text-align: left;
+}
+
+// Baseline styles
+
+.table {
+ width: 100%;
+ margin-bottom: @line-height-computed;
+ // Cells
+ thead,
+ tbody,
+ tfoot {
+ > tr {
+ > th,
+ > td {
+ padding: @table-cell-padding;
+ line-height: @line-height-base;
+ vertical-align: top;
+ border: 1px solid @table-border-color;
+ }
+ }
+ }
+ // Bottom align for column headings
+ thead > tr > th {
+ vertical-align: bottom;
+ border-bottom: 2px solid @table-border-color;
+ }
+ // Remove top border from thead by default
+ //caption + thead,
+ //colgroup + thead,
+ //thead:first-child {
+ // tr:first-child {
+ // th, td {
+ // border-top: 0;
+ // }
+ // }
+ //}
+ // Account for multiple tbody instances
+ tbody + tbody {
+ border-top: 2px solid @table-border-color;
+ }
+
+ // Nesting
+ .table {
+ background-color: @body-bg;
+ }
+}
+
+// Condensed table w/ half padding
+
+.table-condensed {
+ thead,
+ tbody,
+ tfoot {
+ > tr {
+ > th,
+ > td {
+ padding: @table-condensed-cell-padding;
+ }
+ }
+ }
+}
+
+// Bordered version
+//
+// Add borders all around the table and between all the columns.
+
+.table-bordered {
+ border: 1px solid @table-border-color;
+ > thead,
+ > tbody,
+ > tfoot {
+ > tr {
+ > th,
+ > td {
+ border: 1px solid @table-border-color;
+ }
+ }
+ }
+ > thead {
+ > tr {
+ > th,
+ > td {
+ border-bottom-width: 2px;
+ }
+ }
+ }
+}
+
+// Zebra-striping
+//
+// Default zebra-stripe styles (alternating gray and transparent backgrounds)
+
+.table-striped {
+ > tbody {
+ > tr:nth-child(odd) {
+ > td,
+ > th {
+ background-color: @table-bg-accent;
+ }
+ }
+ }
+}
+
+// Hover effect
+//
+// Placed here since it has to come after the potential zebra striping
+
+.table-hover {
+ > tbody {
+ > tr:hover {
+ > td,
+ > th {
+ background-color: @table-bg-hover;
+ }
+ }
+ }
+}
+
+// Table cell sizing
+//
+// Reset default table behavior
+
+table col[class*="col-"] {
+ float: none;
+ display: table-column;
+}
+
+table {
+ td,
+ th {
+ &[class*="col-"] {
+ float: none;
+ display: table-cell;
+ }
+ }
+}
+
+// Table backgrounds
+//
+// Exact selectors below required to override `.table-striped` and prevent
+// inheritance to nested tables.
+
+.table > thead > tr,
+.table > tbody > tr,
+.table > tfoot > tr {
+ > td.active,
+ > th.active,
+ &.active > td,
+ &.active > th {
+ background-color: @table-bg-active;
+ }
+}
+
+// Generate the contextual variants
+.table-row-variant(success; @state-success-bg; @state-success-border);
+.table-row-variant(danger; @state-danger-bg; @state-danger-border);
+.table-row-variant(warning; @state-warning-bg; @state-warning-border);
+
+// Responsive tables
+//
+// Wrap your tables in `.table-responsive` and we'll make them mobile friendly
+// by enabling horizontal scrolling. Only applies <768px. Everything above that
+// will display normally.
+
+@media (max-width: @screen-sm-min) {
+ .table-responsive {
+ width: 100%;
+ margin-bottom: 15px;
+ overflow-y: hidden;
+ overflow-x: scroll;
+ -ms-overflow-style: -ms-autohiding-scrollbar;
+ border: 1px solid @table-border-color;
+ -webkit-overflow-scrolling: touch;
+
+ // Tighten up spacing and give a background color
+ > .table {
+ margin-bottom: 0;
+ background-color: #fff;
+
+ // Ensure the content doesn't wrap
+ > thead,
+ > tbody,
+ > tfoot {
+ > tr {
+ > th,
+ > td {
+ white-space: nowrap;
+ }
+ }
+ }
+ }
+
+ // Special overrides for the bordered tables
+ > .table-bordered {
+ border: 0;
+
+ // Nuke the appropriate borders so that the parent can handle them
+ > thead,
+ > tbody,
+ > tfoot {
+ > tr {
+ > th:first-child,
+ > td:first-child {
+ border-left: 0;
+ }
+ > th:last-child,
+ > td:last-child {
+ border-right: 0;
+ }
+ }
+ > tr:last-child {
+ > th,
+ > td {
+ border-bottom: 0;
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/vendor/twitter-bootstrap-3/less/theme.less b/vendor/twitter-bootstrap-3/less/theme.less
new file mode 100644
index 000000000..5fceefb7e
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/theme.less
@@ -0,0 +1,284 @@
+//
+// Load core variables and mixins
+// --------------------------------------------------
+@import "variables.less";
+@import "mixins.less";
+
+//
+// Buttons
+// --------------------------------------------------
+
+// Common styles
+.btn-default,
+.btn-primary,
+.btn-success,
+.btn-info,
+.btn-warning,
+.btn-danger {
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
+ @shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
+ .box-shadow(@shadow);
+
+ // Reset the shadow
+ &:active,
+ &.active {
+ .box-shadow(inset 0 3px 5px rgba(0, 0, 0, .125));
+ }
+}
+
+// Mixin for generating new styles
+.btn-styles(@btn-color: #555;) {
+ #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));
+ background-repeat: repeat-x;
+ border-color: darken(@btn-color, 14%);
+
+ &:hover,
+ &:focus {
+ background-color: darken(@btn-color, 12%);
+ background-position: 0 -15px;
+ }
+
+ &:active,
+ &.active {
+ background-color: darken(@btn-color, 12%);
+ border-color: darken(@btn-color, 14%);
+ }
+}
+
+// Common styles
+.btn {
+ // Remove the gradient for the pressed/active state
+ &:active,
+ &.active {
+ background-image: none;
+ }
+}
+
+// Apply the mixin to the buttons
+.btn-default {
+ .btn-styles(@btn-default-bg;);
+ text-shadow: 0 1px 0 #fff;
+ border-color: #ccc;
+}
+
+.btn-primary {
+ .btn-styles(@btn-primary-bg);
+}
+
+.btn-success {
+ .btn-styles(@btn-success-bg);
+}
+
+.btn-warning {
+ .btn-styles(@btn-warning-bg);
+}
+
+.btn-danger {
+ .btn-styles(@btn-danger-bg);
+}
+
+.btn-info {
+ .btn-styles(@btn-info-bg);
+}
+
+//
+// Images
+// --------------------------------------------------
+
+.thumbnail,
+.img-thumbnail {
+ .box-shadow(0 1px 2px rgba(0, 0, 0, .075));
+}
+
+//
+// Dropdowns
+// --------------------------------------------------
+
+.dropdown-menu > li > a:hover,
+.dropdown-menu > li > a:focus,
+.dropdown-menu > .active > a,
+.dropdown-menu > .active > a:hover,
+.dropdown-menu > .active > a:focus {
+ #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));
+ background-color: darken(@dropdown-link-hover-bg, 5%);
+}
+
+//
+// Navbar
+// --------------------------------------------------
+
+// Default navbar
+.navbar-default {
+ #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg;);
+ border-radius: @navbar-border-radius;
+ @shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
+ .box-shadow(@shadow);
+
+ .navbar-nav > .active > a {
+ #gradient > .vertical(@start-color: darken(@navbar-default-bg, 5%); @end-color: darken(@navbar-default-bg, 2%););
+ .box-shadow(inset 0 3px 9px rgba(0, 0, 0, .075));
+ }
+}
+
+.navbar-brand,
+.navbar-nav > li > a {
+ text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
+}
+
+// Inverted navbar
+.navbar-inverse {
+ #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg;);
+
+ .navbar-nav > .active > a {
+ #gradient > .vertical(@start-color: @navbar-inverse-bg; @end-color: lighten(@navbar-inverse-bg, 2.5%););
+ .box-shadow(inset 0 3px 9px rgba(0, 0, 0, .25));
+ }
+
+ .navbar-brand,
+ .navbar-nav > li > a {
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
+ }
+}
+
+// Undo rounded corners in static and fixed navbars
+.navbar-static-top,
+.navbar-fixed-top,
+.navbar-fixed-bottom {
+ border-radius: 0;
+}
+
+//
+// Alerts
+// --------------------------------------------------
+
+// Common styles
+.alert {
+ text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
+ @shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
+ .box-shadow(@shadow);
+}
+
+// Mixin for generating new styles
+.alert-styles(@color) {
+ #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));
+ border-color: darken(@color, 15%);
+}
+
+// Apply the mixin to the alerts
+.alert-success {
+ .alert-styles(@alert-success-bg);
+}
+
+.alert-info {
+ .alert-styles(@alert-info-bg);
+}
+
+.alert-warning {
+ .alert-styles(@alert-warning-bg);
+}
+
+.alert-danger {
+ .alert-styles(@alert-danger-bg);
+}
+
+//
+// Progress bars
+// --------------------------------------------------
+
+// Give the progress background some depth
+.progress {
+ #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg;)
+}
+
+// Mixin for generating new styles
+.progress-bar-styles(@color) {
+ #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));
+}
+
+// Apply the mixin to the progress bars
+.progress-bar {
+ .progress-bar-styles(@progress-bar-bg);
+}
+
+.progress-bar-success {
+ .progress-bar-styles(@progress-bar-success-bg);
+}
+
+.progress-bar-info {
+ .progress-bar-styles(@progress-bar-info-bg);
+}
+
+.progress-bar-warning {
+ .progress-bar-styles(@progress-bar-warning-bg);
+}
+
+.progress-bar-danger {
+ .progress-bar-styles(@progress-bar-danger-bg);
+}
+
+//
+// List groups
+// --------------------------------------------------
+
+.list-group {
+ border-radius: @border-radius-base;
+ .box-shadow(0 1px 2px rgba(0, 0, 0, .075));
+}
+
+.list-group-item.active,
+.list-group-item.active:hover,
+.list-group-item.active:focus {
+ text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);
+ #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));
+ border-color: darken(@list-group-active-border, 7.5%);
+}
+
+//
+// Panels
+// --------------------------------------------------
+
+// Common styles
+.panel {
+ .box-shadow(0 1px 2px rgba(0, 0, 0, .05));
+}
+
+// Mixin for generating new styles
+.panel-heading-styles(@color) {
+ #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));
+}
+
+// Apply the mixin to the panel headings only
+.panel-default > .panel-heading {
+ .panel-heading-styles(@panel-default-heading-bg);
+}
+
+.panel-primary > .panel-heading {
+ .panel-heading-styles(@panel-primary-heading-bg);
+}
+
+.panel-success > .panel-heading {
+ .panel-heading-styles(@panel-success-heading-bg);
+}
+
+.panel-info > .panel-heading {
+ .panel-heading-styles(@panel-info-heading-bg);
+}
+
+.panel-warning > .panel-heading {
+ .panel-heading-styles(@panel-warning-heading-bg);
+}
+
+.panel-danger > .panel-heading {
+ .panel-heading-styles(@panel-danger-heading-bg);
+}
+
+//
+// Wells
+// --------------------------------------------------
+
+.well {
+ #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg;);
+ border-color: darken(@well-bg, 10%);
+ @shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
+ .box-shadow(@shadow);
+}
diff --git a/vendor/twitter-bootstrap-3/less/thumbnails.less b/vendor/twitter-bootstrap-3/less/thumbnails.less
new file mode 100644
index 000000000..5e0e3dfcd
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/thumbnails.less
@@ -0,0 +1,30 @@
+//
+// Thumbnails
+// --------------------------------------------------
+
+// Mixin and adjust the regular image class
+.thumbnail {
+ .img-thumbnail();
+ display: block; // Override the inline-block from `.img-thumbnail`
+
+ > img {
+ .img-responsive();
+ }
+}
+
+// Add a hover state for linked versions only
+a.thumbnail:hover,
+a.thumbnail:focus {
+ border-color: @link-color;
+}
+
+// Images and captions
+.thumbnail > img {
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.thumbnail .caption {
+ padding: @thumbnail-caption-padding;
+ color: @thumbnail-caption-color;
+}
diff --git a/vendor/twitter-bootstrap-3/less/tooltip.less b/vendor/twitter-bootstrap-3/less/tooltip.less
new file mode 100644
index 000000000..1685eacbe
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/tooltip.less
@@ -0,0 +1,109 @@
+//
+// Tooltips
+// --------------------------------------------------
+
+// Base class
+.tooltip {
+ position: absolute;
+ z-index: @zindex-tooltip;
+ display: block;
+ visibility: visible;
+ font-size: @font-size-small;
+ line-height: 1.4;
+ .opacity(0);
+
+ &.in {
+ .opacity(.9);
+ }
+ &.top {
+ margin-top: -3px;
+ padding: 5px 0;
+ }
+ &.right {
+ margin-left: 3px;
+ padding: 0 5px;
+ }
+ &.bottom {
+ margin-top: 3px;
+ padding: 5px 0;
+ }
+ &.left {
+ margin-left: -3px;
+ padding: 0 5px;
+ }
+}
+
+// Wrapper for the tooltip content
+.tooltip-inner {
+ max-width: @tooltip-max-width;
+ padding: 3px 8px;
+ color: @tooltip-color;
+ text-align: center;
+ text-decoration: none;
+ background-color: @tooltip-bg;
+ border-radius: @border-radius-base;
+}
+
+// Arrows
+.tooltip-arrow {
+ position: absolute;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid;
+}
+
+.tooltip {
+ &.top .tooltip-arrow {
+ bottom: 0;
+ left: 50%;
+ margin-left: -@tooltip-arrow-width;
+ border-width: @tooltip-arrow-width @tooltip-arrow-width 0;
+ border-top-color: @tooltip-arrow-color;
+ }
+ &.top-left .tooltip-arrow {
+ bottom: 0;
+ left: 5px;
+ border-width: @tooltip-arrow-width @tooltip-arrow-width 0;
+ border-top-color: @tooltip-arrow-color;
+ }
+ &.top-right .tooltip-arrow {
+ bottom: 0;
+ right: 5px;
+ border-width: @tooltip-arrow-width @tooltip-arrow-width 0;
+ border-top-color: @tooltip-arrow-color;
+ }
+ &.right .tooltip-arrow {
+ top: 50%;
+ left: 0;
+ margin-top: -@tooltip-arrow-width;
+ border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0;
+ border-right-color: @tooltip-arrow-color;
+ }
+ &.left .tooltip-arrow {
+ top: 50%;
+ right: 0;
+ margin-top: -@tooltip-arrow-width;
+ border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width;
+ border-left-color: @tooltip-arrow-color;
+ }
+ &.bottom .tooltip-arrow {
+ top: 0;
+ left: 50%;
+ margin-left: -@tooltip-arrow-width;
+ border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;
+ border-bottom-color: @tooltip-arrow-color;
+ }
+ &.bottom-left .tooltip-arrow {
+ top: 0;
+ left: 5px;
+ border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;
+ border-bottom-color: @tooltip-arrow-color;
+ }
+ &.bottom-right .tooltip-arrow {
+ top: 0;
+ right: 5px;
+ border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;
+ border-bottom-color: @tooltip-arrow-color;
+ }
+}
diff --git a/vendor/twitter-bootstrap-3/less/type.less b/vendor/twitter-bootstrap-3/less/type.less
new file mode 100644
index 000000000..36bf1464f
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/type.less
@@ -0,0 +1,289 @@
+//
+// Typography
+// --------------------------------------------------
+
+// Body text
+// -------------------------
+
+p {
+ margin: 0 0 (@line-height-computed / 2);
+}
+
+.lead {
+ margin-bottom: @line-height-computed;
+ font-size: (@font-size-base * 1.15);
+ font-weight: 200;
+ line-height: 1.4;
+
+ @media (min-width: 768px) {
+ font-size: (@font-size-base * 1.5);
+ }
+}
+
+// Emphasis & misc
+// -------------------------
+
+// Ex: 14px base font * 85% = about 12px
+small {
+ font-size: 85%;
+}
+
+// Undo browser default styling
+cite {
+ font-style: normal;
+}
+
+// Contextual emphasis
+.text-muted {
+ color: @text-muted;
+}
+
+.text-primary {
+ color: @brand-primary;
+}
+
+.text-warning {
+ color: @state-warning-text;
+}
+
+.text-danger {
+ color: @state-danger-text;
+}
+
+.text-success {
+ color: @state-success-text;
+}
+
+.text-info {
+ color: @state-info-text;
+}
+
+// Alignment
+.text-left {
+ text-align: left;
+}
+
+.text-right {
+ text-align: right;
+}
+
+.text-center {
+ text-align: center;
+}
+
+// Headings
+// -------------------------
+
+h1, h2, h3, h4, h5, h6,
+.h1, .h2, .h3, .h4, .h5, .h6 {
+ font-family: @headings-font-family;
+ font-weight: @headings-font-weight;
+ line-height: @headings-line-height;
+
+ small {
+ font-weight: normal;
+ line-height: 1;
+ color: @headings-small-color;
+ }
+}
+
+h1,
+h2,
+h3 {
+ margin-top: @line-height-computed;
+ margin-bottom: (@line-height-computed / 2);
+
+ small {
+ font-size: 65%;
+ }
+}
+
+h4,
+h5,
+h6 {
+ margin-top: (@line-height-computed / 2);
+ margin-bottom: (@line-height-computed / 2);
+
+ small {
+ font-size: 75%;
+ }
+}
+
+h1, .h1 {
+ font-size: @font-size-h1;
+}
+
+h2, .h2 {
+ font-size: @font-size-h2;
+}
+
+h3, .h3 {
+ font-size: @font-size-h3;
+}
+
+h4, .h4 {
+ font-size: @font-size-h4;
+}
+
+h5, .h5 {
+ font-size: @font-size-h5;
+}
+
+h6, .h6 {
+ font-size: @font-size-h6;
+}
+
+// Page header
+// -------------------------
+
+.page-header {
+ padding-bottom: ((@line-height-computed / 2) - 1);
+ margin: (@line-height-computed * 2) 0 @line-height-computed;
+ border-bottom: 1px solid @page-header-border-color;
+}
+
+// Lists
+// --------------------------------------------------
+
+// Unordered and Ordered lists
+ul,
+ol {
+ margin-top: 0;
+ margin-bottom: (@line-height-computed / 2);
+ ul,
+ ol {
+ margin-bottom: 0;
+ }
+}
+
+// List options
+
+// Unstyled keeps list items block level, just removes default browser padding and list-style
+.list-unstyled {
+ padding-left: 0;
+ list-style: none;
+}
+
+// Inline turns list items into inline-block
+.list-inline {
+ .list-unstyled();
+ > li {
+ display: inline-block;
+ padding-left: 5px;
+ padding-right: 5px;
+ }
+}
+
+// Description Lists
+dl {
+ margin-bottom: @line-height-computed;
+}
+
+dt,
+dd {
+ line-height: @line-height-base;
+}
+
+dt {
+ font-weight: bold;
+}
+
+dd {
+ margin-left: 0; // Undo browser default
+}
+
+// Horizontal description lists
+//
+// Defaults to being stacked without any of the below styles applied, until the
+// grid breakpoint is reached (default of ~768px).
+
+@media (min-width: @grid-float-breakpoint) {
+ .dl-horizontal {
+ dt {
+ float: left;
+ width: (@component-offset-horizontal - 20);
+ clear: left;
+ text-align: right;
+ .text-overflow();
+ }
+ dd {
+ margin-left: @component-offset-horizontal;
+ .clearfix(); // Clear the floated `dt` if an empty `dd` is present
+ }
+ }
+}
+
+// MISC
+// ----
+
+// Abbreviations and acronyms
+abbr[title],
+ // Added data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257
+abbr[data-original-title] {
+ cursor: help;
+ border-bottom: 1px dotted @abbr-border-color;
+}
+
+abbr.initialism {
+ font-size: 90%;
+ text-transform: uppercase;
+}
+
+// Blockquotes
+blockquote {
+ padding: (@line-height-computed / 2) @line-height-computed;
+ margin: 0 0 @line-height-computed;
+ border-left: 5px solid @blockquote-border-color;
+ p {
+ font-size: (@font-size-base * 1.25);
+ font-weight: 300;
+ line-height: 1.25;
+ }
+ p:last-child {
+ margin-bottom: 0;
+ }
+ small {
+ display: block;
+ line-height: @line-height-base;
+ color: @blockquote-small-color;
+ &:before {
+ content: '\2014 \00A0'; // EM DASH, NBSP
+ }
+ }
+
+ // Float right with text-align: right
+ &.pull-right {
+ padding-right: 15px;
+ padding-left: 0;
+ border-right: 5px solid @blockquote-border-color;
+ border-left: 0;
+ p,
+ small {
+ text-align: right;
+ }
+ small {
+ &:before {
+ content: '';
+ }
+ &:after {
+ content: '\00A0 \2014'; // NBSP, EM DASH
+ }
+ }
+ }
+}
+
+// Quotes
+q:before,
+q:after,
+blockquote:before,
+blockquote:after {
+ content: "";
+}
+
+// Addresses
+address {
+ display: block;
+ margin-bottom: @line-height-computed;
+ font-style: normal;
+ line-height: @line-height-base;
+}
diff --git a/vendor/twitter-bootstrap-3/less/utilities.less b/vendor/twitter-bootstrap-3/less/utilities.less
new file mode 100644
index 000000000..4cd65a541
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/utilities.less
@@ -0,0 +1,44 @@
+//
+// Utility classes
+// --------------------------------------------------
+
+// Floats
+// -------------------------
+
+.clearfix {
+ .clearfix();
+}
+
+.pull-right {
+ float: right !important;
+}
+
+.pull-left {
+ float: left !important;
+}
+
+// Toggling content
+// -------------------------
+
+.hide {
+ display: none !important;
+}
+
+.show {
+ display: block !important;
+}
+
+.invisible {
+ visibility: hidden;
+}
+
+.text-hide {
+ .text-hide();
+}
+
+// For Affix plugin
+// -------------------------
+
+.affix {
+ position: fixed;
+}
diff --git a/vendor/twitter-bootstrap-3/less/variables.less b/vendor/twitter-bootstrap-3/less/variables.less
new file mode 100644
index 000000000..45ad29739
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/variables.less
@@ -0,0 +1,622 @@
+//
+// Variables
+// --------------------------------------------------
+
+// Global values
+// --------------------------------------------------
+
+// Grays
+// -------------------------
+
+@gray-darker: lighten(#000, 13.5%);
+// #222
+@gray-dark: lighten(#000, 20%);
+// #333
+@gray: lighten(#000, 33.5%);
+// #555
+@gray-light: lighten(#000, 60%);
+// #999
+@gray-lighter: lighten(#000, 93.5%);
+// #eee
+
+// Brand colors
+// -------------------------
+
+@brand-primary: #428bca;
+@brand-success: #5cb85c;
+@brand-warning: #f0ad4e;
+@brand-danger: #d9534f;
+@brand-info: #5bc0de;
+
+// Scaffolding
+// -------------------------
+
+@body-bg: #fff;
+@text-color: @gray-dark;
+
+// Links
+// -------------------------
+
+@link-color: @brand-primary;
+@link-hover-color: darken(@link-color, 15%);
+
+// Typography
+// -------------------------
+
+@font-family-sans-serif: 'Ubuntu', sans-serif;
+@import url(https://fonts.googleapis.com/css?family=Ubuntu:400,700,400italic,700italic);
+@font-family-serif: Georgia, "Times New Roman", Times, serif;
+@font-family-monospace: Monaco, Menlo, Consolas, "Courier New", monospace;
+@font-family-base: @font-family-sans-serif;
+
+@font-size-base: 16px;
+@font-size-large: ceil(@font-size-base * 1.25);
+// ~18px
+@font-size-small: ceil(@font-size-base * 0.85);
+// ~12px
+
+@font-size-h1: floor(@font-size-base * 2.60);
+// ~36px
+@font-size-h2: floor(@font-size-base * 2.15);
+// ~30px
+@font-size-h3: ceil(@font-size-base * 1.70);
+// ~24px
+@font-size-h4: ceil(@font-size-base * 1.25);
+// ~18px
+@font-size-h5: @font-size-base;
+@font-size-h6: ceil(@font-size-base * 0.85);
+// ~12px
+
+@line-height-base: 1.428571429;
+// 20/14
+@line-height-computed: floor(@font-size-base * @line-height-base);
+// ~20px
+
+@headings-font-family: @font-family-base;
+@headings-font-weight: 500;
+@headings-line-height: 1.1;
+
+// Iconography
+// -------------------------
+
+@icon-font-path: "/vendor/twitter-bootstrap-3/fonts/";
+@icon-font-name: "glyphicons-halflings-regular";
+
+// Components
+// -------------------------
+// Based on 14px font-size and 1.428 line-height (~20px to start)
+
+@padding-base-vertical: 6px;
+@padding-base-horizontal: 12px;
+
+@padding-large-vertical: 10px;
+@padding-large-horizontal: 16px;
+
+@padding-small-vertical: 5px;
+@padding-small-horizontal: 10px;
+
+@line-height-large: 1.33;
+@line-height-small: 1.5;
+
+@border-radius-base: 4px;
+@border-radius-large: 6px;
+@border-radius-small: 3px;
+
+@component-active-bg: @brand-primary;
+
+@caret-width-base: 4px;
+@caret-width-large: 5px;
+
+// Tables
+// -------------------------
+
+@table-cell-padding: 8px;
+@table-condensed-cell-padding: 5px;
+
+@table-bg: transparent;
+// overall background-color
+@table-bg-accent: #f9f9f9;
+// for striping
+@table-bg-hover: #f5f5f5;
+@table-bg-active: @table-bg-hover;
+
+@table-border-color: #ddd;
+// table and cell border
+
+// Buttons
+// -------------------------
+
+@btn-font-weight: normal;
+
+@btn-default-color: #333;
+@btn-default-bg: #fff;
+@btn-default-border: #ccc;
+
+@btn-primary-color: #fff;
+@btn-primary-bg: @brand-primary;
+@btn-primary-border: darken(@btn-primary-bg, 5%);
+
+@btn-success-color: #fff;
+@btn-success-bg: @brand-success;
+@btn-success-border: darken(@btn-success-bg, 5%);
+
+@btn-warning-color: #fff;
+@btn-warning-bg: @brand-warning;
+@btn-warning-border: darken(@btn-warning-bg, 5%);
+
+@btn-danger-color: #fff;
+@btn-danger-bg: @brand-danger;
+@btn-danger-border: darken(@btn-danger-bg, 5%);
+
+@btn-info-color: #fff;
+@btn-info-bg: @brand-info;
+@btn-info-border: darken(@btn-info-bg, 5%);
+
+@btn-link-disabled-color: @gray-light;
+
+// Forms
+// -------------------------
+
+@input-bg: #fff;
+@input-bg-disabled: @gray-lighter;
+
+@input-color: @gray;
+@input-border: #ccc;
+@input-border-radius: @border-radius-base;
+@input-border-focus: #66afe9;
+
+@input-color-placeholder: @gray-light;
+
+@input-height-base: (@line-height-computed + (@padding-base-vertical * 2) + 2);
+@input-height-large: (floor(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);
+@input-height-small: (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);
+
+@legend-color: @gray-dark;
+@legend-border-color: #e5e5e5;
+
+@input-group-addon-bg: @gray-lighter;
+@input-group-addon-border-color: @input-border;
+
+// Dropdowns
+// -------------------------
+
+@dropdown-bg: #fff;
+@dropdown-border: rgba(0, 0, 0, .15);
+@dropdown-fallback-border: #ccc;
+@dropdown-divider-bg: #e5e5e5;
+
+@dropdown-link-active-color: #fff;
+@dropdown-link-active-bg: @component-active-bg;
+
+@dropdown-link-color: @gray-dark;
+@dropdown-link-hover-color: #fff;
+@dropdown-link-hover-bg: @dropdown-link-active-bg;
+
+@dropdown-link-disabled-color: @gray-light;
+
+@dropdown-header-color: @gray-light;
+
+@dropdown-caret-color: #000;
+
+// COMPONENT VARIABLES
+// --------------------------------------------------
+
+// Z-index master list
+// -------------------------
+// Used for a bird's eye view of components dependent on the z-axis
+// Try to avoid customizing these :)
+
+@zindex-navbar: 1000;
+@zindex-dropdown: 1000;
+@zindex-popover: 1010;
+@zindex-tooltip: 1030;
+@zindex-navbar-fixed: 1030;
+@zindex-modal-background: 1040;
+@zindex-modal: 1050;
+
+// Media queries breakpoints
+// --------------------------------------------------
+
+// Extra small screen / phone
+// Note: Deprecated @screen-xs and @screen-phone as of v3.0.1
+@screen-xs: 480px;
+@screen-xs-min: @screen-xs;
+@screen-phone: @screen-xs-min;
+
+// Small screen / tablet
+// Note: Deprecated @screen-sm and @screen-tablet as of v3.0.1
+@screen-sm: 768px;
+@screen-sm-min: @screen-sm;
+@screen-tablet: @screen-sm-min;
+
+// Medium screen / desktop
+// Note: Deprecated @screen-md and @screen-desktop as of v3.0.1
+@screen-md: 992px;
+@screen-md-min: @screen-md;
+@screen-desktop: @screen-md-min;
+
+// Large screen / wide desktop
+// Note: Deprecated @screen-lg and @screen-lg-desktop as of v3.0.1
+@screen-lg: 1200px;
+@screen-lg-min: @screen-lg;
+@screen-lg-desktop: @screen-lg-min;
+
+// So media queries don't overlap when required, provide a maximum
+@screen-xs-max: (@screen-sm-min - 1);
+@screen-sm-max: (@screen-md-min - 1);
+@screen-md-max: (@screen-lg-min - 1);
+
+// Grid system
+// --------------------------------------------------
+
+// Number of columns in the grid system
+@grid-columns: 12;
+// Padding, to be divided by two and applied to the left and right of all columns
+@grid-gutter-width: 30px;
+// Point at which the navbar stops collapsing
+@grid-float-breakpoint: @screen-sm;
+
+// Navbar
+// -------------------------
+
+// Basics of a navbar
+@navbar-height: 50px;
+@navbar-margin-bottom: @line-height-computed;
+@navbar-default-color: #777;
+@navbar-default-bg: #f8f8f8;
+@navbar-default-border: darken(@navbar-default-bg, 6.5%);
+@navbar-border-radius: @border-radius-base;
+@navbar-padding-horizontal: floor(@grid-gutter-width / 2);
+@navbar-padding-vertical: ((@navbar-height - @line-height-computed) / 2);
+
+// Navbar links
+@navbar-default-link-color: #777;
+@navbar-default-link-hover-color: #333;
+@navbar-default-link-hover-bg: transparent;
+@navbar-default-link-active-color: #555;
+@navbar-default-link-active-bg: darken(@navbar-default-bg, 6.5%);
+@navbar-default-link-disabled-color: #ccc;
+@navbar-default-link-disabled-bg: transparent;
+
+// Navbar brand label
+@navbar-default-brand-color: @navbar-default-link-color;
+@navbar-default-brand-hover-color: darken(@navbar-default-link-color, 10%);
+@navbar-default-brand-hover-bg: transparent;
+
+// Navbar toggle
+@navbar-default-toggle-hover-bg: #ddd;
+@navbar-default-toggle-icon-bar-bg: #ccc;
+@navbar-default-toggle-border-color: #ddd;
+
+// Inverted navbar
+//
+// Reset inverted navbar basics
+@navbar-inverse-color: @gray-light;
+@navbar-inverse-bg: #222;
+@navbar-inverse-border: darken(@navbar-inverse-bg, 10%);
+
+// Inverted navbar links
+@navbar-inverse-link-color: @gray-light;
+@navbar-inverse-link-hover-color: #fff;
+@navbar-inverse-link-hover-bg: transparent;
+@navbar-inverse-link-active-color: @navbar-inverse-link-hover-color;
+@navbar-inverse-link-active-bg: darken(@navbar-inverse-bg, 10%);
+@navbar-inverse-link-disabled-color: #444;
+@navbar-inverse-link-disabled-bg: transparent;
+
+// Inverted navbar brand label
+@navbar-inverse-brand-color: @navbar-inverse-link-color;
+@navbar-inverse-brand-hover-color: #fff;
+@navbar-inverse-brand-hover-bg: transparent;
+
+// Inverted navbar search
+// Normal navbar needs no special styles or vars
+@navbar-inverse-search-bg: lighten(@navbar-inverse-bg, 25%);
+@navbar-inverse-search-bg-focus: #fff;
+@navbar-inverse-search-border: @navbar-inverse-bg;
+@navbar-inverse-search-placeholder-color: #ccc;
+
+// Inverted navbar toggle
+@navbar-inverse-toggle-hover-bg: #333;
+@navbar-inverse-toggle-icon-bar-bg: #fff;
+@navbar-inverse-toggle-border-color: #333;
+
+// Navs
+// -------------------------
+
+@nav-link-padding: 10px 15px;
+@nav-link-hover-bg: @gray-lighter;
+
+@nav-disabled-link-color: @gray-light;
+@nav-disabled-link-hover-color: @gray-light;
+
+@nav-open-link-hover-color: #fff;
+@nav-open-caret-border-color: #fff;
+
+// Tabs
+@nav-tabs-border-color: #ddd;
+
+@nav-tabs-link-hover-border-color: @gray-lighter;
+
+@nav-tabs-active-link-hover-bg: @body-bg;
+@nav-tabs-active-link-hover-color: @gray;
+@nav-tabs-active-link-hover-border-color: #ddd;
+
+@nav-tabs-justified-link-border-color: #ddd;
+@nav-tabs-justified-active-link-border-color: @body-bg;
+
+// Pills
+@nav-pills-active-link-hover-bg: @component-active-bg;
+@nav-pills-active-link-hover-color: #fff;
+
+// Pagination
+// -------------------------
+
+@pagination-bg: #fff;
+@pagination-border: #ddd;
+
+@pagination-hover-bg: #F4F8FF;
+
+@pagination-active-bg: @brand-primary;
+@pagination-active-color: #fff;
+
+@pagination-disabled-color: @gray-light;
+
+// Pager
+// -------------------------
+
+@pager-border-radius: 15px;
+@pager-disabled-color: @gray-light;
+
+// Jumbotron
+// -------------------------
+
+@jumbotron-padding: 30px;
+@jumbotron-color: inherit;
+@jumbotron-bg: @gray-lighter;
+
+@jumbotron-heading-color: inherit;
+
+// Form states and alerts
+// -------------------------
+
+@state-warning-text: #c09853;
+@state-warning-bg: #fcf8e3;
+@state-warning-border: darken(spin(@state-warning-bg, -10), 3%);
+
+@state-danger-text: #b94a48;
+@state-danger-bg: #f2dede;
+@state-danger-border: darken(spin(@state-danger-bg, -10), 3%);
+
+@state-success-text: #468847;
+@state-success-bg: #dff0d8;
+@state-success-border: darken(spin(@state-success-bg, -10), 5%);
+
+@state-info-text: #3a87ad;
+@state-info-bg: #d9edf7;
+@state-info-border: darken(spin(@state-info-bg, -10), 7%);
+
+// Tooltips
+// -------------------------
+@tooltip-max-width: 200px;
+@tooltip-color: #fff;
+@tooltip-bg: #000;
+
+@tooltip-arrow-width: 5px;
+@tooltip-arrow-color: @tooltip-bg;
+
+// Popovers
+// -------------------------
+@popover-bg: #fff;
+@popover-max-width: 276px;
+@popover-border-color: rgba(0, 0, 0, .2);
+@popover-fallback-border-color: #ccc;
+
+@popover-title-bg: darken(@popover-bg, 3%);
+
+@popover-arrow-width: 10px;
+@popover-arrow-color: #fff;
+
+@popover-arrow-outer-width: (@popover-arrow-width + 1);
+@popover-arrow-outer-color: rgba(0, 0, 0, .25);
+@popover-arrow-outer-fallback-color: #999;
+
+// Labels
+// -------------------------
+
+@label-default-bg: @gray-light;
+@label-primary-bg: @brand-primary;
+@label-success-bg: @brand-success;
+@label-info-bg: @brand-info;
+@label-warning-bg: @brand-warning;
+@label-danger-bg: @brand-danger;
+
+@label-color: #fff;
+@label-link-hover-color: #fff;
+
+// Modals
+// -------------------------
+@modal-inner-padding: 20px;
+
+@modal-title-padding: 15px;
+@modal-title-line-height: @line-height-base;
+
+@modal-content-bg: #fff;
+@modal-content-border-color: rgba(0, 0, 0, .2);
+@modal-content-fallback-border-color: #999;
+
+@modal-backdrop-bg: #000;
+@modal-header-border-color: #e5e5e5;
+@modal-footer-border-color: @modal-header-border-color;
+
+// Alerts
+// -------------------------
+@alert-padding: 15px;
+@alert-border-radius: @border-radius-base;
+@alert-link-font-weight: bold;
+
+@alert-success-bg: @state-success-bg;
+@alert-success-text: @state-success-text;
+@alert-success-border: @state-success-border;
+
+@alert-info-bg: @state-info-bg;
+@alert-info-text: @state-info-text;
+@alert-info-border: @state-info-border;
+
+@alert-warning-bg: @state-warning-bg;
+@alert-warning-text: @state-warning-text;
+@alert-warning-border: @state-warning-border;
+
+@alert-danger-bg: @state-danger-bg;
+@alert-danger-text: @state-danger-text;
+@alert-danger-border: @state-danger-border;
+
+// Progress bars
+// -------------------------
+@progress-bg: #f5f5f5;
+@progress-bar-color: #fff;
+
+@progress-bar-bg: @brand-primary;
+@progress-bar-success-bg: @brand-success;
+@progress-bar-warning-bg: @brand-warning;
+@progress-bar-danger-bg: @brand-danger;
+@progress-bar-info-bg: @brand-info;
+
+// List group
+// -------------------------
+@list-group-bg: #fff;
+@list-group-border: #ddd;
+@list-group-border-radius: @border-radius-base;
+
+@list-group-hover-bg: #F4F8FF;
+@list-group-active-color: #fff;
+@list-group-active-bg: @component-active-bg;
+@list-group-active-border: @list-group-active-bg;
+
+@list-group-link-color: #555;
+@list-group-link-heading-color: #333;
+
+// Panels
+// -------------------------
+@panel-bg: #fff;
+@panel-inner-border: #ddd;
+@panel-border-radius: @border-radius-base;
+@panel-footer-bg: #F4F8FF;
+
+@panel-default-text: @gray-dark;
+@panel-default-border: #ddd;
+@panel-default-heading-bg: #F4F8FF;
+
+@panel-primary-text: #fff;
+@panel-primary-border: @brand-primary;
+@panel-primary-heading-bg: @brand-primary;
+
+@panel-success-text: @state-success-text;
+@panel-success-border: @state-success-border;
+@panel-success-heading-bg: @state-success-bg;
+
+@panel-warning-text: @state-warning-text;
+@panel-warning-border: @state-warning-border;
+@panel-warning-heading-bg: @state-warning-bg;
+
+@panel-danger-text: @state-danger-text;
+@panel-danger-border: @state-danger-border;
+@panel-danger-heading-bg: @state-danger-bg;
+
+@panel-info-text: @state-info-text;
+@panel-info-border: @state-info-border;
+@panel-info-heading-bg: @state-info-bg;
+
+// Thumbnails
+// -------------------------
+@thumbnail-padding: 4px;
+@thumbnail-bg: @body-bg;
+@thumbnail-border: #ddd;
+@thumbnail-border-radius: @border-radius-base;
+
+@thumbnail-caption-color: @text-color;
+@thumbnail-caption-padding: 9px;
+
+// Wells
+// -------------------------
+@well-bg: #f5f5f5;
+
+// Badges
+// -------------------------
+@badge-color: #fff;
+@badge-link-hover-color: #fff;
+@badge-bg: @gray-light;
+
+@badge-active-color: @link-color;
+@badge-active-bg: #fff;
+
+@badge-font-weight: bold;
+@badge-line-height: 1;
+@badge-border-radius: 10px;
+
+// Breadcrumbs
+// -------------------------
+@breadcrumb-bg: #f5f5f5;
+@breadcrumb-color: #ccc;
+@breadcrumb-active-color: @gray-light;
+
+// Carousel
+// ------------------------
+
+@carousel-text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
+
+@carousel-control-color: #fff;
+@carousel-control-width: 15%;
+@carousel-control-opacity: .5;
+@carousel-control-font-size: 20px;
+
+@carousel-indicator-active-bg: #fff;
+@carousel-indicator-border-color: #fff;
+
+@carousel-caption-color: #fff;
+
+// Close
+// ------------------------
+@close-color: #000;
+@close-font-weight: bold;
+@close-text-shadow: 0 1px 0 #fff;
+
+// Code
+// ------------------------
+@code-color: #000;
+@code-bg: #f3f3f3;
+
+@pre-bg: #f5f5f5;
+@pre-color: @gray-dark;
+@pre-border-color: #ccc;
+@pre-scrollable-max-height: 340px;
+
+// Type
+// ------------------------
+@text-muted: @gray-light;
+@abbr-border-color: @gray-light;
+@headings-small-color: @gray-light;
+@blockquote-small-color: @gray-light;
+@blockquote-border-color: @gray-lighter;
+@page-header-border-color: @gray-lighter;
+
+// Miscellaneous
+// -------------------------
+
+// Hr border color
+@hr-border: @gray-lighter;
+
+// Horizontal forms & lists
+@component-offset-horizontal: 180px;
+
+// Container sizes
+// --------------------------------------------------
+
+// Small screen / tablet
+@container-tablet: ((720px + @grid-gutter-width));
+
+// Medium screen / desktop
+@container-desktop: ((940px + @grid-gutter-width));
+
+// Large screen / wide desktop
+@container-lg-desktop: ((1140px + @grid-gutter-width));
diff --git a/vendor/twitter-bootstrap-3/less/wells.less b/vendor/twitter-bootstrap-3/less/wells.less
new file mode 100644
index 000000000..3f2585190
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/less/wells.less
@@ -0,0 +1,29 @@
+//
+// Wells
+// --------------------------------------------------
+
+// Base class
+.well {
+ min-height: 20px;
+ padding: 19px;
+ margin-bottom: 20px;
+ background-color: @well-bg;
+ border: 1px solid darken(@well-bg, 7%);
+ border-radius: @border-radius-base;
+ .box-shadow(inset 0 1px 1px rgba(0, 0, 0, .05));
+ blockquote {
+ border-color: #ddd;
+ border-color: rgba(0, 0, 0, .15);
+ }
+}
+
+// Sizes
+.well-lg {
+ padding: 24px;
+ border-radius: @border-radius-large;
+}
+
+.well-sm {
+ padding: 9px;
+ border-radius: @border-radius-small;
+}
diff --git a/vendor/twitter-bootstrap-3/package.json b/vendor/twitter-bootstrap-3/package.json
new file mode 100644
index 000000000..bf0a4b9bc
--- /dev/null
+++ b/vendor/twitter-bootstrap-3/package.json
@@ -0,0 +1,27 @@
+{
+ "name": "bootstrap", "description": "Sleek, intuitive, and powerful front-end framework for faster and easier web development.", "version": "3.0.0", "keywords": ["bootstrap", "css"], "homepage": "http://twbs.github.com/bootstrap/", "author": "Twitter Inc.", "scripts": {
+ "test": "grunt test"
+}, "repository": {
+ "type": "git",
+ "url": "https://github.com/twbs/bootstrap.git"
+}, "licenses": [
+ {
+ "type": "Apache-2.0",
+ "url": "http://www.apache.org/licenses/LICENSE-2.0"
+ }
+], "devDependencies": {
+ "grunt": "~0.4.1",
+ "grunt-contrib-clean": "~0.5.0",
+ "grunt-contrib-connect": "~0.3.0",
+ "grunt-contrib-concat": "~0.3.0",
+ "grunt-contrib-copy": "~0.4.0",
+ "grunt-contrib-jshint": "~0.6.0",
+ "grunt-contrib-uglify": "~0.2.2",
+ "grunt-contrib-qunit": "~0.2.2",
+ "grunt-contrib-watch": "~0.5.1",
+ "grunt-html-validation": "~0.1.4",
+ "grunt-jekyll": "~0.3.8",
+ "grunt-recess": "~0.3.3",
+ "browserstack-runner": "~0.0.11"
+}
+}