From 5be046233232277a969365b31a2d33b8335637de Mon Sep 17 00:00:00 2001 From: hgy29 Date: Sat, 18 Jul 2015 12:56:05 +0200 Subject: [PATCH] Allow Movieclip to call lua 'set()' to set variables unknown by gideros --- 2dsg/2dsg.vcproj | 1146 +- 2dsg/Matrices.cpp | 1270 +- 2dsg/Matrices.h | 2046 +- 2dsg/MaxRectsBinPack.cpp | 1048 +- 2dsg/MaxRectsBinPack.h | 162 +- 2dsg/Rect.h | 176 +- 2dsg/Vectors.h | 1060 +- 2dsg/bitmapdata.cpp | 194 +- 2dsg/bitmapdata.h | 88 +- 2dsg/blendfunc.cpp | 100 +- 2dsg/blendfunc.h | 20 +- 2dsg/color.cpp | 148 +- 2dsg/color.h | 22 +- 2dsg/colortransform.cpp | 44 +- 2dsg/colortransform.h | 174 +- 2dsg/completeevent.cpp | 18 +- 2dsg/completeevent.h | 42 +- 2dsg/dib.cpp | 674 +- 2dsg/enterframeevent.cpp | 18 +- 2dsg/enterframeevent.h | 122 +- 2dsg/errorevent.cpp | 18 +- 2dsg/errorevent.h | 42 +- 2dsg/font.h | 138 +- 2dsg/fontbase.cpp | 2 +- 2dsg/fontbase.h | 102 +- 2dsg/ftlibrarysingleton.cpp | 36 +- 2dsg/ftlibrarysingleton.h | 38 +- 2dsg/gbitmapbatch.cpp | 130 +- 2dsg/gbitmapbatch.h | 106 +- 2dsg/gfxbackends/dx11/Basic.hlsl | 70 +- 2dsg/gfxbackends/dx11/Color.hlsl | 74 +- 2dsg/gfxbackends/dx11/Texture.hlsl | 74 +- 2dsg/gfxbackends/dx11/TextureColor.hlsl | 78 +- 2dsg/gfxbackends/dx11/dx11ShaderBuffer.cpp | 84 +- 2dsg/gfxbackends/dx11/dx11ShaderTexture.cpp | 148 +- 2dsg/gfxbackends/gl2/gl2ShaderBuffer.cpp | 246 +- 2dsg/gfxbackends/gl2/gl2ShaderTexture.cpp | 144 +- 2dsg/glcompat.cpp | 58 +- 2dsg/glcompat.h | 48 +- 2dsg/grendertarget.cpp | 120 +- 2dsg/grendertarget.h | 34 +- 2dsg/gstatus.cpp | 362 +- 2dsg/gstatus.h | 78 +- 2dsg/keyboardevent.cpp | 20 +- 2dsg/keyboardevent.h | 50 +- 2dsg/keycode.h | 8 +- 2dsg/matrix.cpp | 172 +- 2dsg/matrix.h | 280 +- 2dsg/movieclip2.cpp | 2631 +- 2dsg/movieclip2.h | 282 +- 2dsg/ogl.cpp | 58 +- 2dsg/ogl.h | 46 +- 2dsg/orientation.h | 48 +- 2dsg/point.h | 46 +- 2dsg/progressevent.cpp | 18 +- 2dsg/progressevent.h | 48 +- 2dsg/shape.h | 148 +- 2dsg/splashscreen.h | 54 +- 2dsg/stageorientationevent.cpp | 18 +- 2dsg/stageorientationevent.h | 56 +- 2dsg/stopwatch.cpp | 76 +- 2dsg/stopwatch.h | 40 +- 2dsg/textfield.h | 108 +- 2dsg/textfieldbase.cpp | 32 +- 2dsg/textfieldbase.h | 66 +- 2dsg/texture.cpp | 28 +- 2dsg/texture.h | 36 +- 2dsg/texturebase.cpp | 74 +- 2dsg/texturebase.h | 62 +- 2dsg/texturemanager.cpp | 720 +- 2dsg/texturemanager.h | 158 +- 2dsg/texturepack.cpp | 452 +- 2dsg/texturepack.h | 108 +- 2dsg/texturepacker.cpp | 304 +- 2dsg/texturepacker.h | 34 +- 2dsg/ticker.h | 22 +- 2dsg/timer.cpp | 138 +- 2dsg/timer.h | 156 +- 2dsg/timercontainer.cpp | 278 +- 2dsg/timercontainer.h | 84 +- 2dsg/timerevent.cpp | 20 +- 2dsg/timerevent.h | 44 +- 2dsg/touch.cpp | 2 +- 2dsg/touch.h | 8 +- 2dsg/touchevent.cpp | 24 +- 2dsg/touchevent.h | 72 +- 2dsg/transform.cpp | 340 +- 2dsg/transform.h | 494 +- 2dsg/ttbmfont.h | 132 +- 2dsg/ttfont.cpp | 712 +- 2dsg/ttfont.h | 98 +- 2dsg/tttextfield.h | 82 +- .../GiderosAndroidPlayer/proguard-project.txt | 40 +- .../android/player/Accelerometer.java | 194 +- .../android/player/AlertBox.java | 244 +- .../android/player/AudioDevice.java | 268 +- .../android/player/GGMediaPlayerManager.java | 910 +- .../android/player/Geolocation.java | 492 +- .../android/player/GiderosApplication.java | 2072 +- .../android/player/Gyroscope.java | 146 +- .../android/player/HTTPManager.java | 722 +- .../giderosmobile/android/player/Logger.java | 70 +- .../android/player/TextInputBox.java | 508 +- .../android/player/WeakActivityHolder.java | 40 +- android/addr2line.bat | 22 +- android/gettombstone.bat | 2 +- android/lib/jni/audiodevice.cpp | 94 +- android/lib/jni/gideros.cpp | 2808 +- doc/automatic_image_resolution.html | 416 +- doc/automatic_screen_scaling.html | 310 +- doc/classes_in_gideros.html | 416 +- doc/css/bootstrap.css | 11304 ++--- doc/css/bootstrap.min.css | 1448 +- doc/css/font-awesome-ie7.min.css | 44 +- doc/css/font-awesome.css | 938 +- doc/css/font-awesome.min.css | 66 +- doc/css/theme.css | 228 +- doc/deployment.html | 404 +- doc/design/all.html | 252 +- doc/design/css/bootstrap-responsive.min.css | 18 +- doc/design/css/bootstrap.css | 11304 ++--- doc/design/css/bootstrap.min.css | 1448 +- doc/design/css/font-awesome-ie7.min.css | 44 +- doc/design/css/font-awesome.css | 938 +- doc/design/css/font-awesome.min.css | 66 +- doc/design/css/theme.css | 302 +- doc/design/event.html | 76 +- doc/design/index.html | 286 +- doc/design/js/bootstrap.js | 4340 +- doc/design/js/bootstrap.min.js | 4338 +- doc/design/js/fittext.js | 84 +- doc/design/js/jquery.min.js | 8 +- doc/design/js/lang-lua.js | 4 +- doc/design/js/prettify.js | 56 +- doc/design/list.html | 34 +- doc/design/method.html | 98 +- doc/design/object.html | 112 +- doc/design/property.html | 58 +- doc/file_system.html | 702 +- doc/getting_started.html | 546 +- doc/js/bootstrap.js | 4340 +- doc/js/bootstrap.min.js | 12 +- doc/js/fittext.js | 84 +- doc/js/jquery-1.8.3.min.js | 2 +- doc/js/lang-lua.js | 4 +- doc/js/prettify.js | 56 +- doc/reference_manual.html | 38248 ++++++++-------- external/flurry-3.0.0/iPad/RELEASE_NOTES.txt | 146 +- .../flurry-3.0.0/iPhone/RELEASE_NOTES.txt | 234 +- fontcreator/MaxRectsBinPack.cpp | 1044 +- fontcreator/MaxRectsBinPack.h | 162 +- fontcreator/Rect.h | 168 +- fontcreator/fontcanvas.cpp | 942 +- fontcreator/fontcanvas.h | 122 +- fontcreator/fontcreator.pro | 162 +- fontcreator/fontcreator.vcproj | 1004 +- fontcreator/main.cpp | 54 +- fontcreator/mainwindow.cpp | 100 +- fontcreator/mainwindow.h | 58 +- fontcreator/optionswidget.cpp | 72 +- fontcreator/optionswidget.h | 58 +- fontcreator/texturepacker.cpp | 338 +- fontcreator/texturepacker.h | 34 +- gdrbridge/gdrbridge.pro | 34 +- gdrbridge/main.cpp | 396 +- gdrdeamon/application.h | 156 +- gdrexport/gdrexport.pro | 70 +- gdrexport/main.cpp | 1666 +- iconlibrary/iconlibrary.cpp | 264 +- iconlibrary/iconlibrary.h | 56 +- iconlibrary/iconlibrary.vcproj | 416 +- image2array/image2array.pro | 42 +- image2array/main.cpp | 120 +- libgid/api.txt | 210 +- libgid/external/build.txt | 42 +- .../builds/win32/vc2005/freetype.sln | 62 +- .../builds/win32/vc2005/freetype.vcproj | 1290 +- .../builds/win32/vc2008/freetype.sln | 62 +- .../builds/win32/vc2008/freetype.vcproj | 4360 +- .../builds/win32/vc2010/freetype.sln | 64 +- .../builds/win32/visualc/freetype.sln | 62 +- .../builds/win32/visualc/freetype.vcproj | 4358 +- .../builds/win32/visualce/freetype.vcproj | 27770 +++++------ .../builds/wince/vc2005-ce/freetype.sln | 316 +- .../builds/wince/vc2005-ce/freetype.vcproj | 7676 ++-- .../builds/wince/vc2008-ce/freetype.sln | 316 +- .../builds/wince/vc2008-ce/freetype.vcproj | 26990 +++++------ libgid/external/glew-1.10.0/LICENSE.txt | 146 +- libgid/external/glew-1.10.0/README.txt | 36 +- libgid/external/glew-1.10.0/TODO.txt | 24 +- .../glew-1.10.0/auto/bin/filter_gl_ext.sh | 952 +- .../glew-1.10.0/auto/bin/filter_gles_ext.sh | 38 +- .../glew-1.10.0/auto/bin/update_ext.sh | 50 +- libgid/external/glew-1.10.0/auto/custom.txt | 14 +- .../glew-1.10.0/auto/doc/advanced.html | 338 +- .../external/glew-1.10.0/auto/doc/basic.html | 360 +- .../external/glew-1.10.0/auto/doc/build.html | 94 +- .../glew-1.10.0/auto/doc/credits.html | 50 +- .../external/glew-1.10.0/auto/doc/index.html | 236 +- .../glew-1.10.0/auto/doc/install.html | 252 +- libgid/external/glew-1.10.0/auto/doc/log.html | 1824 +- .../external/glew-1.10.0/auto/src/footer.html | 8 +- .../external/glew-1.10.0/auto/src/glew_head.c | 498 +- .../external/glew-1.10.0/auto/src/glew_head.h | 2226 +- .../glew-1.10.0/auto/src/glew_init_gl.c | 144 +- .../glew-1.10.0/auto/src/glew_init_glx.c | 106 +- .../glew-1.10.0/auto/src/glew_init_tail.c | 114 +- .../glew-1.10.0/auto/src/glew_init_wgl.c | 82 +- .../glew-1.10.0/auto/src/glew_license.h | 62 +- .../glew-1.10.0/auto/src/glew_str_glx.c | 42 +- .../glew-1.10.0/auto/src/glew_str_head.c | 26 +- .../glew-1.10.0/auto/src/glew_str_tail.c | 14 +- .../glew-1.10.0/auto/src/glew_str_wgl.c | 42 +- .../external/glew-1.10.0/auto/src/glew_tail.h | 148 +- .../glew-1.10.0/auto/src/glew_utils.c | 324 +- .../glew-1.10.0/auto/src/glew_utils.h | 202 +- .../glew-1.10.0/auto/src/glewinfo_gl.c | 14 +- .../glew-1.10.0/auto/src/glewinfo_glx.c | 12 +- .../glew-1.10.0/auto/src/glewinfo_head.c | 162 +- .../glew-1.10.0/auto/src/glewinfo_tail.c | 566 +- .../glew-1.10.0/auto/src/glewinfo_wgl.c | 16 +- .../glew-1.10.0/auto/src/glxew_head.h | 212 +- .../external/glew-1.10.0/auto/src/glxew_mid.h | 18 +- .../glew-1.10.0/auto/src/glxew_tail.h | 60 +- .../external/glew-1.10.0/auto/src/header.html | 198 +- .../glew-1.10.0/auto/src/khronos_license.h | 46 +- .../glew-1.10.0/auto/src/mesa_license.h | 48 +- .../glew-1.10.0/auto/src/wglew_head.h | 72 +- .../external/glew-1.10.0/auto/src/wglew_mid.h | 18 +- .../glew-1.10.0/auto/src/wglew_tail.h | 64 +- .../external/glew-1.10.0/build/vc10/glew.sln | 184 +- libgid/external/glew-1.10.0/build_mingw.bat | 24 +- libgid/external/glew-1.10.0/doc/advanced.html | 544 +- libgid/external/glew-1.10.0/doc/basic.html | 566 +- libgid/external/glew-1.10.0/doc/build.html | 300 +- libgid/external/glew-1.10.0/doc/credits.html | 256 +- libgid/external/glew-1.10.0/doc/glew.css | 374 +- libgid/external/glew-1.10.0/doc/glew.html | 1270 +- libgid/external/glew-1.10.0/doc/glew.txt | 56 +- libgid/external/glew-1.10.0/doc/glxew.html | 358 +- libgid/external/glew-1.10.0/doc/gpl.txt | 680 +- libgid/external/glew-1.10.0/doc/index.html | 442 +- libgid/external/glew-1.10.0/doc/install.html | 458 +- libgid/external/glew-1.10.0/doc/khronos.txt | 40 +- libgid/external/glew-1.10.0/doc/log.html | 2030 +- libgid/external/glew-1.10.0/doc/mesa.txt | 42 +- libgid/external/glew-1.10.0/doc/wglew.html | 334 +- libgid/external/glew-1.10.0/include/GL/glew.h | 36124 +++++++-------- .../external/glew-1.10.0/include/GL/glxew.h | 3338 +- .../external/glew-1.10.0/include/GL/wglew.h | 2842 +- libgid/external/glew-1.10.0/src/glew.c | 36246 +++++++-------- libgid/external/glew-1.10.0/src/glewinfo.c | 21362 ++++----- libgid/external/glew-1.10.0/src/visualinfo.c | 2356 +- libgid/external/jpeg-9/build_vc2010.bat | 20 +- libgid/external/jpeg-9/cderror.h | 268 +- libgid/external/jpeg-9/cdjpeg.c | 362 +- libgid/external/jpeg-9/cdjpeg.h | 374 +- libgid/external/jpeg-9/cjpeg.c | 1304 +- libgid/external/jpeg-9/ckconfig.c | 804 +- libgid/external/jpeg-9/coderules.txt | 236 +- libgid/external/jpeg-9/djpeg.c | 1234 +- libgid/external/jpeg-9/example.c | 866 +- libgid/external/jpeg-9/filelist.txt | 428 +- libgid/external/jpeg-9/install.txt | 2192 +- libgid/external/jpeg-9/jaricom.c | 306 +- libgid/external/jpeg-9/jcapimin.c | 576 +- libgid/external/jpeg-9/jcapistd.c | 322 +- libgid/external/jpeg-9/jcarith.c | 1886 +- libgid/external/jpeg-9/jccoefct.c | 908 +- libgid/external/jpeg-9/jccolor.c | 1082 +- libgid/external/jpeg-9/jcdctmgr.c | 964 +- libgid/external/jpeg-9/jchuff.c | 3152 +- libgid/external/jpeg-9/jcinit.c | 130 +- libgid/external/jpeg-9/jcmainct.c | 594 +- libgid/external/jpeg-9/jcmarker.c | 1438 +- libgid/external/jpeg-9/jcmaster.c | 1716 +- libgid/external/jpeg-9/jcomapi.c | 212 +- libgid/external/jpeg-9/jconfig.h | 94 +- libgid/external/jpeg-9/jconfig.txt | 328 +- libgid/external/jpeg-9/jcparam.c | 1274 +- libgid/external/jpeg-9/jcprepct.c | 716 +- libgid/external/jpeg-9/jcsample.c | 1090 +- libgid/external/jpeg-9/jctrans.c | 770 +- libgid/external/jpeg-9/jdapimin.c | 792 +- libgid/external/jpeg-9/jdapistd.c | 550 +- libgid/external/jpeg-9/jdarith.c | 1564 +- libgid/external/jpeg-9/jdatadst.c | 540 +- libgid/external/jpeg-9/jdatasrc.c | 550 +- libgid/external/jpeg-9/jdcoefct.c | 1482 +- libgid/external/jpeg-9/jdcolor.c | 1236 +- libgid/external/jpeg-9/jdct.h | 786 +- libgid/external/jpeg-9/jddctmgr.c | 768 +- libgid/external/jpeg-9/jdhuff.c | 3084 +- libgid/external/jpeg-9/jdinput.c | 1322 +- libgid/external/jpeg-9/jdmainct.c | 1026 +- libgid/external/jpeg-9/jdmarker.c | 3010 +- libgid/external/jpeg-9/jdmaster.c | 1062 +- libgid/external/jpeg-9/jdmerge.c | 800 +- libgid/external/jpeg-9/jdosaobj.txt | 32 +- libgid/external/jpeg-9/jdpostct.c | 580 +- libgid/external/jpeg-9/jdsample.c | 722 +- libgid/external/jpeg-9/jdtrans.c | 280 +- libgid/external/jpeg-9/jerror.c | 506 +- libgid/external/jpeg-9/jerror.h | 608 +- libgid/external/jpeg-9/jfdctflt.c | 348 +- libgid/external/jpeg-9/jfdctfst.c | 460 +- libgid/external/jpeg-9/jfdctint.c | 8696 ++-- libgid/external/jpeg-9/jidctflt.c | 470 +- libgid/external/jpeg-9/jidctfst.c | 736 +- libgid/external/jpeg-9/jidctint.c | 10274 ++--- libgid/external/jpeg-9/jinclude.h | 182 +- libgid/external/jpeg-9/jmemansi.c | 334 +- libgid/external/jpeg-9/jmemdos.c | 1276 +- libgid/external/jpeg-9/jmemmac.c | 578 +- libgid/external/jpeg-9/jmemmgr.c | 2238 +- libgid/external/jpeg-9/jmemname.c | 552 +- libgid/external/jpeg-9/jmemnobs.c | 218 +- libgid/external/jpeg-9/jmemsys.h | 396 +- libgid/external/jpeg-9/jmorecfg.h | 780 +- libgid/external/jpeg-9/jpeg.pro | 30 +- libgid/external/jpeg-9/jpegint.h | 852 +- libgid/external/jpeg-9/jpeglib.h | 2346 +- libgid/external/jpeg-9/jpegtran.c | 1120 +- libgid/external/jpeg-9/jquant1.c | 1714 +- libgid/external/jpeg-9/jquant2.c | 2622 +- libgid/external/jpeg-9/jutils.c | 454 +- libgid/external/jpeg-9/jversion.h | 28 +- libgid/external/jpeg-9/libjpeg.txt | 6196 +-- libgid/external/jpeg-9/ltmain.sh | 19310 ++++---- libgid/external/jpeg-9/rdbmp.c | 960 +- libgid/external/jpeg-9/rdcolmap.c | 506 +- libgid/external/jpeg-9/rdgif.c | 76 +- libgid/external/jpeg-9/rdjpgcom.c | 1030 +- libgid/external/jpeg-9/rdppm.c | 918 +- libgid/external/jpeg-9/rdrle.c | 774 +- libgid/external/jpeg-9/rdswitch.c | 730 +- libgid/external/jpeg-9/rdtarga.c | 1000 +- libgid/external/jpeg-9/structure.txt | 1882 +- libgid/external/jpeg-9/transupp.c | 3194 +- libgid/external/jpeg-9/transupp.h | 426 +- libgid/external/jpeg-9/usage.txt | 1300 +- libgid/external/jpeg-9/wizard.txt | 422 +- libgid/external/jpeg-9/wrbmp.c | 884 +- libgid/external/jpeg-9/wrgif.c | 798 +- libgid/external/jpeg-9/wrjpgcom.c | 1166 +- libgid/external/jpeg-9/wrppm.c | 538 +- libgid/external/jpeg-9/wrrle.c | 610 +- libgid/external/jpeg-9/wrtarga.c | 506 +- .../external/libpng-1.6.2/build_msvc2010.bat | 20 +- libgid/external/libpng-1.6.2/libpng.pro | 48 +- libgid/external/libpng-1.6.2/pnglibconf.h | 422 +- .../MSVC++/2005/libmpg123/libmpg123.vcproj | 1482 +- .../2008/dump_seekindex/dump_seekindex.vcproj | 388 +- .../MSVC++/2008/feedseek/feedseek.vcproj | 390 +- .../MSVC++/2008/libmpg123/libmpg123.vcproj | 2714 +- .../ports/MSVC++/2008/mpg123.sln | 88 +- .../ports/MSVC++/2008/mpglib/mpglib.vcproj | 382 +- .../ports/MSVC++/2008/scan/scan.vcproj | 390 +- .../ports/MSVC++/2008clr/2008clr.sln | 162 +- .../MSVC++/2008clr/mpg123clr/AssemblyInfo.cpp | 152 +- .../ports/MSVC++/2008clr/mpg123clr/ReadMe.txt | 330 +- .../MSVC++/2008clr/mpg123clr/advanced.cpp | 182 +- .../ports/MSVC++/2008clr/mpg123clr/advanced.h | 258 +- .../MSVC++/2008clr/mpg123clr/dllmain.cpp | 38 +- .../ports/MSVC++/2008clr/mpg123clr/enum.h | 434 +- .../ports/MSVC++/2008clr/mpg123clr/error.cpp | 96 +- .../ports/MSVC++/2008clr/mpg123clr/error.h | 266 +- .../ports/MSVC++/2008clr/mpg123clr/id3v1.cpp | 184 +- .../ports/MSVC++/2008clr/mpg123clr/id3v1.h | 262 +- .../ports/MSVC++/2008clr/mpg123clr/id3v2.cpp | 276 +- .../ports/MSVC++/2008clr/mpg123clr/id3v2.h | 304 +- .../MSVC++/2008clr/mpg123clr/mpg123clr.cpp | 1792 +- .../MSVC++/2008clr/mpg123clr/mpg123clr.h | 1904 +- .../MSVC++/2008clr/mpg123clr/mpg123clr.vcproj | 656 +- .../ports/MSVC++/2008clr/mpg123clr/resource.h | 28 +- .../ports/MSVC++/2008clr/mpg123clr/stdafx.cpp | 16 +- .../ports/MSVC++/2008clr/mpg123clr/stdafx.h | 74 +- .../ports/MSVC++/2008clr/mpg123clr/string.cpp | 332 +- .../ports/MSVC++/2008clr/mpg123clr/string.h | 530 +- .../MSVC++/2008clr/mpg123clr/targetver.h | 48 +- .../ports/MSVC++/2008clr/mpg123clr/text.cpp | 134 +- .../ports/MSVC++/2008clr/mpg123clr/text.h | 222 +- .../ports/MSVC++/2010/mpg123.sln | 76 +- .../CMP3Stream/libMPG123/libMPG123.vcproj | 490 +- .../ports/MSVC++/examples/feedseek.c | 480 +- .../src/libmpg123/build_msvc2010.bat | 20 +- .../mpg123-1.15.3/src/libmpg123/libmpg123.pro | 72 +- .../openal-soft-1.13/build/mingw/config.h | 194 +- .../build/mingw48_32/config.h | 194 +- .../Pre-built.2/include/pthread.h | 2736 +- .../Pre-built.2/include/sched.h | 356 +- .../Pre-built.2/include/semaphore.h | 332 +- .../QueueUserAPCEx/Readme.txt | 88 +- .../QueueUserAPCEx/driver/alertdrv.c | 522 +- .../QueueUserAPCEx/driver/install.bat | 4 +- .../QueueUserAPCEx/testapp/QueueUserAPCEx.c | 340 +- .../QueueUserAPCEx/testapp/QueueUserAPCEx.h | 70 +- .../QueueUserAPCEx/testapp/testapp.c | 204 +- .../QueueUserAPCEx/user/QueueUserAPCEx.c | 326 +- .../QueueUserAPCEx/user/QueueUserAPCEx.h | 72 +- .../pthreads.2/attr.c | 106 +- .../pthreads.2/barrier.c | 94 +- .../pthreads.2/builddmc.bat | 18 +- .../pthreads.2/cancel.c | 88 +- .../pthreads.2/cleanup.c | 296 +- .../pthreads.2/condvar.c | 100 +- .../pthreads.2/config.h | 268 +- .../pthreads.2/create.c | 610 +- .../pthreads.2/dll.c | 184 +- .../pthreads.2/errno.c | 188 +- .../pthreads.2/exit.c | 88 +- .../pthreads.2/fork.c | 78 +- .../pthreads.2/global.c | 230 +- .../pthreads.2/implement.h | 1420 +- .../pthreads.2/manual/PortabilityIssues.html | 1436 +- .../pthreads.2/manual/index.html | 292 +- .../manual/pthreadCancelableWait.html | 172 +- .../pthreads.2/manual/pthread_attr_init.html | 560 +- .../manual/pthread_attr_setstackaddr.html | 316 +- .../manual/pthread_attr_setstacksize.html | 254 +- .../manual/pthread_barrier_init.html | 398 +- .../manual/pthread_barrier_wait.html | 332 +- .../manual/pthread_barrierattr_init.html | 284 +- .../pthread_barrierattr_setpshared.html | 318 +- .../pthreads.2/manual/pthread_cancel.html | 410 +- .../manual/pthread_cleanup_push.html | 280 +- .../pthreads.2/manual/pthread_cond_init.html | 626 +- .../manual/pthread_condattr_init.html | 196 +- .../manual/pthread_condattr_setpshared.html | 306 +- .../pthreads.2/manual/pthread_create.html | 188 +- .../pthreads.2/manual/pthread_delay_np.html | 142 +- .../pthreads.2/manual/pthread_detach.html | 178 +- .../pthreads.2/manual/pthread_equal.html | 96 +- .../pthreads.2/manual/pthread_exit.html | 118 +- .../manual/pthread_getw32threadhandle_np.html | 114 +- .../pthreads.2/manual/pthread_join.html | 236 +- .../pthreads.2/manual/pthread_key_create.html | 420 +- .../pthreads.2/manual/pthread_kill.html | 304 +- .../pthreads.2/manual/pthread_mutex_init.html | 554 +- .../manual/pthread_mutexattr_init.html | 314 +- .../manual/pthread_mutexattr_setpshared.html | 302 +- .../manual/pthread_num_processors_np.html | 114 +- .../pthreads.2/manual/pthread_once.html | 164 +- .../manual/pthread_rwlock_init.html | 386 +- .../manual/pthread_rwlock_rdlock.html | 336 +- .../manual/pthread_rwlock_timedrdlock.html | 312 +- .../manual/pthread_rwlock_timedwrlock.html | 300 +- .../manual/pthread_rwlock_unlock.html | 282 +- .../manual/pthread_rwlock_wrlock.html | 306 +- .../manual/pthread_rwlockattr_init.html | 282 +- .../manual/pthread_rwlockattr_setpshared.html | 320 +- .../pthreads.2/manual/pthread_self.html | 140 +- .../manual/pthread_setcancelstate.html | 414 +- .../manual/pthread_setcanceltype.html | 414 +- .../manual/pthread_setconcurrency.html | 310 +- .../manual/pthread_setschedparam.html | 224 +- .../pthreads.2/manual/pthread_spin_init.html | 352 +- .../pthreads.2/manual/pthread_spin_lock.html | 282 +- .../manual/pthread_spin_unlock.html | 248 +- .../manual/pthread_timechange_handler_np.html | 152 +- .../pthread_win32_attach_detach_np.html | 148 +- .../pthread_win32_test_features_np.html | 134 +- .../manual/sched_get_priority_max.html | 228 +- .../pthreads.2/manual/sched_getscheduler.html | 254 +- .../pthreads.2/manual/sched_setscheduler.html | 362 +- .../pthreads.2/manual/sched_yield.html | 196 +- .../pthreads.2/manual/sem_init.html | 398 +- .../pthreads.2/misc.c | 100 +- .../pthreads.2/mutex.c | 118 +- .../pthreads.2/need_errno.h | 264 +- .../pthreads.2/nonportable.c | 92 +- .../pthreads.2/private.c | 114 +- .../pthreads.2/pthread.c | 130 +- .../pthreads.2/pthread.h | 2736 +- .../pthreads.2/pthread_attr_destroy.c | 158 +- .../pthreads.2/pthread_attr_getdetachstate.c | 174 +- .../pthreads.2/pthread_attr_getinheritsched.c | 102 +- .../pthreads.2/pthread_attr_getschedparam.c | 104 +- .../pthreads.2/pthread_attr_getschedpolicy.c | 122 +- .../pthreads.2/pthread_attr_getscope.c | 108 +- .../pthreads.2/pthread_attr_getstackaddr.c | 194 +- .../pthreads.2/pthread_attr_getstacksize.c | 200 +- .../pthreads.2/pthread_attr_init.c | 234 +- .../pthreads.2/pthread_attr_setdetachstate.c | 182 +- .../pthreads.2/pthread_attr_setinheritsched.c | 114 +- .../pthreads.2/pthread_attr_setschedparam.c | 126 +- .../pthreads.2/pthread_attr_setschedpolicy.c | 110 +- .../pthreads.2/pthread_attr_setscope.c | 124 +- .../pthreads.2/pthread_attr_setstackaddr.c | 194 +- .../pthreads.2/pthread_attr_setstacksize.c | 220 +- .../pthreads.2/pthread_barrier_destroy.c | 134 +- .../pthreads.2/pthread_barrier_init.c | 162 +- .../pthreads.2/pthread_barrier_wait.c | 198 +- .../pthreads.2/pthread_barrierattr_destroy.c | 166 +- .../pthread_barrierattr_getpshared.c | 190 +- .../pthreads.2/pthread_barrierattr_init.c | 170 +- .../pthread_barrierattr_setpshared.c | 238 +- .../pthreads.2/pthread_cancel.c | 446 +- .../pthreads.2/pthread_cond_destroy.c | 488 +- .../pthreads.2/pthread_cond_init.c | 330 +- .../pthreads.2/pthread_cond_signal.c | 462 +- .../pthreads.2/pthread_cond_wait.c | 1134 +- .../pthreads.2/pthread_condattr_destroy.c | 172 +- .../pthreads.2/pthread_condattr_getpshared.c | 194 +- .../pthreads.2/pthread_condattr_init.c | 174 +- .../pthreads.2/pthread_condattr_setpshared.c | 234 +- .../pthreads.2/pthread_delay_np.c | 342 +- .../pthreads.2/pthread_detach.c | 278 +- .../pthreads.2/pthread_equal.c | 152 +- .../pthreads.2/pthread_exit.c | 212 +- .../pthreads.2/pthread_getconcurrency.c | 90 +- .../pthreads.2/pthread_getschedparam.c | 150 +- .../pthreads.2/pthread_getspecific.c | 168 +- .../pthread_getw32threadhandle_np.c | 106 +- .../pthreads.2/pthread_join.c | 308 +- .../pthreads.2/pthread_key_create.c | 216 +- .../pthreads.2/pthread_key_delete.c | 266 +- .../pthreads.2/pthread_kill.c | 204 +- .../pthreads.2/pthread_mutex_destroy.c | 292 +- .../pthreads.2/pthread_mutex_init.c | 208 +- .../pthreads.2/pthread_mutex_lock.c | 278 +- .../pthreads.2/pthread_mutex_timedlock.c | 392 +- .../pthreads.2/pthread_mutex_trylock.c | 184 +- .../pthreads.2/pthread_mutex_unlock.c | 238 +- .../pthreads.2/pthread_mutexattr_destroy.c | 166 +- .../pthreads.2/pthread_mutexattr_getkind_np.c | 88 +- .../pthreads.2/pthread_mutexattr_getpshared.c | 190 +- .../pthreads.2/pthread_mutexattr_gettype.c | 112 +- .../pthreads.2/pthread_mutexattr_init.c | 172 +- .../pthreads.2/pthread_mutexattr_setkind_np.c | 88 +- .../pthreads.2/pthread_mutexattr_setpshared.c | 238 +- .../pthreads.2/pthread_mutexattr_settype.c | 286 +- .../pthreads.2/pthread_num_processors_np.c | 112 +- .../pthreads.2/pthread_once.c | 172 +- .../pthreads.2/pthread_rwlock_destroy.c | 286 +- .../pthreads.2/pthread_rwlock_init.c | 220 +- .../pthreads.2/pthread_rwlock_rdlock.c | 206 +- .../pthreads.2/pthread_rwlock_timedrdlock.c | 220 +- .../pthreads.2/pthread_rwlock_timedwrlock.c | 280 +- .../pthreads.2/pthread_rwlock_tryrdlock.c | 206 +- .../pthreads.2/pthread_rwlock_trywrlock.c | 246 +- .../pthreads.2/pthread_rwlock_unlock.c | 188 +- .../pthreads.2/pthread_rwlock_wrlock.c | 268 +- .../pthreads.2/pthread_rwlockattr_destroy.c | 170 +- .../pthread_rwlockattr_getpshared.c | 196 +- .../pthreads.2/pthread_rwlockattr_init.c | 168 +- .../pthread_rwlockattr_setpshared.c | 242 +- .../pthreads.2/pthread_self.c | 276 +- .../pthreads.2/pthread_setcancelstate.c | 248 +- .../pthreads.2/pthread_setcanceltype.c | 250 +- .../pthreads.2/pthread_setconcurrency.c | 106 +- .../pthreads.2/pthread_setschedparam.c | 250 +- .../pthreads.2/pthread_setspecific.c | 336 +- .../pthreads.2/pthread_spin_destroy.c | 224 +- .../pthreads.2/pthread_spin_init.c | 246 +- .../pthreads.2/pthread_spin_lock.c | 166 +- .../pthreads.2/pthread_spin_trylock.c | 160 +- .../pthreads.2/pthread_spin_unlock.c | 150 +- .../pthreads.2/pthread_testcancel.c | 204 +- .../pthread_timechange_handler_np.c | 214 +- .../pthread_win32_attach_detach_np.c | 606 +- .../ptw32_InterlockedCompareExchange.c | 606 +- .../pthreads.2/ptw32_MCS_lock.c | 420 +- .../ptw32_callUserDestroyRoutines.c | 440 +- .../pthreads.2/ptw32_calloc.c | 112 +- .../pthreads.2/ptw32_cond_check_need_init.c | 188 +- .../pthreads.2/ptw32_getprocessors.c | 182 +- .../pthreads.2/ptw32_is_attr.c | 94 +- .../pthreads.2/ptw32_mutex_check_need_init.c | 224 +- .../pthreads.2/ptw32_new.c | 182 +- .../pthreads.2/ptw32_processInitialize.c | 204 +- .../pthreads.2/ptw32_processTerminate.c | 228 +- .../pthreads.2/ptw32_relmillisecs.c | 240 +- .../pthreads.2/ptw32_reuse.c | 294 +- .../pthreads.2/ptw32_rwlock_cancelwrwait.c | 100 +- .../pthreads.2/ptw32_rwlock_check_need_init.c | 186 +- .../pthreads.2/ptw32_semwait.c | 236 +- .../ptw32_spinlock_check_need_init.c | 162 +- .../pthreads.2/ptw32_threadDestroy.c | 164 +- .../pthreads.2/ptw32_threadStart.c | 720 +- .../pthreads.2/ptw32_throw.c | 334 +- .../pthreads.2/ptw32_timespec.c | 166 +- .../pthreads.2/ptw32_tkAssocCreate.c | 236 +- .../pthreads.2/ptw32_tkAssocDestroy.c | 228 +- .../pthreads.2/rwlock.c | 102 +- .../pthreads.2/sched.c | 106 +- .../pthreads.2/sched.h | 356 +- .../pthreads.2/sched_get_priority_max.c | 268 +- .../pthreads.2/sched_get_priority_min.c | 270 +- .../pthreads.2/sched_getscheduler.c | 138 +- .../pthreads.2/sched_setscheduler.c | 162 +- .../pthreads.2/sched_yield.c | 142 +- .../pthreads.2/sem_close.c | 116 +- .../pthreads.2/sem_destroy.c | 288 +- .../pthreads.2/sem_getvalue.c | 220 +- .../pthreads.2/sem_init.c | 338 +- .../pthreads.2/sem_open.c | 116 +- .../pthreads.2/sem_post.c | 254 +- .../pthreads.2/sem_post_multiple.c | 282 +- .../pthreads.2/sem_timedwait.c | 472 +- .../pthreads.2/sem_trywait.c | 234 +- .../pthreads.2/sem_unlink.c | 116 +- .../pthreads.2/sem_wait.c | 370 +- .../pthreads.2/semaphore.c | 138 +- .../pthreads.2/semaphore.h | 332 +- .../pthreads.2/signal.c | 358 +- .../pthreads.2/spin.c | 92 +- .../pthreads.2/sync.c | 86 +- .../pthreads.2/tests/Debug.txt | 10 +- .../pthreads.2/tests/barrier1.c | 116 +- .../pthreads.2/tests/barrier2.c | 110 +- .../pthreads.2/tests/barrier3.c | 142 +- .../pthreads.2/tests/barrier4.c | 220 +- .../pthreads.2/tests/barrier5.c | 256 +- .../pthreads.2/tests/benchlib.c | 726 +- .../pthreads.2/tests/benchtest.h | 140 +- .../pthreads.2/tests/benchtest1.c | 498 +- .../pthreads.2/tests/benchtest2.c | 622 +- .../pthreads.2/tests/benchtest3.c | 402 +- .../pthreads.2/tests/benchtest4.c | 364 +- .../pthreads.2/tests/benchtest5.c | 318 +- .../pthreads.2/tests/cancel1.c | 358 +- .../pthreads.2/tests/cancel2.c | 502 +- .../pthreads.2/tests/cancel3.c | 402 +- .../pthreads.2/tests/cancel4.c | 406 +- .../pthreads.2/tests/cancel5.c | 398 +- .../pthreads.2/tests/cancel6a.c | 382 +- .../pthreads.2/tests/cancel6d.c | 380 +- .../pthreads.2/tests/cancel7.c | 432 +- .../pthreads.2/tests/cancel8.c | 434 +- .../pthreads.2/tests/cancel9.c | 404 +- .../pthreads.2/tests/cleanup0.c | 458 +- .../pthreads.2/tests/cleanup1.c | 484 +- .../pthreads.2/tests/cleanup2.c | 434 +- .../pthreads.2/tests/cleanup3.c | 444 +- .../pthreads.2/tests/condvar1.c | 194 +- .../pthreads.2/tests/condvar1_1.c | 230 +- .../pthreads.2/tests/condvar1_2.c | 248 +- .../pthreads.2/tests/condvar2.c | 250 +- .../pthreads.2/tests/condvar2_1.c | 306 +- .../pthreads.2/tests/condvar3.c | 296 +- .../pthreads.2/tests/condvar3_1.c | 402 +- .../pthreads.2/tests/condvar3_2.c | 386 +- .../pthreads.2/tests/condvar3_3.c | 264 +- .../pthreads.2/tests/condvar4.c | 338 +- .../pthreads.2/tests/condvar5.c | 336 +- .../pthreads.2/tests/condvar6.c | 484 +- .../pthreads.2/tests/condvar7.c | 514 +- .../pthreads.2/tests/condvar8.c | 516 +- .../pthreads.2/tests/condvar9.c | 534 +- .../pthreads.2/tests/context1.c | 288 +- .../pthreads.2/tests/count1.c | 180 +- .../pthreads.2/tests/create1.c | 132 +- .../pthreads.2/tests/create2.c | 216 +- .../pthreads.2/tests/create3.c | 244 +- .../pthreads.2/tests/delay1.c | 102 +- .../pthreads.2/tests/delay2.c | 164 +- .../pthreads.2/tests/detach1.c | 186 +- .../pthreads.2/tests/equal1.c | 132 +- .../pthreads.2/tests/errno1.c | 354 +- .../pthreads.2/tests/exception1.c | 526 +- .../pthreads.2/tests/exception2.c | 316 +- .../pthreads.2/tests/exception3.c | 392 +- .../pthreads.2/tests/exit1.c | 100 +- .../pthreads.2/tests/exit2.c | 128 +- .../pthreads.2/tests/exit3.c | 136 +- .../pthreads.2/tests/exit4.c | 398 +- .../pthreads.2/tests/exit5.c | 410 +- .../pthreads.2/tests/eyal1.c | 734 +- .../pthreads.2/tests/inherit1.c | 354 +- .../pthreads.2/tests/join0.c | 134 +- .../pthreads.2/tests/join1.c | 156 +- .../pthreads.2/tests/join2.c | 138 +- .../pthreads.2/tests/join3.c | 150 +- .../pthreads.2/tests/kill1.c | 166 +- .../pthreads.2/tests/loadfree.c | 140 +- .../pthreads.2/tests/mutex1.c | 136 +- .../pthreads.2/tests/mutex1e.c | 148 +- .../pthreads.2/tests/mutex1n.c | 148 +- .../pthreads.2/tests/mutex1r.c | 148 +- .../pthreads.2/tests/mutex2.c | 132 +- .../pthreads.2/tests/mutex2e.c | 132 +- .../pthreads.2/tests/mutex2r.c | 132 +- .../pthreads.2/tests/mutex3.c | 150 +- .../pthreads.2/tests/mutex3e.c | 150 +- .../pthreads.2/tests/mutex3r.c | 150 +- .../pthreads.2/tests/mutex4.c | 222 +- .../pthreads.2/tests/mutex5.c | 134 +- .../pthreads.2/tests/mutex6.c | 186 +- .../pthreads.2/tests/mutex6e.c | 204 +- .../pthreads.2/tests/mutex6es.c | 188 +- .../pthreads.2/tests/mutex6n.c | 208 +- .../pthreads.2/tests/mutex6r.c | 200 +- .../pthreads.2/tests/mutex6rs.c | 184 +- .../pthreads.2/tests/mutex6s.c | 186 +- .../pthreads.2/tests/mutex7.c | 164 +- .../pthreads.2/tests/mutex7e.c | 204 +- .../pthreads.2/tests/mutex7n.c | 186 +- .../pthreads.2/tests/mutex7r.c | 200 +- .../pthreads.2/tests/mutex8.c | 164 +- .../pthreads.2/tests/mutex8e.c | 194 +- .../pthreads.2/tests/mutex8n.c | 194 +- .../pthreads.2/tests/mutex8r.c | 194 +- .../pthreads.2/tests/once1.c | 154 +- .../pthreads.2/tests/once2.c | 218 +- .../pthreads.2/tests/once3.c | 258 +- .../pthreads.2/tests/once4.c | 382 +- .../pthreads.2/tests/priority1.c | 344 +- .../pthreads.2/tests/priority2.c | 338 +- .../pthreads.2/tests/reuse1.c | 248 +- .../pthreads.2/tests/reuse2.c | 334 +- .../pthreads.2/tests/rwlock1.c | 122 +- .../pthreads.2/tests/rwlock2.c | 132 +- .../pthreads.2/tests/rwlock2_t.c | 156 +- .../pthreads.2/tests/rwlock3.c | 152 +- .../pthreads.2/tests/rwlock3_t.c | 174 +- .../pthreads.2/tests/rwlock4.c | 152 +- .../pthreads.2/tests/rwlock4_t.c | 174 +- .../pthreads.2/tests/rwlock5.c | 156 +- .../pthreads.2/tests/rwlock5_t.c | 178 +- .../pthreads.2/tests/rwlock6.c | 202 +- .../pthreads.2/tests/rwlock6_t.c | 252 +- .../pthreads.2/tests/rwlock6_t2.c | 238 +- .../pthreads.2/tests/rwlock7.c | 398 +- .../pthreads.2/tests/rwlock8.c | 410 +- .../pthreads.2/tests/self1.c | 138 +- .../pthreads.2/tests/self2.c | 146 +- .../pthreads.2/tests/semaphore1.c | 322 +- .../pthreads.2/tests/semaphore2.c | 216 +- .../pthreads.2/tests/semaphore3.c | 242 +- .../pthreads.2/tests/semaphore4.c | 276 +- .../pthreads.2/tests/semaphore4t.c | 264 +- .../pthreads.2/tests/semaphore5.c | 202 +- .../pthreads.2/tests/sizes.c | 64 +- .../pthreads.2/tests/spin1.c | 118 +- .../pthreads.2/tests/spin2.c | 150 +- .../pthreads.2/tests/spin3.c | 144 +- .../pthreads.2/tests/spin4.c | 206 +- .../pthreads.2/tests/stress1.c | 556 +- .../pthreads.2/tests/test.h | 280 +- .../pthreads.2/tests/tryentercs.c | 206 +- .../pthreads.2/tests/tryentercs2.c | 184 +- .../pthreads.2/tests/tsd1.c | 422 +- .../pthreads.2/tests/tsd2.c | 430 +- .../pthreads.2/tests/valid1.c | 206 +- .../pthreads.2/tests/valid2.c | 168 +- .../pthreads.2/tsd.c | 88 +- .../pthreads.2/w32_CancelableWait.c | 320 +- .../Pre-built.2/include/pthread.h | 2736 +- .../QueueUserAPCEx/Readme.txt | 88 +- .../QueueUserAPCEx/driver/alertdrv.c | 522 +- .../QueueUserAPCEx/driver/install.bat | 4 +- .../pthreads.2/attr.c | 106 +- .../pthreads.2/autostatic.c | 138 +- .../pthreads.2/barrier.c | 94 +- .../pthreads.2/builddmc.bat | 18 +- .../pthreads.2/cancel.c | 88 +- .../pthreads.2/cleanup.c | 296 +- .../pthreads.2/condvar.c | 100 +- .../pthreads.2/config.h | 306 +- .../pthreads.2/context.h | 148 +- .../pthreads.2/create.c | 616 +- .../pthreads.2/dll.c | 184 +- .../pthreads.2/errno.c | 188 +- .../pthreads.2/exit.c | 88 +- .../pthreads.2/fork.c | 78 +- .../pthreads.2/global.c | 214 +- .../pthreads.2/implement.h | 1886 +- .../pthreads.2/manual/PortabilityIssues.html | 1436 +- .../pthreads.2/manual/index.html | 314 +- .../manual/pthreadCancelableWait.html | 172 +- .../pthreads.2/manual/pthread_attr_init.html | 560 +- .../manual/pthread_attr_setstackaddr.html | 316 +- .../manual/pthread_attr_setstacksize.html | 254 +- .../manual/pthread_barrier_init.html | 392 +- .../manual/pthread_barrier_wait.html | 320 +- .../manual/pthread_barrierattr_init.html | 284 +- .../pthread_barrierattr_setpshared.html | 318 +- .../pthreads.2/manual/pthread_cancel.html | 410 +- .../manual/pthread_cleanup_push.html | 280 +- .../pthreads.2/manual/pthread_cond_init.html | 626 +- .../manual/pthread_condattr_init.html | 196 +- .../manual/pthread_condattr_setpshared.html | 306 +- .../pthreads.2/manual/pthread_create.html | 188 +- .../pthreads.2/manual/pthread_delay_np.html | 142 +- .../pthreads.2/manual/pthread_detach.html | 178 +- .../pthreads.2/manual/pthread_equal.html | 96 +- .../pthreads.2/manual/pthread_exit.html | 118 +- .../manual/pthread_getunique_np.html | 150 +- .../manual/pthread_getw32threadhandle_np.html | 114 +- .../pthreads.2/manual/pthread_join.html | 236 +- .../pthreads.2/manual/pthread_key_create.html | 420 +- .../pthreads.2/manual/pthread_kill.html | 304 +- .../pthreads.2/manual/pthread_mutex_init.html | 710 +- .../manual/pthread_mutexattr_init.html | 412 +- .../manual/pthread_mutexattr_setpshared.html | 302 +- .../manual/pthread_num_processors_np.html | 114 +- .../pthreads.2/manual/pthread_once.html | 164 +- .../manual/pthread_rwlock_init.html | 386 +- .../manual/pthread_rwlock_rdlock.html | 336 +- .../manual/pthread_rwlock_timedrdlock.html | 312 +- .../manual/pthread_rwlock_timedwrlock.html | 300 +- .../manual/pthread_rwlock_unlock.html | 282 +- .../manual/pthread_rwlock_wrlock.html | 306 +- .../manual/pthread_rwlockattr_init.html | 282 +- .../manual/pthread_rwlockattr_setpshared.html | 320 +- .../pthreads.2/manual/pthread_self.html | 140 +- .../manual/pthread_setcancelstate.html | 414 +- .../manual/pthread_setcanceltype.html | 414 +- .../manual/pthread_setconcurrency.html | 310 +- .../manual/pthread_setschedparam.html | 226 +- .../pthreads.2/manual/pthread_spin_init.html | 352 +- .../pthreads.2/manual/pthread_spin_lock.html | 282 +- .../manual/pthread_spin_unlock.html | 248 +- .../manual/pthread_timechange_handler_np.html | 152 +- .../pthread_win32_attach_detach_np.html | 148 +- .../pthread_win32_test_features_np.html | 134 +- .../manual/sched_get_priority_max.html | 228 +- .../pthreads.2/manual/sched_getscheduler.html | 254 +- .../pthreads.2/manual/sched_setscheduler.html | 362 +- .../pthreads.2/manual/sched_yield.html | 196 +- .../pthreads.2/manual/sem_init.html | 398 +- .../pthreads.2/misc.c | 100 +- .../pthreads.2/mutex.c | 124 +- .../pthreads.2/need_errno.h | 290 +- .../pthreads.2/nonportable.c | 94 +- .../pthreads.2/private.c | 108 +- .../pthreads.2/pthread.c | 132 +- .../pthreads.2/pthread.h | 2736 +- .../pthreads.2/pthread_attr_destroy.c | 158 +- .../pthreads.2/pthread_attr_getdetachstate.c | 172 +- .../pthreads.2/pthread_attr_getinheritsched.c | 102 +- .../pthreads.2/pthread_attr_getschedparam.c | 104 +- .../pthreads.2/pthread_attr_getschedpolicy.c | 122 +- .../pthreads.2/pthread_attr_getscope.c | 108 +- .../pthreads.2/pthread_attr_getstackaddr.c | 194 +- .../pthreads.2/pthread_attr_getstacksize.c | 200 +- .../pthreads.2/pthread_attr_init.c | 234 +- .../pthreads.2/pthread_attr_setdetachstate.c | 182 +- .../pthreads.2/pthread_attr_setinheritsched.c | 114 +- .../pthreads.2/pthread_attr_setschedparam.c | 126 +- .../pthreads.2/pthread_attr_setschedpolicy.c | 110 +- .../pthreads.2/pthread_attr_setscope.c | 124 +- .../pthreads.2/pthread_attr_setstackaddr.c | 194 +- .../pthreads.2/pthread_attr_setstacksize.c | 220 +- .../pthreads.2/pthread_barrier_destroy.c | 206 +- .../pthreads.2/pthread_barrier_init.c | 138 +- .../pthreads.2/pthread_barrier_wait.c | 208 +- .../pthreads.2/pthread_barrierattr_destroy.c | 166 +- .../pthread_barrierattr_getpshared.c | 190 +- .../pthreads.2/pthread_barrierattr_init.c | 170 +- .../pthread_barrierattr_setpshared.c | 238 +- .../pthreads.2/pthread_cancel.c | 378 +- .../pthreads.2/pthread_cond_destroy.c | 506 +- .../pthreads.2/pthread_cond_init.c | 334 +- .../pthreads.2/pthread_cond_signal.c | 462 +- .../pthreads.2/pthread_cond_wait.c | 1134 +- .../pthreads.2/pthread_condattr_destroy.c | 172 +- .../pthreads.2/pthread_condattr_getpshared.c | 194 +- .../pthreads.2/pthread_condattr_init.c | 174 +- .../pthreads.2/pthread_condattr_setpshared.c | 234 +- .../pthreads.2/pthread_delay_np.c | 344 +- .../pthreads.2/pthread_detach.c | 272 +- .../pthreads.2/pthread_equal.c | 152 +- .../pthreads.2/pthread_exit.c | 212 +- .../pthreads.2/pthread_getconcurrency.c | 90 +- .../pthreads.2/pthread_getschedparam.c | 150 +- .../pthreads.2/pthread_getspecific.c | 174 +- .../pthreads.2/pthread_getunique_np.c | 94 +- .../pthread_getw32threadhandle_np.c | 130 +- .../pthreads.2/pthread_join.c | 314 +- .../pthreads.2/pthread_key_create.c | 216 +- .../pthreads.2/pthread_key_delete.c | 250 +- .../pthreads.2/pthread_kill.c | 210 +- .../pthreads.2/pthread_mutex_consistent.c | 380 +- .../pthreads.2/pthread_mutex_destroy.c | 296 +- .../pthreads.2/pthread_mutex_init.c | 260 +- .../pthreads.2/pthread_mutex_lock.c | 538 +- .../pthreads.2/pthread_mutex_timedlock.c | 648 +- .../pthreads.2/pthread_mutex_trylock.c | 308 +- .../pthreads.2/pthread_mutex_unlock.c | 350 +- .../pthreads.2/pthread_mutexattr_destroy.c | 166 +- .../pthreads.2/pthread_mutexattr_getkind_np.c | 88 +- .../pthreads.2/pthread_mutexattr_getpshared.c | 190 +- .../pthreads.2/pthread_mutexattr_getrobust.c | 226 +- .../pthreads.2/pthread_mutexattr_gettype.c | 112 +- .../pthreads.2/pthread_mutexattr_init.c | 172 +- .../pthreads.2/pthread_mutexattr_setkind_np.c | 88 +- .../pthreads.2/pthread_mutexattr_setpshared.c | 238 +- .../pthreads.2/pthread_mutexattr_setrobust.c | 238 +- .../pthreads.2/pthread_mutexattr_settype.c | 286 +- .../pthreads.2/pthread_num_processors_np.c | 112 +- .../pthreads.2/pthread_once.c | 158 +- .../pthreads.2/pthread_rwlock_destroy.c | 286 +- .../pthreads.2/pthread_rwlock_init.c | 218 +- .../pthreads.2/pthread_rwlock_rdlock.c | 204 +- .../pthreads.2/pthread_rwlock_timedrdlock.c | 218 +- .../pthreads.2/pthread_rwlock_timedwrlock.c | 278 +- .../pthreads.2/pthread_rwlock_tryrdlock.c | 204 +- .../pthreads.2/pthread_rwlock_trywrlock.c | 244 +- .../pthreads.2/pthread_rwlock_unlock.c | 186 +- .../pthreads.2/pthread_rwlock_wrlock.c | 266 +- .../pthreads.2/pthread_rwlockattr_destroy.c | 168 +- .../pthread_rwlockattr_getpshared.c | 194 +- .../pthreads.2/pthread_rwlockattr_init.c | 166 +- .../pthread_rwlockattr_setpshared.c | 240 +- .../pthreads.2/pthread_self.c | 282 +- .../pthreads.2/pthread_setcancelstate.c | 250 +- .../pthreads.2/pthread_setcanceltype.c | 252 +- .../pthreads.2/pthread_setconcurrency.c | 106 +- .../pthreads.2/pthread_setschedparam.c | 246 +- .../pthreads.2/pthread_setspecific.c | 334 +- .../pthreads.2/pthread_spin_destroy.c | 222 +- .../pthreads.2/pthread_spin_init.c | 246 +- .../pthreads.2/pthread_spin_lock.c | 160 +- .../pthreads.2/pthread_spin_trylock.c | 154 +- .../pthreads.2/pthread_spin_unlock.c | 142 +- .../pthreads.2/pthread_testcancel.c | 206 +- .../pthread_timechange_handler_np.c | 216 +- .../pthread_win32_attach_detach_np.c | 512 +- .../pthreads.2/ptw32_MCS_lock.c | 556 +- .../pthreads.2/ptw32_OLL_lock.c | 1468 +- .../ptw32_callUserDestroyRoutines.c | 464 +- .../pthreads.2/ptw32_calloc.c | 112 +- .../pthreads.2/ptw32_cond_check_need_init.c | 156 +- .../pthreads.2/ptw32_getprocessors.c | 182 +- .../pthreads.2/ptw32_is_attr.c | 94 +- .../pthreads.2/ptw32_mutex_check_need_init.c | 184 +- .../pthreads.2/ptw32_new.c | 188 +- .../pthreads.2/ptw32_processInitialize.c | 184 +- .../pthreads.2/ptw32_processTerminate.c | 210 +- .../pthreads.2/ptw32_relmillisecs.c | 264 +- .../pthreads.2/ptw32_reuse.c | 302 +- .../pthreads.2/ptw32_rwlock_cancelwrwait.c | 100 +- .../pthreads.2/ptw32_rwlock_check_need_init.c | 154 +- .../pthreads.2/ptw32_semwait.c | 270 +- .../ptw32_spinlock_check_need_init.c | 156 +- .../pthreads.2/ptw32_threadDestroy.c | 158 +- .../pthreads.2/ptw32_threadStart.c | 714 +- .../pthreads.2/ptw32_throw.c | 378 +- .../pthreads.2/ptw32_timespec.c | 166 +- .../pthreads.2/ptw32_tkAssocCreate.c | 236 +- .../pthreads.2/ptw32_tkAssocDestroy.c | 228 +- .../pthreads.2/rwlock.c | 102 +- .../pthreads.2/sched.c | 106 +- .../pthreads.2/sched.h | 366 +- .../pthreads.2/sched_get_priority_max.c | 268 +- .../pthreads.2/sched_get_priority_min.c | 270 +- .../pthreads.2/sched_getscheduler.c | 142 +- .../pthreads.2/sched_setscheduler.c | 166 +- .../pthreads.2/sched_yield.c | 142 +- .../pthreads.2/sem_close.c | 116 +- .../pthreads.2/sem_destroy.c | 288 +- .../pthreads.2/sem_getvalue.c | 220 +- .../pthreads.2/sem_init.c | 338 +- .../pthreads.2/sem_open.c | 116 +- .../pthreads.2/sem_post.c | 256 +- .../pthreads.2/sem_post_multiple.c | 284 +- .../pthreads.2/sem_timedwait.c | 476 +- .../pthreads.2/sem_trywait.c | 234 +- .../pthreads.2/sem_unlink.c | 116 +- .../pthreads.2/sem_wait.c | 374 +- .../pthreads.2/semaphore.c | 138 +- .../pthreads.2/semaphore.h | 338 +- .../pthreads.2/signal.c | 358 +- .../pthreads.2/spin.c | 92 +- .../pthreads.2/sync.c | 86 +- .../pthreads.2/tests/Debug.txt | 10 +- .../pthreads.2/tests/barrier1.c | 116 +- .../pthreads.2/tests/barrier2.c | 110 +- .../pthreads.2/tests/barrier3.c | 142 +- .../pthreads.2/tests/barrier4.c | 220 +- .../pthreads.2/tests/barrier5.c | 236 +- .../pthreads.2/tests/barrier6.c | 234 +- .../pthreads.2/tests/benchlib.c | 726 +- .../pthreads.2/tests/benchtest.h | 140 +- .../pthreads.2/tests/benchtest1.c | 532 +- .../pthreads.2/tests/benchtest2.c | 654 +- .../pthreads.2/tests/benchtest3.c | 434 +- .../pthreads.2/tests/benchtest4.c | 396 +- .../pthreads.2/tests/benchtest5.c | 318 +- .../pthreads.2/tests/cancel1.c | 358 +- .../pthreads.2/tests/cancel2.c | 516 +- .../pthreads.2/tests/cancel3.c | 402 +- .../pthreads.2/tests/cancel4.c | 406 +- .../pthreads.2/tests/cancel5.c | 398 +- .../pthreads.2/tests/cancel6a.c | 382 +- .../pthreads.2/tests/cancel6d.c | 386 +- .../pthreads.2/tests/cancel7.c | 436 +- .../pthreads.2/tests/cancel8.c | 438 +- .../pthreads.2/tests/cancel9.c | 404 +- .../pthreads.2/tests/cleanup0.c | 458 +- .../pthreads.2/tests/cleanup1.c | 484 +- .../pthreads.2/tests/cleanup2.c | 434 +- .../pthreads.2/tests/cleanup3.c | 444 +- .../pthreads.2/tests/condvar1.c | 194 +- .../pthreads.2/tests/condvar1_1.c | 230 +- .../pthreads.2/tests/condvar1_2.c | 248 +- .../pthreads.2/tests/condvar2.c | 250 +- .../pthreads.2/tests/condvar2_1.c | 306 +- .../pthreads.2/tests/condvar3.c | 296 +- .../pthreads.2/tests/condvar3_1.c | 402 +- .../pthreads.2/tests/condvar3_2.c | 386 +- .../pthreads.2/tests/condvar3_3.c | 264 +- .../pthreads.2/tests/condvar4.c | 338 +- .../pthreads.2/tests/condvar5.c | 336 +- .../pthreads.2/tests/condvar6.c | 484 +- .../pthreads.2/tests/condvar7.c | 514 +- .../pthreads.2/tests/condvar8.c | 516 +- .../pthreads.2/tests/condvar9.c | 534 +- .../pthreads.2/tests/context1.c | 284 +- .../pthreads.2/tests/count1.c | 180 +- .../pthreads.2/tests/create1.c | 132 +- .../pthreads.2/tests/create2.c | 218 +- .../pthreads.2/tests/create3.c | 218 +- .../pthreads.2/tests/delay1.c | 102 +- .../pthreads.2/tests/delay2.c | 164 +- .../pthreads.2/tests/detach1.c | 186 +- .../pthreads.2/tests/equal1.c | 132 +- .../pthreads.2/tests/errno1.c | 354 +- .../pthreads.2/tests/exception1.c | 526 +- .../pthreads.2/tests/exception2.c | 316 +- .../pthreads.2/tests/exception3.c | 366 +- .../pthreads.2/tests/exit1.c | 100 +- .../pthreads.2/tests/exit2.c | 128 +- .../pthreads.2/tests/exit3.c | 136 +- .../pthreads.2/tests/exit4.c | 398 +- .../pthreads.2/tests/exit5.c | 410 +- .../pthreads.2/tests/eyal1.c | 734 +- .../pthreads.2/tests/inherit1.c | 354 +- .../pthreads.2/tests/join0.c | 134 +- .../pthreads.2/tests/join1.c | 156 +- .../pthreads.2/tests/join2.c | 138 +- .../pthreads.2/tests/join3.c | 150 +- .../pthreads.2/tests/kill1.c | 166 +- .../pthreads.2/tests/loadfree.c | 140 +- .../pthreads.2/tests/mutex1.c | 136 +- .../pthreads.2/tests/mutex1e.c | 156 +- .../pthreads.2/tests/mutex1n.c | 156 +- .../pthreads.2/tests/mutex1r.c | 156 +- .../pthreads.2/tests/mutex2.c | 132 +- .../pthreads.2/tests/mutex2e.c | 132 +- .../pthreads.2/tests/mutex2r.c | 132 +- .../pthreads.2/tests/mutex3.c | 150 +- .../pthreads.2/tests/mutex3e.c | 150 +- .../pthreads.2/tests/mutex3r.c | 150 +- .../pthreads.2/tests/mutex4.c | 218 +- .../pthreads.2/tests/mutex5.c | 134 +- .../pthreads.2/tests/mutex6.c | 186 +- .../pthreads.2/tests/mutex6e.c | 218 +- .../pthreads.2/tests/mutex6es.c | 188 +- .../pthreads.2/tests/mutex6n.c | 214 +- .../pthreads.2/tests/mutex6r.c | 214 +- .../pthreads.2/tests/mutex6rs.c | 184 +- .../pthreads.2/tests/mutex6s.c | 186 +- .../pthreads.2/tests/mutex7.c | 164 +- .../pthreads.2/tests/mutex7e.c | 216 +- .../pthreads.2/tests/mutex7n.c | 200 +- .../pthreads.2/tests/mutex7r.c | 214 +- .../pthreads.2/tests/mutex8.c | 164 +- .../pthreads.2/tests/mutex8e.c | 206 +- .../pthreads.2/tests/mutex8n.c | 206 +- .../pthreads.2/tests/mutex8r.c | 206 +- .../pthreads.2/tests/once1.c | 154 +- .../pthreads.2/tests/once2.c | 226 +- .../pthreads.2/tests/once3.c | 268 +- .../pthreads.2/tests/once4.c | 386 +- .../pthreads.2/tests/openmp1.c | 280 +- .../pthreads.2/tests/priority1.c | 344 +- .../pthreads.2/tests/priority2.c | 338 +- .../pthreads.2/tests/reuse1.c | 248 +- .../pthreads.2/tests/reuse2.c | 336 +- .../pthreads.2/tests/robust1.c | 282 +- .../pthreads.2/tests/robust2.c | 286 +- .../pthreads.2/tests/robust3.c | 298 +- .../pthreads.2/tests/robust4.c | 398 +- .../pthreads.2/tests/robust5.c | 240 +- .../pthreads.2/tests/rwlock1.c | 122 +- .../pthreads.2/tests/rwlock2.c | 132 +- .../pthreads.2/tests/rwlock2_t.c | 156 +- .../pthreads.2/tests/rwlock3.c | 156 +- .../pthreads.2/tests/rwlock3_t.c | 174 +- .../pthreads.2/tests/rwlock4.c | 156 +- .../pthreads.2/tests/rwlock4_t.c | 174 +- .../pthreads.2/tests/rwlock5.c | 160 +- .../pthreads.2/tests/rwlock5_t.c | 178 +- .../pthreads.2/tests/rwlock6.c | 202 +- .../pthreads.2/tests/rwlock6_t.c | 252 +- .../pthreads.2/tests/rwlock6_t2.c | 238 +- .../pthreads.2/tests/rwlock7.c | 398 +- .../pthreads.2/tests/rwlock8.c | 410 +- .../pthreads.2/tests/self1.c | 138 +- .../pthreads.2/tests/self2.c | 146 +- .../pthreads.2/tests/semaphore1.c | 300 +- .../pthreads.2/tests/semaphore2.c | 216 +- .../pthreads.2/tests/semaphore3.c | 242 +- .../pthreads.2/tests/semaphore4.c | 264 +- .../pthreads.2/tests/semaphore4t.c | 258 +- .../pthreads.2/tests/semaphore5.c | 206 +- .../pthreads.2/tests/sequence1.c | 284 +- .../pthreads.2/tests/sizes.c | 64 +- .../pthreads.2/tests/spin1.c | 118 +- .../pthreads.2/tests/spin2.c | 150 +- .../pthreads.2/tests/spin3.c | 152 +- .../pthreads.2/tests/spin4.c | 206 +- .../pthreads.2/tests/stress1.c | 556 +- .../pthreads.2/tests/test.h | 364 +- .../pthreads.2/tests/tryentercs.c | 206 +- .../pthreads.2/tests/tryentercs2.c | 184 +- .../pthreads.2/tests/tsd1.c | 418 +- .../pthreads.2/tests/tsd2.c | 426 +- .../pthreads.2/tests/valid1.c | 206 +- .../pthreads.2/tests/valid2.c | 168 +- .../pthreads.2/tsd.c | 88 +- .../pthreads.2/w32_CancelableWait.c | 322 +- .../snappy-1.1.0/testdata/alice29.txt | 7216 +-- .../external/snappy-1.1.0/testdata/lcet10.txt | 15038 +++--- .../snappy-1.1.0/testdata/plrabn12.txt | 21398 ++++----- libgid/external/zlib-1.2.8/build_msvc2010.bat | 20 +- .../zlib-1.2.8/contrib/dotzlib/DotZLib.sln | 42 +- .../contrib/dotzlib/LICENSE_1_0.txt | 44 +- .../zlib-1.2.8/contrib/dotzlib/readme.txt | 116 +- .../zlib-1.2.8/contrib/masmx64/bld_ml64.bat | 4 +- .../zlib-1.2.8/contrib/masmx64/inffas8664.c | 372 +- .../zlib-1.2.8/contrib/masmx64/readme.txt | 62 +- .../zlib-1.2.8/contrib/masmx86/bld_ml32.bat | 4 +- .../zlib-1.2.8/contrib/masmx86/readme.txt | 54 +- .../zlib-1.2.8/contrib/testzlib/testzlib.c | 550 +- .../zlib-1.2.8/contrib/testzlib/testzlib.txt | 18 +- .../zlib-1.2.8/contrib/vstudio/readme.txt | 130 +- .../contrib/vstudio/vc10/zlibvc.sln | 270 +- .../contrib/vstudio/vc11/zlibvc.sln | 234 +- .../contrib/vstudio/vc9/miniunz.vcproj | 1130 +- .../contrib/vstudio/vc9/minizip.vcproj | 1124 +- .../contrib/vstudio/vc9/testzlib.vcproj | 1704 +- .../contrib/vstudio/vc9/testzlibdll.vcproj | 1130 +- .../contrib/vstudio/vc9/zlibstat.vcproj | 1670 +- .../zlib-1.2.8/contrib/vstudio/vc9/zlibvc.sln | 288 +- .../contrib/vstudio/vc9/zlibvc.vcproj | 2312 +- libgid/external/zlib-1.2.8/zlib.pro | 46 +- libgid/include/android/ginput-android.h | 44 +- libgid/include/android/gvfs-android.h | 50 +- libgid/include/compat/inttypes.h | 24 +- libgid/include/compat/sys/file.h | 12 +- libgid/include/compat/unistd.h | 16 +- libgid/include/gapplication.h | 90 +- libgid/include/gaudio.h | 210 +- libgid/include/gexport.h | 32 +- libgid/include/ggeolocation.h | 122 +- libgid/include/gglobal.h | 28 +- libgid/include/gimage.h | 70 +- libgid/include/ginput.h | 294 +- libgid/include/glog.h | 62 +- libgid/include/gtexture.h | 156 +- libgid/include/gui.h | 150 +- libgid/include/gvfs-native.h | 46 +- libgid/include/qt/gui-qt.h | 172 +- libgid/libgid.cpp | 2 +- libgid/libgid.h | 4 +- libgid/libgid.sln | 40 +- libgid/libgid_qt4.pro | 252 +- libgid/libgid_qt5.pro | 266 +- libgid/src/android/gaudio-android.cpp | 194 +- .../android/gaudio-background-mediaplayer.cpp | 876 +- libgid/src/android/ggeolocation-android.cpp | 548 +- libgid/src/android/ghttp-android.cpp | 740 +- libgid/src/android/ginput-android.cpp | 1762 +- libgid/src/android/gui-android.cpp | 1238 +- libgid/src/android/gvfs-android.cpp | 708 +- libgid/src/gaudio-loader-mp3.cpp | 282 +- libgid/src/gaudio-loader-wav.cpp | 434 +- libgid/src/gaudio-sample-openal.cpp | 998 +- libgid/src/gaudio-stream-openal.cpp | 1420 +- libgid/src/gaudio.cpp | 1676 +- libgid/src/gevent.cpp | 718 +- libgid/src/gglobal.cpp | 16 +- libgid/src/gimage-jpg.cpp | 756 +- libgid/src/gimage-png.cpp | 298 +- libgid/src/gimage.cpp | 172 +- libgid/src/glog.cpp | 236 +- libgid/src/gtexture.cpp | 1450 +- libgid/src/gvfs-native.cpp | 690 +- libgid/src/qt/gapplication-qt.cpp | 72 +- libgid/src/qt/gaudio-qt.cpp | 188 +- libgid/src/qt/ggeolocation-qt.cpp | 168 +- libgid/src/qt/gui-qt.cpp | 1034 +- libgid/test/test-audio/main.cpp | 100 +- libgid/test/test-audio/test-audio.pro | 44 +- libgid/test/test-gl/main.cpp | 64 +- libgid/test/test-gl/mainwindow.cpp | 342 +- libgid/test/test-gl/mainwindow.h | 72 +- libgid/test/test-gl/test-gl.pro | 56 +- libgid/test/test-http/main.cpp | 46 +- libgid/test/test-http/mainwindow.cpp | 74 +- libgid/test/test-http/mainwindow.h | 50 +- libgid/test/test-http/test-http.pro | 50 +- libgid/test/test-input/main.cpp | 42 +- libgid/test/test-input/mainwindow.cpp | 268 +- libgid/test/test-input/mainwindow.h | 90 +- libgid/test/test-input/test-input.pro | 44 +- libgid/test/test-jpg/main.cpp | 36 +- libgid/test/test-jpg/mainwindow.cpp | 212 +- libgid/test/test-jpg/mainwindow.h | 56 +- libgid/test/test-jpg/test-jpg.pro | 44 +- libgid/test/test-path/main.c | 126 +- libgid/test/test-path/test-path.pro | 20 +- libgid/test/test-png/main.cpp | 36 +- libgid/test/test-png/mainwindow.cpp | 610 +- libgid/test/test-png/mainwindow.h | 56 +- libgid/test/test-png/test-png.pro | 46 +- libgid/test/test-texture/main.cpp | 60 +- libgid/test/test-texture/mainwindow.cpp | 186 +- libgid/test/test-texture/mainwindow.h | 76 +- libgid/test/test-texture/test-texture.pro | 46 +- libgideros/binderutil.cpp | 662 +- libgideros/event.cpp | 50 +- libgideros/event.h | 206 +- libgideros/eventdispatcher.cpp | 6 +- libgideros/eventdispatcher.h | 588 +- libgideros/eventtype.h | 62 +- libgideros/eventvisitor.h | 68 +- libgideros/gexport.h | 40 +- libgideros/gideros_p.h | 44 +- libgideros/gproxy.h | 88 +- libgideros/libgideros.pro | 126 +- libgideros/luautil.cpp | 426 +- libgideros/luautil.h | 56 +- libgideros/pluginmanager.cpp | 176 +- libgideros/pluginmanager.h | 84 +- libgideros/refptr.cpp | 152 +- libgideros/refptr.h | 6 +- libgideros/stringid.cpp | 230 +- libgideros/stringid.h | 222 +- libgvfs/defines.h | 196 +- libgvfs/extra.c | 16 +- libgvfs/fileops.c | 82 +- libgvfs/fprintf.c | 30 +- libgvfs/gexport.h | 40 +- libgvfs/gfile.cpp | 132 +- libgvfs/gfile.h | 36 +- libgvfs/gfile_p.h | 50 +- libgvfs/gpath.cpp | 392 +- libgvfs/gpath.h | 86 +- libgvfs/gpath_p.h | 32 +- libgvfs/gstdio.h | 274 +- libgvfs/libgvfs.pro | 136 +- libgvfs/vfprintf.c | 44 +- libnetwork/bytebuffer.cpp | 284 +- libnetwork/bytebuffer.h | 306 +- libnetwork/libnetwork.cpp | 1492 +- libnetwork/libnetwork.h | 300 +- libnetwork/libnetwork.vcproj | 366 +- libpreviewwidget/libpreviewwidget.vcproj | 532 +- libpreviewwidget/previewwidget.cpp | 364 +- libpreviewwidget/previewwidget.h | 40 +- libpvrt/PVRTDecompress.cpp | 1846 +- libpvrt/PVRTDecompress.h | 114 +- libpvrt/PVRTGlobal.h | 500 +- libpvrt/PVRTMemoryFileSystem.h | 200 +- libpvrt/PVRTResourceFile.cpp | 612 +- libpvrt/PVRTResourceFile.h | 240 +- libpvrt/PVRTString.cpp | 2750 +- libpvrt/PVRTString.h | 1498 +- libpvrt/PVRTTexture.cpp | 318 +- libpvrt/PVRTTexture.h | 746 +- libpvrt/libpvrt.vcproj | 416 +- libpystring/build_msvc2010.bat | 16 +- libpystring/libpystring.pro | 38 +- libpystring/pystring_export.h | 28 +- licenses.txt | 2084 +- lua/etc/luavs.bat | 56 +- lua/lua.pro | 108 +- lua/lua.vcproj | 1258 +- luabinding/accelerometerbinder.cpp | 248 +- luabinding/accelerometerbinder.h | 46 +- luabinding/alertdialogbinder.cpp | 326 +- luabinding/alertdialogbinder.h | 38 +- luabinding/applicationbinder.cpp | 1366 +- luabinding/applicationbinder.h | 100 +- luabinding/audiobinder.cpp | 1436 +- luabinding/audiobinder.h | 66 +- luabinding/binder.cpp | 88 +- luabinding/binder.h | 78 +- luabinding/bitmapbinder.cpp | 246 +- luabinding/bitmapbinder.h | 42 +- luabinding/bitmapdatabinder.cpp | 194 +- luabinding/bitmapdatabinder.h | 38 +- luabinding/compatibility.lua | 166 +- luabinding/dibbinder.cpp | 174 +- luabinding/dibbinder.h | 36 +- luabinding/eventbinder.h | 38 +- luabinding/eventdispatcherbinder.h | 44 +- luabinding/fontbasebinder.cpp | 168 +- luabinding/fontbasebinder.h | 36 +- luabinding/fontbinder.cpp | 102 +- luabinding/fontbinder.h | 32 +- luabinding/geolocationbinder.cpp | 716 +- luabinding/geolocationbinder.h | 58 +- luabinding/gyroscopebinder.cpp | 248 +- luabinding/gyroscopebinder.h | 42 +- luabinding/keys.cpp | 50 +- luabinding/keys.h | 42 +- luabinding/luaapplication.h | 350 +- luabinding/luabinding.vcproj | 1226 +- luabinding/matrixbinder.cpp | 404 +- luabinding/matrixbinder.h | 68 +- luabinding/meshbinder.cpp | 1546 +- luabinding/meshbinder.h | 116 +- luabinding/modules/finishedgroups.cpp | 486 +- luabinding/movieclipbinder.cpp | 677 +- luabinding/movieclipbinder.h | 48 +- luabinding/property.lua | 140 +- luabinding/registermodules.cpp | 34 +- luabinding/rendertargetbinder.cpp | 134 +- luabinding/rendertargetbinder.h | 32 +- luabinding/shapebinder.cpp | 416 +- luabinding/shapebinder.h | 52 +- luabinding/sprite.lua | 126 +- luabinding/stackchecker.cpp | 32 +- luabinding/stackchecker.h | 70 +- luabinding/stagebinder.cpp | 376 +- luabinding/stagebinder.h | 52 +- luabinding/test.lua | 382 +- luabinding/textfieldbinder.cpp | 364 +- luabinding/textfieldbinder.h | 50 +- luabinding/textinputdialogbinder.cpp | 672 +- luabinding/textinputdialogbinder.h | 52 +- luabinding/texturebinder.cpp | 222 +- luabinding/texturebinder.h | 32 +- luabinding/texturepack.lua | 30 +- luabinding/texturepackbinder.cpp | 502 +- luabinding/texturepackbinder.h | 36 +- luabinding/timerbinder.cpp | 540 +- luabinding/timerbinder.h | 66 +- luabinding/tlsf.c | 2102 +- luabinding/tlsf.h | 136 +- luabinding/tlsfbits.h | 360 +- luabinding/ttfontbinder.cpp | 128 +- luabinding/ttfontbinder.h | 34 +- luabinding/zlibbinder.cpp | 1962 +- luajit/build-qt.bat | 4 +- luajit/src/msvcbuild.bat | 226 +- luajit/src/xedkbuild.bat | 184 +- .../Clipper/source/clipper.cpp | 6892 +-- .../Clipper/source/clipper.hpp | 612 +- plugins-bleedingedge/onesec/onesec.cpp | 278 +- plugins-bleedingedge/onesec/onesec.pro | 46 +- plugins/bitop/source/bit_stub.cpp | 44 +- plugins/bitop/source/bitop.pro | 36 +- .../android/plugins/flurry/GFlurry.java | 164 +- .../plugins/googlebilling/GGoogleBilling.java | 280 +- .../source/Android/ggooglebilling.cpp | 664 +- .../source/Android/ggooglebilling.h | 190 +- .../source/Android/googlebillingbinder.cpp | 938 +- plugins/json/source/json.pro | 44 +- plugins/lfs/source/lfs.pro | 38 +- plugins/lfs/source/lfs_stub.cpp | 46 +- plugins/lpeg/source/lpeg.pro | 36 +- plugins/lpeg/source/lpeg_stub.cpp | 46 +- plugins/lsqlite3/source/lsqlite3.pro | 40 +- plugins/luasocket/source/luasocket.pro | 88 +- .../Android/jni/gmicrophone-android.cpp | 772 +- .../source/Android/jni/gmicrophone.h | 88 +- .../source/Android/jni/gmicrophonebinder.cpp | 820 +- .../source/Android/jni/gsoundencoder-wav.cpp | 326 +- .../source/Android/jni/gsoundencoder.h | 32 +- .../plugins/microphone/GMicrophone.java | 476 +- plugins/microphone/source/iOS/gmicrophone.h | 88 +- .../source/iOS/gmicrophonebinder.cpp | 820 +- .../source/iOS/gsoundencoder-wav.cpp | 326 +- plugins/microphone/source/iOS/gsoundencoder.h | 32 +- .../Angry Birds/easing.lua | 362 +- samplecode-bleedingedge/Angry Birds/game.lua | 584 +- .../Angry Birds/gtween.lua | 868 +- samplecode-bleedingedge/Angry Birds/init.lua | 4 +- samplecode-bleedingedge/Angry Birds/main.lua | 148 +- samplecode-bleedingedge/Angry Birds/puf.lua | 90 +- samplecode-bleedingedge/Angry Birds/sling.lua | 214 +- samplecode-bleedingedge/BMFont/bmfont.lua | 160 +- samplecode-bleedingedge/BMFont/main.lua | 22 +- samplecode-bleedingedge/Ball Physics/ball.lua | 168 +- samplecode-bleedingedge/Ball Physics/main.lua | 50 +- .../Fruit Ninja/bmfont.lua | 160 +- .../Fruit Ninja/easing.lua | 362 +- .../Fruit Ninja/gtween.lua | 868 +- samplecode-bleedingedge/Fruit Ninja/main.lua | 312 +- .../Fruit Ninja/polygonutils.lua | 212 +- .../Fruit Ninja/vegetable.lua | 174 +- samplecode-bleedingedge/GET/main.lua | 48 +- .../Isometric Tilemap/iso-test-vertexz.lua | 238 +- .../Isometric Tilemap/isometrictilemap.lua | 196 +- .../Isometric Tilemap/main.lua | 210 +- .../Scene Manager Old/button.lua | 208 +- .../Scene Manager Old/main.lua | 62 +- .../Scene Manager Old/scene1.lua | 10 +- .../Scene Manager Old/scene2.lua | 10 +- .../Scene Manager Old/scene3.lua | 10 +- .../Scene Manager Old/scene4.lua | 10 +- .../Scene Manager Old/scenemanager.lua | 162 +- .../Scene Manager/button.lua | 208 +- .../Scene Manager/easing.lua | 362 +- .../Scene Manager/main.lua | 282 +- .../Scene Manager/scene1.lua | 52 +- .../Scene Manager/scene2.lua | 52 +- .../Scene Manager/scene3.lua | 52 +- .../Scene Manager/scene4.lua | 52 +- .../Scene Manager/scenemanager.lua | 668 +- .../Squirrel Attack/easing.lua | 362 +- .../Squirrel Attack/gtween.lua | 858 +- .../Squirrel Attack/main.lua | 758 +- samplecode-bleedingedge/Switch/main.lua | 12 +- samplecode-bleedingedge/Switch/switch.lua | 210 +- samplecode-bleedingedge/Throwing/main.lua | 104 +- .../Throwing/mousejointbox.lua | 80 +- samplecode-bleedingedge/TweenLite/main.lua | 30 +- .../TweenLite/tweennano.lua | 350 +- samplecode-test/Google Billing/main.lua | 38 +- .../Timer UrlLoader SoundChannel GC/main.lua | 66 +- samplecode-test/added_removed_stage/main.lua | 146 +- samplecode-test/audio/main.lua | 104 +- .../multi resolution font/arial_10_new.txt | 136 +- .../multi resolution font/arial_10_new@2x.txt | 224 +- .../multi resolution font/arial_10_old.txt | 170 +- .../multi resolution font/arial_10_old@2x.txt | 170 +- .../arial_20_intr_new.txt | 44 +- .../arial_20_intr_new@2x.txt | 44 +- .../arial_20_intr_old.txt | 218 +- .../arial_20_intr_old@2x.txt | 218 +- .../multi resolution font/arial_50_new.txt | 262 +- .../multi resolution font/arial_50_new@2x.txt | 264 +- .../multi resolution font/arial_50_old.txt | 170 +- .../multi resolution font/arial_50_old@2x.txt | 170 +- .../multi resolution font/main.lua | 360 +- .../multi resolution texture/main.lua | 80 +- .../performance-test/v1/bulletlayer.lua | 166 +- samplecode-test/performance-test/v1/enemy.lua | 182 +- .../performance-test/v1/explosionlayer.lua | 70 +- samplecode-test/performance-test/v1/game.lua | 166 +- samplecode-test/performance-test/v1/main.lua | 50 +- .../performance-test/v1/player.lua | 148 +- .../performance-test/v1/soundmanager.lua | 42 +- .../performance-test/v2/bulletlayer.lua | 196 +- samplecode-test/performance-test/v2/enemy.lua | 182 +- .../performance-test/v2/explosionlayer.lua | 70 +- samplecode-test/performance-test/v2/game.lua | 166 +- samplecode-test/performance-test/v2/main.lua | 50 +- .../performance-test/v2/player.lua | 148 +- .../performance-test/v2/soundmanager.lua | 42 +- .../real mouse touch coordinates/main.lua | 24 +- samplecode/Audio/Audio Example/button.lua | 208 +- samplecode/Audio/Audio Example/main.lua | 50 +- .../Audio/Audio Example/soundbutton.lua | 38 +- samplecode/Audio/Music Player/button.lua | 208 +- samplecode/Audio/Music Player/license.txt | 6 +- samplecode/Audio/Music Player/main.lua | 188 +- samplecode/Graphics/Bird Animation/bird.lua | 136 +- samplecode/Graphics/Bird Animation/main.lua | 72 +- samplecode/Graphics/Button/button.lua | 212 +- samplecode/Graphics/Color Transform/main.lua | 114 +- samplecode/Graphics/Drag Me/main.lua | 146 +- samplecode/Graphics/Fading Stars/fade.lua | 60 +- samplecode/Graphics/Fading Stars/main.lua | 42 +- samplecode/Graphics/Fonts/main.lua | 58 +- samplecode/Graphics/GTween/easing.lua | 362 +- samplecode/Graphics/GTween/gtween.lua | 904 +- samplecode/Graphics/GTween/main.lua | 22 +- samplecode/Graphics/Hierarchy/main.lua | 90 +- samplecode/Graphics/Jumping Ball/main.lua | 106 +- samplecode/Graphics/Jumping Balls/ball.lua | 104 +- samplecode/Graphics/Jumping Balls/main.lua | 52 +- samplecode/Graphics/Shapes/button.lua | 208 +- samplecode/Graphics/Shapes/main.lua | 376 +- samplecode/Graphics/Texture Pack/anim.txt | 26 +- .../Graphics/Texture Pack/animatedsprite.lua | 110 +- samplecode/Graphics/Texture Pack/main.lua | 24 +- .../Tiled Map Editor/Desert/desert.lua | 2 +- .../Graphics/Tiled Map Editor/Desert/main.lua | 234 +- .../Graphics/Tiled Map Editor/Sewers/main.lua | 234 +- .../Tiled Map Editor/Sewers/sewers.lua | 2 +- samplecode/Hardware/Accelerometer/button.lua | 208 +- samplecode/Hardware/Accelerometer/main.lua | 178 +- .../Hardware/Application Lifecycle/button.lua | 208 +- .../Hardware/Application Lifecycle/main.lua | 260 +- .../Automatic Image Resolution/main.lua | 24 +- .../@2x/pack@2x.txt | 8 +- .../base/pack.txt | 8 +- .../main.lua | 56 +- .../Hardware/GPS and Compass/arial-18.txt | 182 +- .../Hardware/GPS and Compass/arial-36.txt | 182 +- .../Hardware/GPS and Compass/button.lua | 208 +- samplecode/Hardware/GPS and Compass/main.lua | 170 +- samplecode/Hardware/Keyboard/main.lua | 112 +- samplecode/Hardware/Touch Explorer/main.lua | 186 +- samplecode/Network/Image Loader/main.lua | 80 +- samplecode/Network/Weather/arial-12.txt | 1142 +- samplecode/Network/Weather/arial-24.txt | 1142 +- samplecode/Network/Weather/main.lua | 186 +- samplecode/Network/Weather/vardump.lua | 88 +- samplecode/Network/Weather/xml.lua | 196 +- samplecode/Physics/Bridge/main.lua | 184 +- samplecode/Physics/Chain/main.lua | 128 +- .../Physics/Collision Detection/main.lua | 222 +- .../Physics/Collision Filtering/main.lua | 154 +- samplecode/Physics/Elastic Joints/main.lua | 168 +- samplecode/Physics/Particles/main.lua | 116 +- samplecode/Physics/Sleeping Bodies/main.lua | 182 +- samplecode/Physics/Vertical Stack/main.lua | 140 +- samplecode/Shaders/Bird Animation 2/bird.lua | 136 +- samplecode/Shaders/Bird Animation 2/main.lua | 142 +- samplecode/Shaders/Bird Animation 2/ps.glsl | 26 +- samplecode/Shaders/Bird Animation 2/vs.glsl | 24 +- samplecode/Shaders/Bloom/Bloom.lua | 212 +- samplecode/Shaders/Bloom/fBlur.glsl | 26 +- samplecode/Shaders/Bloom/fCombine.glsl | 66 +- samplecode/Shaders/Bloom/fExtract.glsl | 18 +- samplecode/Shaders/Bloom/main.lua | 150 +- samplecode/Shaders/Bloom/vShader.glsl | 20 +- samplecode/Shaders/Blur/fShader.glsl | 38 +- samplecode/Shaders/Blur/fShader.hlsl | 48 +- samplecode/Shaders/Blur/main.lua | 78 +- samplecode/Shaders/Blur/vShader.glsl | 20 +- samplecode/Shaders/Blur/vShader.hlsl | 46 +- samplecode/Shaders/Normal Mapping/main.lua | 62 +- samplecode/Shaders/Normal Mapping/ps.glsl | 44 +- samplecode/Shaders/Normal Mapping/vs.glsl | 28 +- samplecode/Timers/Timers/main.lua | 52 +- scripts/all_windows.bat | 16 +- scripts/bin2c.c | 154 +- scripts/copyall.bat | 550 +- scripts/copyqt4.bat | 54 +- scripts/copyqt5.bat | 76 +- scripts/createpackage.bat | 4 +- scripts/daily-build.txt | 94 +- scripts/makejar.bat | 60 +- scripts/qt4/buildplugins.bat | 132 +- scripts/qt4/buildqt.bat | 84 +- scripts/qt4/buildqtlibs.bat | 148 +- scripts/qt4/cleanqt.bat | 98 +- scripts/qt5/buildplugins.bat | 28 +- scripts/qt5/buildqt.bat | 94 +- scripts/qt5/buildqtlibs.bat | 148 +- scripts/qt5/cleanqt.bat | 110 +- texturepacker/MaxRectsBinPack.cpp | 1044 +- texturepacker/MaxRectsBinPack.h | 162 +- texturepacker/Rect.h | 168 +- texturepacker/canvas.cpp | 424 +- texturepacker/canvas.h | 78 +- texturepacker/iconlibrary.cpp | 234 +- texturepacker/iconlibrary.h | 50 +- texturepacker/librarytreewidget.cpp | 1012 +- texturepacker/librarytreewidget.h | 134 +- texturepacker/main.cpp | 106 +- texturepacker/mainwindow.cpp | 930 +- texturepacker/mainwindow.h | 134 +- texturepacker/newprojectdialog.cpp | 182 +- texturepacker/newprojectdialog.h | 78 +- texturepacker/optionswidget.cpp | 160 +- texturepacker/optionswidget.h | 70 +- texturepacker/projectproperties.cpp | 4 +- texturepacker/projectproperties.h | 58 +- texturepacker/texturepacker.cpp | 338 +- texturepacker/texturepacker.h | 34 +- texturepacker/texturepacker.pro | 132 +- texturepacker/texturepacker.vcproj | 1312 +- ui/aboutdialog.cpp | 28 +- ui/aboutdialog.h | 44 +- ui/addnewfiledialog.cpp | 74 +- ui/addnewfiledialog.h | 56 +- ui/codedependenciesdialog.cpp | 230 +- ui/codedependenciesdialog.h | 70 +- ui/dependencygraph.cpp | 324 +- ui/dependencygraph.h | 112 +- ui/exampleprojectswidget.cpp | 614 +- ui/exampleprojectswidget.h | 110 +- ui/fileassociationeditdialog.cpp | 108 +- ui/fileassociationeditdialog.h | 64 +- ui/fileassociationsdialog.cpp | 276 +- ui/fileassociationsdialog.h | 70 +- ui/finddialog.cpp | 80 +- ui/finddialog.h | 58 +- ui/findinfilesdialog.cpp | 82 +- ui/findinfilesdialog.h | 52 +- ui/findreplacedialog.cpp | 90 +- ui/findreplacedialog.h | 62 +- ui/giderosnetworkclient2.cpp | 728 +- ui/giderosnetworkclient2.h | 158 +- ui/gotolinedialog.h | 54 +- ui/librarytreewidget.h | 218 +- ui/librarywidget.cpp | 124 +- ui/librarywidget.h | 114 +- ui/main.cpp | 56 +- ui/mdiarea.cpp | 318 +- ui/mdiarea.h | 108 +- ui/mdisubwindow.cpp | 122 +- ui/mdisubwindow.h | 96 +- ui/newprojectdialog.cpp | 182 +- ui/newprojectdialog.h | 78 +- ui/outputwidget.cpp | 24 +- ui/outputwidget.h | 36 +- ui/playersettingsdialog.cpp | 118 +- ui/playersettingsdialog.h | 54 +- ui/projectpropertiesdialog.cpp | 270 +- ui/projectpropertiesdialog.h | 62 +- ui/qwinhost.cpp | 714 +- ui/qwinhost.h | 206 +- ui/recentprojectswidget.cpp | 270 +- ui/recentprojectswidget.h | 76 +- ui/replacedialog.cpp | 86 +- ui/replacedialog.h | 64 +- ui/savechangesdialog.cpp | 66 +- ui/savechangesdialog.h | 48 +- ui/startpagewidget2.cpp | 120 +- ui/startpagewidget2.h | 70 +- ui/ui.pro | 290 +- ui/ui.vcproj | 4022 +- winrt/Basic.hlsl | 70 +- winrt/Color.hlsl | 74 +- winrt/Texture.hlsl | 74 +- winrt/TextureColor.hlsl | 78 +- winrt/dxcompat.cpp | 1996 +- winrt/gideros.sln | 120 +- .../gideros.Shared/gideros.Shared.vcxitems | 1166 +- .../gideros.Shared.vcxitems.filters | 3300 +- winrt/texture.hlsl | 74 +- 1624 files changed, 420370 insertions(+), 420278 deletions(-) diff --git a/2dsg/2dsg.vcproj b/2dsg/2dsg.vcproj index 9538733ec..3a61fee39 100644 --- a/2dsg/2dsg.vcproj +++ b/2dsg/2dsg.vcproj @@ -1,573 +1,573 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/2dsg/Matrices.cpp b/2dsg/Matrices.cpp index 870233299..1bfb3b726 100644 --- a/2dsg/Matrices.cpp +++ b/2dsg/Matrices.cpp @@ -1,635 +1,635 @@ -/////////////////////////////////////////////////////////////////////////////// -// Matrice.cpp -// =========== -// NxN Matrix Math classes -// -// The elements of the matrix are stored as column major order. -// | 0 2 | | 0 3 6 | | 0 4 8 12 | -// | 1 3 | | 1 4 7 | | 1 5 9 13 | -// | 2 5 8 | | 2 6 10 14 | -// | 3 7 11 15 | -// -// AUTHOR: Song Ho Ahn (song.ahn@gmail.com) -// CREATED: 2005-06-24 -// UPDATED: 2014-09-21 -// -// Copyright (C) 2005 Song Ho Ahn -/////////////////////////////////////////////////////////////////////////////// - -#include -#include -#include "Matrices.h" -#include "glog.h" - -const float DEG2RAD = 3.141593f / 180; -const float EPSILON = 0.00001f; - - - -/////////////////////////////////////////////////////////////////////////////// -// transpose 2x2 matrix -/////////////////////////////////////////////////////////////////////////////// -Matrix2& Matrix2::transpose() -{ - std::swap(m[1], m[2]); - return *this; -} - - - -/////////////////////////////////////////////////////////////////////////////// -// return the determinant of 2x2 matrix -/////////////////////////////////////////////////////////////////////////////// -float Matrix2::getDeterminant() -{ - return m[0] * m[3] - m[1] * m[2]; -} - - - -/////////////////////////////////////////////////////////////////////////////// -// inverse of 2x2 matrix -// If cannot find inverse, set identity matrix -/////////////////////////////////////////////////////////////////////////////// -Matrix2& Matrix2::invert() -{ - float determinant = getDeterminant(); -/* if(fabs(determinant) ==0) - determinant=EPSILON;*/ - - float tmp = m[0]; // copy the first element - float invDeterminant = 1.0f / determinant; - m[0] = invDeterminant * m[3]; - m[1] = -invDeterminant * m[1]; - m[2] = -invDeterminant * m[2]; - m[3] = invDeterminant * tmp; - - return *this; -} - - - -/////////////////////////////////////////////////////////////////////////////// -// transpose 3x3 matrix -/////////////////////////////////////////////////////////////////////////////// -Matrix3& Matrix3::transpose() -{ - std::swap(m[1], m[3]); - std::swap(m[2], m[6]); - std::swap(m[5], m[7]); - - return *this; -} - - - -/////////////////////////////////////////////////////////////////////////////// -// return determinant of 3x3 matrix -/////////////////////////////////////////////////////////////////////////////// -float Matrix3::getDeterminant() -{ - return m[0] * (m[4] * m[8] - m[5] * m[7]) - - m[1] * (m[3] * m[8] - m[5] * m[6]) + - m[2] * (m[3] * m[7] - m[4] * m[6]); -} - - - -/////////////////////////////////////////////////////////////////////////////// -// inverse 3x3 matrix -// If cannot find inverse, set identity matrix -/////////////////////////////////////////////////////////////////////////////// -Matrix3& Matrix3::invert() -{ - float determinant, invDeterminant; - float tmp[9]; - - tmp[0] = m[4] * m[8] - m[5] * m[7]; - tmp[1] = m[2] * m[7] - m[1] * m[8]; - tmp[2] = m[1] * m[5] - m[2] * m[4]; - tmp[3] = m[5] * m[6] - m[3] * m[8]; - tmp[4] = m[0] * m[8] - m[2] * m[6]; - tmp[5] = m[2] * m[3] - m[0] * m[5]; - tmp[6] = m[3] * m[7] - m[4] * m[6]; - tmp[7] = m[1] * m[6] - m[0] * m[7]; - tmp[8] = m[0] * m[4] - m[1] * m[3]; - - // check determinant if it is 0 - determinant = m[0] * tmp[0] + m[1] * tmp[3] + m[2] * tmp[6]; -/* if(fabs(determinant) ==0) - determinant=EPSILON;*/ - - // divide by the determinant - invDeterminant = 1.0f / determinant; - m[0] = invDeterminant * tmp[0]; - m[1] = invDeterminant * tmp[1]; - m[2] = invDeterminant * tmp[2]; - m[3] = invDeterminant * tmp[3]; - m[4] = invDeterminant * tmp[4]; - m[5] = invDeterminant * tmp[5]; - m[6] = invDeterminant * tmp[6]; - m[7] = invDeterminant * tmp[7]; - m[8] = invDeterminant * tmp[8]; - - return *this; -} - - - -/////////////////////////////////////////////////////////////////////////////// -// transpose 4x4 matrix -/////////////////////////////////////////////////////////////////////////////// -Matrix4& Matrix4::transpose() -{ - std::swap(m[1], m[4]); - std::swap(m[2], m[8]); - std::swap(m[3], m[12]); - std::swap(m[6], m[9]); - std::swap(m[7], m[13]); - std::swap(m[11], m[14]); - - return *this; -} - - -void Matrix4::transformPoint(float x, float y, float* newx, float* newy) const -{ - Vector4 src=Vector4(x,y,0,1); - Vector4 dst=*this*src; - *newx=dst.x; - *newy=dst.y; -/* - glog_i("Matrix:\n%f\t%f\t%f\t%f\n%f\t%f\t%f\t%f\n%f\t%f\t%f\t%f\n%f\t%f\t%f\t%f\n", - m[0],m[4],m[8],m[12], - m[1],m[5],m[9],m[13], - m[2],m[6],m[10],m[14], - m[3],m[7],m[11],m[15] - ); - glog_i("XFORMP: (%f,%f)->(%f,%f)",x,y,*newx,*newy); - */ -} - -void Matrix4::inverseTransformPoint(float x, float y, float* newx, float* newy) const -{ - Vector4 src=Vector4(x,y,0,1); - Matrix4 inv=inverse(); - Vector4 dst=inv*src; - *newx=dst.x; - *newy=dst.y; -/* glog_i("Matrix:\n%f\t%f\t%f\t%f\n%f\t%f\t%f\t%f\n%f\t%f\t%f\t%f\n%f\t%f\t%f\t%f\n", - m[0],m[4],m[8],m[12], - m[1],m[5],m[9],m[13], - m[2],m[6],m[10],m[14], - m[3],m[7],m[11],m[15] - ); - glog_i("IMatrix:\n%f\t%f\t%f\t%f\n%f\t%f\t%f\t%f\n%f\t%f\t%f\t%f\n%f\t%f\t%f\t%f\n", - inv[0],inv[4],inv[8],inv[12], - inv[1],inv[5],inv[9],inv[13], - inv[2],inv[6],inv[10],inv[14], - inv[3],inv[7],inv[11],inv[15] - ); - glog_i("IXFORMP: (%f,%f)->(%f,%f)",x,y,*newx,*newy); -*/ -} - -/////////////////////////////////////////////////////////////////////////////// -// inverse 4x4 matrix -/////////////////////////////////////////////////////////////////////////////// -Matrix4& Matrix4::invert() -{ - // If the 4th row is [0,0,0,1] then it is affine matrix and - // it has no projective transformation. - if(m[3] == 0 && m[7] == 0 && m[11] == 0 && m[15] == 1) - this->invertAffine(); - else - { - this->invertGeneral(); - /*@@ invertProjective() is not optimized (slower than generic one) - if(fabs(m[0]*m[5] - m[1]*m[4]) > EPSILON) - this->invertProjective(); // inverse using matrix partition - else - this->invertGeneral(); // generalized inverse - */ - } - - return *this; -} - -Matrix4 Matrix4::inverse() const -{ - Matrix4 inv=*this; - inv.invert(); - return inv; -} - - - - -/////////////////////////////////////////////////////////////////////////////// -// compute the inverse of 4x4 Euclidean transformation matrix -// -// Euclidean transformation is translation, rotation, and reflection. -// With Euclidean transform, only the position and orientation of the object -// will be changed. Euclidean transform does not change the shape of an object -// (no scaling). Length and angle are reserved. -// -// Use inverseAffine() if the matrix has scale and shear transformation. -// -// M = [ R | T ] -// [ --+-- ] (R denotes 3x3 rotation/reflection matrix) -// [ 0 | 1 ] (T denotes 1x3 translation matrix) -// -// y = M*x -> y = R*x + T -> x = R^-1*(y - T) -> x = R^T*y - R^T*T -// (R is orthogonal, R^-1 = R^T) -// -// [ R | T ]-1 [ R^T | -R^T * T ] (R denotes 3x3 rotation matrix) -// [ --+-- ] = [ ----+--------- ] (T denotes 1x3 translation) -// [ 0 | 1 ] [ 0 | 1 ] (R^T denotes R-transpose) -/////////////////////////////////////////////////////////////////////////////// -Matrix4& Matrix4::invertEuclidean() -{ - // transpose 3x3 rotation matrix part - // | R^T | 0 | - // | ----+-- | - // | 0 | 1 | - float tmp; - tmp = m[1]; m[1] = m[4]; m[4] = tmp; - tmp = m[2]; m[2] = m[8]; m[8] = tmp; - tmp = m[6]; m[6] = m[9]; m[9] = tmp; - - // compute translation part -R^T * T - // | 0 | -R^T x | - // | --+------- | - // | 0 | 0 | - float x = m[12]; - float y = m[13]; - float z = m[14]; - m[12] = -(m[0] * x + m[4] * y + m[8] * z); - m[13] = -(m[1] * x + m[5] * y + m[9] * z); - m[14] = -(m[2] * x + m[6] * y + m[10]* z); - - // last row should be unchanged (0,0,0,1) - - return *this; -} - - - -/////////////////////////////////////////////////////////////////////////////// -// compute the inverse of a 4x4 affine transformation matrix -// -// Affine transformations are generalizations of Euclidean transformations. -// Affine transformation includes translation, rotation, reflection, scaling, -// and shearing. Length and angle are NOT preserved. -// M = [ R | T ] -// [ --+-- ] (R denotes 3x3 rotation/scale/shear matrix) -// [ 0 | 1 ] (T denotes 1x3 translation matrix) -// -// y = M*x -> y = R*x + T -> x = R^-1*(y - T) -> x = R^-1*y - R^-1*T -// -// [ R | T ]-1 [ R^-1 | -R^-1 * T ] -// [ --+-- ] = [ -----+---------- ] -// [ 0 | 1 ] [ 0 + 1 ] -/////////////////////////////////////////////////////////////////////////////// -Matrix4& Matrix4::invertAffine() -{ - // R^-1 - Matrix3 r(m[0],m[1],m[2], m[4],m[5],m[6], m[8],m[9],m[10]); - r.invert(); - m[0] = r[0]; m[1] = r[1]; m[2] = r[2]; - m[4] = r[3]; m[5] = r[4]; m[6] = r[5]; - m[8] = r[6]; m[9] = r[7]; m[10]= r[8]; - - // -R^-1 * T - float x = m[12]; - float y = m[13]; - float z = m[14]; - m[12] = -(r[0] * x + r[3] * y + r[6] * z); - m[13] = -(r[1] * x + r[4] * y + r[7] * z); - m[14] = -(r[2] * x + r[5] * y + r[8] * z); - - // last row should be unchanged (0,0,0,1) - //m[3] = m[7] = m[11] = 0.0f; - //m[15] = 1.0f; - type=FULL; - - return * this; -} - - - -/////////////////////////////////////////////////////////////////////////////// -// inverse matrix using matrix partitioning (blockwise inverse) -// It devides a 4x4 matrix into 4 of 2x2 matrices. It works in case of where -// det(A) != 0. If not, use the generic inverse method -// inverse formula. -// M = [ A | B ] A, B, C, D are 2x2 matrix blocks -// [ --+-- ] det(M) = |A| * |D - ((C * A^-1) * B)| -// [ C | D ] -// -// M^-1 = [ A' | B' ] A' = A^-1 - (A^-1 * B) * C' -// [ ---+--- ] B' = (A^-1 * B) * -D' -// [ C' | D' ] C' = -D' * (C * A^-1) -// D' = (D - ((C * A^-1) * B))^-1 -// -// NOTE: I wrap with () if it it used more than once. -// The matrix is invertable even if det(A)=0, so must check det(A) before -// calling this function, and use invertGeneric() instead. -/////////////////////////////////////////////////////////////////////////////// -Matrix4& Matrix4::invertProjective() -{ - // partition - Matrix2 a(m[0], m[1], m[4], m[5]); - Matrix2 b(m[8], m[9], m[12], m[13]); - Matrix2 c(m[2], m[3], m[6], m[7]); - Matrix2 d(m[10], m[11], m[14], m[15]); - - // pre-compute repeated parts - a.invert(); // A^-1 - Matrix2 ab = a * b; // A^-1 * B - Matrix2 ca = c * a; // C * A^-1 - Matrix2 cab = ca * b; // C * A^-1 * B - Matrix2 dcab = d - cab; // D - C * A^-1 * B - - // check determinant if |D - C * A^-1 * B| = 0 - //NOTE: this function assumes det(A) is already checked. if |A|=0 then, - // cannot use this function. - float determinant = dcab[0] * dcab[3] - dcab[1] * dcab[2]; - if(fabs(determinant) <= EPSILON) - { - return identity(); - } - - // compute D' and -D' - Matrix2 d1 = dcab; // (D - C * A^-1 * B) - d1.invert(); // (D - C * A^-1 * B)^-1 - Matrix2 d2 = -d1; // -(D - C * A^-1 * B)^-1 - - // compute C' - Matrix2 c1 = d2 * ca; // -D' * (C * A^-1) - - // compute B' - Matrix2 b1 = ab * d2; // (A^-1 * B) * -D' - - // compute A' - Matrix2 a1 = a - (ab * c1); // A^-1 - (A^-1 * B) * C' - - // assemble inverse matrix - m[0] = a1[0]; m[4] = a1[2]; /*|*/ m[8] = b1[0]; m[12]= b1[2]; - m[1] = a1[1]; m[5] = a1[3]; /*|*/ m[9] = b1[1]; m[13]= b1[3]; - /*-----------------------------+-----------------------------*/ - m[2] = c1[0]; m[6] = c1[2]; /*|*/ m[10]= d1[0]; m[14]= d1[2]; - m[3] = c1[1]; m[7] = c1[3]; /*|*/ m[11]= d1[1]; m[15]= d1[3]; - type=FULL; - - return *this; -} - - - -/////////////////////////////////////////////////////////////////////////////// -// compute the inverse of a general 4x4 matrix using Cramer's Rule -// If cannot find inverse, return indentity matrix -// M^-1 = adj(M) / det(M) -/////////////////////////////////////////////////////////////////////////////// -Matrix4& Matrix4::invertGeneral() -{ - // get cofactors of minor matrices - float cofactor0 = getCofactor(m[5],m[6],m[7], m[9],m[10],m[11], m[13],m[14],m[15]); - float cofactor1 = getCofactor(m[4],m[6],m[7], m[8],m[10],m[11], m[12],m[14],m[15]); - float cofactor2 = getCofactor(m[4],m[5],m[7], m[8],m[9], m[11], m[12],m[13],m[15]); - float cofactor3 = getCofactor(m[4],m[5],m[6], m[8],m[9], m[10], m[12],m[13],m[14]); - - // get determinant - float determinant = m[0] * cofactor0 - m[1] * cofactor1 + m[2] * cofactor2 - m[3] * cofactor3; - if(fabs(determinant) <= EPSILON) - { - return identity(); - } - - // get rest of cofactors for adj(M) - float cofactor4 = getCofactor(m[1],m[2],m[3], m[9],m[10],m[11], m[13],m[14],m[15]); - float cofactor5 = getCofactor(m[0],m[2],m[3], m[8],m[10],m[11], m[12],m[14],m[15]); - float cofactor6 = getCofactor(m[0],m[1],m[3], m[8],m[9], m[11], m[12],m[13],m[15]); - float cofactor7 = getCofactor(m[0],m[1],m[2], m[8],m[9], m[10], m[12],m[13],m[14]); - - float cofactor8 = getCofactor(m[1],m[2],m[3], m[5],m[6], m[7], m[13],m[14],m[15]); - float cofactor9 = getCofactor(m[0],m[2],m[3], m[4],m[6], m[7], m[12],m[14],m[15]); - float cofactor10= getCofactor(m[0],m[1],m[3], m[4],m[5], m[7], m[12],m[13],m[15]); - float cofactor11= getCofactor(m[0],m[1],m[2], m[4],m[5], m[6], m[12],m[13],m[14]); - - float cofactor12= getCofactor(m[1],m[2],m[3], m[5],m[6], m[7], m[9], m[10],m[11]); - float cofactor13= getCofactor(m[0],m[2],m[3], m[4],m[6], m[7], m[8], m[10],m[11]); - float cofactor14= getCofactor(m[0],m[1],m[3], m[4],m[5], m[7], m[8], m[9], m[11]); - float cofactor15= getCofactor(m[0],m[1],m[2], m[4],m[5], m[6], m[8], m[9], m[10]); - - // build inverse matrix = adj(M) / det(M) - // adjugate of M is the transpose of the cofactor matrix of M - float invDeterminant = 1.0f / determinant; - m[0] = invDeterminant * cofactor0; - m[1] = -invDeterminant * cofactor4; - m[2] = invDeterminant * cofactor8; - m[3] = -invDeterminant * cofactor12; - - m[4] = -invDeterminant * cofactor1; - m[5] = invDeterminant * cofactor5; - m[6] = -invDeterminant * cofactor9; - m[7] = invDeterminant * cofactor13; - - m[8] = invDeterminant * cofactor2; - m[9] = -invDeterminant * cofactor6; - m[10]= invDeterminant * cofactor10; - m[11]= -invDeterminant * cofactor14; - - m[12]= -invDeterminant * cofactor3; - m[13]= invDeterminant * cofactor7; - m[14]= -invDeterminant * cofactor11; - m[15]= invDeterminant * cofactor15; - type=FULL; - - return *this; -} - - - -/////////////////////////////////////////////////////////////////////////////// -// return determinant of 4x4 matrix -/////////////////////////////////////////////////////////////////////////////// -float Matrix4::getDeterminant() -{ - return m[0] * getCofactor(m[5],m[6],m[7], m[9],m[10],m[11], m[13],m[14],m[15]) - - m[1] * getCofactor(m[4],m[6],m[7], m[8],m[10],m[11], m[12],m[14],m[15]) + - m[2] * getCofactor(m[4],m[5],m[7], m[8],m[9], m[11], m[12],m[13],m[15]) - - m[3] * getCofactor(m[4],m[5],m[6], m[8],m[9], m[10], m[12],m[13],m[14]); -} - - - -/////////////////////////////////////////////////////////////////////////////// -// compute cofactor of 3x3 minor matrix without sign -// input params are 9 elements of the minor matrix -// NOTE: The caller must know its sign. -/////////////////////////////////////////////////////////////////////////////// -float Matrix4::getCofactor(float m0, float m1, float m2, - float m3, float m4, float m5, - float m6, float m7, float m8) -{ - return m0 * (m4 * m8 - m5 * m7) - - m1 * (m3 * m8 - m5 * m6) + - m2 * (m3 * m7 - m4 * m6); -} - - - -/////////////////////////////////////////////////////////////////////////////// -// translate this matrix by (x, y, z) -/////////////////////////////////////////////////////////////////////////////// -Matrix4& Matrix4::translate(const Vector3& v) -{ - return translate(v.x, v.y, v.z); -} - -Matrix4& Matrix4::translate(float x, float y, float z) -{ - m[0] += m[3] * x; m[4] += m[7] * x; m[8] += m[11]* x; m[12]+= m[15]* x; - m[1] += m[3] * y; m[5] += m[7] * y; m[9] += m[11]* y; m[13]+= m[15]* y; - m[2] += m[3] * z; m[6] += m[7] * z; m[10]+= m[11]* z; m[14]+= m[15]* z; - if (type==TRANSLATE) - type=M3D; - - return *this; -} - - - -/////////////////////////////////////////////////////////////////////////////// -// uniform scale -/////////////////////////////////////////////////////////////////////////////// -Matrix4& Matrix4::scale(float s) -{ - return scale(s, s, s); -} - -Matrix4& Matrix4::scale(float x, float y, float z) -{ - m[0] *= x; m[4] *= x; m[8] *= x; m[12] *= x; - m[1] *= y; m[5] *= y; m[9] *= y; m[13] *= y; - m[2] *= z; m[6] *= z; m[10]*= z; m[14] *= z; - if (type==TRANSLATE) - type=M3D; - return *this; -} - - - -/////////////////////////////////////////////////////////////////////////////// -// build a rotation matrix with given angle(degree) and rotation axis, then -// multiply it with this object -/////////////////////////////////////////////////////////////////////////////// -Matrix4& Matrix4::rotate(float angle, const Vector3& axis) -{ - return rotate(angle, axis.x, axis.y, axis.z); -} - -Matrix4& Matrix4::rotate(float angle, float x, float y, float z) -{ - float c = cosf(angle * DEG2RAD); // cosine - float s = sinf(angle * DEG2RAD); // sine - float c1 = 1.0f - c; // 1 - c - float m0 = m[0], m4 = m[4], m8 = m[8], m12= m[12], - m1 = m[1], m5 = m[5], m9 = m[9], m13= m[13], - m2 = m[2], m6 = m[6], m10= m[10], m14= m[14]; - - // build rotation matrix - float r0 = x * x * c1 + c; - float r1 = x * y * c1 + z * s; - float r2 = x * z * c1 - y * s; - float r4 = x * y * c1 - z * s; - float r5 = y * y * c1 + c; - float r6 = y * z * c1 + x * s; - float r8 = x * z * c1 + y * s; - float r9 = y * z * c1 - x * s; - float r10= z * z * c1 + c; - - // multiply rotation matrix - m[0] = r0 * m0 + r4 * m1 + r8 * m2; - m[1] = r1 * m0 + r5 * m1 + r9 * m2; - m[2] = r2 * m0 + r6 * m1 + r10* m2; - m[4] = r0 * m4 + r4 * m5 + r8 * m6; - m[5] = r1 * m4 + r5 * m5 + r9 * m6; - m[6] = r2 * m4 + r6 * m5 + r10* m6; - m[8] = r0 * m8 + r4 * m9 + r8 * m10; - m[9] = r1 * m8 + r5 * m9 + r9 * m10; - m[10]= r2 * m8 + r6 * m9 + r10* m10; - m[12]= r0 * m12+ r4 * m13+ r8 * m14; - m[13]= r1 * m12+ r5 * m13+ r9 * m14; - m[14]= r2 * m12+ r6 * m13+ r10* m14; - type=FULL; - - return *this; -} - -Matrix4& Matrix4::rotateX(float angle) -{ - float c = cosf(angle * DEG2RAD); - float s = sinf(angle * DEG2RAD); - float m1 = m[1], m2 = m[2], - m5 = m[5], m6 = m[6], - m9 = m[9], m10= m[10], - m13= m[13], m14= m[14]; - - m[1] = m1 * c + m2 *-s; - m[2] = m1 * s + m2 * c; - m[5] = m5 * c + m6 *-s; - m[6] = m5 * s + m6 * c; - m[9] = m9 * c + m10*-s; - m[10]= m9 * s + m10* c; - m[13]= m13* c + m14*-s; - m[14]= m13* s + m14* c; - type=FULL; - - return *this; -} - -Matrix4& Matrix4::rotateY(float angle) -{ - float c = cosf(angle * DEG2RAD); - float s = sinf(angle * DEG2RAD); - float m0 = m[0], m2 = m[2], - m4 = m[4], m6 = m[6], - m8 = m[8], m10= m[10], - m12= m[12], m14= m[14]; - - m[0] = m0 * c + m2 * s; - m[2] = m0 *-s + m2 * c; - m[4] = m4 * c + m6 * s; - m[6] = m4 *-s + m6 * c; - m[8] = m8 * c + m10* s; - m[10]= m8 *-s + m10* c; - m[12]= m12* c + m14* s; - m[14]= m12*-s + m14* c; - type=FULL; - - return *this; -} - -Matrix4& Matrix4::rotateZ(float angle) -{ - float c = cosf(angle * DEG2RAD); - float s = sinf(angle * DEG2RAD); - float m0 = m[0], m1 = m[1], - m4 = m[4], m5 = m[5], - m8 = m[8], m9 = m[9], - m12= m[12], m13= m[13]; - - m[0] = m0 * c + m1 *-s; - m[1] = m0 * s + m1 * c; - m[4] = m4 * c + m5 *-s; - m[5] = m4 * s + m5 * c; - m[8] = m8 * c + m9 *-s; - m[9] = m8 * s + m9 * c; - m[12]= m12* c + m13*-s; - m[13]= m12* s + m13* c; - type=FULL; - return *this; -} +/////////////////////////////////////////////////////////////////////////////// +// Matrice.cpp +// =========== +// NxN Matrix Math classes +// +// The elements of the matrix are stored as column major order. +// | 0 2 | | 0 3 6 | | 0 4 8 12 | +// | 1 3 | | 1 4 7 | | 1 5 9 13 | +// | 2 5 8 | | 2 6 10 14 | +// | 3 7 11 15 | +// +// AUTHOR: Song Ho Ahn (song.ahn@gmail.com) +// CREATED: 2005-06-24 +// UPDATED: 2014-09-21 +// +// Copyright (C) 2005 Song Ho Ahn +/////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include "Matrices.h" +#include "glog.h" + +const float DEG2RAD = 3.141593f / 180; +const float EPSILON = 0.00001f; + + + +/////////////////////////////////////////////////////////////////////////////// +// transpose 2x2 matrix +/////////////////////////////////////////////////////////////////////////////// +Matrix2& Matrix2::transpose() +{ + std::swap(m[1], m[2]); + return *this; +} + + + +/////////////////////////////////////////////////////////////////////////////// +// return the determinant of 2x2 matrix +/////////////////////////////////////////////////////////////////////////////// +float Matrix2::getDeterminant() +{ + return m[0] * m[3] - m[1] * m[2]; +} + + + +/////////////////////////////////////////////////////////////////////////////// +// inverse of 2x2 matrix +// If cannot find inverse, set identity matrix +/////////////////////////////////////////////////////////////////////////////// +Matrix2& Matrix2::invert() +{ + float determinant = getDeterminant(); +/* if(fabs(determinant) ==0) + determinant=EPSILON;*/ + + float tmp = m[0]; // copy the first element + float invDeterminant = 1.0f / determinant; + m[0] = invDeterminant * m[3]; + m[1] = -invDeterminant * m[1]; + m[2] = -invDeterminant * m[2]; + m[3] = invDeterminant * tmp; + + return *this; +} + + + +/////////////////////////////////////////////////////////////////////////////// +// transpose 3x3 matrix +/////////////////////////////////////////////////////////////////////////////// +Matrix3& Matrix3::transpose() +{ + std::swap(m[1], m[3]); + std::swap(m[2], m[6]); + std::swap(m[5], m[7]); + + return *this; +} + + + +/////////////////////////////////////////////////////////////////////////////// +// return determinant of 3x3 matrix +/////////////////////////////////////////////////////////////////////////////// +float Matrix3::getDeterminant() +{ + return m[0] * (m[4] * m[8] - m[5] * m[7]) - + m[1] * (m[3] * m[8] - m[5] * m[6]) + + m[2] * (m[3] * m[7] - m[4] * m[6]); +} + + + +/////////////////////////////////////////////////////////////////////////////// +// inverse 3x3 matrix +// If cannot find inverse, set identity matrix +/////////////////////////////////////////////////////////////////////////////// +Matrix3& Matrix3::invert() +{ + float determinant, invDeterminant; + float tmp[9]; + + tmp[0] = m[4] * m[8] - m[5] * m[7]; + tmp[1] = m[2] * m[7] - m[1] * m[8]; + tmp[2] = m[1] * m[5] - m[2] * m[4]; + tmp[3] = m[5] * m[6] - m[3] * m[8]; + tmp[4] = m[0] * m[8] - m[2] * m[6]; + tmp[5] = m[2] * m[3] - m[0] * m[5]; + tmp[6] = m[3] * m[7] - m[4] * m[6]; + tmp[7] = m[1] * m[6] - m[0] * m[7]; + tmp[8] = m[0] * m[4] - m[1] * m[3]; + + // check determinant if it is 0 + determinant = m[0] * tmp[0] + m[1] * tmp[3] + m[2] * tmp[6]; +/* if(fabs(determinant) ==0) + determinant=EPSILON;*/ + + // divide by the determinant + invDeterminant = 1.0f / determinant; + m[0] = invDeterminant * tmp[0]; + m[1] = invDeterminant * tmp[1]; + m[2] = invDeterminant * tmp[2]; + m[3] = invDeterminant * tmp[3]; + m[4] = invDeterminant * tmp[4]; + m[5] = invDeterminant * tmp[5]; + m[6] = invDeterminant * tmp[6]; + m[7] = invDeterminant * tmp[7]; + m[8] = invDeterminant * tmp[8]; + + return *this; +} + + + +/////////////////////////////////////////////////////////////////////////////// +// transpose 4x4 matrix +/////////////////////////////////////////////////////////////////////////////// +Matrix4& Matrix4::transpose() +{ + std::swap(m[1], m[4]); + std::swap(m[2], m[8]); + std::swap(m[3], m[12]); + std::swap(m[6], m[9]); + std::swap(m[7], m[13]); + std::swap(m[11], m[14]); + + return *this; +} + + +void Matrix4::transformPoint(float x, float y, float* newx, float* newy) const +{ + Vector4 src=Vector4(x,y,0,1); + Vector4 dst=*this*src; + *newx=dst.x; + *newy=dst.y; +/* + glog_i("Matrix:\n%f\t%f\t%f\t%f\n%f\t%f\t%f\t%f\n%f\t%f\t%f\t%f\n%f\t%f\t%f\t%f\n", + m[0],m[4],m[8],m[12], + m[1],m[5],m[9],m[13], + m[2],m[6],m[10],m[14], + m[3],m[7],m[11],m[15] + ); + glog_i("XFORMP: (%f,%f)->(%f,%f)",x,y,*newx,*newy); + */ +} + +void Matrix4::inverseTransformPoint(float x, float y, float* newx, float* newy) const +{ + Vector4 src=Vector4(x,y,0,1); + Matrix4 inv=inverse(); + Vector4 dst=inv*src; + *newx=dst.x; + *newy=dst.y; +/* glog_i("Matrix:\n%f\t%f\t%f\t%f\n%f\t%f\t%f\t%f\n%f\t%f\t%f\t%f\n%f\t%f\t%f\t%f\n", + m[0],m[4],m[8],m[12], + m[1],m[5],m[9],m[13], + m[2],m[6],m[10],m[14], + m[3],m[7],m[11],m[15] + ); + glog_i("IMatrix:\n%f\t%f\t%f\t%f\n%f\t%f\t%f\t%f\n%f\t%f\t%f\t%f\n%f\t%f\t%f\t%f\n", + inv[0],inv[4],inv[8],inv[12], + inv[1],inv[5],inv[9],inv[13], + inv[2],inv[6],inv[10],inv[14], + inv[3],inv[7],inv[11],inv[15] + ); + glog_i("IXFORMP: (%f,%f)->(%f,%f)",x,y,*newx,*newy); +*/ +} + +/////////////////////////////////////////////////////////////////////////////// +// inverse 4x4 matrix +/////////////////////////////////////////////////////////////////////////////// +Matrix4& Matrix4::invert() +{ + // If the 4th row is [0,0,0,1] then it is affine matrix and + // it has no projective transformation. + if(m[3] == 0 && m[7] == 0 && m[11] == 0 && m[15] == 1) + this->invertAffine(); + else + { + this->invertGeneral(); + /*@@ invertProjective() is not optimized (slower than generic one) + if(fabs(m[0]*m[5] - m[1]*m[4]) > EPSILON) + this->invertProjective(); // inverse using matrix partition + else + this->invertGeneral(); // generalized inverse + */ + } + + return *this; +} + +Matrix4 Matrix4::inverse() const +{ + Matrix4 inv=*this; + inv.invert(); + return inv; +} + + + + +/////////////////////////////////////////////////////////////////////////////// +// compute the inverse of 4x4 Euclidean transformation matrix +// +// Euclidean transformation is translation, rotation, and reflection. +// With Euclidean transform, only the position and orientation of the object +// will be changed. Euclidean transform does not change the shape of an object +// (no scaling). Length and angle are reserved. +// +// Use inverseAffine() if the matrix has scale and shear transformation. +// +// M = [ R | T ] +// [ --+-- ] (R denotes 3x3 rotation/reflection matrix) +// [ 0 | 1 ] (T denotes 1x3 translation matrix) +// +// y = M*x -> y = R*x + T -> x = R^-1*(y - T) -> x = R^T*y - R^T*T +// (R is orthogonal, R^-1 = R^T) +// +// [ R | T ]-1 [ R^T | -R^T * T ] (R denotes 3x3 rotation matrix) +// [ --+-- ] = [ ----+--------- ] (T denotes 1x3 translation) +// [ 0 | 1 ] [ 0 | 1 ] (R^T denotes R-transpose) +/////////////////////////////////////////////////////////////////////////////// +Matrix4& Matrix4::invertEuclidean() +{ + // transpose 3x3 rotation matrix part + // | R^T | 0 | + // | ----+-- | + // | 0 | 1 | + float tmp; + tmp = m[1]; m[1] = m[4]; m[4] = tmp; + tmp = m[2]; m[2] = m[8]; m[8] = tmp; + tmp = m[6]; m[6] = m[9]; m[9] = tmp; + + // compute translation part -R^T * T + // | 0 | -R^T x | + // | --+------- | + // | 0 | 0 | + float x = m[12]; + float y = m[13]; + float z = m[14]; + m[12] = -(m[0] * x + m[4] * y + m[8] * z); + m[13] = -(m[1] * x + m[5] * y + m[9] * z); + m[14] = -(m[2] * x + m[6] * y + m[10]* z); + + // last row should be unchanged (0,0,0,1) + + return *this; +} + + + +/////////////////////////////////////////////////////////////////////////////// +// compute the inverse of a 4x4 affine transformation matrix +// +// Affine transformations are generalizations of Euclidean transformations. +// Affine transformation includes translation, rotation, reflection, scaling, +// and shearing. Length and angle are NOT preserved. +// M = [ R | T ] +// [ --+-- ] (R denotes 3x3 rotation/scale/shear matrix) +// [ 0 | 1 ] (T denotes 1x3 translation matrix) +// +// y = M*x -> y = R*x + T -> x = R^-1*(y - T) -> x = R^-1*y - R^-1*T +// +// [ R | T ]-1 [ R^-1 | -R^-1 * T ] +// [ --+-- ] = [ -----+---------- ] +// [ 0 | 1 ] [ 0 + 1 ] +/////////////////////////////////////////////////////////////////////////////// +Matrix4& Matrix4::invertAffine() +{ + // R^-1 + Matrix3 r(m[0],m[1],m[2], m[4],m[5],m[6], m[8],m[9],m[10]); + r.invert(); + m[0] = r[0]; m[1] = r[1]; m[2] = r[2]; + m[4] = r[3]; m[5] = r[4]; m[6] = r[5]; + m[8] = r[6]; m[9] = r[7]; m[10]= r[8]; + + // -R^-1 * T + float x = m[12]; + float y = m[13]; + float z = m[14]; + m[12] = -(r[0] * x + r[3] * y + r[6] * z); + m[13] = -(r[1] * x + r[4] * y + r[7] * z); + m[14] = -(r[2] * x + r[5] * y + r[8] * z); + + // last row should be unchanged (0,0,0,1) + //m[3] = m[7] = m[11] = 0.0f; + //m[15] = 1.0f; + type=FULL; + + return * this; +} + + + +/////////////////////////////////////////////////////////////////////////////// +// inverse matrix using matrix partitioning (blockwise inverse) +// It devides a 4x4 matrix into 4 of 2x2 matrices. It works in case of where +// det(A) != 0. If not, use the generic inverse method +// inverse formula. +// M = [ A | B ] A, B, C, D are 2x2 matrix blocks +// [ --+-- ] det(M) = |A| * |D - ((C * A^-1) * B)| +// [ C | D ] +// +// M^-1 = [ A' | B' ] A' = A^-1 - (A^-1 * B) * C' +// [ ---+--- ] B' = (A^-1 * B) * -D' +// [ C' | D' ] C' = -D' * (C * A^-1) +// D' = (D - ((C * A^-1) * B))^-1 +// +// NOTE: I wrap with () if it it used more than once. +// The matrix is invertable even if det(A)=0, so must check det(A) before +// calling this function, and use invertGeneric() instead. +/////////////////////////////////////////////////////////////////////////////// +Matrix4& Matrix4::invertProjective() +{ + // partition + Matrix2 a(m[0], m[1], m[4], m[5]); + Matrix2 b(m[8], m[9], m[12], m[13]); + Matrix2 c(m[2], m[3], m[6], m[7]); + Matrix2 d(m[10], m[11], m[14], m[15]); + + // pre-compute repeated parts + a.invert(); // A^-1 + Matrix2 ab = a * b; // A^-1 * B + Matrix2 ca = c * a; // C * A^-1 + Matrix2 cab = ca * b; // C * A^-1 * B + Matrix2 dcab = d - cab; // D - C * A^-1 * B + + // check determinant if |D - C * A^-1 * B| = 0 + //NOTE: this function assumes det(A) is already checked. if |A|=0 then, + // cannot use this function. + float determinant = dcab[0] * dcab[3] - dcab[1] * dcab[2]; + if(fabs(determinant) <= EPSILON) + { + return identity(); + } + + // compute D' and -D' + Matrix2 d1 = dcab; // (D - C * A^-1 * B) + d1.invert(); // (D - C * A^-1 * B)^-1 + Matrix2 d2 = -d1; // -(D - C * A^-1 * B)^-1 + + // compute C' + Matrix2 c1 = d2 * ca; // -D' * (C * A^-1) + + // compute B' + Matrix2 b1 = ab * d2; // (A^-1 * B) * -D' + + // compute A' + Matrix2 a1 = a - (ab * c1); // A^-1 - (A^-1 * B) * C' + + // assemble inverse matrix + m[0] = a1[0]; m[4] = a1[2]; /*|*/ m[8] = b1[0]; m[12]= b1[2]; + m[1] = a1[1]; m[5] = a1[3]; /*|*/ m[9] = b1[1]; m[13]= b1[3]; + /*-----------------------------+-----------------------------*/ + m[2] = c1[0]; m[6] = c1[2]; /*|*/ m[10]= d1[0]; m[14]= d1[2]; + m[3] = c1[1]; m[7] = c1[3]; /*|*/ m[11]= d1[1]; m[15]= d1[3]; + type=FULL; + + return *this; +} + + + +/////////////////////////////////////////////////////////////////////////////// +// compute the inverse of a general 4x4 matrix using Cramer's Rule +// If cannot find inverse, return indentity matrix +// M^-1 = adj(M) / det(M) +/////////////////////////////////////////////////////////////////////////////// +Matrix4& Matrix4::invertGeneral() +{ + // get cofactors of minor matrices + float cofactor0 = getCofactor(m[5],m[6],m[7], m[9],m[10],m[11], m[13],m[14],m[15]); + float cofactor1 = getCofactor(m[4],m[6],m[7], m[8],m[10],m[11], m[12],m[14],m[15]); + float cofactor2 = getCofactor(m[4],m[5],m[7], m[8],m[9], m[11], m[12],m[13],m[15]); + float cofactor3 = getCofactor(m[4],m[5],m[6], m[8],m[9], m[10], m[12],m[13],m[14]); + + // get determinant + float determinant = m[0] * cofactor0 - m[1] * cofactor1 + m[2] * cofactor2 - m[3] * cofactor3; + if(fabs(determinant) <= EPSILON) + { + return identity(); + } + + // get rest of cofactors for adj(M) + float cofactor4 = getCofactor(m[1],m[2],m[3], m[9],m[10],m[11], m[13],m[14],m[15]); + float cofactor5 = getCofactor(m[0],m[2],m[3], m[8],m[10],m[11], m[12],m[14],m[15]); + float cofactor6 = getCofactor(m[0],m[1],m[3], m[8],m[9], m[11], m[12],m[13],m[15]); + float cofactor7 = getCofactor(m[0],m[1],m[2], m[8],m[9], m[10], m[12],m[13],m[14]); + + float cofactor8 = getCofactor(m[1],m[2],m[3], m[5],m[6], m[7], m[13],m[14],m[15]); + float cofactor9 = getCofactor(m[0],m[2],m[3], m[4],m[6], m[7], m[12],m[14],m[15]); + float cofactor10= getCofactor(m[0],m[1],m[3], m[4],m[5], m[7], m[12],m[13],m[15]); + float cofactor11= getCofactor(m[0],m[1],m[2], m[4],m[5], m[6], m[12],m[13],m[14]); + + float cofactor12= getCofactor(m[1],m[2],m[3], m[5],m[6], m[7], m[9], m[10],m[11]); + float cofactor13= getCofactor(m[0],m[2],m[3], m[4],m[6], m[7], m[8], m[10],m[11]); + float cofactor14= getCofactor(m[0],m[1],m[3], m[4],m[5], m[7], m[8], m[9], m[11]); + float cofactor15= getCofactor(m[0],m[1],m[2], m[4],m[5], m[6], m[8], m[9], m[10]); + + // build inverse matrix = adj(M) / det(M) + // adjugate of M is the transpose of the cofactor matrix of M + float invDeterminant = 1.0f / determinant; + m[0] = invDeterminant * cofactor0; + m[1] = -invDeterminant * cofactor4; + m[2] = invDeterminant * cofactor8; + m[3] = -invDeterminant * cofactor12; + + m[4] = -invDeterminant * cofactor1; + m[5] = invDeterminant * cofactor5; + m[6] = -invDeterminant * cofactor9; + m[7] = invDeterminant * cofactor13; + + m[8] = invDeterminant * cofactor2; + m[9] = -invDeterminant * cofactor6; + m[10]= invDeterminant * cofactor10; + m[11]= -invDeterminant * cofactor14; + + m[12]= -invDeterminant * cofactor3; + m[13]= invDeterminant * cofactor7; + m[14]= -invDeterminant * cofactor11; + m[15]= invDeterminant * cofactor15; + type=FULL; + + return *this; +} + + + +/////////////////////////////////////////////////////////////////////////////// +// return determinant of 4x4 matrix +/////////////////////////////////////////////////////////////////////////////// +float Matrix4::getDeterminant() +{ + return m[0] * getCofactor(m[5],m[6],m[7], m[9],m[10],m[11], m[13],m[14],m[15]) - + m[1] * getCofactor(m[4],m[6],m[7], m[8],m[10],m[11], m[12],m[14],m[15]) + + m[2] * getCofactor(m[4],m[5],m[7], m[8],m[9], m[11], m[12],m[13],m[15]) - + m[3] * getCofactor(m[4],m[5],m[6], m[8],m[9], m[10], m[12],m[13],m[14]); +} + + + +/////////////////////////////////////////////////////////////////////////////// +// compute cofactor of 3x3 minor matrix without sign +// input params are 9 elements of the minor matrix +// NOTE: The caller must know its sign. +/////////////////////////////////////////////////////////////////////////////// +float Matrix4::getCofactor(float m0, float m1, float m2, + float m3, float m4, float m5, + float m6, float m7, float m8) +{ + return m0 * (m4 * m8 - m5 * m7) - + m1 * (m3 * m8 - m5 * m6) + + m2 * (m3 * m7 - m4 * m6); +} + + + +/////////////////////////////////////////////////////////////////////////////// +// translate this matrix by (x, y, z) +/////////////////////////////////////////////////////////////////////////////// +Matrix4& Matrix4::translate(const Vector3& v) +{ + return translate(v.x, v.y, v.z); +} + +Matrix4& Matrix4::translate(float x, float y, float z) +{ + m[0] += m[3] * x; m[4] += m[7] * x; m[8] += m[11]* x; m[12]+= m[15]* x; + m[1] += m[3] * y; m[5] += m[7] * y; m[9] += m[11]* y; m[13]+= m[15]* y; + m[2] += m[3] * z; m[6] += m[7] * z; m[10]+= m[11]* z; m[14]+= m[15]* z; + if (type==TRANSLATE) + type=M3D; + + return *this; +} + + + +/////////////////////////////////////////////////////////////////////////////// +// uniform scale +/////////////////////////////////////////////////////////////////////////////// +Matrix4& Matrix4::scale(float s) +{ + return scale(s, s, s); +} + +Matrix4& Matrix4::scale(float x, float y, float z) +{ + m[0] *= x; m[4] *= x; m[8] *= x; m[12] *= x; + m[1] *= y; m[5] *= y; m[9] *= y; m[13] *= y; + m[2] *= z; m[6] *= z; m[10]*= z; m[14] *= z; + if (type==TRANSLATE) + type=M3D; + return *this; +} + + + +/////////////////////////////////////////////////////////////////////////////// +// build a rotation matrix with given angle(degree) and rotation axis, then +// multiply it with this object +/////////////////////////////////////////////////////////////////////////////// +Matrix4& Matrix4::rotate(float angle, const Vector3& axis) +{ + return rotate(angle, axis.x, axis.y, axis.z); +} + +Matrix4& Matrix4::rotate(float angle, float x, float y, float z) +{ + float c = cosf(angle * DEG2RAD); // cosine + float s = sinf(angle * DEG2RAD); // sine + float c1 = 1.0f - c; // 1 - c + float m0 = m[0], m4 = m[4], m8 = m[8], m12= m[12], + m1 = m[1], m5 = m[5], m9 = m[9], m13= m[13], + m2 = m[2], m6 = m[6], m10= m[10], m14= m[14]; + + // build rotation matrix + float r0 = x * x * c1 + c; + float r1 = x * y * c1 + z * s; + float r2 = x * z * c1 - y * s; + float r4 = x * y * c1 - z * s; + float r5 = y * y * c1 + c; + float r6 = y * z * c1 + x * s; + float r8 = x * z * c1 + y * s; + float r9 = y * z * c1 - x * s; + float r10= z * z * c1 + c; + + // multiply rotation matrix + m[0] = r0 * m0 + r4 * m1 + r8 * m2; + m[1] = r1 * m0 + r5 * m1 + r9 * m2; + m[2] = r2 * m0 + r6 * m1 + r10* m2; + m[4] = r0 * m4 + r4 * m5 + r8 * m6; + m[5] = r1 * m4 + r5 * m5 + r9 * m6; + m[6] = r2 * m4 + r6 * m5 + r10* m6; + m[8] = r0 * m8 + r4 * m9 + r8 * m10; + m[9] = r1 * m8 + r5 * m9 + r9 * m10; + m[10]= r2 * m8 + r6 * m9 + r10* m10; + m[12]= r0 * m12+ r4 * m13+ r8 * m14; + m[13]= r1 * m12+ r5 * m13+ r9 * m14; + m[14]= r2 * m12+ r6 * m13+ r10* m14; + type=FULL; + + return *this; +} + +Matrix4& Matrix4::rotateX(float angle) +{ + float c = cosf(angle * DEG2RAD); + float s = sinf(angle * DEG2RAD); + float m1 = m[1], m2 = m[2], + m5 = m[5], m6 = m[6], + m9 = m[9], m10= m[10], + m13= m[13], m14= m[14]; + + m[1] = m1 * c + m2 *-s; + m[2] = m1 * s + m2 * c; + m[5] = m5 * c + m6 *-s; + m[6] = m5 * s + m6 * c; + m[9] = m9 * c + m10*-s; + m[10]= m9 * s + m10* c; + m[13]= m13* c + m14*-s; + m[14]= m13* s + m14* c; + type=FULL; + + return *this; +} + +Matrix4& Matrix4::rotateY(float angle) +{ + float c = cosf(angle * DEG2RAD); + float s = sinf(angle * DEG2RAD); + float m0 = m[0], m2 = m[2], + m4 = m[4], m6 = m[6], + m8 = m[8], m10= m[10], + m12= m[12], m14= m[14]; + + m[0] = m0 * c + m2 * s; + m[2] = m0 *-s + m2 * c; + m[4] = m4 * c + m6 * s; + m[6] = m4 *-s + m6 * c; + m[8] = m8 * c + m10* s; + m[10]= m8 *-s + m10* c; + m[12]= m12* c + m14* s; + m[14]= m12*-s + m14* c; + type=FULL; + + return *this; +} + +Matrix4& Matrix4::rotateZ(float angle) +{ + float c = cosf(angle * DEG2RAD); + float s = sinf(angle * DEG2RAD); + float m0 = m[0], m1 = m[1], + m4 = m[4], m5 = m[5], + m8 = m[8], m9 = m[9], + m12= m[12], m13= m[13]; + + m[0] = m0 * c + m1 *-s; + m[1] = m0 * s + m1 * c; + m[4] = m4 * c + m5 *-s; + m[5] = m4 * s + m5 * c; + m[8] = m8 * c + m9 *-s; + m[9] = m8 * s + m9 * c; + m[12]= m12* c + m13*-s; + m[13]= m12* s + m13* c; + type=FULL; + return *this; +} diff --git a/2dsg/Matrices.h b/2dsg/Matrices.h index c0cb01b9c..80a4f36e9 100644 --- a/2dsg/Matrices.h +++ b/2dsg/Matrices.h @@ -1,1023 +1,1023 @@ -/////////////////////////////////////////////////////////////////////////////// -// Matrice.h -// ========= -// NxN Matrix Math classes -// -// The elements of the matrix are stored as column major order. -// | 0 2 | | 0 3 6 | | 0 4 8 12 | -// | 1 3 | | 1 4 7 | | 1 5 9 13 | -// | 2 5 8 | | 2 6 10 14 | -// | 3 7 11 15 | -// -// AUTHOR: Song Ho Ahn (song.ahn@gmail.com) -// CREATED: 2005-06-24 -// UPDATED: 2013-09-30 -// -// Copyright (C) 2005 Song Ho Ahn -/////////////////////////////////////////////////////////////////////////////// - -#ifndef MATH_MATRICES_H -#define MATH_MATRICES_H - -#include -#include -#include "Vectors.h" - -/////////////////////////////////////////////////////////////////////////// -// 2x2 matrix -/////////////////////////////////////////////////////////////////////////// -class Matrix2 -{ -public: - // constructors - Matrix2(); // init with identity - Matrix2(const float src[4]); - Matrix2(float m0, float m1, float m2, float m3); - - void set(const float src[4]); - void set(float m0, float m1, float m2, float m3); - void setRow(int index, const float row[2]); - void setRow(int index, const Vector2& v); - void setColumn(int index, const float col[2]); - void setColumn(int index, const Vector2& v); - - const float* get() const; - float getDeterminant(); - - Matrix2& identity(); - Matrix2& transpose(); // transpose itself and return reference - Matrix2& invert(); - - // operators - Matrix2 operator+(const Matrix2& rhs) const; // add rhs - Matrix2 operator-(const Matrix2& rhs) const; // subtract rhs - Matrix2& operator+=(const Matrix2& rhs); // add rhs and update this object - Matrix2& operator-=(const Matrix2& rhs); // subtract rhs and update this object - Vector2 operator*(const Vector2& rhs) const; // multiplication: v' = M * v - Matrix2 operator*(const Matrix2& rhs) const; // multiplication: M3 = M1 * M2 - Matrix2& operator*=(const Matrix2& rhs); // multiplication: M1' = M1 * M2 - bool operator==(const Matrix2& rhs) const; // exact compare, no epsilon - bool operator!=(const Matrix2& rhs) const; // exact compare, no epsilon - float operator[](int index) const; // subscript operator v[0], v[1] - float& operator[](int index); // subscript operator v[0], v[1] - - friend Matrix2 operator-(const Matrix2& m); // unary operator (-) - friend Matrix2 operator*(float scalar, const Matrix2& m); // pre-multiplication - friend Vector2 operator*(const Vector2& vec, const Matrix2& m); // pre-multiplication - friend std::ostream& operator<<(std::ostream& os, const Matrix2& m); - -protected: - -private: - float m[4]; - -}; - - - -/////////////////////////////////////////////////////////////////////////// -// 3x3 matrix -/////////////////////////////////////////////////////////////////////////// -class Matrix3 -{ -public: - // constructors - Matrix3(); // init with identity - Matrix3(const float src[9]); - Matrix3(float m0, float m1, float m2, // 1st column - float m3, float m4, float m5, // 2nd column - float m6, float m7, float m8); // 3rd column - - void set(const float src[9]); - void set(float m0, float m1, float m2, // 1st column - float m3, float m4, float m5, // 2nd column - float m6, float m7, float m8); // 3rd column - void setRow(int index, const float row[3]); - void setRow(int index, const Vector3& v); - void setColumn(int index, const float col[3]); - void setColumn(int index, const Vector3& v); - - const float* get() const; - float getDeterminant(); - - Matrix3& identity(); - Matrix3& transpose(); // transpose itself and return reference - Matrix3& invert(); - - // operators - Matrix3 operator+(const Matrix3& rhs) const; // add rhs - Matrix3 operator-(const Matrix3& rhs) const; // subtract rhs - Matrix3& operator+=(const Matrix3& rhs); // add rhs and update this object - Matrix3& operator-=(const Matrix3& rhs); // subtract rhs and update this object - Vector3 operator*(const Vector3& rhs) const; // multiplication: v' = M * v - Matrix3 operator*(const Matrix3& rhs) const; // multiplication: M3 = M1 * M2 - Matrix3& operator*=(const Matrix3& rhs); // multiplication: M1' = M1 * M2 - bool operator==(const Matrix3& rhs) const; // exact compare, no epsilon - bool operator!=(const Matrix3& rhs) const; // exact compare, no epsilon - float operator[](int index) const; // subscript operator v[0], v[1] - float& operator[](int index); // subscript operator v[0], v[1] - - friend Matrix3 operator-(const Matrix3& m); // unary operator (-) - friend Matrix3 operator*(float scalar, const Matrix3& m); // pre-multiplication - friend Vector3 operator*(const Vector3& vec, const Matrix3& m); // pre-multiplication - friend std::ostream& operator<<(std::ostream& os, const Matrix3& m); - -protected: - -private: - float m[9]; - -}; - - - -/////////////////////////////////////////////////////////////////////////// -// 4x4 matrix -/////////////////////////////////////////////////////////////////////////// -class Matrix4 -{ -public: - enum Type { - TRANSLATE=0, - M2D=1, - M3D=2, - FULL=3 - }; - // constructors - Matrix4(); // init with identity - Matrix4(const float src[16]); - Matrix4(float m00, float m01, float m02, float m03, // 1st column - float m04, float m05, float m06, float m07, // 2nd column - float m08, float m09, float m10, float m11, // 3rd column - float m12, float m13, float m14, float m15,Type t=FULL);// 4th column - - void set() { identity(); } - void set(const float src[16]); - void set(float m00, float m01, float m02, float m03, // 1st column - float m04, float m05, float m06, float m07, // 2nd column - float m08, float m09, float m10, float m11, // 3rd column - float m12, float m13, float m14, float m15,Type t=FULL);// 4th column - void setRow(int index, const float row[4]); - void setRow(int index, const Vector4& v); - void setRow(int index, const Vector3& v); - void setColumn(int index, const float col[4]); - void setColumn(int index, const Vector4& v); - void setColumn(int index, const Vector3& v); - - const float* get() const; - const float* data() const; - float* raw(); - const float* getTranspose(); // return transposed matrix - float getDeterminant(); - - Matrix4& identity(); - Matrix4& transpose(); // transpose itself and return reference - Matrix4& invert(); // check best inverse method before inverse - Matrix4& invertEuclidean(); // inverse of Euclidean transform matrix - Matrix4& invertAffine(); // inverse of affine transform matrix - Matrix4& invertProjective(); // inverse of projective matrix using partitioning - Matrix4& invertGeneral(); // inverse of generic matrix - Matrix4 inverse() const; - - // transform matrix - Matrix4& translate(float x, float y, float z); // translation by (x,y,z) - Matrix4& translate(const Vector3& v); // - Matrix4& rotate(float angle, const Vector3& axis); // rotate angle(degree) along the given axix - Matrix4& rotate(float angle, float x, float y, float z); - Matrix4& rotateX(float angle); // rotate on X-axis with degree - Matrix4& rotateY(float angle); // rotate on Y-axis with degree - Matrix4& rotateZ(float angle); // rotate on Z-axis with degree - Matrix4& scale(float scale); // uniform scale - Matrix4& scale(float sx, float sy, float sz); // scale by (sx, sy, sz) on each axis - - // operators - Matrix4 operator+(const Matrix4& rhs) const; // add rhs - Matrix4 operator-(const Matrix4& rhs) const; // subtract rhs - Matrix4& operator+=(const Matrix4& rhs); // add rhs and update this object - Matrix4& operator-=(const Matrix4& rhs); // subtract rhs and update this object - Vector4 operator*(const Vector4& rhs) const; // multiplication: v' = M * v - Vector3 operator*(const Vector3& rhs) const; // multiplication: v' = M * v - Matrix4 operator*(const Matrix4& rhs) const; // multiplication: M3 = M1 * M2 - Matrix4& operator*=(const Matrix4& rhs); // multiplication: M1' = M1 * M2 - bool operator==(const Matrix4& rhs) const; // exact compare, no epsilon - bool operator!=(const Matrix4& rhs) const; // exact compare, no epsilon - float operator[](int index) const; // subscript operator v[0], v[1] - float& operator[](int index); // subscript operator v[0], v[1] - - friend Matrix4 operator-(const Matrix4& m); // unary operator (-) - friend Matrix4 operator*(float scalar, const Matrix4& m); // pre-multiplication - friend Vector3 operator*(const Vector3& vec, const Matrix4& m); // pre-multiplication - friend Vector4 operator*(const Vector4& vec, const Matrix4& m); // pre-multiplication - friend std::ostream& operator<<(std::ostream& os, const Matrix4& m); - - void transformPoint(float x, float y, float* newx, float* newy) const; - void inverseTransformPoint(float x, float y, float* newx, float* newy) const; - - enum Type type; -protected: - -private: - float getCofactor(float m0, float m1, float m2, - float m3, float m4, float m5, - float m6, float m7, float m8); - - float m[16]; - float tm[16]; // transpose m -}; - - - -/////////////////////////////////////////////////////////////////////////// -// inline functions for Matrix2 -/////////////////////////////////////////////////////////////////////////// -inline Matrix2::Matrix2() -{ - // initially identity matrix - identity(); -} - - - -inline Matrix2::Matrix2(const float src[4]) -{ - set(src); -} - - - -inline Matrix2::Matrix2(float m0, float m1, float m2, float m3) -{ - set(m0, m1, m2, m3); -} - - - -inline void Matrix2::set(const float src[4]) -{ - m[0] = src[0]; m[1] = src[1]; m[2] = src[2]; m[3] = src[3]; -} - - - -inline void Matrix2::set(float m0, float m1, float m2, float m3) -{ - m[0]= m0; m[1] = m1; m[2] = m2; m[3]= m3; -} - - - -inline void Matrix2::setRow(int index, const float row[2]) -{ - m[index] = row[0]; m[index + 2] = row[1]; -} - - - -inline void Matrix2::setRow(int index, const Vector2& v) -{ - m[index] = v.x; m[index + 2] = v.y; -} - - - -inline void Matrix2::setColumn(int index, const float col[2]) -{ - m[index*2] = col[0]; m[index*2 + 1] = col[1]; -} - - - -inline void Matrix2::setColumn(int index, const Vector2& v) -{ - m[index*2] = v.x; m[index*2 + 1] = v.y; -} - - - -inline const float* Matrix2::get() const -{ - return m; -} - - -inline Matrix2& Matrix2::identity() -{ - m[0] = m[3] = 1.0f; - m[1] = m[2] = 0.0f; - return *this; -} - - - -inline Matrix2 Matrix2::operator+(const Matrix2& rhs) const -{ - return Matrix2(m[0]+rhs[0], m[1]+rhs[1], m[2]+rhs[2], m[3]+rhs[3]); -} - - - -inline Matrix2 Matrix2::operator-(const Matrix2& rhs) const -{ - return Matrix2(m[0]-rhs[0], m[1]-rhs[1], m[2]-rhs[2], m[3]-rhs[3]); -} - - - -inline Matrix2& Matrix2::operator+=(const Matrix2& rhs) -{ - m[0] += rhs[0]; m[1] += rhs[1]; m[2] += rhs[2]; m[3] += rhs[3]; - return *this; -} - - - -inline Matrix2& Matrix2::operator-=(const Matrix2& rhs) -{ - m[0] -= rhs[0]; m[1] -= rhs[1]; m[2] -= rhs[2]; m[3] -= rhs[3]; - return *this; -} - - - -inline Vector2 Matrix2::operator*(const Vector2& rhs) const -{ - return Vector2(m[0]*rhs.x + m[2]*rhs.y, m[1]*rhs.x + m[3]*rhs.y); -} - - - -inline Matrix2 Matrix2::operator*(const Matrix2& rhs) const -{ - return Matrix2(m[0]*rhs[0] + m[2]*rhs[1], m[1]*rhs[0] + m[3]*rhs[1], - m[0]*rhs[2] + m[2]*rhs[3], m[1]*rhs[2] + m[3]*rhs[3]); -} - - - -inline Matrix2& Matrix2::operator*=(const Matrix2& rhs) -{ - *this = *this * rhs; - return *this; -} - - - -inline bool Matrix2::operator==(const Matrix2& rhs) const -{ - return (m[0] == rhs[0]) && (m[1] == rhs[1]) && (m[2] == rhs[2]) && (m[3] == rhs[3]); -} - - - -inline bool Matrix2::operator!=(const Matrix2& rhs) const -{ - return (m[0] != rhs[0]) || (m[1] != rhs[1]) || (m[2] != rhs[2]) || (m[3] != rhs[3]); -} - - - -inline float Matrix2::operator[](int index) const -{ - return m[index]; -} - - - -inline float& Matrix2::operator[](int index) -{ - return m[index]; -} - - - -inline Matrix2 operator-(const Matrix2& rhs) -{ - return Matrix2(-rhs[0], -rhs[1], -rhs[2], -rhs[3]); -} - - - -inline Matrix2 operator*(float s, const Matrix2& rhs) -{ - return Matrix2(s*rhs[0], s*rhs[1], s*rhs[2], s*rhs[3]); -} - - - -inline Vector2 operator*(const Vector2& v, const Matrix2& rhs) -{ - return Vector2(v.x*rhs[0] + v.y*rhs[1], v.x*rhs[2] + v.y*rhs[3]); -} - - - -inline std::ostream& operator<<(std::ostream& os, const Matrix2& m) -{ - os << std::fixed << std::setprecision(5); - os << "[" << std::setw(10) << m[0] << " " << std::setw(10) << m[2] << "]\n" - << "[" << std::setw(10) << m[1] << " " << std::setw(10) << m[3] << "]\n"; - os << std::resetiosflags(std::ios_base::fixed | std::ios_base::floatfield); - return os; -} -// END OF MATRIX2 INLINE ////////////////////////////////////////////////////// - - - - -/////////////////////////////////////////////////////////////////////////// -// inline functions for Matrix3 -/////////////////////////////////////////////////////////////////////////// -inline Matrix3::Matrix3() -{ - // initially identity matrix - identity(); -} - - - -inline Matrix3::Matrix3(const float src[9]) -{ - set(src); -} - - - -inline Matrix3::Matrix3(float m0, float m1, float m2, - float m3, float m4, float m5, - float m6, float m7, float m8) -{ - set(m0, m1, m2, m3, m4, m5, m6, m7, m8); -} - - - -inline void Matrix3::set(const float src[9]) -{ - m[0] = src[0]; m[1] = src[1]; m[2] = src[2]; - m[3] = src[3]; m[4] = src[4]; m[5] = src[5]; - m[6] = src[6]; m[7] = src[7]; m[8] = src[8]; -} - - - -inline void Matrix3::set(float m0, float m1, float m2, - float m3, float m4, float m5, - float m6, float m7, float m8) -{ - m[0] = m0; m[1] = m1; m[2] = m2; - m[3] = m3; m[4] = m4; m[5] = m5; - m[6] = m6; m[7] = m7; m[8] = m8; -} - - - -inline void Matrix3::setRow(int index, const float row[3]) -{ - m[index] = row[0]; m[index + 3] = row[1]; m[index + 6] = row[2]; -} - - - -inline void Matrix3::setRow(int index, const Vector3& v) -{ - m[index] = v.x; m[index + 3] = v.y; m[index + 6] = v.z; -} - - - -inline void Matrix3::setColumn(int index, const float col[3]) -{ - m[index*3] = col[0]; m[index*3 + 1] = col[1]; m[index*3 + 2] = col[2]; -} - - - -inline void Matrix3::setColumn(int index, const Vector3& v) -{ - m[index*3] = v.x; m[index*3 + 1] = v.y; m[index*3 + 2] = v.z; -} - - - -inline const float* Matrix3::get() const -{ - return m; -} - - - -inline Matrix3& Matrix3::identity() -{ - m[0] = m[4] = m[8] = 1.0f; - m[1] = m[2] = m[3] = m[5] = m[6] = m[7] = 0.0f; - return *this; -} - - - -inline Matrix3 Matrix3::operator+(const Matrix3& rhs) const -{ - return Matrix3(m[0]+rhs[0], m[1]+rhs[1], m[2]+rhs[2], - m[3]+rhs[3], m[4]+rhs[4], m[5]+rhs[5], - m[6]+rhs[6], m[7]+rhs[7], m[8]+rhs[8]); -} - - - -inline Matrix3 Matrix3::operator-(const Matrix3& rhs) const -{ - return Matrix3(m[0]-rhs[0], m[1]-rhs[1], m[2]-rhs[2], - m[3]-rhs[3], m[4]-rhs[4], m[5]-rhs[5], - m[6]-rhs[6], m[7]-rhs[7], m[8]-rhs[8]); -} - - - -inline Matrix3& Matrix3::operator+=(const Matrix3& rhs) -{ - m[0] += rhs[0]; m[1] += rhs[1]; m[2] += rhs[2]; - m[3] += rhs[3]; m[4] += rhs[4]; m[5] += rhs[5]; - m[6] += rhs[6]; m[7] += rhs[7]; m[8] += rhs[8]; - return *this; -} - - - -inline Matrix3& Matrix3::operator-=(const Matrix3& rhs) -{ - m[0] -= rhs[0]; m[1] -= rhs[1]; m[2] -= rhs[2]; - m[3] -= rhs[3]; m[4] -= rhs[4]; m[5] -= rhs[5]; - m[6] -= rhs[6]; m[7] -= rhs[7]; m[8] -= rhs[8]; - return *this; -} - - - -inline Vector3 Matrix3::operator*(const Vector3& rhs) const -{ - return Vector3(m[0]*rhs.x + m[3]*rhs.y + m[6]*rhs.z, - m[1]*rhs.x + m[4]*rhs.y + m[7]*rhs.z, - m[2]*rhs.x + m[5]*rhs.y + m[8]*rhs.z); -} - - - -inline Matrix3 Matrix3::operator*(const Matrix3& rhs) const -{ - return Matrix3(m[0]*rhs[0] + m[3]*rhs[1] + m[6]*rhs[2], m[1]*rhs[0] + m[4]*rhs[1] + m[7]*rhs[2], m[2]*rhs[0] + m[5]*rhs[1] + m[8]*rhs[2], - m[0]*rhs[3] + m[3]*rhs[4] + m[6]*rhs[5], m[1]*rhs[3] + m[4]*rhs[4] + m[7]*rhs[5], m[2]*rhs[3] + m[5]*rhs[4] + m[8]*rhs[5], - m[0]*rhs[6] + m[3]*rhs[7] + m[6]*rhs[8], m[1]*rhs[6] + m[4]*rhs[7] + m[7]*rhs[8], m[2]*rhs[6] + m[5]*rhs[7] + m[8]*rhs[8]); -} - - - -inline Matrix3& Matrix3::operator*=(const Matrix3& rhs) -{ - *this = *this * rhs; - return *this; -} - - - -inline bool Matrix3::operator==(const Matrix3& rhs) const -{ - return (m[0] == rhs[0]) && (m[1] == rhs[1]) && (m[2] == rhs[2]) && - (m[3] == rhs[3]) && (m[4] == rhs[4]) && (m[5] == rhs[5]) && - (m[6] == rhs[6]) && (m[7] == rhs[7]) && (m[8] == rhs[8]); -} - - - -inline bool Matrix3::operator!=(const Matrix3& rhs) const -{ - return (m[0] != rhs[0]) || (m[1] != rhs[1]) || (m[2] != rhs[2]) || - (m[3] != rhs[3]) || (m[4] != rhs[4]) || (m[5] != rhs[5]) || - (m[6] != rhs[6]) || (m[7] != rhs[7]) || (m[8] != rhs[8]); -} - - - -inline float Matrix3::operator[](int index) const -{ - return m[index]; -} - - - -inline float& Matrix3::operator[](int index) -{ - return m[index]; -} - - - -inline Matrix3 operator-(const Matrix3& rhs) -{ - return Matrix3(-rhs[0], -rhs[1], -rhs[2], -rhs[3], -rhs[4], -rhs[5], -rhs[6], -rhs[7], -rhs[8]); -} - - - -inline Matrix3 operator*(float s, const Matrix3& rhs) -{ - return Matrix3(s*rhs[0], s*rhs[1], s*rhs[2], s*rhs[3], s*rhs[4], s*rhs[5], s*rhs[6], s*rhs[7], s*rhs[8]); -} - - - -inline Vector3 operator*(const Vector3& v, const Matrix3& m) -{ - return Vector3(v.x*m[0] + v.y*m[1] + v.z*m[2], v.x*m[3] + v.y*m[4] + v.z*m[5], v.x*m[6] + v.y*m[7] + v.z*m[8]); -} - - - -inline std::ostream& operator<<(std::ostream& os, const Matrix3& m) -{ - os << std::fixed << std::setprecision(5); - os << "[" << std::setw(10) << m[0] << " " << std::setw(10) << m[3] << " " << std::setw(10) << m[6] << "]\n" - << "[" << std::setw(10) << m[1] << " " << std::setw(10) << m[4] << " " << std::setw(10) << m[7] << "]\n" - << "[" << std::setw(10) << m[2] << " " << std::setw(10) << m[5] << " " << std::setw(10) << m[8] << "]\n"; - os << std::resetiosflags(std::ios_base::fixed | std::ios_base::floatfield); - return os; -} -// END OF MATRIX3 INLINE ////////////////////////////////////////////////////// - - - - -/////////////////////////////////////////////////////////////////////////// -// inline functions for Matrix4 -/////////////////////////////////////////////////////////////////////////// -inline Matrix4::Matrix4() -{ - // initially identity matrix - identity(); -} - - - -inline Matrix4::Matrix4(const float src[16]) -{ - set(src); -} - - - -inline Matrix4::Matrix4(float m00, float m01, float m02, float m03, - float m04, float m05, float m06, float m07, - float m08, float m09, float m10, float m11, - float m12, float m13, float m14, float m15,Type t) -{ - set(m00, m01, m02, m03, m04, m05, m06, m07, m08, m09, m10, m11, m12, m13, m14, m15,t); -} - - - -inline void Matrix4::set(const float src[16]) -{ - m[0] = src[0]; m[1] = src[1]; m[2] = src[2]; m[3] = src[3]; - m[4] = src[4]; m[5] = src[5]; m[6] = src[6]; m[7] = src[7]; - m[8] = src[8]; m[9] = src[9]; m[10]= src[10]; m[11]= src[11]; - m[12]= src[12]; m[13]= src[13]; m[14]= src[14]; m[15]= src[15]; - type=FULL; -} - - - -inline void Matrix4::set(float m00, float m01, float m02, float m03, - float m04, float m05, float m06, float m07, - float m08, float m09, float m10, float m11, - float m12, float m13, float m14, float m15,Type t) -{ - m[0] = m00; m[1] = m01; m[2] = m02; m[3] = m03; - m[4] = m04; m[5] = m05; m[6] = m06; m[7] = m07; - m[8] = m08; m[9] = m09; m[10]= m10; m[11]= m11; - m[12]= m12; m[13]= m13; m[14]= m14; m[15]= m15; - type=t; -} - - - -inline void Matrix4::setRow(int index, const float row[4]) -{ - m[index] = row[0]; m[index + 4] = row[1]; m[index + 8] = row[2]; m[index + 12] = row[3]; - type=FULL; -} - - - -inline void Matrix4::setRow(int index, const Vector4& v) -{ - m[index] = v.x; m[index + 4] = v.y; m[index + 8] = v.z; m[index + 12] = v.w; - type=FULL; -} - - - -inline void Matrix4::setRow(int index, const Vector3& v) -{ - m[index] = v.x; m[index + 4] = v.y; m[index + 8] = v.z; - type=FULL; -} - - - -inline void Matrix4::setColumn(int index, const float col[4]) -{ - m[index*4] = col[0]; m[index*4 + 1] = col[1]; m[index*4 + 2] = col[2]; m[index*4 + 3] = col[3]; - type=FULL; -} - - - -inline void Matrix4::setColumn(int index, const Vector4& v) -{ - m[index*4] = v.x; m[index*4 + 1] = v.y; m[index*4 + 2] = v.z; m[index*4 + 3] = v.w; - type=FULL; -} - - - -inline void Matrix4::setColumn(int index, const Vector3& v) -{ - m[index*4] = v.x; m[index*4 + 1] = v.y; m[index*4 + 2] = v.z; - type=FULL; -} - - - -inline const float* Matrix4::get() const -{ - return m; -} - -inline const float* Matrix4::data() const -{ - return m; -} - -inline float* Matrix4::raw() -{ - return m; -} - - - -inline const float* Matrix4::getTranspose() -{ - tm[0] = m[0]; tm[1] = m[4]; tm[2] = m[8]; tm[3] = m[12]; - tm[4] = m[1]; tm[5] = m[5]; tm[6] = m[9]; tm[7] = m[13]; - tm[8] = m[2]; tm[9] = m[6]; tm[10]= m[10]; tm[11]= m[14]; - tm[12]= m[3]; tm[13]= m[7]; tm[14]= m[11]; tm[15]= m[15]; - return tm; -} - - - -inline Matrix4& Matrix4::identity() -{ - m[0] = m[5] = m[10] = m[15] = 1.0f; - m[1] = m[2] = m[3] = m[4] = m[6] = m[7] = m[8] = m[9] = m[11] = m[12] = m[13] = m[14] = 0.0f; - type=TRANSLATE; - return *this; -} - - - -inline Matrix4 Matrix4::operator+(const Matrix4& rhs) const -{ - return Matrix4(m[0]+rhs[0], m[1]+rhs[1], m[2]+rhs[2], m[3]+rhs[3], - m[4]+rhs[4], m[5]+rhs[5], m[6]+rhs[6], m[7]+rhs[7], - m[8]+rhs[8], m[9]+rhs[9], m[10]+rhs[10], m[11]+rhs[11], - m[12]+rhs[12], m[13]+rhs[13], m[14]+rhs[14], m[15]+rhs[15]); -} - - - -inline Matrix4 Matrix4::operator-(const Matrix4& rhs) const -{ - return Matrix4(m[0]-rhs[0], m[1]-rhs[1], m[2]-rhs[2], m[3]-rhs[3], - m[4]-rhs[4], m[5]-rhs[5], m[6]-rhs[6], m[7]-rhs[7], - m[8]-rhs[8], m[9]-rhs[9], m[10]-rhs[10], m[11]-rhs[11], - m[12]-rhs[12], m[13]-rhs[13], m[14]-rhs[14], m[15]-rhs[15]); -} - - - -inline Matrix4& Matrix4::operator+=(const Matrix4& rhs) -{ - m[0] += rhs[0]; m[1] += rhs[1]; m[2] += rhs[2]; m[3] += rhs[3]; - m[4] += rhs[4]; m[5] += rhs[5]; m[6] += rhs[6]; m[7] += rhs[7]; - m[8] += rhs[8]; m[9] += rhs[9]; m[10]+= rhs[10]; m[11]+= rhs[11]; - m[12]+= rhs[12]; m[13]+= rhs[13]; m[14]+= rhs[14]; m[15]+= rhs[15]; - return *this; -} - - - -inline Matrix4& Matrix4::operator-=(const Matrix4& rhs) -{ - m[0] -= rhs[0]; m[1] -= rhs[1]; m[2] -= rhs[2]; m[3] -= rhs[3]; - m[4] -= rhs[4]; m[5] -= rhs[5]; m[6] -= rhs[6]; m[7] -= rhs[7]; - m[8] -= rhs[8]; m[9] -= rhs[9]; m[10]-= rhs[10]; m[11]-= rhs[11]; - m[12]-= rhs[12]; m[13]-= rhs[13]; m[14]-= rhs[14]; m[15]-= rhs[15]; - return *this; -} - - - -inline Vector4 Matrix4::operator*(const Vector4& rhs) const -{ - return Vector4(m[0]*rhs.x + m[4]*rhs.y + m[8]*rhs.z + m[12]*rhs.w, - m[1]*rhs.x + m[5]*rhs.y + m[9]*rhs.z + m[13]*rhs.w, - m[2]*rhs.x + m[6]*rhs.y + m[10]*rhs.z + m[14]*rhs.w, - m[3]*rhs.x + m[7]*rhs.y + m[11]*rhs.z + m[15]*rhs.w); -} - - - -inline Vector3 Matrix4::operator*(const Vector3& rhs) const -{ - return Vector3(m[0]*rhs.x + m[4]*rhs.y + m[8]*rhs.z, - m[1]*rhs.x + m[5]*rhs.y + m[9]*rhs.z, - m[2]*rhs.x + m[6]*rhs.y + m[10]*rhs.z); -} - - - -inline Matrix4 Matrix4::operator*(const Matrix4& n) const -{ - //TRN: m0,m5,m10,m15=1 m12,m13,m14=x - //M2D: m10,m15=1 m0,m1,m4,m5,m12,m13,m14=x - //M3D: m15=1 m0,m1,m2,m4,m5,m6,m8,m9,m10,m12,m13,m14=x - //FULL: no opt - int mode=((type)<<2)|(n.type); - switch (mode) - { - case 0: //TRNxTRN - return Matrix4(1,0,0,0, - 0,1,0,0, - 0,0,1,0, - n[12]+m[12],n[13]+m[13],n[14]+m[14],1,TRANSLATE); - case 1: //TRNxM2D - return Matrix4(n[0],n[1],0,0, - n[4],n[5],0,0, - 0,0,1,0, - n[12] + m[12],n[13] + m[13],n[14] + m[14],1,M2D); - case 2: //TRNxM3D - return Matrix4(n[0],n[1],n[2],0, - n[4],n[5],n[6],0, - n[8],n[9],n[10],0, - n[12] + m[12],n[13] + m[13],n[14] + m[14],1,M3D); - case 3: //TRNxFULL - return Matrix4(n[0],n[1],n[2],n[3], - n[4],n[5],n[6],n[7], - n[8],n[9],n[10],n[8], - n[12] + m[12],n[13] + m[13],n[14] + m[14],n[15],FULL); - case 4: //M2DxTRN - return Matrix4(m[0],m[1],0,0, - m[4],m[5],0,0, - 0,0,1,0, - m[0]*n[12] + m[4]*n[13] + m[12], - m[1]*n[12] + m[5]*n[13] + m[13], - n[14] + m[14], - 1,M2D); - case 5: //M2DxM2D - return Matrix4(m[0]*n[0]+m[4]*n[1],m[1]*n[0]+m[5]*n[1],0,0, - m[0]*n[4]+m[4]*n[5],m[1]*n[4]+m[5]*n[5],0,0, - 0,0,1,0, - m[0]*n[12] + m[4]*n[13] + m[12], - m[1]*n[12] + m[5]*n[13] + m[13], - n[14] + m[14], - 1,M2D); - case 8: //M3DxTRN - return Matrix4(m[0],m[1],m[2],0, - m[4],m[5],m[6],0, - m[8],m[9],m[10],0, - m[0]*n[12] + m[4]*n[13] + m[8]*n[14] + m[12], - m[1]*n[12] + m[5]*n[13] + m[9]*n[14] + m[13], - m[2]*n[12] + m[6]*n[13] + m[10]*n[14] + m[14], - 1,M3D); - case 12: //FULLxTRN - return Matrix4(m[0],m[1],m[2],m[3], - m[4],m[5],m[6],m[7], - m[8],m[9],m[10],m[11], - m[0]*n[12] + m[4]*n[13] + m[8]*n[14] + m[12], - m[1]*n[12] + m[5]*n[13] + m[9]*n[14] + m[13], - m[2]*n[12] + m[6]*n[13] + m[10]*n[14] + m[14], - m[3]*n[12] + m[7]*n[13] + m[11]*n[14] + m[15],FULL); - case 6: //M2DxM3D TODO - case 7: //M2DxFULL TODO - case 9: //M3DxM2D TODO - case 10: //M3DxM3D TODO - case 11: //M3DxFULL TODO - case 13: //FULLxM2D TODO - case 14: //FULLxM3D TODO - default: //FULLxFULL - return Matrix4(m[0]*n[0] + m[4]*n[1] + m[8]*n[2] + m[12]*n[3], - m[1]*n[0] + m[5]*n[1] + m[9]*n[2] + m[13]*n[3], - m[2]*n[0] + m[6]*n[1] + m[10]*n[2] + m[14]*n[3], - m[3]*n[0] + m[7]*n[1] + m[11]*n[2] + m[15]*n[3], - - m[0]*n[4] + m[4]*n[5] + m[8]*n[6] + m[12]*n[7], - m[1]*n[4] + m[5]*n[5] + m[9]*n[6] + m[13]*n[7], - m[2]*n[4] + m[6]*n[5] + m[10]*n[6] + m[14]*n[7], - m[3]*n[4] + m[7]*n[5] + m[11]*n[6] + m[15]*n[7], - - m[0]*n[8] + m[4]*n[9] + m[8]*n[10] + m[12]*n[11], - m[1]*n[8] + m[5]*n[9] + m[9]*n[10] + m[13]*n[11], - m[2]*n[8] + m[6]*n[9] + m[10]*n[10] + m[14]*n[11], - m[3]*n[8] + m[7]*n[9] + m[11]*n[10] + m[15]*n[11], - - m[0]*n[12] + m[4]*n[13] + m[8]*n[14] + m[12]*n[15], - m[1]*n[12] + m[5]*n[13] + m[9]*n[14] + m[13]*n[15], - m[2]*n[12] + m[6]*n[13] + m[10]*n[14] + m[14]*n[15], - m[3]*n[12] + m[7]*n[13] + m[11]*n[14] + m[15]*n[15],FULL); - } -} - - - -inline Matrix4& Matrix4::operator*=(const Matrix4& rhs) -{ - *this = *this * rhs; - return *this; -} - - - -inline bool Matrix4::operator==(const Matrix4& n) const -{ - return (m[0] == n[0]) && (m[1] == n[1]) && (m[2] == n[2]) && (m[3] == n[3]) && - (m[4] == n[4]) && (m[5] == n[5]) && (m[6] == n[6]) && (m[7] == n[7]) && - (m[8] == n[8]) && (m[9] == n[9]) && (m[10]== n[10]) && (m[11]== n[11]) && - (m[12]== n[12]) && (m[13]== n[13]) && (m[14]== n[14]) && (m[15]== n[15]); -} - - - -inline bool Matrix4::operator!=(const Matrix4& n) const -{ - return (m[0] != n[0]) || (m[1] != n[1]) || (m[2] != n[2]) || (m[3] != n[3]) || - (m[4] != n[4]) || (m[5] != n[5]) || (m[6] != n[6]) || (m[7] != n[7]) || - (m[8] != n[8]) || (m[9] != n[9]) || (m[10]!= n[10]) || (m[11]!= n[11]) || - (m[12]!= n[12]) || (m[13]!= n[13]) || (m[14]!= n[14]) || (m[15]!= n[15]); -} - - - -inline float Matrix4::operator[](int index) const -{ - return m[index]; -} - - - -inline float& Matrix4::operator[](int index) -{ - return m[index]; -} - - - -inline Matrix4 operator-(const Matrix4& rhs) -{ - return Matrix4(-rhs[0], -rhs[1], -rhs[2], -rhs[3], -rhs[4], -rhs[5], -rhs[6], -rhs[7], -rhs[8], -rhs[9], -rhs[10], -rhs[11], -rhs[12], -rhs[13], -rhs[14], -rhs[15]); -} - - - -inline Matrix4 operator*(float s, const Matrix4& rhs) -{ - return Matrix4(s*rhs[0], s*rhs[1], s*rhs[2], s*rhs[3], s*rhs[4], s*rhs[5], s*rhs[6], s*rhs[7], s*rhs[8], s*rhs[9], s*rhs[10], s*rhs[11], s*rhs[12], s*rhs[13], s*rhs[14], s*rhs[15]); -} - - - -inline Vector4 operator*(const Vector4& v, const Matrix4& m) -{ - return Vector4(v.x*m[0] + v.y*m[1] + v.z*m[2] + v.w*m[3], v.x*m[4] + v.y*m[5] + v.z*m[6] + v.w*m[7], v.x*m[8] + v.y*m[9] + v.z*m[10] + v.w*m[11], v.x*m[12] + v.y*m[13] + v.z*m[14] + v.w*m[15]); -} - - - -inline Vector3 operator*(const Vector3& v, const Matrix4& m) -{ - return Vector3(v.x*m[0] + v.y*m[1] + v.z*m[2], v.x*m[4] + v.y*m[5] + v.z*m[6], v.x*m[8] + v.y*m[9] + v.z*m[10]); -} - - - -inline std::ostream& operator<<(std::ostream& os, const Matrix4& m) -{ - os << std::fixed << std::setprecision(5); - os << "[" << std::setw(10) << m[0] << " " << std::setw(10) << m[4] << " " << std::setw(10) << m[8] << " " << std::setw(10) << m[12] << "]\n" - << "[" << std::setw(10) << m[1] << " " << std::setw(10) << m[5] << " " << std::setw(10) << m[9] << " " << std::setw(10) << m[13] << "]\n" - << "[" << std::setw(10) << m[2] << " " << std::setw(10) << m[6] << " " << std::setw(10) << m[10] << " " << std::setw(10) << m[14] << "]\n" - << "[" << std::setw(10) << m[3] << " " << std::setw(10) << m[7] << " " << std::setw(10) << m[11] << " " << std::setw(10) << m[15] << "]\n"; - os << std::resetiosflags(std::ios_base::fixed | std::ios_base::floatfield); - return os; -} -// END OF MATRIX4 INLINE ////////////////////////////////////////////////////// -#endif +/////////////////////////////////////////////////////////////////////////////// +// Matrice.h +// ========= +// NxN Matrix Math classes +// +// The elements of the matrix are stored as column major order. +// | 0 2 | | 0 3 6 | | 0 4 8 12 | +// | 1 3 | | 1 4 7 | | 1 5 9 13 | +// | 2 5 8 | | 2 6 10 14 | +// | 3 7 11 15 | +// +// AUTHOR: Song Ho Ahn (song.ahn@gmail.com) +// CREATED: 2005-06-24 +// UPDATED: 2013-09-30 +// +// Copyright (C) 2005 Song Ho Ahn +/////////////////////////////////////////////////////////////////////////////// + +#ifndef MATH_MATRICES_H +#define MATH_MATRICES_H + +#include +#include +#include "Vectors.h" + +/////////////////////////////////////////////////////////////////////////// +// 2x2 matrix +/////////////////////////////////////////////////////////////////////////// +class Matrix2 +{ +public: + // constructors + Matrix2(); // init with identity + Matrix2(const float src[4]); + Matrix2(float m0, float m1, float m2, float m3); + + void set(const float src[4]); + void set(float m0, float m1, float m2, float m3); + void setRow(int index, const float row[2]); + void setRow(int index, const Vector2& v); + void setColumn(int index, const float col[2]); + void setColumn(int index, const Vector2& v); + + const float* get() const; + float getDeterminant(); + + Matrix2& identity(); + Matrix2& transpose(); // transpose itself and return reference + Matrix2& invert(); + + // operators + Matrix2 operator+(const Matrix2& rhs) const; // add rhs + Matrix2 operator-(const Matrix2& rhs) const; // subtract rhs + Matrix2& operator+=(const Matrix2& rhs); // add rhs and update this object + Matrix2& operator-=(const Matrix2& rhs); // subtract rhs and update this object + Vector2 operator*(const Vector2& rhs) const; // multiplication: v' = M * v + Matrix2 operator*(const Matrix2& rhs) const; // multiplication: M3 = M1 * M2 + Matrix2& operator*=(const Matrix2& rhs); // multiplication: M1' = M1 * M2 + bool operator==(const Matrix2& rhs) const; // exact compare, no epsilon + bool operator!=(const Matrix2& rhs) const; // exact compare, no epsilon + float operator[](int index) const; // subscript operator v[0], v[1] + float& operator[](int index); // subscript operator v[0], v[1] + + friend Matrix2 operator-(const Matrix2& m); // unary operator (-) + friend Matrix2 operator*(float scalar, const Matrix2& m); // pre-multiplication + friend Vector2 operator*(const Vector2& vec, const Matrix2& m); // pre-multiplication + friend std::ostream& operator<<(std::ostream& os, const Matrix2& m); + +protected: + +private: + float m[4]; + +}; + + + +/////////////////////////////////////////////////////////////////////////// +// 3x3 matrix +/////////////////////////////////////////////////////////////////////////// +class Matrix3 +{ +public: + // constructors + Matrix3(); // init with identity + Matrix3(const float src[9]); + Matrix3(float m0, float m1, float m2, // 1st column + float m3, float m4, float m5, // 2nd column + float m6, float m7, float m8); // 3rd column + + void set(const float src[9]); + void set(float m0, float m1, float m2, // 1st column + float m3, float m4, float m5, // 2nd column + float m6, float m7, float m8); // 3rd column + void setRow(int index, const float row[3]); + void setRow(int index, const Vector3& v); + void setColumn(int index, const float col[3]); + void setColumn(int index, const Vector3& v); + + const float* get() const; + float getDeterminant(); + + Matrix3& identity(); + Matrix3& transpose(); // transpose itself and return reference + Matrix3& invert(); + + // operators + Matrix3 operator+(const Matrix3& rhs) const; // add rhs + Matrix3 operator-(const Matrix3& rhs) const; // subtract rhs + Matrix3& operator+=(const Matrix3& rhs); // add rhs and update this object + Matrix3& operator-=(const Matrix3& rhs); // subtract rhs and update this object + Vector3 operator*(const Vector3& rhs) const; // multiplication: v' = M * v + Matrix3 operator*(const Matrix3& rhs) const; // multiplication: M3 = M1 * M2 + Matrix3& operator*=(const Matrix3& rhs); // multiplication: M1' = M1 * M2 + bool operator==(const Matrix3& rhs) const; // exact compare, no epsilon + bool operator!=(const Matrix3& rhs) const; // exact compare, no epsilon + float operator[](int index) const; // subscript operator v[0], v[1] + float& operator[](int index); // subscript operator v[0], v[1] + + friend Matrix3 operator-(const Matrix3& m); // unary operator (-) + friend Matrix3 operator*(float scalar, const Matrix3& m); // pre-multiplication + friend Vector3 operator*(const Vector3& vec, const Matrix3& m); // pre-multiplication + friend std::ostream& operator<<(std::ostream& os, const Matrix3& m); + +protected: + +private: + float m[9]; + +}; + + + +/////////////////////////////////////////////////////////////////////////// +// 4x4 matrix +/////////////////////////////////////////////////////////////////////////// +class Matrix4 +{ +public: + enum Type { + TRANSLATE=0, + M2D=1, + M3D=2, + FULL=3 + }; + // constructors + Matrix4(); // init with identity + Matrix4(const float src[16]); + Matrix4(float m00, float m01, float m02, float m03, // 1st column + float m04, float m05, float m06, float m07, // 2nd column + float m08, float m09, float m10, float m11, // 3rd column + float m12, float m13, float m14, float m15,Type t=FULL);// 4th column + + void set() { identity(); } + void set(const float src[16]); + void set(float m00, float m01, float m02, float m03, // 1st column + float m04, float m05, float m06, float m07, // 2nd column + float m08, float m09, float m10, float m11, // 3rd column + float m12, float m13, float m14, float m15,Type t=FULL);// 4th column + void setRow(int index, const float row[4]); + void setRow(int index, const Vector4& v); + void setRow(int index, const Vector3& v); + void setColumn(int index, const float col[4]); + void setColumn(int index, const Vector4& v); + void setColumn(int index, const Vector3& v); + + const float* get() const; + const float* data() const; + float* raw(); + const float* getTranspose(); // return transposed matrix + float getDeterminant(); + + Matrix4& identity(); + Matrix4& transpose(); // transpose itself and return reference + Matrix4& invert(); // check best inverse method before inverse + Matrix4& invertEuclidean(); // inverse of Euclidean transform matrix + Matrix4& invertAffine(); // inverse of affine transform matrix + Matrix4& invertProjective(); // inverse of projective matrix using partitioning + Matrix4& invertGeneral(); // inverse of generic matrix + Matrix4 inverse() const; + + // transform matrix + Matrix4& translate(float x, float y, float z); // translation by (x,y,z) + Matrix4& translate(const Vector3& v); // + Matrix4& rotate(float angle, const Vector3& axis); // rotate angle(degree) along the given axix + Matrix4& rotate(float angle, float x, float y, float z); + Matrix4& rotateX(float angle); // rotate on X-axis with degree + Matrix4& rotateY(float angle); // rotate on Y-axis with degree + Matrix4& rotateZ(float angle); // rotate on Z-axis with degree + Matrix4& scale(float scale); // uniform scale + Matrix4& scale(float sx, float sy, float sz); // scale by (sx, sy, sz) on each axis + + // operators + Matrix4 operator+(const Matrix4& rhs) const; // add rhs + Matrix4 operator-(const Matrix4& rhs) const; // subtract rhs + Matrix4& operator+=(const Matrix4& rhs); // add rhs and update this object + Matrix4& operator-=(const Matrix4& rhs); // subtract rhs and update this object + Vector4 operator*(const Vector4& rhs) const; // multiplication: v' = M * v + Vector3 operator*(const Vector3& rhs) const; // multiplication: v' = M * v + Matrix4 operator*(const Matrix4& rhs) const; // multiplication: M3 = M1 * M2 + Matrix4& operator*=(const Matrix4& rhs); // multiplication: M1' = M1 * M2 + bool operator==(const Matrix4& rhs) const; // exact compare, no epsilon + bool operator!=(const Matrix4& rhs) const; // exact compare, no epsilon + float operator[](int index) const; // subscript operator v[0], v[1] + float& operator[](int index); // subscript operator v[0], v[1] + + friend Matrix4 operator-(const Matrix4& m); // unary operator (-) + friend Matrix4 operator*(float scalar, const Matrix4& m); // pre-multiplication + friend Vector3 operator*(const Vector3& vec, const Matrix4& m); // pre-multiplication + friend Vector4 operator*(const Vector4& vec, const Matrix4& m); // pre-multiplication + friend std::ostream& operator<<(std::ostream& os, const Matrix4& m); + + void transformPoint(float x, float y, float* newx, float* newy) const; + void inverseTransformPoint(float x, float y, float* newx, float* newy) const; + + enum Type type; +protected: + +private: + float getCofactor(float m0, float m1, float m2, + float m3, float m4, float m5, + float m6, float m7, float m8); + + float m[16]; + float tm[16]; // transpose m +}; + + + +/////////////////////////////////////////////////////////////////////////// +// inline functions for Matrix2 +/////////////////////////////////////////////////////////////////////////// +inline Matrix2::Matrix2() +{ + // initially identity matrix + identity(); +} + + + +inline Matrix2::Matrix2(const float src[4]) +{ + set(src); +} + + + +inline Matrix2::Matrix2(float m0, float m1, float m2, float m3) +{ + set(m0, m1, m2, m3); +} + + + +inline void Matrix2::set(const float src[4]) +{ + m[0] = src[0]; m[1] = src[1]; m[2] = src[2]; m[3] = src[3]; +} + + + +inline void Matrix2::set(float m0, float m1, float m2, float m3) +{ + m[0]= m0; m[1] = m1; m[2] = m2; m[3]= m3; +} + + + +inline void Matrix2::setRow(int index, const float row[2]) +{ + m[index] = row[0]; m[index + 2] = row[1]; +} + + + +inline void Matrix2::setRow(int index, const Vector2& v) +{ + m[index] = v.x; m[index + 2] = v.y; +} + + + +inline void Matrix2::setColumn(int index, const float col[2]) +{ + m[index*2] = col[0]; m[index*2 + 1] = col[1]; +} + + + +inline void Matrix2::setColumn(int index, const Vector2& v) +{ + m[index*2] = v.x; m[index*2 + 1] = v.y; +} + + + +inline const float* Matrix2::get() const +{ + return m; +} + + +inline Matrix2& Matrix2::identity() +{ + m[0] = m[3] = 1.0f; + m[1] = m[2] = 0.0f; + return *this; +} + + + +inline Matrix2 Matrix2::operator+(const Matrix2& rhs) const +{ + return Matrix2(m[0]+rhs[0], m[1]+rhs[1], m[2]+rhs[2], m[3]+rhs[3]); +} + + + +inline Matrix2 Matrix2::operator-(const Matrix2& rhs) const +{ + return Matrix2(m[0]-rhs[0], m[1]-rhs[1], m[2]-rhs[2], m[3]-rhs[3]); +} + + + +inline Matrix2& Matrix2::operator+=(const Matrix2& rhs) +{ + m[0] += rhs[0]; m[1] += rhs[1]; m[2] += rhs[2]; m[3] += rhs[3]; + return *this; +} + + + +inline Matrix2& Matrix2::operator-=(const Matrix2& rhs) +{ + m[0] -= rhs[0]; m[1] -= rhs[1]; m[2] -= rhs[2]; m[3] -= rhs[3]; + return *this; +} + + + +inline Vector2 Matrix2::operator*(const Vector2& rhs) const +{ + return Vector2(m[0]*rhs.x + m[2]*rhs.y, m[1]*rhs.x + m[3]*rhs.y); +} + + + +inline Matrix2 Matrix2::operator*(const Matrix2& rhs) const +{ + return Matrix2(m[0]*rhs[0] + m[2]*rhs[1], m[1]*rhs[0] + m[3]*rhs[1], + m[0]*rhs[2] + m[2]*rhs[3], m[1]*rhs[2] + m[3]*rhs[3]); +} + + + +inline Matrix2& Matrix2::operator*=(const Matrix2& rhs) +{ + *this = *this * rhs; + return *this; +} + + + +inline bool Matrix2::operator==(const Matrix2& rhs) const +{ + return (m[0] == rhs[0]) && (m[1] == rhs[1]) && (m[2] == rhs[2]) && (m[3] == rhs[3]); +} + + + +inline bool Matrix2::operator!=(const Matrix2& rhs) const +{ + return (m[0] != rhs[0]) || (m[1] != rhs[1]) || (m[2] != rhs[2]) || (m[3] != rhs[3]); +} + + + +inline float Matrix2::operator[](int index) const +{ + return m[index]; +} + + + +inline float& Matrix2::operator[](int index) +{ + return m[index]; +} + + + +inline Matrix2 operator-(const Matrix2& rhs) +{ + return Matrix2(-rhs[0], -rhs[1], -rhs[2], -rhs[3]); +} + + + +inline Matrix2 operator*(float s, const Matrix2& rhs) +{ + return Matrix2(s*rhs[0], s*rhs[1], s*rhs[2], s*rhs[3]); +} + + + +inline Vector2 operator*(const Vector2& v, const Matrix2& rhs) +{ + return Vector2(v.x*rhs[0] + v.y*rhs[1], v.x*rhs[2] + v.y*rhs[3]); +} + + + +inline std::ostream& operator<<(std::ostream& os, const Matrix2& m) +{ + os << std::fixed << std::setprecision(5); + os << "[" << std::setw(10) << m[0] << " " << std::setw(10) << m[2] << "]\n" + << "[" << std::setw(10) << m[1] << " " << std::setw(10) << m[3] << "]\n"; + os << std::resetiosflags(std::ios_base::fixed | std::ios_base::floatfield); + return os; +} +// END OF MATRIX2 INLINE ////////////////////////////////////////////////////// + + + + +/////////////////////////////////////////////////////////////////////////// +// inline functions for Matrix3 +/////////////////////////////////////////////////////////////////////////// +inline Matrix3::Matrix3() +{ + // initially identity matrix + identity(); +} + + + +inline Matrix3::Matrix3(const float src[9]) +{ + set(src); +} + + + +inline Matrix3::Matrix3(float m0, float m1, float m2, + float m3, float m4, float m5, + float m6, float m7, float m8) +{ + set(m0, m1, m2, m3, m4, m5, m6, m7, m8); +} + + + +inline void Matrix3::set(const float src[9]) +{ + m[0] = src[0]; m[1] = src[1]; m[2] = src[2]; + m[3] = src[3]; m[4] = src[4]; m[5] = src[5]; + m[6] = src[6]; m[7] = src[7]; m[8] = src[8]; +} + + + +inline void Matrix3::set(float m0, float m1, float m2, + float m3, float m4, float m5, + float m6, float m7, float m8) +{ + m[0] = m0; m[1] = m1; m[2] = m2; + m[3] = m3; m[4] = m4; m[5] = m5; + m[6] = m6; m[7] = m7; m[8] = m8; +} + + + +inline void Matrix3::setRow(int index, const float row[3]) +{ + m[index] = row[0]; m[index + 3] = row[1]; m[index + 6] = row[2]; +} + + + +inline void Matrix3::setRow(int index, const Vector3& v) +{ + m[index] = v.x; m[index + 3] = v.y; m[index + 6] = v.z; +} + + + +inline void Matrix3::setColumn(int index, const float col[3]) +{ + m[index*3] = col[0]; m[index*3 + 1] = col[1]; m[index*3 + 2] = col[2]; +} + + + +inline void Matrix3::setColumn(int index, const Vector3& v) +{ + m[index*3] = v.x; m[index*3 + 1] = v.y; m[index*3 + 2] = v.z; +} + + + +inline const float* Matrix3::get() const +{ + return m; +} + + + +inline Matrix3& Matrix3::identity() +{ + m[0] = m[4] = m[8] = 1.0f; + m[1] = m[2] = m[3] = m[5] = m[6] = m[7] = 0.0f; + return *this; +} + + + +inline Matrix3 Matrix3::operator+(const Matrix3& rhs) const +{ + return Matrix3(m[0]+rhs[0], m[1]+rhs[1], m[2]+rhs[2], + m[3]+rhs[3], m[4]+rhs[4], m[5]+rhs[5], + m[6]+rhs[6], m[7]+rhs[7], m[8]+rhs[8]); +} + + + +inline Matrix3 Matrix3::operator-(const Matrix3& rhs) const +{ + return Matrix3(m[0]-rhs[0], m[1]-rhs[1], m[2]-rhs[2], + m[3]-rhs[3], m[4]-rhs[4], m[5]-rhs[5], + m[6]-rhs[6], m[7]-rhs[7], m[8]-rhs[8]); +} + + + +inline Matrix3& Matrix3::operator+=(const Matrix3& rhs) +{ + m[0] += rhs[0]; m[1] += rhs[1]; m[2] += rhs[2]; + m[3] += rhs[3]; m[4] += rhs[4]; m[5] += rhs[5]; + m[6] += rhs[6]; m[7] += rhs[7]; m[8] += rhs[8]; + return *this; +} + + + +inline Matrix3& Matrix3::operator-=(const Matrix3& rhs) +{ + m[0] -= rhs[0]; m[1] -= rhs[1]; m[2] -= rhs[2]; + m[3] -= rhs[3]; m[4] -= rhs[4]; m[5] -= rhs[5]; + m[6] -= rhs[6]; m[7] -= rhs[7]; m[8] -= rhs[8]; + return *this; +} + + + +inline Vector3 Matrix3::operator*(const Vector3& rhs) const +{ + return Vector3(m[0]*rhs.x + m[3]*rhs.y + m[6]*rhs.z, + m[1]*rhs.x + m[4]*rhs.y + m[7]*rhs.z, + m[2]*rhs.x + m[5]*rhs.y + m[8]*rhs.z); +} + + + +inline Matrix3 Matrix3::operator*(const Matrix3& rhs) const +{ + return Matrix3(m[0]*rhs[0] + m[3]*rhs[1] + m[6]*rhs[2], m[1]*rhs[0] + m[4]*rhs[1] + m[7]*rhs[2], m[2]*rhs[0] + m[5]*rhs[1] + m[8]*rhs[2], + m[0]*rhs[3] + m[3]*rhs[4] + m[6]*rhs[5], m[1]*rhs[3] + m[4]*rhs[4] + m[7]*rhs[5], m[2]*rhs[3] + m[5]*rhs[4] + m[8]*rhs[5], + m[0]*rhs[6] + m[3]*rhs[7] + m[6]*rhs[8], m[1]*rhs[6] + m[4]*rhs[7] + m[7]*rhs[8], m[2]*rhs[6] + m[5]*rhs[7] + m[8]*rhs[8]); +} + + + +inline Matrix3& Matrix3::operator*=(const Matrix3& rhs) +{ + *this = *this * rhs; + return *this; +} + + + +inline bool Matrix3::operator==(const Matrix3& rhs) const +{ + return (m[0] == rhs[0]) && (m[1] == rhs[1]) && (m[2] == rhs[2]) && + (m[3] == rhs[3]) && (m[4] == rhs[4]) && (m[5] == rhs[5]) && + (m[6] == rhs[6]) && (m[7] == rhs[7]) && (m[8] == rhs[8]); +} + + + +inline bool Matrix3::operator!=(const Matrix3& rhs) const +{ + return (m[0] != rhs[0]) || (m[1] != rhs[1]) || (m[2] != rhs[2]) || + (m[3] != rhs[3]) || (m[4] != rhs[4]) || (m[5] != rhs[5]) || + (m[6] != rhs[6]) || (m[7] != rhs[7]) || (m[8] != rhs[8]); +} + + + +inline float Matrix3::operator[](int index) const +{ + return m[index]; +} + + + +inline float& Matrix3::operator[](int index) +{ + return m[index]; +} + + + +inline Matrix3 operator-(const Matrix3& rhs) +{ + return Matrix3(-rhs[0], -rhs[1], -rhs[2], -rhs[3], -rhs[4], -rhs[5], -rhs[6], -rhs[7], -rhs[8]); +} + + + +inline Matrix3 operator*(float s, const Matrix3& rhs) +{ + return Matrix3(s*rhs[0], s*rhs[1], s*rhs[2], s*rhs[3], s*rhs[4], s*rhs[5], s*rhs[6], s*rhs[7], s*rhs[8]); +} + + + +inline Vector3 operator*(const Vector3& v, const Matrix3& m) +{ + return Vector3(v.x*m[0] + v.y*m[1] + v.z*m[2], v.x*m[3] + v.y*m[4] + v.z*m[5], v.x*m[6] + v.y*m[7] + v.z*m[8]); +} + + + +inline std::ostream& operator<<(std::ostream& os, const Matrix3& m) +{ + os << std::fixed << std::setprecision(5); + os << "[" << std::setw(10) << m[0] << " " << std::setw(10) << m[3] << " " << std::setw(10) << m[6] << "]\n" + << "[" << std::setw(10) << m[1] << " " << std::setw(10) << m[4] << " " << std::setw(10) << m[7] << "]\n" + << "[" << std::setw(10) << m[2] << " " << std::setw(10) << m[5] << " " << std::setw(10) << m[8] << "]\n"; + os << std::resetiosflags(std::ios_base::fixed | std::ios_base::floatfield); + return os; +} +// END OF MATRIX3 INLINE ////////////////////////////////////////////////////// + + + + +/////////////////////////////////////////////////////////////////////////// +// inline functions for Matrix4 +/////////////////////////////////////////////////////////////////////////// +inline Matrix4::Matrix4() +{ + // initially identity matrix + identity(); +} + + + +inline Matrix4::Matrix4(const float src[16]) +{ + set(src); +} + + + +inline Matrix4::Matrix4(float m00, float m01, float m02, float m03, + float m04, float m05, float m06, float m07, + float m08, float m09, float m10, float m11, + float m12, float m13, float m14, float m15,Type t) +{ + set(m00, m01, m02, m03, m04, m05, m06, m07, m08, m09, m10, m11, m12, m13, m14, m15,t); +} + + + +inline void Matrix4::set(const float src[16]) +{ + m[0] = src[0]; m[1] = src[1]; m[2] = src[2]; m[3] = src[3]; + m[4] = src[4]; m[5] = src[5]; m[6] = src[6]; m[7] = src[7]; + m[8] = src[8]; m[9] = src[9]; m[10]= src[10]; m[11]= src[11]; + m[12]= src[12]; m[13]= src[13]; m[14]= src[14]; m[15]= src[15]; + type=FULL; +} + + + +inline void Matrix4::set(float m00, float m01, float m02, float m03, + float m04, float m05, float m06, float m07, + float m08, float m09, float m10, float m11, + float m12, float m13, float m14, float m15,Type t) +{ + m[0] = m00; m[1] = m01; m[2] = m02; m[3] = m03; + m[4] = m04; m[5] = m05; m[6] = m06; m[7] = m07; + m[8] = m08; m[9] = m09; m[10]= m10; m[11]= m11; + m[12]= m12; m[13]= m13; m[14]= m14; m[15]= m15; + type=t; +} + + + +inline void Matrix4::setRow(int index, const float row[4]) +{ + m[index] = row[0]; m[index + 4] = row[1]; m[index + 8] = row[2]; m[index + 12] = row[3]; + type=FULL; +} + + + +inline void Matrix4::setRow(int index, const Vector4& v) +{ + m[index] = v.x; m[index + 4] = v.y; m[index + 8] = v.z; m[index + 12] = v.w; + type=FULL; +} + + + +inline void Matrix4::setRow(int index, const Vector3& v) +{ + m[index] = v.x; m[index + 4] = v.y; m[index + 8] = v.z; + type=FULL; +} + + + +inline void Matrix4::setColumn(int index, const float col[4]) +{ + m[index*4] = col[0]; m[index*4 + 1] = col[1]; m[index*4 + 2] = col[2]; m[index*4 + 3] = col[3]; + type=FULL; +} + + + +inline void Matrix4::setColumn(int index, const Vector4& v) +{ + m[index*4] = v.x; m[index*4 + 1] = v.y; m[index*4 + 2] = v.z; m[index*4 + 3] = v.w; + type=FULL; +} + + + +inline void Matrix4::setColumn(int index, const Vector3& v) +{ + m[index*4] = v.x; m[index*4 + 1] = v.y; m[index*4 + 2] = v.z; + type=FULL; +} + + + +inline const float* Matrix4::get() const +{ + return m; +} + +inline const float* Matrix4::data() const +{ + return m; +} + +inline float* Matrix4::raw() +{ + return m; +} + + + +inline const float* Matrix4::getTranspose() +{ + tm[0] = m[0]; tm[1] = m[4]; tm[2] = m[8]; tm[3] = m[12]; + tm[4] = m[1]; tm[5] = m[5]; tm[6] = m[9]; tm[7] = m[13]; + tm[8] = m[2]; tm[9] = m[6]; tm[10]= m[10]; tm[11]= m[14]; + tm[12]= m[3]; tm[13]= m[7]; tm[14]= m[11]; tm[15]= m[15]; + return tm; +} + + + +inline Matrix4& Matrix4::identity() +{ + m[0] = m[5] = m[10] = m[15] = 1.0f; + m[1] = m[2] = m[3] = m[4] = m[6] = m[7] = m[8] = m[9] = m[11] = m[12] = m[13] = m[14] = 0.0f; + type=TRANSLATE; + return *this; +} + + + +inline Matrix4 Matrix4::operator+(const Matrix4& rhs) const +{ + return Matrix4(m[0]+rhs[0], m[1]+rhs[1], m[2]+rhs[2], m[3]+rhs[3], + m[4]+rhs[4], m[5]+rhs[5], m[6]+rhs[6], m[7]+rhs[7], + m[8]+rhs[8], m[9]+rhs[9], m[10]+rhs[10], m[11]+rhs[11], + m[12]+rhs[12], m[13]+rhs[13], m[14]+rhs[14], m[15]+rhs[15]); +} + + + +inline Matrix4 Matrix4::operator-(const Matrix4& rhs) const +{ + return Matrix4(m[0]-rhs[0], m[1]-rhs[1], m[2]-rhs[2], m[3]-rhs[3], + m[4]-rhs[4], m[5]-rhs[5], m[6]-rhs[6], m[7]-rhs[7], + m[8]-rhs[8], m[9]-rhs[9], m[10]-rhs[10], m[11]-rhs[11], + m[12]-rhs[12], m[13]-rhs[13], m[14]-rhs[14], m[15]-rhs[15]); +} + + + +inline Matrix4& Matrix4::operator+=(const Matrix4& rhs) +{ + m[0] += rhs[0]; m[1] += rhs[1]; m[2] += rhs[2]; m[3] += rhs[3]; + m[4] += rhs[4]; m[5] += rhs[5]; m[6] += rhs[6]; m[7] += rhs[7]; + m[8] += rhs[8]; m[9] += rhs[9]; m[10]+= rhs[10]; m[11]+= rhs[11]; + m[12]+= rhs[12]; m[13]+= rhs[13]; m[14]+= rhs[14]; m[15]+= rhs[15]; + return *this; +} + + + +inline Matrix4& Matrix4::operator-=(const Matrix4& rhs) +{ + m[0] -= rhs[0]; m[1] -= rhs[1]; m[2] -= rhs[2]; m[3] -= rhs[3]; + m[4] -= rhs[4]; m[5] -= rhs[5]; m[6] -= rhs[6]; m[7] -= rhs[7]; + m[8] -= rhs[8]; m[9] -= rhs[9]; m[10]-= rhs[10]; m[11]-= rhs[11]; + m[12]-= rhs[12]; m[13]-= rhs[13]; m[14]-= rhs[14]; m[15]-= rhs[15]; + return *this; +} + + + +inline Vector4 Matrix4::operator*(const Vector4& rhs) const +{ + return Vector4(m[0]*rhs.x + m[4]*rhs.y + m[8]*rhs.z + m[12]*rhs.w, + m[1]*rhs.x + m[5]*rhs.y + m[9]*rhs.z + m[13]*rhs.w, + m[2]*rhs.x + m[6]*rhs.y + m[10]*rhs.z + m[14]*rhs.w, + m[3]*rhs.x + m[7]*rhs.y + m[11]*rhs.z + m[15]*rhs.w); +} + + + +inline Vector3 Matrix4::operator*(const Vector3& rhs) const +{ + return Vector3(m[0]*rhs.x + m[4]*rhs.y + m[8]*rhs.z, + m[1]*rhs.x + m[5]*rhs.y + m[9]*rhs.z, + m[2]*rhs.x + m[6]*rhs.y + m[10]*rhs.z); +} + + + +inline Matrix4 Matrix4::operator*(const Matrix4& n) const +{ + //TRN: m0,m5,m10,m15=1 m12,m13,m14=x + //M2D: m10,m15=1 m0,m1,m4,m5,m12,m13,m14=x + //M3D: m15=1 m0,m1,m2,m4,m5,m6,m8,m9,m10,m12,m13,m14=x + //FULL: no opt + int mode=((type)<<2)|(n.type); + switch (mode) + { + case 0: //TRNxTRN + return Matrix4(1,0,0,0, + 0,1,0,0, + 0,0,1,0, + n[12]+m[12],n[13]+m[13],n[14]+m[14],1,TRANSLATE); + case 1: //TRNxM2D + return Matrix4(n[0],n[1],0,0, + n[4],n[5],0,0, + 0,0,1,0, + n[12] + m[12],n[13] + m[13],n[14] + m[14],1,M2D); + case 2: //TRNxM3D + return Matrix4(n[0],n[1],n[2],0, + n[4],n[5],n[6],0, + n[8],n[9],n[10],0, + n[12] + m[12],n[13] + m[13],n[14] + m[14],1,M3D); + case 3: //TRNxFULL + return Matrix4(n[0],n[1],n[2],n[3], + n[4],n[5],n[6],n[7], + n[8],n[9],n[10],n[8], + n[12] + m[12],n[13] + m[13],n[14] + m[14],n[15],FULL); + case 4: //M2DxTRN + return Matrix4(m[0],m[1],0,0, + m[4],m[5],0,0, + 0,0,1,0, + m[0]*n[12] + m[4]*n[13] + m[12], + m[1]*n[12] + m[5]*n[13] + m[13], + n[14] + m[14], + 1,M2D); + case 5: //M2DxM2D + return Matrix4(m[0]*n[0]+m[4]*n[1],m[1]*n[0]+m[5]*n[1],0,0, + m[0]*n[4]+m[4]*n[5],m[1]*n[4]+m[5]*n[5],0,0, + 0,0,1,0, + m[0]*n[12] + m[4]*n[13] + m[12], + m[1]*n[12] + m[5]*n[13] + m[13], + n[14] + m[14], + 1,M2D); + case 8: //M3DxTRN + return Matrix4(m[0],m[1],m[2],0, + m[4],m[5],m[6],0, + m[8],m[9],m[10],0, + m[0]*n[12] + m[4]*n[13] + m[8]*n[14] + m[12], + m[1]*n[12] + m[5]*n[13] + m[9]*n[14] + m[13], + m[2]*n[12] + m[6]*n[13] + m[10]*n[14] + m[14], + 1,M3D); + case 12: //FULLxTRN + return Matrix4(m[0],m[1],m[2],m[3], + m[4],m[5],m[6],m[7], + m[8],m[9],m[10],m[11], + m[0]*n[12] + m[4]*n[13] + m[8]*n[14] + m[12], + m[1]*n[12] + m[5]*n[13] + m[9]*n[14] + m[13], + m[2]*n[12] + m[6]*n[13] + m[10]*n[14] + m[14], + m[3]*n[12] + m[7]*n[13] + m[11]*n[14] + m[15],FULL); + case 6: //M2DxM3D TODO + case 7: //M2DxFULL TODO + case 9: //M3DxM2D TODO + case 10: //M3DxM3D TODO + case 11: //M3DxFULL TODO + case 13: //FULLxM2D TODO + case 14: //FULLxM3D TODO + default: //FULLxFULL + return Matrix4(m[0]*n[0] + m[4]*n[1] + m[8]*n[2] + m[12]*n[3], + m[1]*n[0] + m[5]*n[1] + m[9]*n[2] + m[13]*n[3], + m[2]*n[0] + m[6]*n[1] + m[10]*n[2] + m[14]*n[3], + m[3]*n[0] + m[7]*n[1] + m[11]*n[2] + m[15]*n[3], + + m[0]*n[4] + m[4]*n[5] + m[8]*n[6] + m[12]*n[7], + m[1]*n[4] + m[5]*n[5] + m[9]*n[6] + m[13]*n[7], + m[2]*n[4] + m[6]*n[5] + m[10]*n[6] + m[14]*n[7], + m[3]*n[4] + m[7]*n[5] + m[11]*n[6] + m[15]*n[7], + + m[0]*n[8] + m[4]*n[9] + m[8]*n[10] + m[12]*n[11], + m[1]*n[8] + m[5]*n[9] + m[9]*n[10] + m[13]*n[11], + m[2]*n[8] + m[6]*n[9] + m[10]*n[10] + m[14]*n[11], + m[3]*n[8] + m[7]*n[9] + m[11]*n[10] + m[15]*n[11], + + m[0]*n[12] + m[4]*n[13] + m[8]*n[14] + m[12]*n[15], + m[1]*n[12] + m[5]*n[13] + m[9]*n[14] + m[13]*n[15], + m[2]*n[12] + m[6]*n[13] + m[10]*n[14] + m[14]*n[15], + m[3]*n[12] + m[7]*n[13] + m[11]*n[14] + m[15]*n[15],FULL); + } +} + + + +inline Matrix4& Matrix4::operator*=(const Matrix4& rhs) +{ + *this = *this * rhs; + return *this; +} + + + +inline bool Matrix4::operator==(const Matrix4& n) const +{ + return (m[0] == n[0]) && (m[1] == n[1]) && (m[2] == n[2]) && (m[3] == n[3]) && + (m[4] == n[4]) && (m[5] == n[5]) && (m[6] == n[6]) && (m[7] == n[7]) && + (m[8] == n[8]) && (m[9] == n[9]) && (m[10]== n[10]) && (m[11]== n[11]) && + (m[12]== n[12]) && (m[13]== n[13]) && (m[14]== n[14]) && (m[15]== n[15]); +} + + + +inline bool Matrix4::operator!=(const Matrix4& n) const +{ + return (m[0] != n[0]) || (m[1] != n[1]) || (m[2] != n[2]) || (m[3] != n[3]) || + (m[4] != n[4]) || (m[5] != n[5]) || (m[6] != n[6]) || (m[7] != n[7]) || + (m[8] != n[8]) || (m[9] != n[9]) || (m[10]!= n[10]) || (m[11]!= n[11]) || + (m[12]!= n[12]) || (m[13]!= n[13]) || (m[14]!= n[14]) || (m[15]!= n[15]); +} + + + +inline float Matrix4::operator[](int index) const +{ + return m[index]; +} + + + +inline float& Matrix4::operator[](int index) +{ + return m[index]; +} + + + +inline Matrix4 operator-(const Matrix4& rhs) +{ + return Matrix4(-rhs[0], -rhs[1], -rhs[2], -rhs[3], -rhs[4], -rhs[5], -rhs[6], -rhs[7], -rhs[8], -rhs[9], -rhs[10], -rhs[11], -rhs[12], -rhs[13], -rhs[14], -rhs[15]); +} + + + +inline Matrix4 operator*(float s, const Matrix4& rhs) +{ + return Matrix4(s*rhs[0], s*rhs[1], s*rhs[2], s*rhs[3], s*rhs[4], s*rhs[5], s*rhs[6], s*rhs[7], s*rhs[8], s*rhs[9], s*rhs[10], s*rhs[11], s*rhs[12], s*rhs[13], s*rhs[14], s*rhs[15]); +} + + + +inline Vector4 operator*(const Vector4& v, const Matrix4& m) +{ + return Vector4(v.x*m[0] + v.y*m[1] + v.z*m[2] + v.w*m[3], v.x*m[4] + v.y*m[5] + v.z*m[6] + v.w*m[7], v.x*m[8] + v.y*m[9] + v.z*m[10] + v.w*m[11], v.x*m[12] + v.y*m[13] + v.z*m[14] + v.w*m[15]); +} + + + +inline Vector3 operator*(const Vector3& v, const Matrix4& m) +{ + return Vector3(v.x*m[0] + v.y*m[1] + v.z*m[2], v.x*m[4] + v.y*m[5] + v.z*m[6], v.x*m[8] + v.y*m[9] + v.z*m[10]); +} + + + +inline std::ostream& operator<<(std::ostream& os, const Matrix4& m) +{ + os << std::fixed << std::setprecision(5); + os << "[" << std::setw(10) << m[0] << " " << std::setw(10) << m[4] << " " << std::setw(10) << m[8] << " " << std::setw(10) << m[12] << "]\n" + << "[" << std::setw(10) << m[1] << " " << std::setw(10) << m[5] << " " << std::setw(10) << m[9] << " " << std::setw(10) << m[13] << "]\n" + << "[" << std::setw(10) << m[2] << " " << std::setw(10) << m[6] << " " << std::setw(10) << m[10] << " " << std::setw(10) << m[14] << "]\n" + << "[" << std::setw(10) << m[3] << " " << std::setw(10) << m[7] << " " << std::setw(10) << m[11] << " " << std::setw(10) << m[15] << "]\n"; + os << std::resetiosflags(std::ios_base::fixed | std::ios_base::floatfield); + return os; +} +// END OF MATRIX4 INLINE ////////////////////////////////////////////////////// +#endif diff --git a/2dsg/MaxRectsBinPack.cpp b/2dsg/MaxRectsBinPack.cpp index 757089a73..38dcc7d94 100644 --- a/2dsg/MaxRectsBinPack.cpp +++ b/2dsg/MaxRectsBinPack.cpp @@ -1,524 +1,524 @@ -/** @file MaxRectsBinPack.cpp - @author Jukka Jylänki - - @brief Implements different bin packer algorithms that use the MAXRECTS data structure. - - This work is released to Public Domain, do whatever you want with it. -*/ -#include -#include - -#include - -#include "MaxRectsBinPack.h" - -#include -#include -#include -#include - -#include - -using namespace std; - -MaxRectsBinPack::MaxRectsBinPack() -:binWidth(0), -binHeight(0) -{ -} - -MaxRectsBinPack::MaxRectsBinPack(int width, int height) -{ - Init(width, height); -} - -void MaxRectsBinPack::Init(int width, int height) -{ - binWidth = width; - binHeight = height; - - Rect n; - n.x = 0; - n.y = 0; - n.width = width; - n.height = height; - - usedRectangles.clear(); - - freeRectangles.clear(); - freeRectangles.push_back(n); -} - -Rect MaxRectsBinPack::Insert(int width, int height, FreeRectChoiceHeuristic method) -{ - Rect newNode; - int score1; // Unused in this function. We don't need to know the score after finding the position. - int score2; - switch(method) - { - case RectBestShortSideFit: newNode = FindPositionForNewNodeBestShortSideFit(width, height, score1, score2); break; - case RectBottomLeftRule: newNode = FindPositionForNewNodeBottomLeft(width, height, score1, score2); break; - case RectContactPointRule: newNode = FindPositionForNewNodeContactPoint(width, height, score1); break; - case RectBestLongSideFit: newNode = FindPositionForNewNodeBestLongSideFit(width, height, score2, score1); break; - case RectBestAreaFit: newNode = FindPositionForNewNodeBestAreaFit(width, height, score1, score2); break; - } - - if (newNode.height == 0) - return newNode; - - size_t numRectanglesToProcess = freeRectangles.size(); - for(size_t i = 0; i < numRectanglesToProcess; ++i) - { - if (SplitFreeNode(freeRectangles[i], newNode)) - { - freeRectangles.erase(freeRectangles.begin() + i); - --i; - --numRectanglesToProcess; - } - } - - PruneFreeList(); - - usedRectangles.push_back(newNode); - return newNode; -} - -void MaxRectsBinPack::Insert(std::vector &rects, std::vector &dst, FreeRectChoiceHeuristic method) -{ - dst.clear(); - - while(rects.size() > 0) - { - int bestScore1 = std::numeric_limits::max(); - int bestScore2 = std::numeric_limits::max(); - int bestRectIndex = -1; - Rect bestNode; - - for(size_t i = 0; i < rects.size(); ++i) - { - int score1; - int score2; - Rect newNode = ScoreRect(rects[i].width, rects[i].height, method, score1, score2); - - if (score1 < bestScore1 || (score1 == bestScore1 && score2 < bestScore2)) - { - bestScore1 = score1; - bestScore2 = score2; - bestNode = newNode; - bestRectIndex = i; - } - } - - if (bestRectIndex == -1) - return; - - PlaceRect(bestNode); - rects.erase(rects.begin() + bestRectIndex); - } -} - -void MaxRectsBinPack::PlaceRect(const Rect &node) -{ - size_t numRectanglesToProcess = freeRectangles.size(); - for(size_t i = 0; i < numRectanglesToProcess; ++i) - { - if (SplitFreeNode(freeRectangles[i], node)) - { - freeRectangles.erase(freeRectangles.begin() + i); - --i; - --numRectanglesToProcess; - } - } - - PruneFreeList(); - - usedRectangles.push_back(node); - // dst.push_back(bestNode); ///\todo Refactor so that this compiles. -} - -Rect MaxRectsBinPack::ScoreRect(int width, int height, FreeRectChoiceHeuristic method, int &score1, int &score2) const -{ - Rect newNode; - score1 = std::numeric_limits::max(); - score2 = std::numeric_limits::max(); - switch(method) - { - case RectBestShortSideFit: newNode = FindPositionForNewNodeBestShortSideFit(width, height, score1, score2); break; - case RectBottomLeftRule: newNode = FindPositionForNewNodeBottomLeft(width, height, score1, score2); break; - case RectContactPointRule: newNode = FindPositionForNewNodeContactPoint(width, height, score1); - score1 = -score1; // Reverse since we are minimizing, but for contact point score bigger is better. - break; - case RectBestLongSideFit: newNode = FindPositionForNewNodeBestLongSideFit(width, height, score2, score1); break; - case RectBestAreaFit: newNode = FindPositionForNewNodeBestAreaFit(width, height, score1, score2); break; - } - - // Cannot fit the current rectangle. - if (newNode.height == 0) - { - score1 = std::numeric_limits::max(); - score2 = std::numeric_limits::max(); - } - - return newNode; -} - -/// Computes the ratio of used surface area. -float MaxRectsBinPack::Occupancy() const -{ - unsigned long usedSurfaceArea = 0; - for(size_t i = 0; i < usedRectangles.size(); ++i) - usedSurfaceArea += usedRectangles[i].width * usedRectangles[i].height; - - return (float)usedSurfaceArea / (binWidth * binHeight); -} - -Rect MaxRectsBinPack::FindPositionForNewNodeBottomLeft(int width, int height, int &bestY, int &bestX) const -{ - Rect bestNode; - memset(&bestNode, 0, sizeof(Rect)); - - bestY = std::numeric_limits::max(); - - for(size_t i = 0; i < freeRectangles.size(); ++i) - { - // Try to place the rectangle in upright (non-flipped) orientation. - if (freeRectangles[i].width >= width && freeRectangles[i].height >= height) - { - int topSideY = freeRectangles[i].y + height; - if (topSideY < bestY || (topSideY == bestY && freeRectangles[i].x < bestX)) - { - bestNode.x = freeRectangles[i].x; - bestNode.y = freeRectangles[i].y; - bestNode.width = width; - bestNode.height = height; - bestY = topSideY; - bestX = freeRectangles[i].x; - } - } -#if 0 - if (freeRectangles[i].width >= height && freeRectangles[i].height >= width) - { - int topSideY = freeRectangles[i].y + width; - if (topSideY < bestY || (topSideY == bestY && freeRectangles[i].x < bestX)) - { - bestNode.x = freeRectangles[i].x; - bestNode.y = freeRectangles[i].y; - bestNode.width = height; - bestNode.height = width; - bestY = topSideY; - bestX = freeRectangles[i].x; - } - } -#endif - } - return bestNode; -} - -Rect MaxRectsBinPack::FindPositionForNewNodeBestShortSideFit(int width, int height, - int &bestShortSideFit, int &bestLongSideFit) const -{ - Rect bestNode; - memset(&bestNode, 0, sizeof(Rect)); - - bestShortSideFit = std::numeric_limits::max(); - - for(size_t i = 0; i < freeRectangles.size(); ++i) - { - // Try to place the rectangle in upright (non-flipped) orientation. - if (freeRectangles[i].width >= width && freeRectangles[i].height >= height) - { - int leftoverHoriz = abs(freeRectangles[i].width - width); - int leftoverVert = abs(freeRectangles[i].height - height); - int shortSideFit = min(leftoverHoriz, leftoverVert); - int longSideFit = max(leftoverHoriz, leftoverVert); - - if (shortSideFit < bestShortSideFit || (shortSideFit == bestShortSideFit && longSideFit < bestLongSideFit)) - { - bestNode.x = freeRectangles[i].x; - bestNode.y = freeRectangles[i].y; - bestNode.width = width; - bestNode.height = height; - bestShortSideFit = shortSideFit; - bestLongSideFit = longSideFit; - } - } -#if 0 - if (freeRectangles[i].width >= height && freeRectangles[i].height >= width) - { - int flippedLeftoverHoriz = abs(freeRectangles[i].width - height); - int flippedLeftoverVert = abs(freeRectangles[i].height - width); - int flippedShortSideFit = min(flippedLeftoverHoriz, flippedLeftoverVert); - int flippedLongSideFit = max(flippedLeftoverHoriz, flippedLeftoverVert); - - if (flippedShortSideFit < bestShortSideFit || (flippedShortSideFit == bestShortSideFit && flippedLongSideFit < bestLongSideFit)) - { - bestNode.x = freeRectangles[i].x; - bestNode.y = freeRectangles[i].y; - bestNode.width = height; - bestNode.height = width; - bestShortSideFit = flippedShortSideFit; - bestLongSideFit = flippedLongSideFit; - } - } -#endif - } - return bestNode; -} - -Rect MaxRectsBinPack::FindPositionForNewNodeBestLongSideFit(int width, int height, - int &bestShortSideFit, int &bestLongSideFit) const -{ - Rect bestNode; - memset(&bestNode, 0, sizeof(Rect)); - - bestLongSideFit = std::numeric_limits::max(); - - for(size_t i = 0; i < freeRectangles.size(); ++i) - { - // Try to place the rectangle in upright (non-flipped) orientation. - if (freeRectangles[i].width >= width && freeRectangles[i].height >= height) - { - int leftoverHoriz = abs(freeRectangles[i].width - width); - int leftoverVert = abs(freeRectangles[i].height - height); - int shortSideFit = min(leftoverHoriz, leftoverVert); - int longSideFit = max(leftoverHoriz, leftoverVert); - - if (longSideFit < bestLongSideFit || (longSideFit == bestLongSideFit && shortSideFit < bestShortSideFit)) - { - bestNode.x = freeRectangles[i].x; - bestNode.y = freeRectangles[i].y; - bestNode.width = width; - bestNode.height = height; - bestShortSideFit = shortSideFit; - bestLongSideFit = longSideFit; - } - } -#if 0 - if (freeRectangles[i].width >= height && freeRectangles[i].height >= width) - { - int leftoverHoriz = abs(freeRectangles[i].width - height); - int leftoverVert = abs(freeRectangles[i].height - width); - int shortSideFit = min(leftoverHoriz, leftoverVert); - int longSideFit = max(leftoverHoriz, leftoverVert); - - if (longSideFit < bestLongSideFit || (longSideFit == bestLongSideFit && shortSideFit < bestShortSideFit)) - { - bestNode.x = freeRectangles[i].x; - bestNode.y = freeRectangles[i].y; - bestNode.width = height; - bestNode.height = width; - bestShortSideFit = shortSideFit; - bestLongSideFit = longSideFit; - } - } -#endif - } - return bestNode; -} - -Rect MaxRectsBinPack::FindPositionForNewNodeBestAreaFit(int width, int height, - int &bestAreaFit, int &bestShortSideFit) const -{ - Rect bestNode; - memset(&bestNode, 0, sizeof(Rect)); - - bestAreaFit = std::numeric_limits::max(); - - for(size_t i = 0; i < freeRectangles.size(); ++i) - { - int areaFit = freeRectangles[i].width * freeRectangles[i].height - width * height; - - // Try to place the rectangle in upright (non-flipped) orientation. - if (freeRectangles[i].width >= width && freeRectangles[i].height >= height) - { - int leftoverHoriz = abs(freeRectangles[i].width - width); - int leftoverVert = abs(freeRectangles[i].height - height); - int shortSideFit = min(leftoverHoriz, leftoverVert); - - if (areaFit < bestAreaFit || (areaFit == bestAreaFit && shortSideFit < bestShortSideFit)) - { - bestNode.x = freeRectangles[i].x; - bestNode.y = freeRectangles[i].y; - bestNode.width = width; - bestNode.height = height; - bestShortSideFit = shortSideFit; - bestAreaFit = areaFit; - } - } -#if 0 - if (freeRectangles[i].width >= height && freeRectangles[i].height >= width) - { - int leftoverHoriz = abs(freeRectangles[i].width - height); - int leftoverVert = abs(freeRectangles[i].height - width); - int shortSideFit = min(leftoverHoriz, leftoverVert); - - if (areaFit < bestAreaFit || (areaFit == bestAreaFit && shortSideFit < bestShortSideFit)) - { - bestNode.x = freeRectangles[i].x; - bestNode.y = freeRectangles[i].y; - bestNode.width = height; - bestNode.height = width; - bestShortSideFit = shortSideFit; - bestAreaFit = areaFit; - } - } -#endif - } - return bestNode; -} - -/// Returns 0 if the two intervals i1 and i2 are disjoint, or the length of their overlap otherwise. -int CommonIntervalLength(int i1start, int i1end, int i2start, int i2end) -{ - if (i1end < i2start || i2end < i1start) - return 0; - return min(i1end, i2end) - max(i1start, i2start); -} - -int MaxRectsBinPack::ContactPointScoreNode(int x, int y, int width, int height) const -{ - int score = 0; - - if (x == 0 || x + width == binWidth) - score += height; - if (y == 0 || y + height == binHeight) - score += width; - - for(size_t i = 0; i < usedRectangles.size(); ++i) - { - if (usedRectangles[i].x == x + width || usedRectangles[i].x + usedRectangles[i].width == x) - score += CommonIntervalLength(usedRectangles[i].y, usedRectangles[i].y + usedRectangles[i].height, y, y + height); - if (usedRectangles[i].y == y + height || usedRectangles[i].y + usedRectangles[i].height == y) - score += CommonIntervalLength(usedRectangles[i].x, usedRectangles[i].x + usedRectangles[i].width, x, x + width); - } - return score; -} - -Rect MaxRectsBinPack::FindPositionForNewNodeContactPoint(int width, int height, int &bestContactScore) const -{ - Rect bestNode; - memset(&bestNode, 0, sizeof(Rect)); - - bestContactScore = -1; - - for(size_t i = 0; i < freeRectangles.size(); ++i) - { - // Try to place the rectangle in upright (non-flipped) orientation. - if (freeRectangles[i].width >= width && freeRectangles[i].height >= height) - { - int score = ContactPointScoreNode(freeRectangles[i].x, freeRectangles[i].y, width, height); - if (score > bestContactScore) - { - bestNode.x = freeRectangles[i].x; - bestNode.y = freeRectangles[i].y; - bestNode.width = width; - bestNode.height = height; - bestContactScore = score; - } - } -#if 0 - if (freeRectangles[i].width >= height && freeRectangles[i].height >= width) - { - int score = ContactPointScoreNode(freeRectangles[i].x, freeRectangles[i].y, width, height); - if (score > bestContactScore) - { - bestNode.x = freeRectangles[i].x; - bestNode.y = freeRectangles[i].y; - bestNode.width = height; - bestNode.height = width; - bestContactScore = score; - } - } -#endif - } - return bestNode; -} - -bool MaxRectsBinPack::SplitFreeNode(Rect freeNode, const Rect &usedNode) -{ - // Test with SAT if the rectangles even intersect. - if (usedNode.x >= freeNode.x + freeNode.width || usedNode.x + usedNode.width <= freeNode.x || - usedNode.y >= freeNode.y + freeNode.height || usedNode.y + usedNode.height <= freeNode.y) - return false; - - if (usedNode.x < freeNode.x + freeNode.width && usedNode.x + usedNode.width > freeNode.x) - { - // New node at the top side of the used node. - if (usedNode.y > freeNode.y && usedNode.y < freeNode.y + freeNode.height) - { - Rect newNode = freeNode; - newNode.height = usedNode.y - newNode.y; - freeRectangles.push_back(newNode); - } - - // New node at the bottom side of the used node. - if (usedNode.y + usedNode.height < freeNode.y + freeNode.height) - { - Rect newNode = freeNode; - newNode.y = usedNode.y + usedNode.height; - newNode.height = freeNode.y + freeNode.height - (usedNode.y + usedNode.height); - freeRectangles.push_back(newNode); - } - } - - if (usedNode.y < freeNode.y + freeNode.height && usedNode.y + usedNode.height > freeNode.y) - { - // New node at the left side of the used node. - if (usedNode.x > freeNode.x && usedNode.x < freeNode.x + freeNode.width) - { - Rect newNode = freeNode; - newNode.width = usedNode.x - newNode.x; - freeRectangles.push_back(newNode); - } - - // New node at the right side of the used node. - if (usedNode.x + usedNode.width < freeNode.x + freeNode.width) - { - Rect newNode = freeNode; - newNode.x = usedNode.x + usedNode.width; - newNode.width = freeNode.x + freeNode.width - (usedNode.x + usedNode.width); - freeRectangles.push_back(newNode); - } - } - - return true; -} - -void MaxRectsBinPack::PruneFreeList() -{ - /* - /// Would be nice to do something like this, to avoid a Theta(n^2) loop through each pair. - /// But unfortunately it doesn't quite cut it, since we also want to detect containment. - /// Perhaps there's another way to do this faster than Theta(n^2). - - if (freeRectangles.size() > 0) - clb::sort::QuickSort(&freeRectangles[0], freeRectangles.size(), NodeSortCmp); - - for(size_t i = 0; i < freeRectangles.size()-1; ++i) - if (freeRectangles[i].x == freeRectangles[i+1].x && - freeRectangles[i].y == freeRectangles[i+1].y && - freeRectangles[i].width == freeRectangles[i+1].width && - freeRectangles[i].height == freeRectangles[i+1].height) - { - freeRectangles.erase(freeRectangles.begin() + i); - --i; - } - */ - - /// Go through each pair and remove any rectangle that is redundant. - for(size_t i = 0; i < freeRectangles.size(); ++i) - for(size_t j = i+1; j < freeRectangles.size(); ++j) - { - if (IsContainedIn(freeRectangles[i], freeRectangles[j])) - { - freeRectangles.erase(freeRectangles.begin()+i); - --i; - break; - } - if (IsContainedIn(freeRectangles[j], freeRectangles[i])) - { - freeRectangles.erase(freeRectangles.begin()+j); - --j; - } - } -} +/** @file MaxRectsBinPack.cpp + @author Jukka Jylänki + + @brief Implements different bin packer algorithms that use the MAXRECTS data structure. + + This work is released to Public Domain, do whatever you want with it. +*/ +#include +#include + +#include + +#include "MaxRectsBinPack.h" + +#include +#include +#include +#include + +#include + +using namespace std; + +MaxRectsBinPack::MaxRectsBinPack() +:binWidth(0), +binHeight(0) +{ +} + +MaxRectsBinPack::MaxRectsBinPack(int width, int height) +{ + Init(width, height); +} + +void MaxRectsBinPack::Init(int width, int height) +{ + binWidth = width; + binHeight = height; + + Rect n; + n.x = 0; + n.y = 0; + n.width = width; + n.height = height; + + usedRectangles.clear(); + + freeRectangles.clear(); + freeRectangles.push_back(n); +} + +Rect MaxRectsBinPack::Insert(int width, int height, FreeRectChoiceHeuristic method) +{ + Rect newNode; + int score1; // Unused in this function. We don't need to know the score after finding the position. + int score2; + switch(method) + { + case RectBestShortSideFit: newNode = FindPositionForNewNodeBestShortSideFit(width, height, score1, score2); break; + case RectBottomLeftRule: newNode = FindPositionForNewNodeBottomLeft(width, height, score1, score2); break; + case RectContactPointRule: newNode = FindPositionForNewNodeContactPoint(width, height, score1); break; + case RectBestLongSideFit: newNode = FindPositionForNewNodeBestLongSideFit(width, height, score2, score1); break; + case RectBestAreaFit: newNode = FindPositionForNewNodeBestAreaFit(width, height, score1, score2); break; + } + + if (newNode.height == 0) + return newNode; + + size_t numRectanglesToProcess = freeRectangles.size(); + for(size_t i = 0; i < numRectanglesToProcess; ++i) + { + if (SplitFreeNode(freeRectangles[i], newNode)) + { + freeRectangles.erase(freeRectangles.begin() + i); + --i; + --numRectanglesToProcess; + } + } + + PruneFreeList(); + + usedRectangles.push_back(newNode); + return newNode; +} + +void MaxRectsBinPack::Insert(std::vector &rects, std::vector &dst, FreeRectChoiceHeuristic method) +{ + dst.clear(); + + while(rects.size() > 0) + { + int bestScore1 = std::numeric_limits::max(); + int bestScore2 = std::numeric_limits::max(); + int bestRectIndex = -1; + Rect bestNode; + + for(size_t i = 0; i < rects.size(); ++i) + { + int score1; + int score2; + Rect newNode = ScoreRect(rects[i].width, rects[i].height, method, score1, score2); + + if (score1 < bestScore1 || (score1 == bestScore1 && score2 < bestScore2)) + { + bestScore1 = score1; + bestScore2 = score2; + bestNode = newNode; + bestRectIndex = i; + } + } + + if (bestRectIndex == -1) + return; + + PlaceRect(bestNode); + rects.erase(rects.begin() + bestRectIndex); + } +} + +void MaxRectsBinPack::PlaceRect(const Rect &node) +{ + size_t numRectanglesToProcess = freeRectangles.size(); + for(size_t i = 0; i < numRectanglesToProcess; ++i) + { + if (SplitFreeNode(freeRectangles[i], node)) + { + freeRectangles.erase(freeRectangles.begin() + i); + --i; + --numRectanglesToProcess; + } + } + + PruneFreeList(); + + usedRectangles.push_back(node); + // dst.push_back(bestNode); ///\todo Refactor so that this compiles. +} + +Rect MaxRectsBinPack::ScoreRect(int width, int height, FreeRectChoiceHeuristic method, int &score1, int &score2) const +{ + Rect newNode; + score1 = std::numeric_limits::max(); + score2 = std::numeric_limits::max(); + switch(method) + { + case RectBestShortSideFit: newNode = FindPositionForNewNodeBestShortSideFit(width, height, score1, score2); break; + case RectBottomLeftRule: newNode = FindPositionForNewNodeBottomLeft(width, height, score1, score2); break; + case RectContactPointRule: newNode = FindPositionForNewNodeContactPoint(width, height, score1); + score1 = -score1; // Reverse since we are minimizing, but for contact point score bigger is better. + break; + case RectBestLongSideFit: newNode = FindPositionForNewNodeBestLongSideFit(width, height, score2, score1); break; + case RectBestAreaFit: newNode = FindPositionForNewNodeBestAreaFit(width, height, score1, score2); break; + } + + // Cannot fit the current rectangle. + if (newNode.height == 0) + { + score1 = std::numeric_limits::max(); + score2 = std::numeric_limits::max(); + } + + return newNode; +} + +/// Computes the ratio of used surface area. +float MaxRectsBinPack::Occupancy() const +{ + unsigned long usedSurfaceArea = 0; + for(size_t i = 0; i < usedRectangles.size(); ++i) + usedSurfaceArea += usedRectangles[i].width * usedRectangles[i].height; + + return (float)usedSurfaceArea / (binWidth * binHeight); +} + +Rect MaxRectsBinPack::FindPositionForNewNodeBottomLeft(int width, int height, int &bestY, int &bestX) const +{ + Rect bestNode; + memset(&bestNode, 0, sizeof(Rect)); + + bestY = std::numeric_limits::max(); + + for(size_t i = 0; i < freeRectangles.size(); ++i) + { + // Try to place the rectangle in upright (non-flipped) orientation. + if (freeRectangles[i].width >= width && freeRectangles[i].height >= height) + { + int topSideY = freeRectangles[i].y + height; + if (topSideY < bestY || (topSideY == bestY && freeRectangles[i].x < bestX)) + { + bestNode.x = freeRectangles[i].x; + bestNode.y = freeRectangles[i].y; + bestNode.width = width; + bestNode.height = height; + bestY = topSideY; + bestX = freeRectangles[i].x; + } + } +#if 0 + if (freeRectangles[i].width >= height && freeRectangles[i].height >= width) + { + int topSideY = freeRectangles[i].y + width; + if (topSideY < bestY || (topSideY == bestY && freeRectangles[i].x < bestX)) + { + bestNode.x = freeRectangles[i].x; + bestNode.y = freeRectangles[i].y; + bestNode.width = height; + bestNode.height = width; + bestY = topSideY; + bestX = freeRectangles[i].x; + } + } +#endif + } + return bestNode; +} + +Rect MaxRectsBinPack::FindPositionForNewNodeBestShortSideFit(int width, int height, + int &bestShortSideFit, int &bestLongSideFit) const +{ + Rect bestNode; + memset(&bestNode, 0, sizeof(Rect)); + + bestShortSideFit = std::numeric_limits::max(); + + for(size_t i = 0; i < freeRectangles.size(); ++i) + { + // Try to place the rectangle in upright (non-flipped) orientation. + if (freeRectangles[i].width >= width && freeRectangles[i].height >= height) + { + int leftoverHoriz = abs(freeRectangles[i].width - width); + int leftoverVert = abs(freeRectangles[i].height - height); + int shortSideFit = min(leftoverHoriz, leftoverVert); + int longSideFit = max(leftoverHoriz, leftoverVert); + + if (shortSideFit < bestShortSideFit || (shortSideFit == bestShortSideFit && longSideFit < bestLongSideFit)) + { + bestNode.x = freeRectangles[i].x; + bestNode.y = freeRectangles[i].y; + bestNode.width = width; + bestNode.height = height; + bestShortSideFit = shortSideFit; + bestLongSideFit = longSideFit; + } + } +#if 0 + if (freeRectangles[i].width >= height && freeRectangles[i].height >= width) + { + int flippedLeftoverHoriz = abs(freeRectangles[i].width - height); + int flippedLeftoverVert = abs(freeRectangles[i].height - width); + int flippedShortSideFit = min(flippedLeftoverHoriz, flippedLeftoverVert); + int flippedLongSideFit = max(flippedLeftoverHoriz, flippedLeftoverVert); + + if (flippedShortSideFit < bestShortSideFit || (flippedShortSideFit == bestShortSideFit && flippedLongSideFit < bestLongSideFit)) + { + bestNode.x = freeRectangles[i].x; + bestNode.y = freeRectangles[i].y; + bestNode.width = height; + bestNode.height = width; + bestShortSideFit = flippedShortSideFit; + bestLongSideFit = flippedLongSideFit; + } + } +#endif + } + return bestNode; +} + +Rect MaxRectsBinPack::FindPositionForNewNodeBestLongSideFit(int width, int height, + int &bestShortSideFit, int &bestLongSideFit) const +{ + Rect bestNode; + memset(&bestNode, 0, sizeof(Rect)); + + bestLongSideFit = std::numeric_limits::max(); + + for(size_t i = 0; i < freeRectangles.size(); ++i) + { + // Try to place the rectangle in upright (non-flipped) orientation. + if (freeRectangles[i].width >= width && freeRectangles[i].height >= height) + { + int leftoverHoriz = abs(freeRectangles[i].width - width); + int leftoverVert = abs(freeRectangles[i].height - height); + int shortSideFit = min(leftoverHoriz, leftoverVert); + int longSideFit = max(leftoverHoriz, leftoverVert); + + if (longSideFit < bestLongSideFit || (longSideFit == bestLongSideFit && shortSideFit < bestShortSideFit)) + { + bestNode.x = freeRectangles[i].x; + bestNode.y = freeRectangles[i].y; + bestNode.width = width; + bestNode.height = height; + bestShortSideFit = shortSideFit; + bestLongSideFit = longSideFit; + } + } +#if 0 + if (freeRectangles[i].width >= height && freeRectangles[i].height >= width) + { + int leftoverHoriz = abs(freeRectangles[i].width - height); + int leftoverVert = abs(freeRectangles[i].height - width); + int shortSideFit = min(leftoverHoriz, leftoverVert); + int longSideFit = max(leftoverHoriz, leftoverVert); + + if (longSideFit < bestLongSideFit || (longSideFit == bestLongSideFit && shortSideFit < bestShortSideFit)) + { + bestNode.x = freeRectangles[i].x; + bestNode.y = freeRectangles[i].y; + bestNode.width = height; + bestNode.height = width; + bestShortSideFit = shortSideFit; + bestLongSideFit = longSideFit; + } + } +#endif + } + return bestNode; +} + +Rect MaxRectsBinPack::FindPositionForNewNodeBestAreaFit(int width, int height, + int &bestAreaFit, int &bestShortSideFit) const +{ + Rect bestNode; + memset(&bestNode, 0, sizeof(Rect)); + + bestAreaFit = std::numeric_limits::max(); + + for(size_t i = 0; i < freeRectangles.size(); ++i) + { + int areaFit = freeRectangles[i].width * freeRectangles[i].height - width * height; + + // Try to place the rectangle in upright (non-flipped) orientation. + if (freeRectangles[i].width >= width && freeRectangles[i].height >= height) + { + int leftoverHoriz = abs(freeRectangles[i].width - width); + int leftoverVert = abs(freeRectangles[i].height - height); + int shortSideFit = min(leftoverHoriz, leftoverVert); + + if (areaFit < bestAreaFit || (areaFit == bestAreaFit && shortSideFit < bestShortSideFit)) + { + bestNode.x = freeRectangles[i].x; + bestNode.y = freeRectangles[i].y; + bestNode.width = width; + bestNode.height = height; + bestShortSideFit = shortSideFit; + bestAreaFit = areaFit; + } + } +#if 0 + if (freeRectangles[i].width >= height && freeRectangles[i].height >= width) + { + int leftoverHoriz = abs(freeRectangles[i].width - height); + int leftoverVert = abs(freeRectangles[i].height - width); + int shortSideFit = min(leftoverHoriz, leftoverVert); + + if (areaFit < bestAreaFit || (areaFit == bestAreaFit && shortSideFit < bestShortSideFit)) + { + bestNode.x = freeRectangles[i].x; + bestNode.y = freeRectangles[i].y; + bestNode.width = height; + bestNode.height = width; + bestShortSideFit = shortSideFit; + bestAreaFit = areaFit; + } + } +#endif + } + return bestNode; +} + +/// Returns 0 if the two intervals i1 and i2 are disjoint, or the length of their overlap otherwise. +int CommonIntervalLength(int i1start, int i1end, int i2start, int i2end) +{ + if (i1end < i2start || i2end < i1start) + return 0; + return min(i1end, i2end) - max(i1start, i2start); +} + +int MaxRectsBinPack::ContactPointScoreNode(int x, int y, int width, int height) const +{ + int score = 0; + + if (x == 0 || x + width == binWidth) + score += height; + if (y == 0 || y + height == binHeight) + score += width; + + for(size_t i = 0; i < usedRectangles.size(); ++i) + { + if (usedRectangles[i].x == x + width || usedRectangles[i].x + usedRectangles[i].width == x) + score += CommonIntervalLength(usedRectangles[i].y, usedRectangles[i].y + usedRectangles[i].height, y, y + height); + if (usedRectangles[i].y == y + height || usedRectangles[i].y + usedRectangles[i].height == y) + score += CommonIntervalLength(usedRectangles[i].x, usedRectangles[i].x + usedRectangles[i].width, x, x + width); + } + return score; +} + +Rect MaxRectsBinPack::FindPositionForNewNodeContactPoint(int width, int height, int &bestContactScore) const +{ + Rect bestNode; + memset(&bestNode, 0, sizeof(Rect)); + + bestContactScore = -1; + + for(size_t i = 0; i < freeRectangles.size(); ++i) + { + // Try to place the rectangle in upright (non-flipped) orientation. + if (freeRectangles[i].width >= width && freeRectangles[i].height >= height) + { + int score = ContactPointScoreNode(freeRectangles[i].x, freeRectangles[i].y, width, height); + if (score > bestContactScore) + { + bestNode.x = freeRectangles[i].x; + bestNode.y = freeRectangles[i].y; + bestNode.width = width; + bestNode.height = height; + bestContactScore = score; + } + } +#if 0 + if (freeRectangles[i].width >= height && freeRectangles[i].height >= width) + { + int score = ContactPointScoreNode(freeRectangles[i].x, freeRectangles[i].y, width, height); + if (score > bestContactScore) + { + bestNode.x = freeRectangles[i].x; + bestNode.y = freeRectangles[i].y; + bestNode.width = height; + bestNode.height = width; + bestContactScore = score; + } + } +#endif + } + return bestNode; +} + +bool MaxRectsBinPack::SplitFreeNode(Rect freeNode, const Rect &usedNode) +{ + // Test with SAT if the rectangles even intersect. + if (usedNode.x >= freeNode.x + freeNode.width || usedNode.x + usedNode.width <= freeNode.x || + usedNode.y >= freeNode.y + freeNode.height || usedNode.y + usedNode.height <= freeNode.y) + return false; + + if (usedNode.x < freeNode.x + freeNode.width && usedNode.x + usedNode.width > freeNode.x) + { + // New node at the top side of the used node. + if (usedNode.y > freeNode.y && usedNode.y < freeNode.y + freeNode.height) + { + Rect newNode = freeNode; + newNode.height = usedNode.y - newNode.y; + freeRectangles.push_back(newNode); + } + + // New node at the bottom side of the used node. + if (usedNode.y + usedNode.height < freeNode.y + freeNode.height) + { + Rect newNode = freeNode; + newNode.y = usedNode.y + usedNode.height; + newNode.height = freeNode.y + freeNode.height - (usedNode.y + usedNode.height); + freeRectangles.push_back(newNode); + } + } + + if (usedNode.y < freeNode.y + freeNode.height && usedNode.y + usedNode.height > freeNode.y) + { + // New node at the left side of the used node. + if (usedNode.x > freeNode.x && usedNode.x < freeNode.x + freeNode.width) + { + Rect newNode = freeNode; + newNode.width = usedNode.x - newNode.x; + freeRectangles.push_back(newNode); + } + + // New node at the right side of the used node. + if (usedNode.x + usedNode.width < freeNode.x + freeNode.width) + { + Rect newNode = freeNode; + newNode.x = usedNode.x + usedNode.width; + newNode.width = freeNode.x + freeNode.width - (usedNode.x + usedNode.width); + freeRectangles.push_back(newNode); + } + } + + return true; +} + +void MaxRectsBinPack::PruneFreeList() +{ + /* + /// Would be nice to do something like this, to avoid a Theta(n^2) loop through each pair. + /// But unfortunately it doesn't quite cut it, since we also want to detect containment. + /// Perhaps there's another way to do this faster than Theta(n^2). + + if (freeRectangles.size() > 0) + clb::sort::QuickSort(&freeRectangles[0], freeRectangles.size(), NodeSortCmp); + + for(size_t i = 0; i < freeRectangles.size()-1; ++i) + if (freeRectangles[i].x == freeRectangles[i+1].x && + freeRectangles[i].y == freeRectangles[i+1].y && + freeRectangles[i].width == freeRectangles[i+1].width && + freeRectangles[i].height == freeRectangles[i+1].height) + { + freeRectangles.erase(freeRectangles.begin() + i); + --i; + } + */ + + /// Go through each pair and remove any rectangle that is redundant. + for(size_t i = 0; i < freeRectangles.size(); ++i) + for(size_t j = i+1; j < freeRectangles.size(); ++j) + { + if (IsContainedIn(freeRectangles[i], freeRectangles[j])) + { + freeRectangles.erase(freeRectangles.begin()+i); + --i; + break; + } + if (IsContainedIn(freeRectangles[j], freeRectangles[i])) + { + freeRectangles.erase(freeRectangles.begin()+j); + --j; + } + } +} diff --git a/2dsg/MaxRectsBinPack.h b/2dsg/MaxRectsBinPack.h index ac0a07c9e..f4d6ac00c 100644 --- a/2dsg/MaxRectsBinPack.h +++ b/2dsg/MaxRectsBinPack.h @@ -1,81 +1,81 @@ -/** @file MaxRectsBinPack.h - @author Jukka Jylänki - - @brief Implements different bin packer algorithms that use the MAXRECTS data structure. - - This work is released to Public Domain, do whatever you want with it. -*/ -#pragma once - -#include - -#include "Rect.h" - -/** MaxRectsBinPack implements the MAXRECTS data structure and different bin packing algorithms that - use this structure. */ -class MaxRectsBinPack -{ -public: - /// Instantiates a bin of size (0,0). Call Init to create a new bin. - MaxRectsBinPack(); - - /// Instantiates a bin of the given size. - MaxRectsBinPack(int width, int height); - - /// (Re)initializes the packer to an empty bin of width x height units. Call whenever - /// you need to restart with a new bin. - void Init(int width, int height); - - /// Specifies the different heuristic rules that can be used when deciding where to place a new rectangle. - enum FreeRectChoiceHeuristic - { - RectBestShortSideFit, ///< -BSSF: Positions the rectangle against the short side of a free rectangle into which it fits the best. - RectBestLongSideFit, ///< -BLSF: Positions the rectangle against the long side of a free rectangle into which it fits the best. - RectBestAreaFit, ///< -BAF: Positions the rectangle into the smallest free rect into which it fits. - RectBottomLeftRule, ///< -BL: Does the Tetris placement. - RectContactPointRule ///< -CP: Choosest the placement where the rectangle touches other rects as much as possible. - }; - - /// Inserts the given list of rectangles in an offline/batch mode, possibly rotated. - /// @param rects The list of rectangles to insert. This vector will be destroyed in the process. - /// @param dst [out] This list will contain the packed rectangles. The indices will not correspond to that of rects. - /// @param method The rectangle placement rule to use when packing. - void Insert(std::vector &rects, std::vector &dst, FreeRectChoiceHeuristic method); - - /// Inserts a single rectangle into the bin, possibly rotated. - Rect Insert(int width, int height, FreeRectChoiceHeuristic method); - - /// Computes the ratio of used surface area to the total bin area. - float Occupancy() const; - -private: - int binWidth; - int binHeight; - - std::vector usedRectangles; - std::vector freeRectangles; - - /// Computes the placement score for placing the given rectangle with the given method. - /// @param score1 [out] The primary placement score will be outputted here. - /// @param score2 [out] The secondary placement score will be outputted here. This isu sed to break ties. - /// @return This struct identifies where the rectangle would be placed if it were placed. - Rect ScoreRect(int width, int height, FreeRectChoiceHeuristic method, int &score1, int &score2) const; - - /// Places the given rectangle into the bin. - void PlaceRect(const Rect &node); - - /// Computes the placement score for the -CP variant. - int ContactPointScoreNode(int x, int y, int width, int height) const; - - Rect FindPositionForNewNodeBottomLeft(int width, int height, int &bestY, int &bestX) const; - Rect FindPositionForNewNodeBestShortSideFit(int width, int height, int &bestShortSideFit, int &bestLongSideFit) const; - Rect FindPositionForNewNodeBestLongSideFit(int width, int height, int &bestShortSideFit, int &bestLongSideFit) const; - Rect FindPositionForNewNodeBestAreaFit(int width, int height, int &bestAreaFit, int &bestShortSideFit) const; - Rect FindPositionForNewNodeContactPoint(int width, int height, int &contactScore) const; - - /// @return True if the free node was split. - bool SplitFreeNode(Rect freeNode, const Rect &usedNode); - - /// Goes through the free rectangle list and removes any redundant entries. - void PruneFreeList(); -}; +/** @file MaxRectsBinPack.h + @author Jukka Jylänki + + @brief Implements different bin packer algorithms that use the MAXRECTS data structure. + + This work is released to Public Domain, do whatever you want with it. +*/ +#pragma once + +#include + +#include "Rect.h" + +/** MaxRectsBinPack implements the MAXRECTS data structure and different bin packing algorithms that + use this structure. */ +class MaxRectsBinPack +{ +public: + /// Instantiates a bin of size (0,0). Call Init to create a new bin. + MaxRectsBinPack(); + + /// Instantiates a bin of the given size. + MaxRectsBinPack(int width, int height); + + /// (Re)initializes the packer to an empty bin of width x height units. Call whenever + /// you need to restart with a new bin. + void Init(int width, int height); + + /// Specifies the different heuristic rules that can be used when deciding where to place a new rectangle. + enum FreeRectChoiceHeuristic + { + RectBestShortSideFit, ///< -BSSF: Positions the rectangle against the short side of a free rectangle into which it fits the best. + RectBestLongSideFit, ///< -BLSF: Positions the rectangle against the long side of a free rectangle into which it fits the best. + RectBestAreaFit, ///< -BAF: Positions the rectangle into the smallest free rect into which it fits. + RectBottomLeftRule, ///< -BL: Does the Tetris placement. + RectContactPointRule ///< -CP: Choosest the placement where the rectangle touches other rects as much as possible. + }; + + /// Inserts the given list of rectangles in an offline/batch mode, possibly rotated. + /// @param rects The list of rectangles to insert. This vector will be destroyed in the process. + /// @param dst [out] This list will contain the packed rectangles. The indices will not correspond to that of rects. + /// @param method The rectangle placement rule to use when packing. + void Insert(std::vector &rects, std::vector &dst, FreeRectChoiceHeuristic method); + + /// Inserts a single rectangle into the bin, possibly rotated. + Rect Insert(int width, int height, FreeRectChoiceHeuristic method); + + /// Computes the ratio of used surface area to the total bin area. + float Occupancy() const; + +private: + int binWidth; + int binHeight; + + std::vector usedRectangles; + std::vector freeRectangles; + + /// Computes the placement score for placing the given rectangle with the given method. + /// @param score1 [out] The primary placement score will be outputted here. + /// @param score2 [out] The secondary placement score will be outputted here. This isu sed to break ties. + /// @return This struct identifies where the rectangle would be placed if it were placed. + Rect ScoreRect(int width, int height, FreeRectChoiceHeuristic method, int &score1, int &score2) const; + + /// Places the given rectangle into the bin. + void PlaceRect(const Rect &node); + + /// Computes the placement score for the -CP variant. + int ContactPointScoreNode(int x, int y, int width, int height) const; + + Rect FindPositionForNewNodeBottomLeft(int width, int height, int &bestY, int &bestX) const; + Rect FindPositionForNewNodeBestShortSideFit(int width, int height, int &bestShortSideFit, int &bestLongSideFit) const; + Rect FindPositionForNewNodeBestLongSideFit(int width, int height, int &bestShortSideFit, int &bestLongSideFit) const; + Rect FindPositionForNewNodeBestAreaFit(int width, int height, int &bestAreaFit, int &bestShortSideFit) const; + Rect FindPositionForNewNodeContactPoint(int width, int height, int &contactScore) const; + + /// @return True if the free node was split. + bool SplitFreeNode(Rect freeNode, const Rect &usedNode); + + /// Goes through the free rectangle list and removes any redundant entries. + void PruneFreeList(); +}; diff --git a/2dsg/Rect.h b/2dsg/Rect.h index b5740a745..802f7f80b 100644 --- a/2dsg/Rect.h +++ b/2dsg/Rect.h @@ -1,88 +1,88 @@ -/** @file Rect.h - @author Jukka Jylänki - - This work is released to Public Domain, do whatever you want with it. -*/ -#ifndef __RECT_H_DEFINED__ -#define __RECT_H_DEFINED__ - -#include -#include - -struct RectSize -{ - int width; - int height; -}; - -struct Rect -{ - int x; - int y; - int width; - int height; -}; - -/// Performs a lexicographic compare on (rect short side, rect long side). -/// @return -1 if the smaller side of a is shorter than the smaller side of b, 1 if the other way around. -/// If they are equal, the larger side length is used as a tie-breaker. -/// If the rectangles are of same size, returns 0. -int CompareRectShortSide(const Rect &a, const Rect &b); - -/// Performs a lexicographic compare on (x, y, width, height). -int NodeSortCmp(const Rect &a, const Rect &b); - -/// Returns true if a is contained in b. -inline bool IsContainedIn(const Rect &a, const Rect &b) -{ - return a.x >= b.x && a.y >= b.y - && a.x+a.width <= b.x+b.width - && a.y+a.height <= b.y+b.height; -} - -class DisjointRectCollection -{ -public: - std::vector rects; - - bool Add(const Rect &r) - { - // Degenerate rectangles are ignored. - if (r.width == 0 || r.height == 0) - return true; - - if (!Disjoint(r)) - return false; - rects.push_back(r); - return true; - } - - void Clear() - { - rects.clear(); - } - - bool Disjoint(const Rect &r) const - { - // Degenerate rectangles are ignored. - if (r.width == 0 || r.height == 0) - return true; - - for(size_t i = 0; i < rects.size(); ++i) - if (!Disjoint(rects[i], r)) - return false; - return true; - } - - static bool Disjoint(const Rect &a, const Rect &b) - { - if (a.x + a.width <= b.x || - b.x + b.width <= a.x || - a.y + a.height <= b.y || - b.y + b.height <= a.y) - return true; - return false; - } -}; - -#endif +/** @file Rect.h + @author Jukka Jylänki + + This work is released to Public Domain, do whatever you want with it. +*/ +#ifndef __RECT_H_DEFINED__ +#define __RECT_H_DEFINED__ + +#include +#include + +struct RectSize +{ + int width; + int height; +}; + +struct Rect +{ + int x; + int y; + int width; + int height; +}; + +/// Performs a lexicographic compare on (rect short side, rect long side). +/// @return -1 if the smaller side of a is shorter than the smaller side of b, 1 if the other way around. +/// If they are equal, the larger side length is used as a tie-breaker. +/// If the rectangles are of same size, returns 0. +int CompareRectShortSide(const Rect &a, const Rect &b); + +/// Performs a lexicographic compare on (x, y, width, height). +int NodeSortCmp(const Rect &a, const Rect &b); + +/// Returns true if a is contained in b. +inline bool IsContainedIn(const Rect &a, const Rect &b) +{ + return a.x >= b.x && a.y >= b.y + && a.x+a.width <= b.x+b.width + && a.y+a.height <= b.y+b.height; +} + +class DisjointRectCollection +{ +public: + std::vector rects; + + bool Add(const Rect &r) + { + // Degenerate rectangles are ignored. + if (r.width == 0 || r.height == 0) + return true; + + if (!Disjoint(r)) + return false; + rects.push_back(r); + return true; + } + + void Clear() + { + rects.clear(); + } + + bool Disjoint(const Rect &r) const + { + // Degenerate rectangles are ignored. + if (r.width == 0 || r.height == 0) + return true; + + for(size_t i = 0; i < rects.size(); ++i) + if (!Disjoint(rects[i], r)) + return false; + return true; + } + + static bool Disjoint(const Rect &a, const Rect &b) + { + if (a.x + a.width <= b.x || + b.x + b.width <= a.x || + a.y + a.height <= b.y || + b.y + b.height <= a.y) + return true; + return false; + } +}; + +#endif diff --git a/2dsg/Vectors.h b/2dsg/Vectors.h index a1ef1927e..2e08103c4 100644 --- a/2dsg/Vectors.h +++ b/2dsg/Vectors.h @@ -1,530 +1,530 @@ -/////////////////////////////////////////////////////////////////////////////// -// Vectors.h -// ========= -// 2D/3D/4D vectors -// -// AUTHOR: Song Ho Ahn (song.ahn@gmail.com) -// CREATED: 2007-02-14 -// UPDATED: 2013-01-20 -// -// Copyright (C) 2007-2013 Song Ho Ahn -/////////////////////////////////////////////////////////////////////////////// - - -#ifndef VECTORS_H_DEF -#define VECTORS_H_DEF - -#include -#include - -/////////////////////////////////////////////////////////////////////////////// -// 2D vector -/////////////////////////////////////////////////////////////////////////////// -struct Vector2 -{ - float x; - float y; - - // ctors - Vector2() : x(0), y(0) {}; - Vector2(float x, float y) : x(x), y(y) {}; - - // utils functions - void set(float x, float y); - float length() const; // - float distance(const Vector2& vec) const; // distance between two vectors - Vector2& normalize(); // - float dot(const Vector2& vec) const; // dot product - bool equal(const Vector2& vec, float e) const; // compare with epsilon - - // operators - Vector2 operator-() const; // unary operator (negate) - Vector2 operator+(const Vector2& rhs) const; // add rhs - Vector2 operator-(const Vector2& rhs) const; // subtract rhs - Vector2& operator+=(const Vector2& rhs); // add rhs and update this object - Vector2& operator-=(const Vector2& rhs); // subtract rhs and update this object - Vector2 operator*(const float scale) const; // scale - Vector2 operator*(const Vector2& rhs) const; // multiply each element - Vector2& operator*=(const float scale); // scale and update this object - Vector2& operator*=(const Vector2& rhs); // multiply each element and update this object - Vector2 operator/(const float scale) const; // inverse scale - Vector2& operator/=(const float scale); // scale and update this object - bool operator==(const Vector2& rhs) const; // exact compare, no epsilon - bool operator!=(const Vector2& rhs) const; // exact compare, no epsilon - bool operator<(const Vector2& rhs) const; // comparison for sort - float operator[](int index) const; // subscript operator v[0], v[1] - float& operator[](int index); // subscript operator v[0], v[1] - - friend Vector2 operator*(const float a, const Vector2 vec); - friend std::ostream& operator<<(std::ostream& os, const Vector2& vec); -}; - - - -/////////////////////////////////////////////////////////////////////////////// -// 3D vector -/////////////////////////////////////////////////////////////////////////////// -struct Vector3 -{ - float x; - float y; - float z; - - // ctors - Vector3() : x(0), y(0), z(0) {}; - Vector3(float x, float y, float z) : x(x), y(y), z(z) {}; - - // utils functions - void set(float x, float y, float z); - float length() const; // - float distance(const Vector3& vec) const; // distance between two vectors - Vector3& normalize(); // - float dot(const Vector3& vec) const; // dot product - Vector3 cross(const Vector3& vec) const; // cross product - bool equal(const Vector3& vec, float e) const; // compare with epsilon - - // operators - Vector3 operator-() const; // unary operator (negate) - Vector3 operator+(const Vector3& rhs) const; // add rhs - Vector3 operator-(const Vector3& rhs) const; // subtract rhs - Vector3& operator+=(const Vector3& rhs); // add rhs and update this object - Vector3& operator-=(const Vector3& rhs); // subtract rhs and update this object - Vector3 operator*(const float scale) const; // scale - Vector3 operator*(const Vector3& rhs) const; // multiplay each element - Vector3& operator*=(const float scale); // scale and update this object - Vector3& operator*=(const Vector3& rhs); // product each element and update this object - Vector3 operator/(const float scale) const; // inverse scale - Vector3& operator/=(const float scale); // scale and update this object - bool operator==(const Vector3& rhs) const; // exact compare, no epsilon - bool operator!=(const Vector3& rhs) const; // exact compare, no epsilon - bool operator<(const Vector3& rhs) const; // comparison for sort - float operator[](int index) const; // subscript operator v[0], v[1] - float& operator[](int index); // subscript operator v[0], v[1] - - friend Vector3 operator*(const float a, const Vector3 vec); - friend std::ostream& operator<<(std::ostream& os, const Vector3& vec); -}; - - - -/////////////////////////////////////////////////////////////////////////////// -// 4D vector -/////////////////////////////////////////////////////////////////////////////// -struct Vector4 -{ - float x; - float y; - float z; - float w; - - // ctors - Vector4() : x(0), y(0), z(0), w(0) {}; - Vector4(float x, float y, float z, float w) : x(x), y(y), z(z), w(w) {}; - - // utils functions - void set(float x, float y, float z, float w); - float length() const; // - float distance(const Vector4& vec) const; // distance between two vectors - Vector4& normalize(); // - float dot(const Vector4& vec) const; // dot product - bool equal(const Vector4& vec, float e) const; // compare with epsilon - - // operators - Vector4 operator-() const; // unary operator (negate) - Vector4 operator+(const Vector4& rhs) const; // add rhs - Vector4 operator-(const Vector4& rhs) const; // subtract rhs - Vector4& operator+=(const Vector4& rhs); // add rhs and update this object - Vector4& operator-=(const Vector4& rhs); // subtract rhs and update this object - Vector4 operator*(const float scale) const; // scale - Vector4 operator*(const Vector4& rhs) const; // multiply each element - Vector4& operator*=(const float scale); // scale and update this object - Vector4& operator*=(const Vector4& rhs); // multiply each element and update this object - Vector4 operator/(const float scale) const; // inverse scale - Vector4& operator/=(const float scale); // scale and update this object - bool operator==(const Vector4& rhs) const; // exact compare, no epsilon - bool operator!=(const Vector4& rhs) const; // exact compare, no epsilon - bool operator<(const Vector4& rhs) const; // comparison for sort - float operator[](int index) const; // subscript operator v[0], v[1] - float& operator[](int index); // subscript operator v[0], v[1] - - friend Vector4 operator*(const float a, const Vector4 vec); - friend std::ostream& operator<<(std::ostream& os, const Vector4& vec); -}; - - - -// fast math routines from Doom3 SDK -inline float invSqrt(float x) -{ - float xhalf = 0.5f * x; - int i = *(int*)&x; // get bits for floating value - i = 0x5f3759df - (i>>1); // gives initial guess - x = *(float*)&i; // convert bits back to float - x = x * (1.5f - xhalf*x*x); // Newton step - return x; -} - - - -/////////////////////////////////////////////////////////////////////////////// -// inline functions for Vector2 -/////////////////////////////////////////////////////////////////////////////// -inline Vector2 Vector2::operator-() const { - return Vector2(-x, -y); -} - -inline Vector2 Vector2::operator+(const Vector2& rhs) const { - return Vector2(x+rhs.x, y+rhs.y); -} - -inline Vector2 Vector2::operator-(const Vector2& rhs) const { - return Vector2(x-rhs.x, y-rhs.y); -} - -inline Vector2& Vector2::operator+=(const Vector2& rhs) { - x += rhs.x; y += rhs.y; return *this; -} - -inline Vector2& Vector2::operator-=(const Vector2& rhs) { - x -= rhs.x; y -= rhs.y; return *this; -} - -inline Vector2 Vector2::operator*(const float a) const { - return Vector2(x*a, y*a); -} - -inline Vector2 Vector2::operator*(const Vector2& rhs) const { - return Vector2(x*rhs.x, y*rhs.y); -} - -inline Vector2& Vector2::operator*=(const float a) { - x *= a; y *= a; return *this; -} - -inline Vector2& Vector2::operator*=(const Vector2& rhs) { - x *= rhs.x; y *= rhs.y; return *this; -} - -inline Vector2 Vector2::operator/(const float a) const { - return Vector2(x/a, y/a); -} - -inline Vector2& Vector2::operator/=(const float a) { - x /= a; y /= a; return *this; -} - -inline bool Vector2::operator==(const Vector2& rhs) const { - return (x == rhs.x) && (y == rhs.y); -} - -inline bool Vector2::operator!=(const Vector2& rhs) const { - return (x != rhs.x) || (y != rhs.y); -} - -inline bool Vector2::operator<(const Vector2& rhs) const { - if(x < rhs.x) return true; - if(x > rhs.x) return false; - if(y < rhs.y) return true; - if(y > rhs.y) return false; - return false; -} - -inline float Vector2::operator[](int index) const { - return (&x)[index]; -} - -inline float& Vector2::operator[](int index) { - return (&x)[index]; -} - -inline void Vector2::set(float x, float y) { - this->x = x; this->y = y; -} - -inline float Vector2::length() const { - return sqrtf(x*x + y*y); -} - -inline float Vector2::distance(const Vector2& vec) const { - return sqrtf((vec.x-x)*(vec.x-x) + (vec.y-y)*(vec.y-y)); -} - -inline Vector2& Vector2::normalize() { - //@@const float EPSILON = 0.000001f; - float xxyy = x*x + y*y; - //@@if(xxyy < EPSILON) - //@@ return *this; - - //float invLength = invSqrt(xxyy); - float invLength = 1.0f / sqrtf(xxyy); - x *= invLength; - y *= invLength; - return *this; -} - -inline float Vector2::dot(const Vector2& rhs) const { - return (x*rhs.x + y*rhs.y); -} - -inline bool Vector2::equal(const Vector2& rhs, float epsilon) const { - return fabs(x - rhs.x) < epsilon && fabs(y - rhs.y) < epsilon; -} - -inline Vector2 operator*(const float a, const Vector2 vec) { - return Vector2(a*vec.x, a*vec.y); -} - -inline std::ostream& operator<<(std::ostream& os, const Vector2& vec) { - os << "(" << vec.x << ", " << vec.y << ")"; - return os; -} -// END OF VECTOR2 ///////////////////////////////////////////////////////////// - - - - -/////////////////////////////////////////////////////////////////////////////// -// inline functions for Vector3 -/////////////////////////////////////////////////////////////////////////////// -inline Vector3 Vector3::operator-() const { - return Vector3(-x, -y, -z); -} - -inline Vector3 Vector3::operator+(const Vector3& rhs) const { - return Vector3(x+rhs.x, y+rhs.y, z+rhs.z); -} - -inline Vector3 Vector3::operator-(const Vector3& rhs) const { - return Vector3(x-rhs.x, y-rhs.y, z-rhs.z); -} - -inline Vector3& Vector3::operator+=(const Vector3& rhs) { - x += rhs.x; y += rhs.y; z += rhs.z; return *this; -} - -inline Vector3& Vector3::operator-=(const Vector3& rhs) { - x -= rhs.x; y -= rhs.y; z -= rhs.z; return *this; -} - -inline Vector3 Vector3::operator*(const float a) const { - return Vector3(x*a, y*a, z*a); -} - -inline Vector3 Vector3::operator*(const Vector3& rhs) const { - return Vector3(x*rhs.x, y*rhs.y, z*rhs.z); -} - -inline Vector3& Vector3::operator*=(const float a) { - x *= a; y *= a; z *= a; return *this; -} - -inline Vector3& Vector3::operator*=(const Vector3& rhs) { - x *= rhs.x; y *= rhs.y; z *= rhs.z; return *this; -} - -inline Vector3 Vector3::operator/(const float a) const { - return Vector3(x/a, y/a, z/a); -} - -inline Vector3& Vector3::operator/=(const float a) { - x /= a; y /= a; z /= a; return *this; -} - -inline bool Vector3::operator==(const Vector3& rhs) const { - return (x == rhs.x) && (y == rhs.y) && (z == rhs.z); -} - -inline bool Vector3::operator!=(const Vector3& rhs) const { - return (x != rhs.x) || (y != rhs.y) || (z != rhs.z); -} - -inline bool Vector3::operator<(const Vector3& rhs) const { - if(x < rhs.x) return true; - if(x > rhs.x) return false; - if(y < rhs.y) return true; - if(y > rhs.y) return false; - if(z < rhs.z) return true; - if(z > rhs.z) return false; - return false; -} - -inline float Vector3::operator[](int index) const { - return (&x)[index]; -} - -inline float& Vector3::operator[](int index) { - return (&x)[index]; -} - -inline void Vector3::set(float x, float y, float z) { - this->x = x; this->y = y; this->z = z; -} - -inline float Vector3::length() const { - return sqrtf(x*x + y*y + z*z); -} - -inline float Vector3::distance(const Vector3& vec) const { - return sqrtf((vec.x-x)*(vec.x-x) + (vec.y-y)*(vec.y-y) + (vec.z-z)*(vec.z-z)); -} - -inline Vector3& Vector3::normalize() { - //@@const float EPSILON = 0.000001f; - float xxyyzz = x*x + y*y + z*z; - //@@if(xxyyzz < EPSILON) - //@@ return *this; // do nothing if it is ~zero vector - - //float invLength = invSqrt(xxyyzz); - float invLength = 1.0f / sqrtf(xxyyzz); - x *= invLength; - y *= invLength; - z *= invLength; - return *this; -} - -inline float Vector3::dot(const Vector3& rhs) const { - return (x*rhs.x + y*rhs.y + z*rhs.z); -} - -inline Vector3 Vector3::cross(const Vector3& rhs) const { - return Vector3(y*rhs.z - z*rhs.y, z*rhs.x - x*rhs.z, x*rhs.y - y*rhs.x); -} - -inline bool Vector3::equal(const Vector3& rhs, float epsilon) const { - return fabs(x - rhs.x) < epsilon && fabs(y - rhs.y) < epsilon && fabs(z - rhs.z) < epsilon; -} - -inline Vector3 operator*(const float a, const Vector3 vec) { - return Vector3(a*vec.x, a*vec.y, a*vec.z); -} - -inline std::ostream& operator<<(std::ostream& os, const Vector3& vec) { - os << "(" << vec.x << ", " << vec.y << ", " << vec.z << ")"; - return os; -} -// END OF VECTOR3 ///////////////////////////////////////////////////////////// - - - -/////////////////////////////////////////////////////////////////////////////// -// inline functions for Vector4 -/////////////////////////////////////////////////////////////////////////////// -inline Vector4 Vector4::operator-() const { - return Vector4(-x, -y, -z, -w); -} - -inline Vector4 Vector4::operator+(const Vector4& rhs) const { - return Vector4(x+rhs.x, y+rhs.y, z+rhs.z, w+rhs.w); -} - -inline Vector4 Vector4::operator-(const Vector4& rhs) const { - return Vector4(x-rhs.x, y-rhs.y, z-rhs.z, w-rhs.w); -} - -inline Vector4& Vector4::operator+=(const Vector4& rhs) { - x += rhs.x; y += rhs.y; z += rhs.z; w += rhs.w; return *this; -} - -inline Vector4& Vector4::operator-=(const Vector4& rhs) { - x -= rhs.x; y -= rhs.y; z -= rhs.z; w -= rhs.w; return *this; -} - -inline Vector4 Vector4::operator*(const float a) const { - return Vector4(x*a, y*a, z*a, w*a); -} - -inline Vector4 Vector4::operator*(const Vector4& rhs) const { - return Vector4(x*rhs.x, y*rhs.y, z*rhs.z, w*rhs.w); -} - -inline Vector4& Vector4::operator*=(const float a) { - x *= a; y *= a; z *= a; w *= a; return *this; -} - -inline Vector4& Vector4::operator*=(const Vector4& rhs) { - x *= rhs.x; y *= rhs.y; z *= rhs.z; w *= rhs.w; return *this; -} - -inline Vector4 Vector4::operator/(const float a) const { - return Vector4(x/a, y/a, z/a, w/a); -} - -inline Vector4& Vector4::operator/=(const float a) { - x /= a; y /= a; z /= a; w /= a; return *this; -} - -inline bool Vector4::operator==(const Vector4& rhs) const { - return (x == rhs.x) && (y == rhs.y) && (z == rhs.z) && (w == rhs.w); -} - -inline bool Vector4::operator!=(const Vector4& rhs) const { - return (x != rhs.x) || (y != rhs.y) || (z != rhs.z) || (w != rhs.w); -} - -inline bool Vector4::operator<(const Vector4& rhs) const { - if(x < rhs.x) return true; - if(x > rhs.x) return false; - if(y < rhs.y) return true; - if(y > rhs.y) return false; - if(z < rhs.z) return true; - if(z > rhs.z) return false; - if(w < rhs.w) return true; - if(w > rhs.w) return false; - return false; -} - -inline float Vector4::operator[](int index) const { - return (&x)[index]; -} - -inline float& Vector4::operator[](int index) { - return (&x)[index]; -} - -inline void Vector4::set(float x, float y, float z, float w) { - this->x = x; this->y = y; this->z = z; this->w = w; -} - -inline float Vector4::length() const { - return sqrtf(x*x + y*y + z*z + w*w); -} - -inline float Vector4::distance(const Vector4& vec) const { - return sqrtf((vec.x-x)*(vec.x-x) + (vec.y-y)*(vec.y-y) + (vec.z-z)*(vec.z-z) + (vec.w-w)*(vec.w-w)); -} - -inline Vector4& Vector4::normalize() { - //NOTE: leave w-component untouched - //@@const float EPSILON = 0.000001f; - float xxyyzz = x*x + y*y + z*z; - //@@if(xxyyzz < EPSILON) - //@@ return *this; // do nothing if it is zero vector - - //float invLength = invSqrt(xxyyzz); - float invLength = 1.0f / sqrtf(xxyyzz); - x *= invLength; - y *= invLength; - z *= invLength; - return *this; -} - -inline float Vector4::dot(const Vector4& rhs) const { - return (x*rhs.x + y*rhs.y + z*rhs.z + w*rhs.w); -} - -inline bool Vector4::equal(const Vector4& rhs, float epsilon) const { - return fabs(x - rhs.x) < epsilon && fabs(y - rhs.y) < epsilon && - fabs(z - rhs.z) < epsilon && fabs(w - rhs.w) < epsilon; -} - -inline Vector4 operator*(const float a, const Vector4 vec) { - return Vector4(a*vec.x, a*vec.y, a*vec.z, a*vec.w); -} - -inline std::ostream& operator<<(std::ostream& os, const Vector4& vec) { - os << "(" << vec.x << ", " << vec.y << ", " << vec.z << ", " << vec.w << ")"; - return os; -} -// END OF VECTOR4 ///////////////////////////////////////////////////////////// - -#endif +/////////////////////////////////////////////////////////////////////////////// +// Vectors.h +// ========= +// 2D/3D/4D vectors +// +// AUTHOR: Song Ho Ahn (song.ahn@gmail.com) +// CREATED: 2007-02-14 +// UPDATED: 2013-01-20 +// +// Copyright (C) 2007-2013 Song Ho Ahn +/////////////////////////////////////////////////////////////////////////////// + + +#ifndef VECTORS_H_DEF +#define VECTORS_H_DEF + +#include +#include + +/////////////////////////////////////////////////////////////////////////////// +// 2D vector +/////////////////////////////////////////////////////////////////////////////// +struct Vector2 +{ + float x; + float y; + + // ctors + Vector2() : x(0), y(0) {}; + Vector2(float x, float y) : x(x), y(y) {}; + + // utils functions + void set(float x, float y); + float length() const; // + float distance(const Vector2& vec) const; // distance between two vectors + Vector2& normalize(); // + float dot(const Vector2& vec) const; // dot product + bool equal(const Vector2& vec, float e) const; // compare with epsilon + + // operators + Vector2 operator-() const; // unary operator (negate) + Vector2 operator+(const Vector2& rhs) const; // add rhs + Vector2 operator-(const Vector2& rhs) const; // subtract rhs + Vector2& operator+=(const Vector2& rhs); // add rhs and update this object + Vector2& operator-=(const Vector2& rhs); // subtract rhs and update this object + Vector2 operator*(const float scale) const; // scale + Vector2 operator*(const Vector2& rhs) const; // multiply each element + Vector2& operator*=(const float scale); // scale and update this object + Vector2& operator*=(const Vector2& rhs); // multiply each element and update this object + Vector2 operator/(const float scale) const; // inverse scale + Vector2& operator/=(const float scale); // scale and update this object + bool operator==(const Vector2& rhs) const; // exact compare, no epsilon + bool operator!=(const Vector2& rhs) const; // exact compare, no epsilon + bool operator<(const Vector2& rhs) const; // comparison for sort + float operator[](int index) const; // subscript operator v[0], v[1] + float& operator[](int index); // subscript operator v[0], v[1] + + friend Vector2 operator*(const float a, const Vector2 vec); + friend std::ostream& operator<<(std::ostream& os, const Vector2& vec); +}; + + + +/////////////////////////////////////////////////////////////////////////////// +// 3D vector +/////////////////////////////////////////////////////////////////////////////// +struct Vector3 +{ + float x; + float y; + float z; + + // ctors + Vector3() : x(0), y(0), z(0) {}; + Vector3(float x, float y, float z) : x(x), y(y), z(z) {}; + + // utils functions + void set(float x, float y, float z); + float length() const; // + float distance(const Vector3& vec) const; // distance between two vectors + Vector3& normalize(); // + float dot(const Vector3& vec) const; // dot product + Vector3 cross(const Vector3& vec) const; // cross product + bool equal(const Vector3& vec, float e) const; // compare with epsilon + + // operators + Vector3 operator-() const; // unary operator (negate) + Vector3 operator+(const Vector3& rhs) const; // add rhs + Vector3 operator-(const Vector3& rhs) const; // subtract rhs + Vector3& operator+=(const Vector3& rhs); // add rhs and update this object + Vector3& operator-=(const Vector3& rhs); // subtract rhs and update this object + Vector3 operator*(const float scale) const; // scale + Vector3 operator*(const Vector3& rhs) const; // multiplay each element + Vector3& operator*=(const float scale); // scale and update this object + Vector3& operator*=(const Vector3& rhs); // product each element and update this object + Vector3 operator/(const float scale) const; // inverse scale + Vector3& operator/=(const float scale); // scale and update this object + bool operator==(const Vector3& rhs) const; // exact compare, no epsilon + bool operator!=(const Vector3& rhs) const; // exact compare, no epsilon + bool operator<(const Vector3& rhs) const; // comparison for sort + float operator[](int index) const; // subscript operator v[0], v[1] + float& operator[](int index); // subscript operator v[0], v[1] + + friend Vector3 operator*(const float a, const Vector3 vec); + friend std::ostream& operator<<(std::ostream& os, const Vector3& vec); +}; + + + +/////////////////////////////////////////////////////////////////////////////// +// 4D vector +/////////////////////////////////////////////////////////////////////////////// +struct Vector4 +{ + float x; + float y; + float z; + float w; + + // ctors + Vector4() : x(0), y(0), z(0), w(0) {}; + Vector4(float x, float y, float z, float w) : x(x), y(y), z(z), w(w) {}; + + // utils functions + void set(float x, float y, float z, float w); + float length() const; // + float distance(const Vector4& vec) const; // distance between two vectors + Vector4& normalize(); // + float dot(const Vector4& vec) const; // dot product + bool equal(const Vector4& vec, float e) const; // compare with epsilon + + // operators + Vector4 operator-() const; // unary operator (negate) + Vector4 operator+(const Vector4& rhs) const; // add rhs + Vector4 operator-(const Vector4& rhs) const; // subtract rhs + Vector4& operator+=(const Vector4& rhs); // add rhs and update this object + Vector4& operator-=(const Vector4& rhs); // subtract rhs and update this object + Vector4 operator*(const float scale) const; // scale + Vector4 operator*(const Vector4& rhs) const; // multiply each element + Vector4& operator*=(const float scale); // scale and update this object + Vector4& operator*=(const Vector4& rhs); // multiply each element and update this object + Vector4 operator/(const float scale) const; // inverse scale + Vector4& operator/=(const float scale); // scale and update this object + bool operator==(const Vector4& rhs) const; // exact compare, no epsilon + bool operator!=(const Vector4& rhs) const; // exact compare, no epsilon + bool operator<(const Vector4& rhs) const; // comparison for sort + float operator[](int index) const; // subscript operator v[0], v[1] + float& operator[](int index); // subscript operator v[0], v[1] + + friend Vector4 operator*(const float a, const Vector4 vec); + friend std::ostream& operator<<(std::ostream& os, const Vector4& vec); +}; + + + +// fast math routines from Doom3 SDK +inline float invSqrt(float x) +{ + float xhalf = 0.5f * x; + int i = *(int*)&x; // get bits for floating value + i = 0x5f3759df - (i>>1); // gives initial guess + x = *(float*)&i; // convert bits back to float + x = x * (1.5f - xhalf*x*x); // Newton step + return x; +} + + + +/////////////////////////////////////////////////////////////////////////////// +// inline functions for Vector2 +/////////////////////////////////////////////////////////////////////////////// +inline Vector2 Vector2::operator-() const { + return Vector2(-x, -y); +} + +inline Vector2 Vector2::operator+(const Vector2& rhs) const { + return Vector2(x+rhs.x, y+rhs.y); +} + +inline Vector2 Vector2::operator-(const Vector2& rhs) const { + return Vector2(x-rhs.x, y-rhs.y); +} + +inline Vector2& Vector2::operator+=(const Vector2& rhs) { + x += rhs.x; y += rhs.y; return *this; +} + +inline Vector2& Vector2::operator-=(const Vector2& rhs) { + x -= rhs.x; y -= rhs.y; return *this; +} + +inline Vector2 Vector2::operator*(const float a) const { + return Vector2(x*a, y*a); +} + +inline Vector2 Vector2::operator*(const Vector2& rhs) const { + return Vector2(x*rhs.x, y*rhs.y); +} + +inline Vector2& Vector2::operator*=(const float a) { + x *= a; y *= a; return *this; +} + +inline Vector2& Vector2::operator*=(const Vector2& rhs) { + x *= rhs.x; y *= rhs.y; return *this; +} + +inline Vector2 Vector2::operator/(const float a) const { + return Vector2(x/a, y/a); +} + +inline Vector2& Vector2::operator/=(const float a) { + x /= a; y /= a; return *this; +} + +inline bool Vector2::operator==(const Vector2& rhs) const { + return (x == rhs.x) && (y == rhs.y); +} + +inline bool Vector2::operator!=(const Vector2& rhs) const { + return (x != rhs.x) || (y != rhs.y); +} + +inline bool Vector2::operator<(const Vector2& rhs) const { + if(x < rhs.x) return true; + if(x > rhs.x) return false; + if(y < rhs.y) return true; + if(y > rhs.y) return false; + return false; +} + +inline float Vector2::operator[](int index) const { + return (&x)[index]; +} + +inline float& Vector2::operator[](int index) { + return (&x)[index]; +} + +inline void Vector2::set(float x, float y) { + this->x = x; this->y = y; +} + +inline float Vector2::length() const { + return sqrtf(x*x + y*y); +} + +inline float Vector2::distance(const Vector2& vec) const { + return sqrtf((vec.x-x)*(vec.x-x) + (vec.y-y)*(vec.y-y)); +} + +inline Vector2& Vector2::normalize() { + //@@const float EPSILON = 0.000001f; + float xxyy = x*x + y*y; + //@@if(xxyy < EPSILON) + //@@ return *this; + + //float invLength = invSqrt(xxyy); + float invLength = 1.0f / sqrtf(xxyy); + x *= invLength; + y *= invLength; + return *this; +} + +inline float Vector2::dot(const Vector2& rhs) const { + return (x*rhs.x + y*rhs.y); +} + +inline bool Vector2::equal(const Vector2& rhs, float epsilon) const { + return fabs(x - rhs.x) < epsilon && fabs(y - rhs.y) < epsilon; +} + +inline Vector2 operator*(const float a, const Vector2 vec) { + return Vector2(a*vec.x, a*vec.y); +} + +inline std::ostream& operator<<(std::ostream& os, const Vector2& vec) { + os << "(" << vec.x << ", " << vec.y << ")"; + return os; +} +// END OF VECTOR2 ///////////////////////////////////////////////////////////// + + + + +/////////////////////////////////////////////////////////////////////////////// +// inline functions for Vector3 +/////////////////////////////////////////////////////////////////////////////// +inline Vector3 Vector3::operator-() const { + return Vector3(-x, -y, -z); +} + +inline Vector3 Vector3::operator+(const Vector3& rhs) const { + return Vector3(x+rhs.x, y+rhs.y, z+rhs.z); +} + +inline Vector3 Vector3::operator-(const Vector3& rhs) const { + return Vector3(x-rhs.x, y-rhs.y, z-rhs.z); +} + +inline Vector3& Vector3::operator+=(const Vector3& rhs) { + x += rhs.x; y += rhs.y; z += rhs.z; return *this; +} + +inline Vector3& Vector3::operator-=(const Vector3& rhs) { + x -= rhs.x; y -= rhs.y; z -= rhs.z; return *this; +} + +inline Vector3 Vector3::operator*(const float a) const { + return Vector3(x*a, y*a, z*a); +} + +inline Vector3 Vector3::operator*(const Vector3& rhs) const { + return Vector3(x*rhs.x, y*rhs.y, z*rhs.z); +} + +inline Vector3& Vector3::operator*=(const float a) { + x *= a; y *= a; z *= a; return *this; +} + +inline Vector3& Vector3::operator*=(const Vector3& rhs) { + x *= rhs.x; y *= rhs.y; z *= rhs.z; return *this; +} + +inline Vector3 Vector3::operator/(const float a) const { + return Vector3(x/a, y/a, z/a); +} + +inline Vector3& Vector3::operator/=(const float a) { + x /= a; y /= a; z /= a; return *this; +} + +inline bool Vector3::operator==(const Vector3& rhs) const { + return (x == rhs.x) && (y == rhs.y) && (z == rhs.z); +} + +inline bool Vector3::operator!=(const Vector3& rhs) const { + return (x != rhs.x) || (y != rhs.y) || (z != rhs.z); +} + +inline bool Vector3::operator<(const Vector3& rhs) const { + if(x < rhs.x) return true; + if(x > rhs.x) return false; + if(y < rhs.y) return true; + if(y > rhs.y) return false; + if(z < rhs.z) return true; + if(z > rhs.z) return false; + return false; +} + +inline float Vector3::operator[](int index) const { + return (&x)[index]; +} + +inline float& Vector3::operator[](int index) { + return (&x)[index]; +} + +inline void Vector3::set(float x, float y, float z) { + this->x = x; this->y = y; this->z = z; +} + +inline float Vector3::length() const { + return sqrtf(x*x + y*y + z*z); +} + +inline float Vector3::distance(const Vector3& vec) const { + return sqrtf((vec.x-x)*(vec.x-x) + (vec.y-y)*(vec.y-y) + (vec.z-z)*(vec.z-z)); +} + +inline Vector3& Vector3::normalize() { + //@@const float EPSILON = 0.000001f; + float xxyyzz = x*x + y*y + z*z; + //@@if(xxyyzz < EPSILON) + //@@ return *this; // do nothing if it is ~zero vector + + //float invLength = invSqrt(xxyyzz); + float invLength = 1.0f / sqrtf(xxyyzz); + x *= invLength; + y *= invLength; + z *= invLength; + return *this; +} + +inline float Vector3::dot(const Vector3& rhs) const { + return (x*rhs.x + y*rhs.y + z*rhs.z); +} + +inline Vector3 Vector3::cross(const Vector3& rhs) const { + return Vector3(y*rhs.z - z*rhs.y, z*rhs.x - x*rhs.z, x*rhs.y - y*rhs.x); +} + +inline bool Vector3::equal(const Vector3& rhs, float epsilon) const { + return fabs(x - rhs.x) < epsilon && fabs(y - rhs.y) < epsilon && fabs(z - rhs.z) < epsilon; +} + +inline Vector3 operator*(const float a, const Vector3 vec) { + return Vector3(a*vec.x, a*vec.y, a*vec.z); +} + +inline std::ostream& operator<<(std::ostream& os, const Vector3& vec) { + os << "(" << vec.x << ", " << vec.y << ", " << vec.z << ")"; + return os; +} +// END OF VECTOR3 ///////////////////////////////////////////////////////////// + + + +/////////////////////////////////////////////////////////////////////////////// +// inline functions for Vector4 +/////////////////////////////////////////////////////////////////////////////// +inline Vector4 Vector4::operator-() const { + return Vector4(-x, -y, -z, -w); +} + +inline Vector4 Vector4::operator+(const Vector4& rhs) const { + return Vector4(x+rhs.x, y+rhs.y, z+rhs.z, w+rhs.w); +} + +inline Vector4 Vector4::operator-(const Vector4& rhs) const { + return Vector4(x-rhs.x, y-rhs.y, z-rhs.z, w-rhs.w); +} + +inline Vector4& Vector4::operator+=(const Vector4& rhs) { + x += rhs.x; y += rhs.y; z += rhs.z; w += rhs.w; return *this; +} + +inline Vector4& Vector4::operator-=(const Vector4& rhs) { + x -= rhs.x; y -= rhs.y; z -= rhs.z; w -= rhs.w; return *this; +} + +inline Vector4 Vector4::operator*(const float a) const { + return Vector4(x*a, y*a, z*a, w*a); +} + +inline Vector4 Vector4::operator*(const Vector4& rhs) const { + return Vector4(x*rhs.x, y*rhs.y, z*rhs.z, w*rhs.w); +} + +inline Vector4& Vector4::operator*=(const float a) { + x *= a; y *= a; z *= a; w *= a; return *this; +} + +inline Vector4& Vector4::operator*=(const Vector4& rhs) { + x *= rhs.x; y *= rhs.y; z *= rhs.z; w *= rhs.w; return *this; +} + +inline Vector4 Vector4::operator/(const float a) const { + return Vector4(x/a, y/a, z/a, w/a); +} + +inline Vector4& Vector4::operator/=(const float a) { + x /= a; y /= a; z /= a; w /= a; return *this; +} + +inline bool Vector4::operator==(const Vector4& rhs) const { + return (x == rhs.x) && (y == rhs.y) && (z == rhs.z) && (w == rhs.w); +} + +inline bool Vector4::operator!=(const Vector4& rhs) const { + return (x != rhs.x) || (y != rhs.y) || (z != rhs.z) || (w != rhs.w); +} + +inline bool Vector4::operator<(const Vector4& rhs) const { + if(x < rhs.x) return true; + if(x > rhs.x) return false; + if(y < rhs.y) return true; + if(y > rhs.y) return false; + if(z < rhs.z) return true; + if(z > rhs.z) return false; + if(w < rhs.w) return true; + if(w > rhs.w) return false; + return false; +} + +inline float Vector4::operator[](int index) const { + return (&x)[index]; +} + +inline float& Vector4::operator[](int index) { + return (&x)[index]; +} + +inline void Vector4::set(float x, float y, float z, float w) { + this->x = x; this->y = y; this->z = z; this->w = w; +} + +inline float Vector4::length() const { + return sqrtf(x*x + y*y + z*z + w*w); +} + +inline float Vector4::distance(const Vector4& vec) const { + return sqrtf((vec.x-x)*(vec.x-x) + (vec.y-y)*(vec.y-y) + (vec.z-z)*(vec.z-z) + (vec.w-w)*(vec.w-w)); +} + +inline Vector4& Vector4::normalize() { + //NOTE: leave w-component untouched + //@@const float EPSILON = 0.000001f; + float xxyyzz = x*x + y*y + z*z; + //@@if(xxyyzz < EPSILON) + //@@ return *this; // do nothing if it is zero vector + + //float invLength = invSqrt(xxyyzz); + float invLength = 1.0f / sqrtf(xxyyzz); + x *= invLength; + y *= invLength; + z *= invLength; + return *this; +} + +inline float Vector4::dot(const Vector4& rhs) const { + return (x*rhs.x + y*rhs.y + z*rhs.z + w*rhs.w); +} + +inline bool Vector4::equal(const Vector4& rhs, float epsilon) const { + return fabs(x - rhs.x) < epsilon && fabs(y - rhs.y) < epsilon && + fabs(z - rhs.z) < epsilon && fabs(w - rhs.w) < epsilon; +} + +inline Vector4 operator*(const float a, const Vector4 vec) { + return Vector4(a*vec.x, a*vec.y, a*vec.z, a*vec.w); +} + +inline std::ostream& operator<<(std::ostream& os, const Vector4& vec) { + os << "(" << vec.x << ", " << vec.y << ", " << vec.z << ", " << vec.w << ")"; + return os; +} +// END OF VECTOR4 ///////////////////////////////////////////////////////////// + +#endif diff --git a/2dsg/bitmapdata.cpp b/2dsg/bitmapdata.cpp index fc87c9d24..b1ded96d0 100644 --- a/2dsg/bitmapdata.cpp +++ b/2dsg/bitmapdata.cpp @@ -1,97 +1,97 @@ -#include "bitmapdata.h" -#include - -BitmapData::BitmapData(TextureBase* texture) -{ - //printf("TextureRegion()\n"); - texture_ = texture; - texture_->ref(); - - x = 0; - y = 0; - width = texture->data->baseWidth; - height = texture->data->baseHeight; - dx1 = 0; - dy1 = 0; - dx2 = 0; - dy2 = 0; - - initUV(); -} - -BitmapData::BitmapData(TextureBase* texture, int x, int y, int width, int height, int dx1/* = 0*/, int dy1/* = 0*/, int dx2/* = 0*/, int dy2/* = 0*/) : - x(x), y(y), - width(width), height(height), - dx1(dx1), dy1(dy1), - dx2(dx2), dy2(dy2) -{ - //printf("TextureRegion()\n"); - texture_ = texture; - texture_->ref(); - - initUV(); -} - -BitmapData::~BitmapData() -{ - //printf("~TextureRegion()\n"); - texture_->unref(); -} - -void BitmapData::initUV() -{ - u0 = (float)x / (float)texture_->data->exwidth; - v0 = (float)y / (float)texture_->data->exheight; - u1 = (float)(x + width) / (float)texture_->data->exwidth; - v1 = (float)(y + height) / (float)texture_->data->exheight; - - // uv scale - { - float scalex = texture_->uvscalex; - float scaley = texture_->uvscaley; - - u0 *= scalex; - v0 *= scaley; - u1 *= scalex; - v1 *= scaley; - } -} - -BitmapData* BitmapData::clone() -{ - return new BitmapData(texture_, x, y, width, height, dx1, dy1, dx2, dy2); -} - -void BitmapData::setRegion(int x, int y, int width, int height, int dx1, int dy1, int dx2, int dy2) -{ - this->x = x; - this->y = y; - this->width = width; - this->height = height; - this->dx1 = dx1; - this->dy1 = dy1; - this->dx2 = dx2; - this->dy2 = dy2; - - initUV(); -} - -void BitmapData::getRegion(int *x, int *y, int *width, int *height, int *dx1, int *dy1, int *dx2, int *dy2) -{ - if (x) - *x = this->x; - if (y) - *y = this->y; - if (width) - *width = this->width; - if (height) - *height = this->height; - if (dx1) - *dx1 = this->dx1; - if (dy1) - *dy1 = this->dy1; - if (dx2) - *dx2 = this->dx2; - if (dy2) - *dy2 = this->dy2; -} +#include "bitmapdata.h" +#include + +BitmapData::BitmapData(TextureBase* texture) +{ + //printf("TextureRegion()\n"); + texture_ = texture; + texture_->ref(); + + x = 0; + y = 0; + width = texture->data->baseWidth; + height = texture->data->baseHeight; + dx1 = 0; + dy1 = 0; + dx2 = 0; + dy2 = 0; + + initUV(); +} + +BitmapData::BitmapData(TextureBase* texture, int x, int y, int width, int height, int dx1/* = 0*/, int dy1/* = 0*/, int dx2/* = 0*/, int dy2/* = 0*/) : + x(x), y(y), + width(width), height(height), + dx1(dx1), dy1(dy1), + dx2(dx2), dy2(dy2) +{ + //printf("TextureRegion()\n"); + texture_ = texture; + texture_->ref(); + + initUV(); +} + +BitmapData::~BitmapData() +{ + //printf("~TextureRegion()\n"); + texture_->unref(); +} + +void BitmapData::initUV() +{ + u0 = (float)x / (float)texture_->data->exwidth; + v0 = (float)y / (float)texture_->data->exheight; + u1 = (float)(x + width) / (float)texture_->data->exwidth; + v1 = (float)(y + height) / (float)texture_->data->exheight; + + // uv scale + { + float scalex = texture_->uvscalex; + float scaley = texture_->uvscaley; + + u0 *= scalex; + v0 *= scaley; + u1 *= scalex; + v1 *= scaley; + } +} + +BitmapData* BitmapData::clone() +{ + return new BitmapData(texture_, x, y, width, height, dx1, dy1, dx2, dy2); +} + +void BitmapData::setRegion(int x, int y, int width, int height, int dx1, int dy1, int dx2, int dy2) +{ + this->x = x; + this->y = y; + this->width = width; + this->height = height; + this->dx1 = dx1; + this->dy1 = dy1; + this->dx2 = dx2; + this->dy2 = dy2; + + initUV(); +} + +void BitmapData::getRegion(int *x, int *y, int *width, int *height, int *dx1, int *dy1, int *dx2, int *dy2) +{ + if (x) + *x = this->x; + if (y) + *y = this->y; + if (width) + *width = this->width; + if (height) + *height = this->height; + if (dx1) + *dx1 = this->dx1; + if (dy1) + *dy1 = this->dy1; + if (dx2) + *dx2 = this->dx2; + if (dy2) + *dy2 = this->dy2; +} diff --git a/2dsg/bitmapdata.h b/2dsg/bitmapdata.h index 113d02373..c05b8d05b 100644 --- a/2dsg/bitmapdata.h +++ b/2dsg/bitmapdata.h @@ -1,44 +1,44 @@ -#ifndef BITMAPDATA_H -#define BITMAPDATA_H - -#include "refptr.h" -#include "texturebase.h" - -class BitmapData : public GReferenced -{ -public: - BitmapData(TextureBase* texture); - BitmapData(TextureBase* texture, int x, int y, int width, int height, int dx1 = 0, int dy1 = 0, int dx2 = 0, int dy2 = 0); - - virtual ~BitmapData(); - - TextureBase* texture() const - { - return texture_; - } - - BitmapData* clone(); - - void setRegion(int x, int y, int width, int height, int dx1, int dy1, int dx2, int dy2); - void getRegion(int *x, int *y, int *width, int *height, int *dx1, int *dy1, int *dx2, int *dy2); - -private: - friend class Bitmap; - friend class TexturePack; - - TextureBase* texture_; - int x, y; - int width, height; - int dx1, dy1; - int dx2, dy2; - float u0, v0, u1, v1; - -private: - void initUV(); -}; - - -typedef BitmapData TextureRegion; - - -#endif +#ifndef BITMAPDATA_H +#define BITMAPDATA_H + +#include "refptr.h" +#include "texturebase.h" + +class BitmapData : public GReferenced +{ +public: + BitmapData(TextureBase* texture); + BitmapData(TextureBase* texture, int x, int y, int width, int height, int dx1 = 0, int dy1 = 0, int dx2 = 0, int dy2 = 0); + + virtual ~BitmapData(); + + TextureBase* texture() const + { + return texture_; + } + + BitmapData* clone(); + + void setRegion(int x, int y, int width, int height, int dx1, int dy1, int dx2, int dy2); + void getRegion(int *x, int *y, int *width, int *height, int *dx1, int *dy1, int *dx2, int *dy2); + +private: + friend class Bitmap; + friend class TexturePack; + + TextureBase* texture_; + int x, y; + int width, height; + int dx1, dy1; + int dx2, dy2; + float u0, v0, u1, v1; + +private: + void initUV(); +}; + + +typedef BitmapData TextureRegion; + + +#endif diff --git a/2dsg/blendfunc.cpp b/2dsg/blendfunc.cpp index b36dca813..5b54c22ea 100644 --- a/2dsg/blendfunc.cpp +++ b/2dsg/blendfunc.cpp @@ -1,50 +1,50 @@ -#include "blendfunc.h" -#include - -struct BlendFunc -{ - BlendFunc() {} - - BlendFunc(ShaderEngine::BlendFactor sfactor, ShaderEngine::BlendFactor dfactor) : - sfactor(sfactor), - dfactor(dfactor) - { - - } - - ShaderEngine::BlendFactor sfactor; - ShaderEngine::BlendFactor dfactor; -}; - -static std::stack blendFuncStack; - -#ifndef PREMULTIPLIED_ALPHA -#error PREMULTIPLIED_ALPHA is not defined -#endif - -#if PREMULTIPLIED_ALPHA -static BlendFunc currentBlendFunc(ShaderEngine::ONE, ShaderEngine::ONE_MINUS_SRC_ALPHA); -#else -static BlendFunc currentBlendFunc(ShaderEngine::SRC_ALPHA, ShaderEngine::ONE_MINUS_SRC_ALPHA); -#endif - -void glPushBlendFunc() -{ - blendFuncStack.push(currentBlendFunc); -} - -void glPopBlendFunc() -{ - currentBlendFunc = blendFuncStack.top(); - blendFuncStack.pop(); - - ShaderEngine::Engine->setBlendFunc(currentBlendFunc.sfactor, currentBlendFunc.dfactor); -} - -void glSetBlendFunc(ShaderEngine::BlendFactor sfactor, ShaderEngine::BlendFactor dfactor) -{ - currentBlendFunc.sfactor = sfactor; - currentBlendFunc.dfactor = dfactor; - - ShaderEngine::Engine->setBlendFunc(currentBlendFunc.sfactor, currentBlendFunc.dfactor); -} +#include "blendfunc.h" +#include + +struct BlendFunc +{ + BlendFunc() {} + + BlendFunc(ShaderEngine::BlendFactor sfactor, ShaderEngine::BlendFactor dfactor) : + sfactor(sfactor), + dfactor(dfactor) + { + + } + + ShaderEngine::BlendFactor sfactor; + ShaderEngine::BlendFactor dfactor; +}; + +static std::stack blendFuncStack; + +#ifndef PREMULTIPLIED_ALPHA +#error PREMULTIPLIED_ALPHA is not defined +#endif + +#if PREMULTIPLIED_ALPHA +static BlendFunc currentBlendFunc(ShaderEngine::ONE, ShaderEngine::ONE_MINUS_SRC_ALPHA); +#else +static BlendFunc currentBlendFunc(ShaderEngine::SRC_ALPHA, ShaderEngine::ONE_MINUS_SRC_ALPHA); +#endif + +void glPushBlendFunc() +{ + blendFuncStack.push(currentBlendFunc); +} + +void glPopBlendFunc() +{ + currentBlendFunc = blendFuncStack.top(); + blendFuncStack.pop(); + + ShaderEngine::Engine->setBlendFunc(currentBlendFunc.sfactor, currentBlendFunc.dfactor); +} + +void glSetBlendFunc(ShaderEngine::BlendFactor sfactor, ShaderEngine::BlendFactor dfactor) +{ + currentBlendFunc.sfactor = sfactor; + currentBlendFunc.dfactor = dfactor; + + ShaderEngine::Engine->setBlendFunc(currentBlendFunc.sfactor, currentBlendFunc.dfactor); +} diff --git a/2dsg/blendfunc.h b/2dsg/blendfunc.h index ec6da7b72..c08fe8ca6 100644 --- a/2dsg/blendfunc.h +++ b/2dsg/blendfunc.h @@ -1,10 +1,10 @@ -#ifndef BLENDFUNC_H -#define BLENDFUNC_H - -#include "ogl.h" - -void glPushBlendFunc(); -void glPopBlendFunc(); -void glSetBlendFunc(ShaderEngine::BlendFactor sfactor, ShaderEngine::BlendFactor dfactor); - -#endif +#ifndef BLENDFUNC_H +#define BLENDFUNC_H + +#include "ogl.h" + +void glPushBlendFunc(); +void glPopBlendFunc(); +void glSetBlendFunc(ShaderEngine::BlendFactor sfactor, ShaderEngine::BlendFactor dfactor); + +#endif diff --git a/2dsg/color.cpp b/2dsg/color.cpp index a61156182..22ee7912c 100644 --- a/2dsg/color.cpp +++ b/2dsg/color.cpp @@ -1,74 +1,74 @@ -#include "color.h" -#include -#include "ogl.h" - -struct Color -{ - Color() {} - Color(float r, float g, float b, float a) : r(r), g(g), b(b), a(a) {} - - float r, g, b, a; -}; - -static std::stack colorStack; -static Color currentColor(1, 1, 1, 1); - -static inline void setColor(float r, float g, float b, float a) -{ - if (!ShaderEngine::Engine) return; -#ifndef PREMULTIPLIED_ALPHA -#error PREMULTIPLIED_ALPHA is not defined -#endif - -#if PREMULTIPLIED_ALPHA - ShaderEngine::Engine->setColor(r * a, g * a, b * a, a); -#else - ShaderEngine::Engine->setColor(r, g, b, a); -#endif -} - -void glPushColor() -{ - colorStack.push(currentColor); -} - -void glPopColor() -{ - currentColor = colorStack.top(); - colorStack.pop(); - - setColor(currentColor.r, currentColor.g, currentColor.b, currentColor.a); -} - -void glMultColor(float r, float g, float b, float a) -{ - currentColor.r *= r; - currentColor.g *= g; - currentColor.b *= b; - currentColor.a *= a; - - setColor(currentColor.r, currentColor.g, currentColor.b, currentColor.a); -} - -void glSetColor(float r, float g, float b, float a) -{ - currentColor.r = r; - currentColor.g = g; - currentColor.b = b; - currentColor.a = a; - - setColor(currentColor.r, currentColor.g, currentColor.b, currentColor.a); -} - -void glGetColor(float *r, float *g, float *b, float *a) -{ - *r = currentColor.r; - *g = currentColor.g; - *b = currentColor.b; - *a = currentColor.a; -} - -int colorStackSize() -{ - return (int)colorStack.size(); -} +#include "color.h" +#include +#include "ogl.h" + +struct Color +{ + Color() {} + Color(float r, float g, float b, float a) : r(r), g(g), b(b), a(a) {} + + float r, g, b, a; +}; + +static std::stack colorStack; +static Color currentColor(1, 1, 1, 1); + +static inline void setColor(float r, float g, float b, float a) +{ + if (!ShaderEngine::Engine) return; +#ifndef PREMULTIPLIED_ALPHA +#error PREMULTIPLIED_ALPHA is not defined +#endif + +#if PREMULTIPLIED_ALPHA + ShaderEngine::Engine->setColor(r * a, g * a, b * a, a); +#else + ShaderEngine::Engine->setColor(r, g, b, a); +#endif +} + +void glPushColor() +{ + colorStack.push(currentColor); +} + +void glPopColor() +{ + currentColor = colorStack.top(); + colorStack.pop(); + + setColor(currentColor.r, currentColor.g, currentColor.b, currentColor.a); +} + +void glMultColor(float r, float g, float b, float a) +{ + currentColor.r *= r; + currentColor.g *= g; + currentColor.b *= b; + currentColor.a *= a; + + setColor(currentColor.r, currentColor.g, currentColor.b, currentColor.a); +} + +void glSetColor(float r, float g, float b, float a) +{ + currentColor.r = r; + currentColor.g = g; + currentColor.b = b; + currentColor.a = a; + + setColor(currentColor.r, currentColor.g, currentColor.b, currentColor.a); +} + +void glGetColor(float *r, float *g, float *b, float *a) +{ + *r = currentColor.r; + *g = currentColor.g; + *b = currentColor.b; + *a = currentColor.a; +} + +int colorStackSize() +{ + return (int)colorStack.size(); +} diff --git a/2dsg/color.h b/2dsg/color.h index 353d117cb..7ca1860d0 100644 --- a/2dsg/color.h +++ b/2dsg/color.h @@ -1,11 +1,11 @@ -#ifndef COLOR_H -#define COLOR_H - -void glPushColor(); -void glPopColor(); -void glMultColor(float r, float g, float b, float a); -void glSetColor(float r, float g, float b, float a); -void glGetColor(float *r, float *g, float *b, float *a); -int colorStackSize(); - -#endif +#ifndef COLOR_H +#define COLOR_H + +void glPushColor(); +void glPopColor(); +void glMultColor(float r, float g, float b, float a); +void glSetColor(float r, float g, float b, float a); +void glGetColor(float *r, float *g, float *b, float *a); +int colorStackSize(); + +#endif diff --git a/2dsg/colortransform.cpp b/2dsg/colortransform.cpp index 35e38b0b7..2cfefcdf9 100644 --- a/2dsg/colortransform.cpp +++ b/2dsg/colortransform.cpp @@ -1,22 +1,22 @@ -#include "colortransform.h" - -ColorTransform::ColorTransform( float redMultiplier, - float greenMultiplier, - float blueMultiplier, - float alphaMultiplier, - float redOffset, - float greenOffset, - float blueOffset, - float alphaOffset) : - redMultiplier_(redMultiplier), - greenMultiplier_(greenMultiplier), - blueMultiplier_(blueMultiplier), - alphaMultiplier_(alphaMultiplier), - redOffset_(redOffset), - greenOffset_(greenOffset), - blueOffset_(blueOffset), - alphaOffset_(alphaOffset) -{ - -} - +#include "colortransform.h" + +ColorTransform::ColorTransform( float redMultiplier, + float greenMultiplier, + float blueMultiplier, + float alphaMultiplier, + float redOffset, + float greenOffset, + float blueOffset, + float alphaOffset) : + redMultiplier_(redMultiplier), + greenMultiplier_(greenMultiplier), + blueMultiplier_(blueMultiplier), + alphaMultiplier_(alphaMultiplier), + redOffset_(redOffset), + greenOffset_(greenOffset), + blueOffset_(blueOffset), + alphaOffset_(alphaOffset) +{ + +} + diff --git a/2dsg/colortransform.h b/2dsg/colortransform.h index 6a8e6ac7a..ce0c3a479 100644 --- a/2dsg/colortransform.h +++ b/2dsg/colortransform.h @@ -1,87 +1,87 @@ -#ifndef COLORTRANSFORM_H -#define COLORTRANSFORM_H - -class ColorTransform -{ -public: - ColorTransform( float redMultiplier = 1, - float greenMultiplier = 1, - float blueMultiplier = 1, - float alphaMultiplier = 1, - float redOffset = 0, - float greenOffset = 0, - float blueOffset = 0, - float alphaOffset = 0); - - float redMultiplier() const - { - return redMultiplier_; - } - - float greenMultiplier() const - { - return greenMultiplier_; - } - - float blueMultiplier() const - { - return blueMultiplier_; - } - - float alphaMultiplier() const - { - return alphaMultiplier_; - } - - float redOffset() const - { - return redOffset_; - } - - float greenOffset() const - { - return greenOffset_; - } - - float blueOffset() const - { - return blueOffset_; - } - - float alphaOffset() const - { - return alphaOffset_; - } - - void setRedMultiplier(float redMultiplier) - { - redMultiplier_ = redMultiplier; - } - - void setGreenMultiplier(float greenMultiplier) - { - greenMultiplier_ = greenMultiplier; - } - - void setBlueMultiplier(float blueMultiplier) - { - blueMultiplier_ = blueMultiplier; - } - - void setAlphaMultiplier(float alphaMultiplier) - { - alphaMultiplier_ = alphaMultiplier; - } - -private: - float redMultiplier_; - float greenMultiplier_; - float blueMultiplier_; - float alphaMultiplier_; - float redOffset_; - float greenOffset_; - float blueOffset_; - float alphaOffset_; -}; - -#endif +#ifndef COLORTRANSFORM_H +#define COLORTRANSFORM_H + +class ColorTransform +{ +public: + ColorTransform( float redMultiplier = 1, + float greenMultiplier = 1, + float blueMultiplier = 1, + float alphaMultiplier = 1, + float redOffset = 0, + float greenOffset = 0, + float blueOffset = 0, + float alphaOffset = 0); + + float redMultiplier() const + { + return redMultiplier_; + } + + float greenMultiplier() const + { + return greenMultiplier_; + } + + float blueMultiplier() const + { + return blueMultiplier_; + } + + float alphaMultiplier() const + { + return alphaMultiplier_; + } + + float redOffset() const + { + return redOffset_; + } + + float greenOffset() const + { + return greenOffset_; + } + + float blueOffset() const + { + return blueOffset_; + } + + float alphaOffset() const + { + return alphaOffset_; + } + + void setRedMultiplier(float redMultiplier) + { + redMultiplier_ = redMultiplier; + } + + void setGreenMultiplier(float greenMultiplier) + { + greenMultiplier_ = greenMultiplier; + } + + void setBlueMultiplier(float blueMultiplier) + { + blueMultiplier_ = blueMultiplier; + } + + void setAlphaMultiplier(float alphaMultiplier) + { + alphaMultiplier_ = alphaMultiplier; + } + +private: + float redMultiplier_; + float greenMultiplier_; + float blueMultiplier_; + float alphaMultiplier_; + float redOffset_; + float greenOffset_; + float blueOffset_; + float alphaOffset_; +}; + +#endif diff --git a/2dsg/completeevent.cpp b/2dsg/completeevent.cpp index 61f515461..d7c652b8c 100644 --- a/2dsg/completeevent.cpp +++ b/2dsg/completeevent.cpp @@ -1,9 +1,9 @@ -#include "completeevent.h" -#include "eventvisitor.h" - -CompleteEvent::Type CompleteEvent::COMPLETE("complete"); - -void CompleteEvent::apply(EventVisitor* v) -{ - v->visit(this); -} +#include "completeevent.h" +#include "eventvisitor.h" + +CompleteEvent::Type CompleteEvent::COMPLETE("complete"); + +void CompleteEvent::apply(EventVisitor* v) +{ + v->visit(this); +} diff --git a/2dsg/completeevent.h b/2dsg/completeevent.h index 346d53784..6abe701b6 100644 --- a/2dsg/completeevent.h +++ b/2dsg/completeevent.h @@ -1,21 +1,21 @@ -#ifndef COMPLETEEVENT_H -#define COMPLETEEVENT_H - -#include "event.h" - -class CompleteEvent : public Event -{ -public: - typedef EventType Type; - - CompleteEvent(const Type& type) : Event(type.type()) - { - - } - - static Type COMPLETE; - - virtual void apply(EventVisitor* v); -}; - -#endif +#ifndef COMPLETEEVENT_H +#define COMPLETEEVENT_H + +#include "event.h" + +class CompleteEvent : public Event +{ +public: + typedef EventType Type; + + CompleteEvent(const Type& type) : Event(type.type()) + { + + } + + static Type COMPLETE; + + virtual void apply(EventVisitor* v); +}; + +#endif diff --git a/2dsg/dib.cpp b/2dsg/dib.cpp index 68700e101..6c0acc085 100644 --- a/2dsg/dib.cpp +++ b/2dsg/dib.cpp @@ -1,337 +1,337 @@ -#include "platform.h" -#include "dib.h" -#include "refptr.h" -#include -#include "application.h" -#include -#include "giderosexception.h" -#include -#include - -static unsigned int nextpow2(unsigned int v) -{ - v--; - v |= v >> 1; - v |= v >> 2; - v |= v >> 4; - v |= v >> 8; - v |= v >> 16; - v++; - - return v; -} - -Dib::Dib(Application* application, - int width, int height, - bool pow2) -{ - originalWidth_ = width; - originalHeight_ = height; - - if (pow2) - { - width_ = nextpow2(originalWidth_); - height_ = nextpow2(originalHeight_); - } - else - { - width_ = originalWidth_; - height_ = originalHeight_; - } - - baseOriginalWidth_ = originalWidth_; - baseOriginalHeight_ = originalHeight_; - - data_.resize(width_ * height_ * 4, 0); -} - -static void check(int result, const char* file) -{ - switch (result) - { - case GIMAGE_NO_ERROR: - break; - case GIMAGE_CANNOT_OPEN_FILE: - throw GiderosException(GStatus(6000, file)); - break; - case GIMAGE_UNRECOGNIZED_FORMAT: - throw GiderosException(GStatus(6005, file)); - break; - case GIMAGE_ERROR_WHILE_READING: - throw GiderosException(GStatus(6013, file)); - break; - case GIMAGE_UNSUPPORTED_COLOR_SPACE: - throw GiderosException(GStatus(6014, file)); - break; - } -} - -Dib::Dib(Application* application, - const char* file, - bool withsuffix, - bool pow2, - bool maketransparent, - unsigned int transparentcolor) -{ - int width1, height1; - int width2, height2; - int comp; - - std::string filename; - - if (withsuffix) - { - const char *ext = strrchr(file, '.'); - if (ext == NULL) - ext = file + strlen(file); - - float scale; - const char *suffix = application->getImageSuffix(file, &scale); - - filename = std::string(file, ext - file) + (suffix ? suffix : "") + ext; - - check(gimage_parseImage(filename.c_str(), &width2, &height2, &comp), filename.c_str()); - - G_FILE *fis = g_fopen(file, "rb"); - if (fis) - { - g_fclose(fis); - check(gimage_parseImage(file, &width1, &height1, NULL), file); - } - else - { - width1 = width2 / scale; - height1 = height2 / scale; - } - } - else - { - check(gimage_parseImage(file, &width1, &height1, &comp), file); - filename = file; - width2 = width1; - height2 = height1; - } - - originalWidth_ = width2; - originalHeight_ = height2; - baseOriginalWidth_ = width1; - baseOriginalHeight_ = height1; - - if (pow2) - { - width_ = nextpow2(originalWidth_); - height_ = nextpow2(originalHeight_); - } - else - { - width_ = originalWidth_; - height_ = originalHeight_; - } - - std::vector buf(originalWidth_ * originalHeight_ * comp); - - check(gimage_loadImage(filename.c_str(), &buf[0]), filename.c_str()); - - data_.resize(width_ * height_ * 4); - - for (int y = 0; y < originalHeight_; ++y) - for (int x = 0; x < originalWidth_; ++x) - { - unsigned char rgba[4] = {255, 255, 255, 255}; - - int srcindex = (x + y * originalWidth_) * comp; - - switch (comp) - { - case 1: - rgba[0] = rgba[1] = rgba[2] = buf[srcindex + 0]; - break; - case 2: - rgba[0] = rgba[1] = rgba[2] = buf[srcindex + 0]; - rgba[3] = buf[srcindex + 1]; - break; - case 3: - rgba[0] = buf[srcindex + 0]; - rgba[1] = buf[srcindex + 1]; - rgba[2] = buf[srcindex + 2]; - break; - case 4: - rgba[0] = buf[srcindex + 0]; - rgba[1] = buf[srcindex + 1]; - rgba[2] = buf[srcindex + 2]; - rgba[3] = buf[srcindex + 3]; - break; - } - - int dstindex = (x + y * width_) * 4; - - data_[dstindex + 0] = rgba[0]; - data_[dstindex + 1] = rgba[1]; - data_[dstindex + 2] = rgba[2]; - data_[dstindex + 3] = rgba[3]; - } - - - if (maketransparent) - { - unsigned int r = (transparentcolor >> 16) & 0xff; - unsigned int g = (transparentcolor >> 8) & 0xff; - unsigned int b = transparentcolor & 0xff; - - for (int y = 0; y < originalHeight_; ++y) - for (int x = 0; x < originalWidth_; ++x) - { - int index = (x + y * width_) * 4; - - if (data_[index + 0] == r && - data_[index + 1] == g && - data_[index + 2] == b) - { - data_[index + 3] = 0; - } - } - } - - intelligentFill(); -} - -void Dib::intelligentFill() -{ - int midx = (originalWidth_ + width_) / 2; - int midy = (originalHeight_ + height_) / 2; - - midx = midy = 0x7fffffff; // currently clamp mode, if this is comment out then repeat mode - - for (int y = 0; y < originalHeight_; ++y) - { - for (int x = originalWidth_; x < width_; ++x) - { - int indexsrc = (x < midx) ? ((originalWidth_ - 1) + y * width_) * 4 : (y * width_) * 4; - int indexdst = (x + y * width_) * 4; - - data_[indexdst + 0] = data_[indexsrc + 0]; - data_[indexdst + 1] = data_[indexsrc + 1]; - data_[indexdst + 2] = data_[indexsrc + 2]; - data_[indexdst + 3] = data_[indexsrc + 3]; //0; - } - } - - for (int x = 0; x < originalWidth_; ++x) - { - for (int y = originalHeight_; y < height_; ++y) - { - int indexsrc = (y < midy) ? (x + (originalHeight_ - 1) * width_) * 4 : (x) * 4; - int indexdst = (x + y * width_) * 4; - - data_[indexdst + 0] = data_[indexsrc + 0]; - data_[indexdst + 1] = data_[indexsrc + 1]; - data_[indexdst + 2] = data_[indexsrc + 2]; - data_[indexdst + 3] = data_[indexsrc + 3]; //0; - } - } - - for (int y = originalHeight_; y < height_; ++y) - for (int x = originalWidth_; x < width_; ++x) - { - int indexsrc = 0; - indexsrc += (x < midx) ? (originalWidth_ - 1) * 4 : 0; - indexsrc += (y < midy) ? (originalHeight_ - 1) * width_ * 4 : 0; - int indexdst = (x + y * width_) * 4; - - data_[indexdst + 0] = data_[indexsrc + 0]; - data_[indexdst + 1] = data_[indexsrc + 1]; - data_[indexdst + 2] = data_[indexsrc + 2]; - data_[indexdst + 3] = data_[indexsrc + 3]; //0; - } -} - -void Dib::premultiplyAlpha() -{ - gimage_premultiplyAlpha(width_, height_, &data_[0]); -} - -void Dib::convertGrayscale() -{ - unsigned int* iptr = (unsigned int*)&data_[0]; - - for (int i = 0; i < width_ * height_; ++i) - iptr[i] = ((iptr[i] ^ 0x00ff0000) << 8) | 0x00ffffff; -} - -std::vector Dib::to565() const -{ - std::vector result(width_ * height_); - - for (int y = 0; y < height_; ++y) - for (int x = 0; x < width_; ++x) - { - int index = x + y * width_; - unsigned short r = data_[index * 4 + 0]; - unsigned short g = data_[index * 4 + 1]; - unsigned short b = data_[index * 4 + 2]; - result[index] = ((r >> 3) << 11) | - ((g >> 2) << 5) | - ((b >> 3) << 0); - } - - return result; -} - -std::vector Dib::to888() const -{ - std::vector result(width_ * height_ * 3); - - for (int y = 0; y < height_; ++y) - for (int x = 0; x < width_; ++x) - { - int index = x + y * width_; - result[index * 3 + 0] = data_[index * 4 + 0]; - result[index * 3 + 1] = data_[index * 4 + 1]; - result[index * 3 + 2] = data_[index * 4 + 2]; - } - - return result; -} - -std::vector Dib::to4444() const -{ - std::vector result(width_ * height_); - - for (int y = 0; y < height_; ++y) - for (int x = 0; x < width_; ++x) - { - int index = x + y * width_; - unsigned short r = data_[index * 4 + 0]; - unsigned short g = data_[index * 4 + 1]; - unsigned short b = data_[index * 4 + 2]; - unsigned short a = data_[index * 4 + 3]; - result[index] = ((r >> 4) << 12) | - ((g >> 4) << 8) | - ((b >> 4) << 4) | - ((a >> 4) << 0); - } - - return result; -} - - -std::vector Dib::to5551() const -{ - std::vector result(width_ * height_); - - for (int y = 0; y < height_; ++y) - for (int x = 0; x < width_; ++x) - { - int index = x + y * width_; - unsigned short r = data_[index * 4 + 0]; - unsigned short g = data_[index * 4 + 1]; - unsigned short b = data_[index * 4 + 2]; - unsigned short a = data_[index * 4 + 3]; - result[index] = ((r >> 3) << 11) | - ((g >> 3) << 6) | - ((b >> 3) << 1) | - ((a >> 7) << 0); - } - - return result; -} +#include "platform.h" +#include "dib.h" +#include "refptr.h" +#include +#include "application.h" +#include +#include "giderosexception.h" +#include +#include + +static unsigned int nextpow2(unsigned int v) +{ + v--; + v |= v >> 1; + v |= v >> 2; + v |= v >> 4; + v |= v >> 8; + v |= v >> 16; + v++; + + return v; +} + +Dib::Dib(Application* application, + int width, int height, + bool pow2) +{ + originalWidth_ = width; + originalHeight_ = height; + + if (pow2) + { + width_ = nextpow2(originalWidth_); + height_ = nextpow2(originalHeight_); + } + else + { + width_ = originalWidth_; + height_ = originalHeight_; + } + + baseOriginalWidth_ = originalWidth_; + baseOriginalHeight_ = originalHeight_; + + data_.resize(width_ * height_ * 4, 0); +} + +static void check(int result, const char* file) +{ + switch (result) + { + case GIMAGE_NO_ERROR: + break; + case GIMAGE_CANNOT_OPEN_FILE: + throw GiderosException(GStatus(6000, file)); + break; + case GIMAGE_UNRECOGNIZED_FORMAT: + throw GiderosException(GStatus(6005, file)); + break; + case GIMAGE_ERROR_WHILE_READING: + throw GiderosException(GStatus(6013, file)); + break; + case GIMAGE_UNSUPPORTED_COLOR_SPACE: + throw GiderosException(GStatus(6014, file)); + break; + } +} + +Dib::Dib(Application* application, + const char* file, + bool withsuffix, + bool pow2, + bool maketransparent, + unsigned int transparentcolor) +{ + int width1, height1; + int width2, height2; + int comp; + + std::string filename; + + if (withsuffix) + { + const char *ext = strrchr(file, '.'); + if (ext == NULL) + ext = file + strlen(file); + + float scale; + const char *suffix = application->getImageSuffix(file, &scale); + + filename = std::string(file, ext - file) + (suffix ? suffix : "") + ext; + + check(gimage_parseImage(filename.c_str(), &width2, &height2, &comp), filename.c_str()); + + G_FILE *fis = g_fopen(file, "rb"); + if (fis) + { + g_fclose(fis); + check(gimage_parseImage(file, &width1, &height1, NULL), file); + } + else + { + width1 = width2 / scale; + height1 = height2 / scale; + } + } + else + { + check(gimage_parseImage(file, &width1, &height1, &comp), file); + filename = file; + width2 = width1; + height2 = height1; + } + + originalWidth_ = width2; + originalHeight_ = height2; + baseOriginalWidth_ = width1; + baseOriginalHeight_ = height1; + + if (pow2) + { + width_ = nextpow2(originalWidth_); + height_ = nextpow2(originalHeight_); + } + else + { + width_ = originalWidth_; + height_ = originalHeight_; + } + + std::vector buf(originalWidth_ * originalHeight_ * comp); + + check(gimage_loadImage(filename.c_str(), &buf[0]), filename.c_str()); + + data_.resize(width_ * height_ * 4); + + for (int y = 0; y < originalHeight_; ++y) + for (int x = 0; x < originalWidth_; ++x) + { + unsigned char rgba[4] = {255, 255, 255, 255}; + + int srcindex = (x + y * originalWidth_) * comp; + + switch (comp) + { + case 1: + rgba[0] = rgba[1] = rgba[2] = buf[srcindex + 0]; + break; + case 2: + rgba[0] = rgba[1] = rgba[2] = buf[srcindex + 0]; + rgba[3] = buf[srcindex + 1]; + break; + case 3: + rgba[0] = buf[srcindex + 0]; + rgba[1] = buf[srcindex + 1]; + rgba[2] = buf[srcindex + 2]; + break; + case 4: + rgba[0] = buf[srcindex + 0]; + rgba[1] = buf[srcindex + 1]; + rgba[2] = buf[srcindex + 2]; + rgba[3] = buf[srcindex + 3]; + break; + } + + int dstindex = (x + y * width_) * 4; + + data_[dstindex + 0] = rgba[0]; + data_[dstindex + 1] = rgba[1]; + data_[dstindex + 2] = rgba[2]; + data_[dstindex + 3] = rgba[3]; + } + + + if (maketransparent) + { + unsigned int r = (transparentcolor >> 16) & 0xff; + unsigned int g = (transparentcolor >> 8) & 0xff; + unsigned int b = transparentcolor & 0xff; + + for (int y = 0; y < originalHeight_; ++y) + for (int x = 0; x < originalWidth_; ++x) + { + int index = (x + y * width_) * 4; + + if (data_[index + 0] == r && + data_[index + 1] == g && + data_[index + 2] == b) + { + data_[index + 3] = 0; + } + } + } + + intelligentFill(); +} + +void Dib::intelligentFill() +{ + int midx = (originalWidth_ + width_) / 2; + int midy = (originalHeight_ + height_) / 2; + + midx = midy = 0x7fffffff; // currently clamp mode, if this is comment out then repeat mode + + for (int y = 0; y < originalHeight_; ++y) + { + for (int x = originalWidth_; x < width_; ++x) + { + int indexsrc = (x < midx) ? ((originalWidth_ - 1) + y * width_) * 4 : (y * width_) * 4; + int indexdst = (x + y * width_) * 4; + + data_[indexdst + 0] = data_[indexsrc + 0]; + data_[indexdst + 1] = data_[indexsrc + 1]; + data_[indexdst + 2] = data_[indexsrc + 2]; + data_[indexdst + 3] = data_[indexsrc + 3]; //0; + } + } + + for (int x = 0; x < originalWidth_; ++x) + { + for (int y = originalHeight_; y < height_; ++y) + { + int indexsrc = (y < midy) ? (x + (originalHeight_ - 1) * width_) * 4 : (x) * 4; + int indexdst = (x + y * width_) * 4; + + data_[indexdst + 0] = data_[indexsrc + 0]; + data_[indexdst + 1] = data_[indexsrc + 1]; + data_[indexdst + 2] = data_[indexsrc + 2]; + data_[indexdst + 3] = data_[indexsrc + 3]; //0; + } + } + + for (int y = originalHeight_; y < height_; ++y) + for (int x = originalWidth_; x < width_; ++x) + { + int indexsrc = 0; + indexsrc += (x < midx) ? (originalWidth_ - 1) * 4 : 0; + indexsrc += (y < midy) ? (originalHeight_ - 1) * width_ * 4 : 0; + int indexdst = (x + y * width_) * 4; + + data_[indexdst + 0] = data_[indexsrc + 0]; + data_[indexdst + 1] = data_[indexsrc + 1]; + data_[indexdst + 2] = data_[indexsrc + 2]; + data_[indexdst + 3] = data_[indexsrc + 3]; //0; + } +} + +void Dib::premultiplyAlpha() +{ + gimage_premultiplyAlpha(width_, height_, &data_[0]); +} + +void Dib::convertGrayscale() +{ + unsigned int* iptr = (unsigned int*)&data_[0]; + + for (int i = 0; i < width_ * height_; ++i) + iptr[i] = ((iptr[i] ^ 0x00ff0000) << 8) | 0x00ffffff; +} + +std::vector Dib::to565() const +{ + std::vector result(width_ * height_); + + for (int y = 0; y < height_; ++y) + for (int x = 0; x < width_; ++x) + { + int index = x + y * width_; + unsigned short r = data_[index * 4 + 0]; + unsigned short g = data_[index * 4 + 1]; + unsigned short b = data_[index * 4 + 2]; + result[index] = ((r >> 3) << 11) | + ((g >> 2) << 5) | + ((b >> 3) << 0); + } + + return result; +} + +std::vector Dib::to888() const +{ + std::vector result(width_ * height_ * 3); + + for (int y = 0; y < height_; ++y) + for (int x = 0; x < width_; ++x) + { + int index = x + y * width_; + result[index * 3 + 0] = data_[index * 4 + 0]; + result[index * 3 + 1] = data_[index * 4 + 1]; + result[index * 3 + 2] = data_[index * 4 + 2]; + } + + return result; +} + +std::vector Dib::to4444() const +{ + std::vector result(width_ * height_); + + for (int y = 0; y < height_; ++y) + for (int x = 0; x < width_; ++x) + { + int index = x + y * width_; + unsigned short r = data_[index * 4 + 0]; + unsigned short g = data_[index * 4 + 1]; + unsigned short b = data_[index * 4 + 2]; + unsigned short a = data_[index * 4 + 3]; + result[index] = ((r >> 4) << 12) | + ((g >> 4) << 8) | + ((b >> 4) << 4) | + ((a >> 4) << 0); + } + + return result; +} + + +std::vector Dib::to5551() const +{ + std::vector result(width_ * height_); + + for (int y = 0; y < height_; ++y) + for (int x = 0; x < width_; ++x) + { + int index = x + y * width_; + unsigned short r = data_[index * 4 + 0]; + unsigned short g = data_[index * 4 + 1]; + unsigned short b = data_[index * 4 + 2]; + unsigned short a = data_[index * 4 + 3]; + result[index] = ((r >> 3) << 11) | + ((g >> 3) << 6) | + ((b >> 3) << 1) | + ((a >> 7) << 0); + } + + return result; +} diff --git a/2dsg/enterframeevent.cpp b/2dsg/enterframeevent.cpp index 06d9a5b9f..108110fed 100644 --- a/2dsg/enterframeevent.cpp +++ b/2dsg/enterframeevent.cpp @@ -1,9 +1,9 @@ -#include "enterframeevent.h" -#include "eventvisitor.h" - -EnterFrameEvent::Type EnterFrameEvent::ENTER_FRAME("enterFrame"); - -void EnterFrameEvent::apply(EventVisitor* v) -{ - v->visit(this); -} +#include "enterframeevent.h" +#include "eventvisitor.h" + +EnterFrameEvent::Type EnterFrameEvent::ENTER_FRAME("enterFrame"); + +void EnterFrameEvent::apply(EventVisitor* v) +{ + v->visit(this); +} diff --git a/2dsg/enterframeevent.h b/2dsg/enterframeevent.h index 74948401a..f7a808436 100644 --- a/2dsg/enterframeevent.h +++ b/2dsg/enterframeevent.h @@ -1,61 +1,61 @@ -#ifndef ENTERFRAMEEVENT_H -#define ENTERFRAMEEVENT_H - -#include "event.h" - -class EnterFrameEvent : public Event -{ -public: - typedef EventType Type; - - EnterFrameEvent( const Type& type, - int frameCount, int deltaFrameCount, - double time, double deltaTime, double lastFrameRenderTime) : Event(type.type()), - frameCount_(frameCount), - deltaFrameCount_(deltaFrameCount), - time_(time), - deltaTime_(deltaTime), - lastFrameRenderTime_(lastFrameRenderTime) - { - - } - - int frameCount() const - { - return frameCount_; - } - - int deltaFrameCount() const - { - return deltaFrameCount_; - } - - double time() const - { - return time_; - } - - double deltaTime() const - { - return deltaTime_; - } - - double lastFrameRenderTime() const - { - return lastFrameRenderTime_; - } - - - virtual void apply(EventVisitor* v); - - static Type ENTER_FRAME; - -private: - int frameCount_; - int deltaFrameCount_; - double time_; - double deltaTime_; - double lastFrameRenderTime_; -}; - -#endif +#ifndef ENTERFRAMEEVENT_H +#define ENTERFRAMEEVENT_H + +#include "event.h" + +class EnterFrameEvent : public Event +{ +public: + typedef EventType Type; + + EnterFrameEvent( const Type& type, + int frameCount, int deltaFrameCount, + double time, double deltaTime, double lastFrameRenderTime) : Event(type.type()), + frameCount_(frameCount), + deltaFrameCount_(deltaFrameCount), + time_(time), + deltaTime_(deltaTime), + lastFrameRenderTime_(lastFrameRenderTime) + { + + } + + int frameCount() const + { + return frameCount_; + } + + int deltaFrameCount() const + { + return deltaFrameCount_; + } + + double time() const + { + return time_; + } + + double deltaTime() const + { + return deltaTime_; + } + + double lastFrameRenderTime() const + { + return lastFrameRenderTime_; + } + + + virtual void apply(EventVisitor* v); + + static Type ENTER_FRAME; + +private: + int frameCount_; + int deltaFrameCount_; + double time_; + double deltaTime_; + double lastFrameRenderTime_; +}; + +#endif diff --git a/2dsg/errorevent.cpp b/2dsg/errorevent.cpp index 433b7d9ff..5f1a4abf3 100644 --- a/2dsg/errorevent.cpp +++ b/2dsg/errorevent.cpp @@ -1,9 +1,9 @@ -#include "errorevent.h" -#include "eventvisitor.h" - -ErrorEvent::Type ErrorEvent::ERROR("error"); - -void ErrorEvent::apply(EventVisitor* v) -{ - v->visit(this); -} +#include "errorevent.h" +#include "eventvisitor.h" + +ErrorEvent::Type ErrorEvent::ERROR("error"); + +void ErrorEvent::apply(EventVisitor* v) +{ + v->visit(this); +} diff --git a/2dsg/errorevent.h b/2dsg/errorevent.h index a43999fc5..f2bbcde3b 100644 --- a/2dsg/errorevent.h +++ b/2dsg/errorevent.h @@ -1,21 +1,21 @@ -#ifndef ERROREVENT_H -#define ERROREVENT_H - -#include "event.h" - -class ErrorEvent : public Event -{ -public: - typedef EventType Type; - - ErrorEvent(const Type& type) : Event(type.type()) - { - - } - - static Type ERROR; - - virtual void apply(EventVisitor* v); -}; - -#endif +#ifndef ERROREVENT_H +#define ERROREVENT_H + +#include "event.h" + +class ErrorEvent : public Event +{ +public: + typedef EventType Type; + + ErrorEvent(const Type& type) : Event(type.type()) + { + + } + + static Type ERROR; + + virtual void apply(EventVisitor* v); +}; + +#endif diff --git a/2dsg/font.h b/2dsg/font.h index 30dd89203..f77b3b26c 100644 --- a/2dsg/font.h +++ b/2dsg/font.h @@ -1,69 +1,69 @@ -#ifndef FONT_H -#define FONT_H - -#include "fontbase.h" -#include -#include -#include - -class GraphicsBase; -struct TextureData; - -class Font : public BMFontBase -{ -public: - Font(Application *application); - Font(Application *application, const char *glympfile, const char *imagefile, bool filtering, GStatus *status); - virtual ~Font(); - - virtual Type getType() const - { - return eFont; - } - - virtual void drawText(GraphicsBase* graphicsBase, const wchar32_t* text, float r, float g, float b, float letterSpacing) const; - - virtual void getBounds(const char *text, float letterSpacing, float *minx, float *miny, float *maxx, float *maxy) const; - virtual float getAdvanceX(const char *text, float letterSpacing, int size = -1) const; - virtual float getAscender() const; - virtual float getLineHeight() const; - -private: - void constructor(const char *glympfile, const char *imagefile, bool filtering); - int kerning(wchar32_t left, wchar32_t right) const; - -private: - struct TextureGlyph - { - wchar32_t chr; - int x, y; - int width, height; - int left, top; - int advancex, advancey; - }; - - struct FontInfo - { - int height; - int ascender; - bool isSetTextColorAvailable; - std::map textureGlyphs; - std::map, int> kernings; - }; - - FontInfo fontInfo_; - - float sizescalex_; - float sizescaley_; - float uvscalex_; - float uvscaley_; - - TextureData *data_; - - int getTextureGlyphsFormat(const char *filename); - void readTextureGlyphsOld(const char *filename); - void readTextureGlyphsNew(const char *filename); -}; - - -#endif +#ifndef FONT_H +#define FONT_H + +#include "fontbase.h" +#include +#include +#include + +class GraphicsBase; +struct TextureData; + +class Font : public BMFontBase +{ +public: + Font(Application *application); + Font(Application *application, const char *glympfile, const char *imagefile, bool filtering, GStatus *status); + virtual ~Font(); + + virtual Type getType() const + { + return eFont; + } + + virtual void drawText(GraphicsBase* graphicsBase, const wchar32_t* text, float r, float g, float b, float letterSpacing) const; + + virtual void getBounds(const char *text, float letterSpacing, float *minx, float *miny, float *maxx, float *maxy) const; + virtual float getAdvanceX(const char *text, float letterSpacing, int size = -1) const; + virtual float getAscender() const; + virtual float getLineHeight() const; + +private: + void constructor(const char *glympfile, const char *imagefile, bool filtering); + int kerning(wchar32_t left, wchar32_t right) const; + +private: + struct TextureGlyph + { + wchar32_t chr; + int x, y; + int width, height; + int left, top; + int advancex, advancey; + }; + + struct FontInfo + { + int height; + int ascender; + bool isSetTextColorAvailable; + std::map textureGlyphs; + std::map, int> kernings; + }; + + FontInfo fontInfo_; + + float sizescalex_; + float sizescaley_; + float uvscalex_; + float uvscaley_; + + TextureData *data_; + + int getTextureGlyphsFormat(const char *filename); + void readTextureGlyphsOld(const char *filename); + void readTextureGlyphsNew(const char *filename); +}; + + +#endif diff --git a/2dsg/fontbase.cpp b/2dsg/fontbase.cpp index 2631528cb..8d3bde5d9 100644 --- a/2dsg/fontbase.cpp +++ b/2dsg/fontbase.cpp @@ -1 +1 @@ -#include "fontbase.h" +#include "fontbase.h" diff --git a/2dsg/fontbase.h b/2dsg/fontbase.h index d43b9db89..f7af9cc38 100644 --- a/2dsg/fontbase.h +++ b/2dsg/fontbase.h @@ -1,51 +1,51 @@ -#ifndef FONTBASE_H -#define FONTBASE_H - -#include -#include - -class Application; -class GraphicsBase; - - -class FontBase : public GReferenced -{ -public: - FontBase(Application *application) : application_(application) - { - } - - virtual ~FontBase() - { - } - - enum Type - { - eFont, - eTTFont, - eTTBMFont, - }; - - virtual void getBounds(const char *text, float letterSpacing, float *minx, float *miny, float *maxx, float *maxy) const = 0; - virtual float getAdvanceX(const char *text, float letterSpacing, int size = -1) const = 0; - virtual float getAscender() const = 0; - virtual float getLineHeight() const = 0; - - virtual Type getType() const = 0; - -protected: - Application *application_; -}; - -class BMFontBase : public FontBase -{ -public: - BMFontBase(Application *application) : FontBase(application) - { - } - - virtual void drawText(GraphicsBase *graphicsBase, const wchar32_t *text, float r, float g, float b, float letterSpacing) const = 0; -}; - - -#endif +#ifndef FONTBASE_H +#define FONTBASE_H + +#include +#include + +class Application; +class GraphicsBase; + + +class FontBase : public GReferenced +{ +public: + FontBase(Application *application) : application_(application) + { + } + + virtual ~FontBase() + { + } + + enum Type + { + eFont, + eTTFont, + eTTBMFont, + }; + + virtual void getBounds(const char *text, float letterSpacing, float *minx, float *miny, float *maxx, float *maxy) const = 0; + virtual float getAdvanceX(const char *text, float letterSpacing, int size = -1) const = 0; + virtual float getAscender() const = 0; + virtual float getLineHeight() const = 0; + + virtual Type getType() const = 0; + +protected: + Application *application_; +}; + +class BMFontBase : public FontBase +{ +public: + BMFontBase(Application *application) : FontBase(application) + { + } + + virtual void drawText(GraphicsBase *graphicsBase, const wchar32_t *text, float r, float g, float b, float letterSpacing) const = 0; +}; + + +#endif diff --git a/2dsg/ftlibrarysingleton.cpp b/2dsg/ftlibrarysingleton.cpp index 87a320943..fee5a0ef4 100644 --- a/2dsg/ftlibrarysingleton.cpp +++ b/2dsg/ftlibrarysingleton.cpp @@ -1,18 +1,18 @@ -#include "ftlibrarysingleton.h" - -FT_Library_Singleton::FT_Library_Singleton() -{ - FT_Init_FreeType(&library_); -} - -FT_Library_Singleton::~FT_Library_Singleton() -{ - FT_Done_FreeType(library_); -} - -FT_Library &FT_Library_Singleton::instance() -{ - static FT_Library_Singleton instance; - return instance.library_; -} - +#include "ftlibrarysingleton.h" + +FT_Library_Singleton::FT_Library_Singleton() +{ + FT_Init_FreeType(&library_); +} + +FT_Library_Singleton::~FT_Library_Singleton() +{ + FT_Done_FreeType(library_); +} + +FT_Library &FT_Library_Singleton::instance() +{ + static FT_Library_Singleton instance; + return instance.library_; +} + diff --git a/2dsg/ftlibrarysingleton.h b/2dsg/ftlibrarysingleton.h index f34434902..6ecbab1ec 100644 --- a/2dsg/ftlibrarysingleton.h +++ b/2dsg/ftlibrarysingleton.h @@ -1,19 +1,19 @@ -#ifndef FT_LIBRARY_SINGLETON -#define FT_LIBRARY_SINGLETON - -#include -#include FT_FREETYPE_H - -class FT_Library_Singleton -{ -public: - FT_Library_Singleton(); - ~FT_Library_Singleton(); - - static FT_Library &instance(); - -private: - FT_Library library_; -}; - -#endif +#ifndef FT_LIBRARY_SINGLETON +#define FT_LIBRARY_SINGLETON + +#include +#include FT_FREETYPE_H + +class FT_Library_Singleton +{ +public: + FT_Library_Singleton(); + ~FT_Library_Singleton(); + + static FT_Library &instance(); + +private: + FT_Library library_; +}; + +#endif diff --git a/2dsg/gbitmapbatch.cpp b/2dsg/gbitmapbatch.cpp index c74970b48..47317d1b0 100644 --- a/2dsg/gbitmapbatch.cpp +++ b/2dsg/gbitmapbatch.cpp @@ -1,65 +1,65 @@ -#include "gbitmapbatch.h" -#include "bitmapdata.h" - -GBitmapArray::GBitmapArray(Application *application, BitmapData *bitmapdata) : Sprite(application) -{ - bitmapdata_ = bitmapdata; - bitmapdata_->ref(); - - texturebase_ = NULL; - - anchorx_ = 0; - anchory_ = 0; -} - -GBitmapArray::GBitmapArray(Application *application, TextureBase *texturebase) : Sprite(application) -{ - texturebase_ = texturebase; - texturebase_->ref(); - - bitmapdata_ = NULL; - - anchorx_ = 0; - anchory_ = 0; -} - -GBitmapArray::~GBitmapArray() -{ - -} - -void GBitmapArray::setPosition(int i, float x, float y) -{ - -} - -void GBitmapArray::setRotation(int i, float rotation) -{ - -} - -void GBitmapArray::setScale(int i, float x, float y) -{ - -} - -void GBitmapArray::setColorTransform(int i, float r, float g, float b, float a) -{ - -} - -void GBitmapArray::setAlpha(int i, float a) -{ - -} - -void GBitmapArray::doDraw(const CurrentTransform&, float sx, float sy, float ex, float ey) -{ - -} - -void GBitmapArray::extraBounds(float* minx, float* miny, float* maxx, float* maxy) const -{ - -} - +#include "gbitmapbatch.h" +#include "bitmapdata.h" + +GBitmapArray::GBitmapArray(Application *application, BitmapData *bitmapdata) : Sprite(application) +{ + bitmapdata_ = bitmapdata; + bitmapdata_->ref(); + + texturebase_ = NULL; + + anchorx_ = 0; + anchory_ = 0; +} + +GBitmapArray::GBitmapArray(Application *application, TextureBase *texturebase) : Sprite(application) +{ + texturebase_ = texturebase; + texturebase_->ref(); + + bitmapdata_ = NULL; + + anchorx_ = 0; + anchory_ = 0; +} + +GBitmapArray::~GBitmapArray() +{ + +} + +void GBitmapArray::setPosition(int i, float x, float y) +{ + +} + +void GBitmapArray::setRotation(int i, float rotation) +{ + +} + +void GBitmapArray::setScale(int i, float x, float y) +{ + +} + +void GBitmapArray::setColorTransform(int i, float r, float g, float b, float a) +{ + +} + +void GBitmapArray::setAlpha(int i, float a) +{ + +} + +void GBitmapArray::doDraw(const CurrentTransform&, float sx, float sy, float ex, float ey) +{ + +} + +void GBitmapArray::extraBounds(float* minx, float* miny, float* maxx, float* maxy) const +{ + +} + diff --git a/2dsg/gbitmapbatch.h b/2dsg/gbitmapbatch.h index 5d413d9f1..dbfbb9237 100644 --- a/2dsg/gbitmapbatch.h +++ b/2dsg/gbitmapbatch.h @@ -1,53 +1,53 @@ -#ifndef GSPRITEBATCH_H -#define GSPRITEBATCH_H - -#include "sprite.h" - -class Application; -class BitmapData; -class TextureBase; - -class GBitmapArray : public Sprite -{ -public: - GBitmapArray(Application *application, BitmapData *bitmapdata); - GBitmapArray(Application *application, TextureBase *texturebase); - virtual ~GBitmapArray(); - - void setTextureRegion(BitmapData *bitmapdata); - void setTexture(TextureBase *texturebase); - - void setAnchorPoint(float x, float y); - void getAnchorPoint(float *x, float *y) const; - - void setPosition(int i, float x, float y); - void setRotation(int i, float rotation); - void setScale(int i, float x, float y); - void setColorTransform(int i, float r, float g, float b, float a); - void setAlpha(int i, float a); - void setVisible(int i, bool visible); - - void getPosition(int i, float *x, float *y) const; - float getRotation(int i) const; - void getScale(int i, float *x, float *y) const; - void getColorTransform(int i, float *r, float *g, float *b, float *a) const; - float getAlpha(int i) const; - const void getVisible(int i) const; - - size_t getSize() const; - void setSize(size_t size); - -private: - virtual void doDraw(const CurrentTransform&, float sx, float sy, float ex, float ey); - -private: - virtual void extraBounds(float* minx, float* miny, float* maxx, float* maxy) const; - -private: - BitmapData *bitmapdata_; - TextureBase *texturebase_; - - float anchorx_, anchory_; -}; - -#endif +#ifndef GSPRITEBATCH_H +#define GSPRITEBATCH_H + +#include "sprite.h" + +class Application; +class BitmapData; +class TextureBase; + +class GBitmapArray : public Sprite +{ +public: + GBitmapArray(Application *application, BitmapData *bitmapdata); + GBitmapArray(Application *application, TextureBase *texturebase); + virtual ~GBitmapArray(); + + void setTextureRegion(BitmapData *bitmapdata); + void setTexture(TextureBase *texturebase); + + void setAnchorPoint(float x, float y); + void getAnchorPoint(float *x, float *y) const; + + void setPosition(int i, float x, float y); + void setRotation(int i, float rotation); + void setScale(int i, float x, float y); + void setColorTransform(int i, float r, float g, float b, float a); + void setAlpha(int i, float a); + void setVisible(int i, bool visible); + + void getPosition(int i, float *x, float *y) const; + float getRotation(int i) const; + void getScale(int i, float *x, float *y) const; + void getColorTransform(int i, float *r, float *g, float *b, float *a) const; + float getAlpha(int i) const; + const void getVisible(int i) const; + + size_t getSize() const; + void setSize(size_t size); + +private: + virtual void doDraw(const CurrentTransform&, float sx, float sy, float ex, float ey); + +private: + virtual void extraBounds(float* minx, float* miny, float* maxx, float* maxy) const; + +private: + BitmapData *bitmapdata_; + TextureBase *texturebase_; + + float anchorx_, anchory_; +}; + +#endif diff --git a/2dsg/gfxbackends/dx11/Basic.hlsl b/2dsg/gfxbackends/dx11/Basic.hlsl index 88ec31f0b..6f2a3c098 100644 --- a/2dsg/gfxbackends/dx11/Basic.hlsl +++ b/2dsg/gfxbackends/dx11/Basic.hlsl @@ -1,35 +1,35 @@ -Texture2D myTexture : register(t0); -SamplerState samLinear : register(s0); - -struct VOut -{ - float4 position : SV_POSITION; -}; - -cbuffer cbv : register(b0) -{ - float4x4 vMatrix; -}; - -VOut VShader(float4 position : vVertex) -{ - VOut output; - - position.w = 1.0f; - - output.position = mul(vMatrix, position); - - return output; -} - -cbuffer cbp : register(b1) -{ - float4 fColor; -}; - -float4 PShader(float4 position : SV_POSITION) : SV_TARGET -{ - float4 frag = fColor; - if (frag.a == 0.0) discard; - return frag; -} +Texture2D myTexture : register(t0); +SamplerState samLinear : register(s0); + +struct VOut +{ + float4 position : SV_POSITION; +}; + +cbuffer cbv : register(b0) +{ + float4x4 vMatrix; +}; + +VOut VShader(float4 position : vVertex) +{ + VOut output; + + position.w = 1.0f; + + output.position = mul(vMatrix, position); + + return output; +} + +cbuffer cbp : register(b1) +{ + float4 fColor; +}; + +float4 PShader(float4 position : SV_POSITION) : SV_TARGET +{ + float4 frag = fColor; + if (frag.a == 0.0) discard; + return frag; +} diff --git a/2dsg/gfxbackends/dx11/Color.hlsl b/2dsg/gfxbackends/dx11/Color.hlsl index e1866fc01..486bb50df 100644 --- a/2dsg/gfxbackends/dx11/Color.hlsl +++ b/2dsg/gfxbackends/dx11/Color.hlsl @@ -1,37 +1,37 @@ -Texture2D myTexture : register(t0); -SamplerState samLinear : register(s0); - -struct VOut -{ - float4 position : SV_POSITION; - float4 color : COLOR; -}; - -cbuffer cbv : register(b0) -{ - float4x4 vMatrix; -}; - -VOut VShader(float4 position : vVertex, float4 color : vColor) -{ - VOut output; - - position.w = 1.0f; - - output.position = mul(vMatrix, position); - output.color = color; - - return output; -} - -cbuffer cbp : register(b1) -{ - float4 fColor; -}; - -float4 PShader(float4 position : SV_POSITION, float4 color : COLOR) : SV_TARGET -{ - float4 frag = color; - if (frag.a == 0.0) discard; - return frag; -} +Texture2D myTexture : register(t0); +SamplerState samLinear : register(s0); + +struct VOut +{ + float4 position : SV_POSITION; + float4 color : COLOR; +}; + +cbuffer cbv : register(b0) +{ + float4x4 vMatrix; +}; + +VOut VShader(float4 position : vVertex, float4 color : vColor) +{ + VOut output; + + position.w = 1.0f; + + output.position = mul(vMatrix, position); + output.color = color; + + return output; +} + +cbuffer cbp : register(b1) +{ + float4 fColor; +}; + +float4 PShader(float4 position : SV_POSITION, float4 color : COLOR) : SV_TARGET +{ + float4 frag = color; + if (frag.a == 0.0) discard; + return frag; +} diff --git a/2dsg/gfxbackends/dx11/Texture.hlsl b/2dsg/gfxbackends/dx11/Texture.hlsl index dc803d770..b3d4d83c1 100644 --- a/2dsg/gfxbackends/dx11/Texture.hlsl +++ b/2dsg/gfxbackends/dx11/Texture.hlsl @@ -1,37 +1,37 @@ -Texture2D myTexture : register(t0); -SamplerState samLinear : register(s0); - -struct VOut -{ - float4 position : SV_POSITION; - float2 texcoord : TEXCOORD; -}; - -cbuffer cbv : register(b0) -{ - float4x4 vMatrix; -}; - -VOut VShader(float4 position : vVertex, float2 texcoord : vTexCoord) -{ - VOut output; - - position.w = 1.0f; - - output.position = mul(vMatrix, position); - output.texcoord = texcoord; - - return output; -} - -cbuffer cbp : register(b1) -{ - float4 fColor; -}; - -float4 PShader(float4 position : SV_POSITION, float2 texcoord : TEXCOORD) : SV_TARGET -{ - float4 frag = myTexture.Sample(samLinear, texcoord)*fColor; - if (frag.a == 0.0) discard; - return frag; -} +Texture2D myTexture : register(t0); +SamplerState samLinear : register(s0); + +struct VOut +{ + float4 position : SV_POSITION; + float2 texcoord : TEXCOORD; +}; + +cbuffer cbv : register(b0) +{ + float4x4 vMatrix; +}; + +VOut VShader(float4 position : vVertex, float2 texcoord : vTexCoord) +{ + VOut output; + + position.w = 1.0f; + + output.position = mul(vMatrix, position); + output.texcoord = texcoord; + + return output; +} + +cbuffer cbp : register(b1) +{ + float4 fColor; +}; + +float4 PShader(float4 position : SV_POSITION, float2 texcoord : TEXCOORD) : SV_TARGET +{ + float4 frag = myTexture.Sample(samLinear, texcoord)*fColor; + if (frag.a == 0.0) discard; + return frag; +} diff --git a/2dsg/gfxbackends/dx11/TextureColor.hlsl b/2dsg/gfxbackends/dx11/TextureColor.hlsl index 93b4f6ae2..dfe4fd263 100644 --- a/2dsg/gfxbackends/dx11/TextureColor.hlsl +++ b/2dsg/gfxbackends/dx11/TextureColor.hlsl @@ -1,39 +1,39 @@ -Texture2D myTexture : register(t0); -SamplerState samLinear : register(s0); - -struct VOut -{ - float4 position : SV_POSITION; - float4 color : COLOR; - float2 texcoord : TEXCOORD; -}; - -cbuffer cbv : register(b0) -{ - float4x4 vMatrix; -}; - -VOut VShader(float4 position : vVertex, float4 color : vColor, float2 texcoord : vTexCoord) -{ - VOut output; - - position.w = 1.0f; - - output.position = mul(vMatrix, position); - output.color = color; - output.texcoord = texcoord; - - return output; -} - -cbuffer cbp : register(b1) -{ - float4 fColor; -}; - -float4 PShader(float4 position : SV_POSITION, float4 color : COLOR, float2 texcoord : TEXCOORD) : SV_TARGET -{ - float4 frag = myTexture.Sample(samLinear, texcoord)*color; - if (frag.a == 0.0) discard; - return frag; -} +Texture2D myTexture : register(t0); +SamplerState samLinear : register(s0); + +struct VOut +{ + float4 position : SV_POSITION; + float4 color : COLOR; + float2 texcoord : TEXCOORD; +}; + +cbuffer cbv : register(b0) +{ + float4x4 vMatrix; +}; + +VOut VShader(float4 position : vVertex, float4 color : vColor, float2 texcoord : vTexCoord) +{ + VOut output; + + position.w = 1.0f; + + output.position = mul(vMatrix, position); + output.color = color; + output.texcoord = texcoord; + + return output; +} + +cbuffer cbp : register(b1) +{ + float4 fColor; +}; + +float4 PShader(float4 position : SV_POSITION, float4 color : COLOR, float2 texcoord : TEXCOORD) : SV_TARGET +{ + float4 frag = myTexture.Sample(samLinear, texcoord)*color; + if (frag.a == 0.0) discard; + return frag; +} diff --git a/2dsg/gfxbackends/dx11/dx11ShaderBuffer.cpp b/2dsg/gfxbackends/dx11/dx11ShaderBuffer.cpp index 4d4160ffc..0f996c42e 100644 --- a/2dsg/gfxbackends/dx11/dx11ShaderBuffer.cpp +++ b/2dsg/gfxbackends/dx11/dx11ShaderBuffer.cpp @@ -1,42 +1,42 @@ -/* - * gl2ShaderBuffer.cpp - * - * Created on: 5 juin 2015 - * Author: Nicolas - */ - -#include "dx11Shaders.h" -#include "string.h" - -dx11ShaderBuffer::dx11ShaderBuffer(ShaderTexture *texture) -{ - D3D11_SHADER_RESOURCE_VIEW_DESC desc; - ID3D11Resource *res; - ((dx11ShaderTexture *)texture)->rsv->GetDesc(&desc); - ((dx11ShaderTexture *)texture)->rsv->GetResource(&res); - - D3D11_RENDER_TARGET_VIEW_DESC renderTargetViewDesc; - - ZeroMemory(&renderTargetViewDesc, sizeof(renderTargetViewDesc)); - - renderTargetViewDesc.Format = desc.Format; - renderTargetViewDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D; - renderTargetViewDesc.Texture2D.MipSlice = 0; - - g_dev->CreateRenderTargetView(res, &renderTargetViewDesc, &renderTarget); -} - -dx11ShaderBuffer::~dx11ShaderBuffer() -{ - renderTarget->Release(); -} - -void dx11ShaderBuffer::prepareDraw() -{ -} - -void dx11ShaderBuffer::readPixels(int x,int y,int width,int height,ShaderTexture::Format format,ShaderTexture::Packing packing,void *data) -{ - //TODO -} - +/* + * gl2ShaderBuffer.cpp + * + * Created on: 5 juin 2015 + * Author: Nicolas + */ + +#include "dx11Shaders.h" +#include "string.h" + +dx11ShaderBuffer::dx11ShaderBuffer(ShaderTexture *texture) +{ + D3D11_SHADER_RESOURCE_VIEW_DESC desc; + ID3D11Resource *res; + ((dx11ShaderTexture *)texture)->rsv->GetDesc(&desc); + ((dx11ShaderTexture *)texture)->rsv->GetResource(&res); + + D3D11_RENDER_TARGET_VIEW_DESC renderTargetViewDesc; + + ZeroMemory(&renderTargetViewDesc, sizeof(renderTargetViewDesc)); + + renderTargetViewDesc.Format = desc.Format; + renderTargetViewDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D; + renderTargetViewDesc.Texture2D.MipSlice = 0; + + g_dev->CreateRenderTargetView(res, &renderTargetViewDesc, &renderTarget); +} + +dx11ShaderBuffer::~dx11ShaderBuffer() +{ + renderTarget->Release(); +} + +void dx11ShaderBuffer::prepareDraw() +{ +} + +void dx11ShaderBuffer::readPixels(int x,int y,int width,int height,ShaderTexture::Format format,ShaderTexture::Packing packing,void *data) +{ + //TODO +} + diff --git a/2dsg/gfxbackends/dx11/dx11ShaderTexture.cpp b/2dsg/gfxbackends/dx11/dx11ShaderTexture.cpp index 3793841aa..bacfce4d3 100644 --- a/2dsg/gfxbackends/dx11/dx11ShaderTexture.cpp +++ b/2dsg/gfxbackends/dx11/dx11ShaderTexture.cpp @@ -1,74 +1,74 @@ -/* - * gl2ShaderTexture.cpp - * - * Created on: 5 juin 2015 - * Author: Nicolas - */ - -#include "dx11Shaders.h" -#include "glog.h" - -ID3D11SamplerState *dx11ShaderTexture::samplerRepeat=NULL; -ID3D11SamplerState *dx11ShaderTexture::samplerClamp=NULL; - -dx11ShaderTexture::dx11ShaderTexture(ShaderTexture::Format format,ShaderTexture::Packing packing,int width,int height,const void *data,ShaderTexture::Wrap wrap,ShaderTexture::Filtering filtering) -{ - this->width=width; - this->height=height; - this->wrap=wrap; - - D3D11_TEXTURE2D_DESC tdesc; - D3D11_SUBRESOURCE_DATA tbsd; - - tdesc.Width = width; - tdesc.Height = height; - tdesc.MipLevels = 1; - tdesc.ArraySize = 1; - tdesc.SampleDesc.Count = 1; - tdesc.SampleDesc.Quality = 0; - tdesc.Usage = D3D11_USAGE_DEFAULT; - tdesc.BindFlags = D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE; - tdesc.CPUAccessFlags = 0; - tdesc.MiscFlags = 0; - tdesc.Format = DXGI_FORMAT_UNKNOWN; - switch (format) - { - case FMT_ALPHA: tbsd.SysMemPitch = width; tdesc.Format = DXGI_FORMAT_A8_UNORM; break; - case FMT_RGB: - switch (packing) - { - //case PK_UBYTE: tbsd.SysMemPitch = width*3; tdesc.Format = DXGI_FORMAT_R8G8B8_UNORM; break; - case PK_USHORT_565: tbsd.SysMemPitch = width*2; tdesc.Format = DXGI_FORMAT_B5G6R5_UNORM; break; - } - break; - case FMT_RGBA: - switch (packing) - { - case PK_UBYTE: tbsd.SysMemPitch = width*4; tdesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; break; - case PK_USHORT_4444: tbsd.SysMemPitch = width*2; tdesc.Format = DXGI_FORMAT_B4G4R4A4_UNORM; break; - case PK_USHORT_5551: tbsd.SysMemPitch = width*2; tdesc.Format = DXGI_FORMAT_B5G5R5A1_UNORM; break; - } - break; - } - - tbsd.SysMemSlicePitch = tbsd.SysMemPitch*height; // not needed - tbsd.pSysMem = data; - if (tdesc.Format == DXGI_FORMAT_UNKNOWN){ - glog_w("glTexImage2D: unknown internal format"); - exit(1); - } - - g_dev->CreateTexture2D(&tdesc,&tbsd,&tex); - g_dev->CreateShaderResourceView(tex,NULL,&rsv); - -// g_devcon->PSSetShaderResources(0,1,&g_RSV[g_curr_texind]); -} - -dx11ShaderTexture::~dx11ShaderTexture() -{ - rsv->Release(); - tex->Release(); -} - - - +/* + * gl2ShaderTexture.cpp + * + * Created on: 5 juin 2015 + * Author: Nicolas + */ + +#include "dx11Shaders.h" +#include "glog.h" + +ID3D11SamplerState *dx11ShaderTexture::samplerRepeat=NULL; +ID3D11SamplerState *dx11ShaderTexture::samplerClamp=NULL; + +dx11ShaderTexture::dx11ShaderTexture(ShaderTexture::Format format,ShaderTexture::Packing packing,int width,int height,const void *data,ShaderTexture::Wrap wrap,ShaderTexture::Filtering filtering) +{ + this->width=width; + this->height=height; + this->wrap=wrap; + + D3D11_TEXTURE2D_DESC tdesc; + D3D11_SUBRESOURCE_DATA tbsd; + + tdesc.Width = width; + tdesc.Height = height; + tdesc.MipLevels = 1; + tdesc.ArraySize = 1; + tdesc.SampleDesc.Count = 1; + tdesc.SampleDesc.Quality = 0; + tdesc.Usage = D3D11_USAGE_DEFAULT; + tdesc.BindFlags = D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE; + tdesc.CPUAccessFlags = 0; + tdesc.MiscFlags = 0; + tdesc.Format = DXGI_FORMAT_UNKNOWN; + switch (format) + { + case FMT_ALPHA: tbsd.SysMemPitch = width; tdesc.Format = DXGI_FORMAT_A8_UNORM; break; + case FMT_RGB: + switch (packing) + { + //case PK_UBYTE: tbsd.SysMemPitch = width*3; tdesc.Format = DXGI_FORMAT_R8G8B8_UNORM; break; + case PK_USHORT_565: tbsd.SysMemPitch = width*2; tdesc.Format = DXGI_FORMAT_B5G6R5_UNORM; break; + } + break; + case FMT_RGBA: + switch (packing) + { + case PK_UBYTE: tbsd.SysMemPitch = width*4; tdesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; break; + case PK_USHORT_4444: tbsd.SysMemPitch = width*2; tdesc.Format = DXGI_FORMAT_B4G4R4A4_UNORM; break; + case PK_USHORT_5551: tbsd.SysMemPitch = width*2; tdesc.Format = DXGI_FORMAT_B5G5R5A1_UNORM; break; + } + break; + } + + tbsd.SysMemSlicePitch = tbsd.SysMemPitch*height; // not needed + tbsd.pSysMem = data; + if (tdesc.Format == DXGI_FORMAT_UNKNOWN){ + glog_w("glTexImage2D: unknown internal format"); + exit(1); + } + + g_dev->CreateTexture2D(&tdesc,&tbsd,&tex); + g_dev->CreateShaderResourceView(tex,NULL,&rsv); + +// g_devcon->PSSetShaderResources(0,1,&g_RSV[g_curr_texind]); +} + +dx11ShaderTexture::~dx11ShaderTexture() +{ + rsv->Release(); + tex->Release(); +} + + + diff --git a/2dsg/gfxbackends/gl2/gl2ShaderBuffer.cpp b/2dsg/gfxbackends/gl2/gl2ShaderBuffer.cpp index 88dad08d4..fa41ea241 100644 --- a/2dsg/gfxbackends/gl2/gl2ShaderBuffer.cpp +++ b/2dsg/gfxbackends/gl2/gl2ShaderBuffer.cpp @@ -1,123 +1,123 @@ -/* - * gl2ShaderBuffer.cpp - * - * Created on: 5 juin 2015 - * Author: Nicolas - */ - -#include "gl2Shaders.h" -#include "string.h" - -int ogl2ShaderBuffer::qualcommFix_=-1; - -GLint ogl2ShaderBuffer::bindBuffer(GLint fbo) -{ - GLint oldFBO=0; - glGetIntegerv(GL_FRAMEBUFFER_BINDING, &oldFBO); -#ifdef OPENGL_DESKTOP - if (GLEW_ARB_framebuffer_object) -#endif - glBindFramebuffer(GL_FRAMEBUFFER, fbo); -#ifdef OPENGL_DESKTOP - else - glBindFramebufferEXT(GL_FRAMEBUFFER, fbo); -#endif - return oldFBO; -} - -ogl2ShaderBuffer::ogl2ShaderBuffer(ShaderTexture *texture) -{ - - if (qualcommFix_ == -1) - { - const char *extensions = (const char *)glGetString(GL_EXTENSIONS); - qualcommFix_ = (extensions && strstr(extensions, "GL_QCOM")); - } - - if (qualcommFix_) - tempTexture_ = gtexture_TempTextureCreate(((ogl2ShaderTexture *)texture)->width, ((ogl2ShaderTexture *)texture)->height); - else - tempTexture_ = 0; - - - textureId_=((ogl2ShaderTexture *)texture)->glid; - - GLint oldFBO = 0; - glGetIntegerv(GL_FRAMEBUFFER_BINDING, &oldFBO); -#ifdef OPENGL_DESKTOP - if (GLEW_ARB_framebuffer_object) - { -#endif - - glGenFramebuffers(1, &glid); - glBindFramebuffer(GL_FRAMEBUFFER, glid); - - glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureId_, 0); - - glBindFramebuffer(GL_FRAMEBUFFER, oldFBO); - -#ifdef OPENGL_DESKTOP - } - else - { - - glGenFramebuffersEXT(1, &glid); - glBindFramebufferEXT(GL_FRAMEBUFFER, glid); - - glFramebufferTexture2DEXT(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureId_, 0); - - glBindFramebufferEXT(GL_FRAMEBUFFER, oldFBO); - } -#endif -} - -ogl2ShaderBuffer::~ogl2ShaderBuffer() -{ -#ifdef OPENGL_DESKTOP - if (GLEW_ARB_framebuffer_object) -#endif - glDeleteFramebuffers(1,&glid); -#ifdef OPENGL_DESKTOP - else - glDeleteFramebuffersEXT(1,&glid); -#endif - if (tempTexture_) - gtexture_TempTextureDelete(tempTexture_); -} - -void ogl2ShaderBuffer::prepareDraw() -{ - if (qualcommFix_) - { - glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, ((ogl2ShaderTexture *)gtexture_TempTextureGetName(tempTexture_))->glid, 0); - glClear(GL_COLOR_BUFFER_BIT); - glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureId_, 0); - } -} - -void ogl2ShaderBuffer::readPixels(int x,int y,int width,int height,ShaderTexture::Format format,ShaderTexture::Packing packing,void *data) -{ - GLint oldFBO=bindBuffer(glid); - glPixelStorei(GL_PACK_ALIGNMENT, 1); - GLuint glformat=GL_RGBA; - switch (format) - { - case ShaderTexture::FMT_ALPHA: glformat=GL_ALPHA; break; - case ShaderTexture::FMT_RGB: glformat=GL_RGB; break; - case ShaderTexture::FMT_RGBA: glformat=GL_RGBA; break; - case ShaderTexture::FMT_Y: glformat=GL_LUMINANCE; break; - case ShaderTexture::FMT_YA: glformat=GL_LUMINANCE_ALPHA; break; - } - GLuint gltype=GL_UNSIGNED_BYTE; - switch (packing) - { - case ShaderTexture::PK_UBYTE: gltype=GL_UNSIGNED_BYTE; break; - case ShaderTexture::PK_USHORT_565: gltype=GL_UNSIGNED_SHORT_5_6_5; break; - case ShaderTexture::PK_USHORT_4444: gltype=GL_UNSIGNED_SHORT_4_4_4_4; break; - case ShaderTexture::PK_USHORT_5551: gltype=GL_UNSIGNED_SHORT_5_5_5_1; break; - } - glReadPixels(x,y,width,height,glformat,gltype,data); - glPixelStorei(GL_PACK_ALIGNMENT, 4); - bindBuffer(oldFBO); -} - +/* + * gl2ShaderBuffer.cpp + * + * Created on: 5 juin 2015 + * Author: Nicolas + */ + +#include "gl2Shaders.h" +#include "string.h" + +int ogl2ShaderBuffer::qualcommFix_=-1; + +GLint ogl2ShaderBuffer::bindBuffer(GLint fbo) +{ + GLint oldFBO=0; + glGetIntegerv(GL_FRAMEBUFFER_BINDING, &oldFBO); +#ifdef OPENGL_DESKTOP + if (GLEW_ARB_framebuffer_object) +#endif + glBindFramebuffer(GL_FRAMEBUFFER, fbo); +#ifdef OPENGL_DESKTOP + else + glBindFramebufferEXT(GL_FRAMEBUFFER, fbo); +#endif + return oldFBO; +} + +ogl2ShaderBuffer::ogl2ShaderBuffer(ShaderTexture *texture) +{ + + if (qualcommFix_ == -1) + { + const char *extensions = (const char *)glGetString(GL_EXTENSIONS); + qualcommFix_ = (extensions && strstr(extensions, "GL_QCOM")); + } + + if (qualcommFix_) + tempTexture_ = gtexture_TempTextureCreate(((ogl2ShaderTexture *)texture)->width, ((ogl2ShaderTexture *)texture)->height); + else + tempTexture_ = 0; + + + textureId_=((ogl2ShaderTexture *)texture)->glid; + + GLint oldFBO = 0; + glGetIntegerv(GL_FRAMEBUFFER_BINDING, &oldFBO); +#ifdef OPENGL_DESKTOP + if (GLEW_ARB_framebuffer_object) + { +#endif + + glGenFramebuffers(1, &glid); + glBindFramebuffer(GL_FRAMEBUFFER, glid); + + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureId_, 0); + + glBindFramebuffer(GL_FRAMEBUFFER, oldFBO); + +#ifdef OPENGL_DESKTOP + } + else + { + + glGenFramebuffersEXT(1, &glid); + glBindFramebufferEXT(GL_FRAMEBUFFER, glid); + + glFramebufferTexture2DEXT(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureId_, 0); + + glBindFramebufferEXT(GL_FRAMEBUFFER, oldFBO); + } +#endif +} + +ogl2ShaderBuffer::~ogl2ShaderBuffer() +{ +#ifdef OPENGL_DESKTOP + if (GLEW_ARB_framebuffer_object) +#endif + glDeleteFramebuffers(1,&glid); +#ifdef OPENGL_DESKTOP + else + glDeleteFramebuffersEXT(1,&glid); +#endif + if (tempTexture_) + gtexture_TempTextureDelete(tempTexture_); +} + +void ogl2ShaderBuffer::prepareDraw() +{ + if (qualcommFix_) + { + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, ((ogl2ShaderTexture *)gtexture_TempTextureGetName(tempTexture_))->glid, 0); + glClear(GL_COLOR_BUFFER_BIT); + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureId_, 0); + } +} + +void ogl2ShaderBuffer::readPixels(int x,int y,int width,int height,ShaderTexture::Format format,ShaderTexture::Packing packing,void *data) +{ + GLint oldFBO=bindBuffer(glid); + glPixelStorei(GL_PACK_ALIGNMENT, 1); + GLuint glformat=GL_RGBA; + switch (format) + { + case ShaderTexture::FMT_ALPHA: glformat=GL_ALPHA; break; + case ShaderTexture::FMT_RGB: glformat=GL_RGB; break; + case ShaderTexture::FMT_RGBA: glformat=GL_RGBA; break; + case ShaderTexture::FMT_Y: glformat=GL_LUMINANCE; break; + case ShaderTexture::FMT_YA: glformat=GL_LUMINANCE_ALPHA; break; + } + GLuint gltype=GL_UNSIGNED_BYTE; + switch (packing) + { + case ShaderTexture::PK_UBYTE: gltype=GL_UNSIGNED_BYTE; break; + case ShaderTexture::PK_USHORT_565: gltype=GL_UNSIGNED_SHORT_5_6_5; break; + case ShaderTexture::PK_USHORT_4444: gltype=GL_UNSIGNED_SHORT_4_4_4_4; break; + case ShaderTexture::PK_USHORT_5551: gltype=GL_UNSIGNED_SHORT_5_5_5_1; break; + } + glReadPixels(x,y,width,height,glformat,gltype,data); + glPixelStorei(GL_PACK_ALIGNMENT, 4); + bindBuffer(oldFBO); +} + diff --git a/2dsg/gfxbackends/gl2/gl2ShaderTexture.cpp b/2dsg/gfxbackends/gl2/gl2ShaderTexture.cpp index 1023b3d57..9e9a3f8e0 100644 --- a/2dsg/gfxbackends/gl2/gl2ShaderTexture.cpp +++ b/2dsg/gfxbackends/gl2/gl2ShaderTexture.cpp @@ -1,72 +1,72 @@ -/* - * gl2ShaderTexture.cpp - * - * Created on: 5 juin 2015 - * Author: Nicolas - */ - -#include "gl2Shaders.h" - -ogl2ShaderTexture::ogl2ShaderTexture(ShaderTexture::Format format,ShaderTexture::Packing packing,int width,int height,const void *data,ShaderTexture::Wrap wrap,ShaderTexture::Filtering filtering) -{ - glid=0; - this->width=width; - this->height=height; - - GLint oldTex = 0; - glGetIntegerv(GL_TEXTURE_BINDING_2D, &oldTex); - - glGenTextures(1, &glid); - glBindTexture(GL_TEXTURE_2D, glid); - switch (wrap) - { - case WRAP_CLAMP: - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - break; - case WRAP_REPEAT: - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - break; - } - switch (filtering) - { - case FILT_NEAREST: - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - break; - case FILT_LINEAR: - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - break; - } - - GLuint glformat=GL_RGBA; - switch (format) - { - case FMT_ALPHA: glformat=GL_ALPHA; break; - case FMT_RGB: glformat=GL_RGB; break; - case FMT_RGBA: glformat=GL_RGBA; break; - case FMT_Y: glformat=GL_LUMINANCE; break; - case FMT_YA: glformat=GL_LUMINANCE_ALPHA; break; - } - GLuint gltype=GL_UNSIGNED_BYTE; - switch (packing) - { - case PK_UBYTE: gltype=GL_UNSIGNED_BYTE; break; - case PK_USHORT_565: gltype=GL_UNSIGNED_SHORT_5_6_5; break; - case PK_USHORT_4444: gltype=GL_UNSIGNED_SHORT_4_4_4_4; break; - case PK_USHORT_5551: gltype=GL_UNSIGNED_SHORT_5_5_5_1; break; - } - glTexImage2D(GL_TEXTURE_2D, 0, glformat, width, height, 0, glformat, gltype, data); - - glBindTexture(GL_TEXTURE_2D, oldTex); -} - -ogl2ShaderTexture::~ogl2ShaderTexture() -{ - glDeleteTextures(1,&glid); -} - - - +/* + * gl2ShaderTexture.cpp + * + * Created on: 5 juin 2015 + * Author: Nicolas + */ + +#include "gl2Shaders.h" + +ogl2ShaderTexture::ogl2ShaderTexture(ShaderTexture::Format format,ShaderTexture::Packing packing,int width,int height,const void *data,ShaderTexture::Wrap wrap,ShaderTexture::Filtering filtering) +{ + glid=0; + this->width=width; + this->height=height; + + GLint oldTex = 0; + glGetIntegerv(GL_TEXTURE_BINDING_2D, &oldTex); + + glGenTextures(1, &glid); + glBindTexture(GL_TEXTURE_2D, glid); + switch (wrap) + { + case WRAP_CLAMP: + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + break; + case WRAP_REPEAT: + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + break; + } + switch (filtering) + { + case FILT_NEAREST: + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + break; + case FILT_LINEAR: + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + break; + } + + GLuint glformat=GL_RGBA; + switch (format) + { + case FMT_ALPHA: glformat=GL_ALPHA; break; + case FMT_RGB: glformat=GL_RGB; break; + case FMT_RGBA: glformat=GL_RGBA; break; + case FMT_Y: glformat=GL_LUMINANCE; break; + case FMT_YA: glformat=GL_LUMINANCE_ALPHA; break; + } + GLuint gltype=GL_UNSIGNED_BYTE; + switch (packing) + { + case PK_UBYTE: gltype=GL_UNSIGNED_BYTE; break; + case PK_USHORT_565: gltype=GL_UNSIGNED_SHORT_5_6_5; break; + case PK_USHORT_4444: gltype=GL_UNSIGNED_SHORT_4_4_4_4; break; + case PK_USHORT_5551: gltype=GL_UNSIGNED_SHORT_5_5_5_1; break; + } + glTexImage2D(GL_TEXTURE_2D, 0, glformat, width, height, 0, glformat, gltype, data); + + glBindTexture(GL_TEXTURE_2D, oldTex); +} + +ogl2ShaderTexture::~ogl2ShaderTexture() +{ + glDeleteTextures(1,&glid); +} + + + diff --git a/2dsg/glcompat.cpp b/2dsg/glcompat.cpp index 47f15c9ff..e553ae974 100644 --- a/2dsg/glcompat.cpp +++ b/2dsg/glcompat.cpp @@ -1,29 +1,29 @@ -#include "glcompat.h" - - -#if 0 - -#include -#include -#include - -void glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data) -{ - bool Do2bitMode; - - if (internalformat == GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG || internalformat == GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG) - Do2bitMode = true; - else if (internalformat == GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG || internalformat == GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG) - Do2bitMode = false; - else - return; - - unsigned char* resultImage = (unsigned char*)malloc(width * height * 4); - PVRTDecompressPVRTC(data, Do2bitMode, width, height, resultImage); - - glTexImage2D(target, level, GL_RGBA, width, height, border, GL_RGBA, GL_UNSIGNED_BYTE, resultImage); - - free(resultImage); -} - -#endif +#include "glcompat.h" + + +#if 0 + +#include +#include +#include + +void glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data) +{ + bool Do2bitMode; + + if (internalformat == GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG || internalformat == GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG) + Do2bitMode = true; + else if (internalformat == GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG || internalformat == GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG) + Do2bitMode = false; + else + return; + + unsigned char* resultImage = (unsigned char*)malloc(width * height * 4); + PVRTDecompressPVRTC(data, Do2bitMode, width, height, resultImage); + + glTexImage2D(target, level, GL_RGBA, width, height, border, GL_RGBA, GL_UNSIGNED_BYTE, resultImage); + + free(resultImage); +} + +#endif diff --git a/2dsg/glcompat.h b/2dsg/glcompat.h index 5f6dc4a90..635d74958 100644 --- a/2dsg/glcompat.h +++ b/2dsg/glcompat.h @@ -1,24 +1,24 @@ -#ifndef GLCOMPAT_H_DEFINED -#define GLCOMPAT_H_DEFINED - -#ifdef glOrthof -#undef glOrthof -#endif - -#define glOrthof glOrtho - -#ifndef GL_CLAMP_TO_EDGE -#define GL_CLAMP_TO_EDGE GL_CLAMP -#endif - -#if 0 -void glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); - -#define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG 0x8C00 -#define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG 0x8C01 -#define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG 0x8C02 -#define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG 0x8C03 - -#endif - -#endif +#ifndef GLCOMPAT_H_DEFINED +#define GLCOMPAT_H_DEFINED + +#ifdef glOrthof +#undef glOrthof +#endif + +#define glOrthof glOrtho + +#ifndef GL_CLAMP_TO_EDGE +#define GL_CLAMP_TO_EDGE GL_CLAMP +#endif + +#if 0 +void glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); + +#define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG 0x8C00 +#define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG 0x8C01 +#define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG 0x8C02 +#define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG 0x8C03 + +#endif + +#endif diff --git a/2dsg/grendertarget.cpp b/2dsg/grendertarget.cpp index 1b4f02815..88a2078cc 100644 --- a/2dsg/grendertarget.cpp +++ b/2dsg/grendertarget.cpp @@ -1,60 +1,60 @@ -#include "grendertarget.h" -#include "application.h" -#include "sprite.h" -#include "ogl.h" - -GRenderTarget::GRenderTarget(Application *application, int width, int height, Filter filter) : - TextureBase(application) -{ - TextureParameters parameters; - parameters.filter = filter; - data = application->getTextureManager()->createRenderTarget(width, height, parameters); - - sizescalex = 1; - sizescaley = 1; - uvscalex = (float)data->width / (float)data->baseWidth; - uvscaley = (float)data->height / (float)data->baseHeight; -} - -GRenderTarget::~GRenderTarget() -{ -} - -void GRenderTarget::clear(unsigned int color, float a) -{ - ShaderBuffer *fbo=gtexture_BindRenderTarget(gtexture_RenderTargetGetFBO(data->gid)); - ShaderEngine::Engine->setViewport(0, 0, data->width, data->height); - - float r = ((color >> 16) & 0xff) / 255.f; - float g = ((color >> 8) & 0xff) / 255.f; - float b = (color & 0xff) / 255.f; - ShaderEngine::Engine->clearColor(r * a, g * a, b * a, a); - - gtexture_BindRenderTarget(fbo); -} - -void GRenderTarget::draw(const Sprite *sprite) -{ - ShaderEngine::Engine->reset(); - ShaderBuffer *fbo=gtexture_RenderTargetGetFBO(data->gid); - ShaderBuffer *oldfbo=gtexture_BindRenderTarget(fbo); - - fbo->prepareDraw(); - ShaderEngine::Engine->setViewport(0, 0, data->width, data->height); - - // The WINSTORE glOrtho (for Direct3D) is what you would expect. The OpenGL call needs to be inverted in y-direction - Matrix4 projection; - -#ifdef WINSTORE - projection = ShaderEngine::Engine->setOrthoFrustum(0, data->baseWidth, data->baseHeight, 0, -1, 1); -#else - projection = ShaderEngine::Engine->setOrthoFrustum(0, data->baseWidth, 0, data->baseHeight, -1, 1); -#endif - - ShaderEngine::Engine->setProjection(projection); - - CurrentTransform currentTransform; - ((Sprite*)sprite)->draw(currentTransform, 0, 0, data->width, data->height); - - gtexture_BindRenderTarget(oldfbo); -} +#include "grendertarget.h" +#include "application.h" +#include "sprite.h" +#include "ogl.h" + +GRenderTarget::GRenderTarget(Application *application, int width, int height, Filter filter) : + TextureBase(application) +{ + TextureParameters parameters; + parameters.filter = filter; + data = application->getTextureManager()->createRenderTarget(width, height, parameters); + + sizescalex = 1; + sizescaley = 1; + uvscalex = (float)data->width / (float)data->baseWidth; + uvscaley = (float)data->height / (float)data->baseHeight; +} + +GRenderTarget::~GRenderTarget() +{ +} + +void GRenderTarget::clear(unsigned int color, float a) +{ + ShaderBuffer *fbo=gtexture_BindRenderTarget(gtexture_RenderTargetGetFBO(data->gid)); + ShaderEngine::Engine->setViewport(0, 0, data->width, data->height); + + float r = ((color >> 16) & 0xff) / 255.f; + float g = ((color >> 8) & 0xff) / 255.f; + float b = (color & 0xff) / 255.f; + ShaderEngine::Engine->clearColor(r * a, g * a, b * a, a); + + gtexture_BindRenderTarget(fbo); +} + +void GRenderTarget::draw(const Sprite *sprite) +{ + ShaderEngine::Engine->reset(); + ShaderBuffer *fbo=gtexture_RenderTargetGetFBO(data->gid); + ShaderBuffer *oldfbo=gtexture_BindRenderTarget(fbo); + + fbo->prepareDraw(); + ShaderEngine::Engine->setViewport(0, 0, data->width, data->height); + + // The WINSTORE glOrtho (for Direct3D) is what you would expect. The OpenGL call needs to be inverted in y-direction + Matrix4 projection; + +#ifdef WINSTORE + projection = ShaderEngine::Engine->setOrthoFrustum(0, data->baseWidth, data->baseHeight, 0, -1, 1); +#else + projection = ShaderEngine::Engine->setOrthoFrustum(0, data->baseWidth, 0, data->baseHeight, -1, 1); +#endif + + ShaderEngine::Engine->setProjection(projection); + + CurrentTransform currentTransform; + ((Sprite*)sprite)->draw(currentTransform, 0, 0, data->width, data->height); + + gtexture_BindRenderTarget(oldfbo); +} diff --git a/2dsg/grendertarget.h b/2dsg/grendertarget.h index dec12fb3b..05a6e640e 100644 --- a/2dsg/grendertarget.h +++ b/2dsg/grendertarget.h @@ -1,17 +1,17 @@ -#pragma once - -#include "texturebase.h" - -class Application; -class Sprite; - -class GRenderTarget : public TextureBase -{ -public: - GRenderTarget(Application *application, int width, int height, Filter filter); - virtual ~GRenderTarget(); - - void clear(unsigned int color, float a); - - void draw(const Sprite *sprite); -}; +#pragma once + +#include "texturebase.h" + +class Application; +class Sprite; + +class GRenderTarget : public TextureBase +{ +public: + GRenderTarget(Application *application, int width, int height, Filter filter); + virtual ~GRenderTarget(); + + void clear(unsigned int color, float a); + + void draw(const Sprite *sprite); +}; diff --git a/2dsg/gstatus.cpp b/2dsg/gstatus.cpp index 453c181a3..4564ce00d 100644 --- a/2dsg/gstatus.cpp +++ b/2dsg/gstatus.cpp @@ -1,181 +1,181 @@ -#include "gstatus.h" -#include -#include -#include -#include -#include "platform.h" - -#ifndef _WIN32 -#define _snprintf snprintf -#endif - - -struct GStatusElement -{ - GStatusElement() : errorString(NULL) {} - - GStatusElement(GStatus::Type type, const char* errorString, bool vararg) : - type(type), - errorString(errorString), - vararg(vararg) - { - - } - - GStatus::Type type; - const char* errorString; - bool vararg; -}; - -static std::map s_errors; - -void GStatus::init(int errorCode) -{ - if (s_errors.empty() == true) - { - s_errors[1] = GStatusElement(eRuntimeError, "%s", true); - - s_errors[2150] = GStatusElement(eArgumentError, "An object cannot be added as a child to one of it's children (or children's children, etc.).", false); - s_errors[2024] = GStatusElement(eArgumentError, "An object cannot be added as a child of itself.", false); - s_errors[2006] = GStatusElement(eRangeError, "The supplied index is out of bounds.", false); - s_errors[2008] = GStatusElement(eArgumentError, "Parameter '%s' must be one of the accepted values.", true); - s_errors[2025] = GStatusElement(eArgumentError, "The supplied Sprite must be a child of the caller.", false); - s_errors[2009] = GStatusElement(eArgumentError, "Field '%s' must exists.", true); - s_errors[2010] = GStatusElement(eArgumentError, "Field '%s' must be one of the accepted values.", true); - - s_errors[2100] = GStatusElement(eArgumentError, "Start and end frames must be greater than or equal to 1.", false); - s_errors[2101] = GStatusElement(eArgumentError, "End frame/time must be greater than or equal to start frame/time.", false); - s_errors[2102] = GStatusElement(eArgumentError, "Timeline array doesn't contain any elements.", false); - s_errors[2103] = GStatusElement(eArgumentError, "Timeline element is not a table.", false); - s_errors[2104] = GStatusElement(eArgumentError, "Start and end time must be greater than or equal to 0.", false); - - s_errors[5001] = GStatusElement(eRuntimeError, "Body is already destroyed.", false); - s_errors[5002] = GStatusElement(eRuntimeError, "Fixture is already destroyed.", false); - s_errors[5003] = GStatusElement(eRuntimeError, "Joint is already destroyed.", false); - s_errors[5004] = GStatusElement(eRuntimeError, "World is locked.", false); - - s_errors[6000] = GStatusElement(eRuntimeError, "%s: No such file or directory.", true); - s_errors[6001] = GStatusElement(eRuntimeError, "%s: File is not a PNG file.", true); - s_errors[6002] = GStatusElement(eRuntimeError, "%s: Error while reading PNG file.", true); - s_errors[6003] = GStatusElement(eRuntimeError, "%s: PNG color format is not supported. The PNG file should be 24 or 32 bit.", true); - s_errors[6004] = GStatusElement(eRuntimeError, "%s: Sound format is not recognized.", true); - s_errors[6005] = GStatusElement(eRuntimeError, "%s: Image format is not supported.", true); - s_errors[6006] = GStatusElement(eRuntimeError, "%s: File is not a PVR file.", true); - s_errors[6007] = GStatusElement(eRuntimeError, "%s: PVR pixel type is not supported.", true); - s_errors[6008] = GStatusElement(eRuntimeError, "%s: File does not contain texture region information.", true); - s_errors[6009] = GStatusElement(eRuntimeError, "%s: Sound format is not supported.", true); - s_errors[6010] = GStatusElement(eRuntimeError, "%s: Error while reading JPG file.", true); - s_errors[6011] = GStatusElement(eRuntimeError, "%s: JPG color format is not supported.", true); - s_errors[6012] = GStatusElement(eRuntimeError, "%s: Error while reading font file.", true); - s_errors[6013] = GStatusElement(eRuntimeError, "%s: Error while reading image file.", true); - s_errors[6014] = GStatusElement(eRuntimeError, "%s: Image color format is not supported.", true); - s_errors[6015] = GStatusElement(eRuntimeError, "%s: File is not a FNT file.", true); - s_errors[6016] = GStatusElement(eRuntimeError, "%s: Error while reading FNT file.", true); - s_errors[6017] = GStatusElement(eArgumentError, "Invalid font size.", false); - - s_errors[7000] = GStatusElement(eRuntimeError, "URL cannot be parsed.", false); - } - errorCode_ = errorCode; - errorString_ = NULL; -} - -GStatus::GStatus() -{ - init(0); -} - -GStatus::GStatus(int errorCode, ...) -{ - init(errorCode); - - if (s_errors[errorCode].vararg == true) - { - va_list args; - - char* buffer = (char*)malloc(1025); - va_start(args, errorCode); - vsnprintf(buffer, 1024, s_errors[errorCode].errorString, args); - va_end(args); - errorString_ = new std::string(buffer); - free(buffer); - } -} - -GStatus::GStatus(int errorCode, const char* arg1) -{ - init(errorCode); - - if (s_errors[errorCode].vararg == true) - { - char* buffer = (char*)malloc(1025); - _snprintf(buffer, 1024, s_errors[errorCode].errorString, arg1); - errorString_ = new std::string(buffer); - free(buffer); - } -} - -GStatus::GStatus(int errorCode, const char* arg1, const char* arg2) -{ - init(errorCode); - - if (s_errors[errorCode].vararg == true) - { - char* buffer = (char*)malloc(1025); - _snprintf(buffer, 1024, s_errors[errorCode].errorString, arg1, arg2); - errorString_ = new std::string(buffer); - free(buffer); - } -} - -GStatus::GStatus(const GStatus& status) -{ - errorCode_ = status.errorCode_; - - if (status.errorString_ == NULL) - errorString_ = NULL; - else - errorString_ = new std::string(*status.errorString_); -} - -GStatus::~GStatus() -{ - delete errorString_; -} - -GStatus& GStatus::operator=(const GStatus& status) -{ - GStatus(status).swap(*this); - return *this; -} - -GStatus::Type GStatus::type() const -{ - return s_errors[errorCode_].type; -} - -bool GStatus::error() const -{ - return errorCode_ != 0; -} - -const char* GStatus::errorString() const -{ - if (errorString_ != NULL) - return errorString_->c_str(); - - return s_errors[errorCode_].errorString; -} - -void GStatus::clear() -{ - errorCode_ = 0; - delete errorString_; - errorString_ = NULL; -} - - -void GStatus::swap(GStatus& other) -{ - std::swap(errorCode_, other.errorCode_); - std::swap(errorString_, other.errorString_); -} +#include "gstatus.h" +#include +#include +#include +#include +#include "platform.h" + +#ifndef _WIN32 +#define _snprintf snprintf +#endif + + +struct GStatusElement +{ + GStatusElement() : errorString(NULL) {} + + GStatusElement(GStatus::Type type, const char* errorString, bool vararg) : + type(type), + errorString(errorString), + vararg(vararg) + { + + } + + GStatus::Type type; + const char* errorString; + bool vararg; +}; + +static std::map s_errors; + +void GStatus::init(int errorCode) +{ + if (s_errors.empty() == true) + { + s_errors[1] = GStatusElement(eRuntimeError, "%s", true); + + s_errors[2150] = GStatusElement(eArgumentError, "An object cannot be added as a child to one of it's children (or children's children, etc.).", false); + s_errors[2024] = GStatusElement(eArgumentError, "An object cannot be added as a child of itself.", false); + s_errors[2006] = GStatusElement(eRangeError, "The supplied index is out of bounds.", false); + s_errors[2008] = GStatusElement(eArgumentError, "Parameter '%s' must be one of the accepted values.", true); + s_errors[2025] = GStatusElement(eArgumentError, "The supplied Sprite must be a child of the caller.", false); + s_errors[2009] = GStatusElement(eArgumentError, "Field '%s' must exists.", true); + s_errors[2010] = GStatusElement(eArgumentError, "Field '%s' must be one of the accepted values.", true); + + s_errors[2100] = GStatusElement(eArgumentError, "Start and end frames must be greater than or equal to 1.", false); + s_errors[2101] = GStatusElement(eArgumentError, "End frame/time must be greater than or equal to start frame/time.", false); + s_errors[2102] = GStatusElement(eArgumentError, "Timeline array doesn't contain any elements.", false); + s_errors[2103] = GStatusElement(eArgumentError, "Timeline element is not a table.", false); + s_errors[2104] = GStatusElement(eArgumentError, "Start and end time must be greater than or equal to 0.", false); + + s_errors[5001] = GStatusElement(eRuntimeError, "Body is already destroyed.", false); + s_errors[5002] = GStatusElement(eRuntimeError, "Fixture is already destroyed.", false); + s_errors[5003] = GStatusElement(eRuntimeError, "Joint is already destroyed.", false); + s_errors[5004] = GStatusElement(eRuntimeError, "World is locked.", false); + + s_errors[6000] = GStatusElement(eRuntimeError, "%s: No such file or directory.", true); + s_errors[6001] = GStatusElement(eRuntimeError, "%s: File is not a PNG file.", true); + s_errors[6002] = GStatusElement(eRuntimeError, "%s: Error while reading PNG file.", true); + s_errors[6003] = GStatusElement(eRuntimeError, "%s: PNG color format is not supported. The PNG file should be 24 or 32 bit.", true); + s_errors[6004] = GStatusElement(eRuntimeError, "%s: Sound format is not recognized.", true); + s_errors[6005] = GStatusElement(eRuntimeError, "%s: Image format is not supported.", true); + s_errors[6006] = GStatusElement(eRuntimeError, "%s: File is not a PVR file.", true); + s_errors[6007] = GStatusElement(eRuntimeError, "%s: PVR pixel type is not supported.", true); + s_errors[6008] = GStatusElement(eRuntimeError, "%s: File does not contain texture region information.", true); + s_errors[6009] = GStatusElement(eRuntimeError, "%s: Sound format is not supported.", true); + s_errors[6010] = GStatusElement(eRuntimeError, "%s: Error while reading JPG file.", true); + s_errors[6011] = GStatusElement(eRuntimeError, "%s: JPG color format is not supported.", true); + s_errors[6012] = GStatusElement(eRuntimeError, "%s: Error while reading font file.", true); + s_errors[6013] = GStatusElement(eRuntimeError, "%s: Error while reading image file.", true); + s_errors[6014] = GStatusElement(eRuntimeError, "%s: Image color format is not supported.", true); + s_errors[6015] = GStatusElement(eRuntimeError, "%s: File is not a FNT file.", true); + s_errors[6016] = GStatusElement(eRuntimeError, "%s: Error while reading FNT file.", true); + s_errors[6017] = GStatusElement(eArgumentError, "Invalid font size.", false); + + s_errors[7000] = GStatusElement(eRuntimeError, "URL cannot be parsed.", false); + } + errorCode_ = errorCode; + errorString_ = NULL; +} + +GStatus::GStatus() +{ + init(0); +} + +GStatus::GStatus(int errorCode, ...) +{ + init(errorCode); + + if (s_errors[errorCode].vararg == true) + { + va_list args; + + char* buffer = (char*)malloc(1025); + va_start(args, errorCode); + vsnprintf(buffer, 1024, s_errors[errorCode].errorString, args); + va_end(args); + errorString_ = new std::string(buffer); + free(buffer); + } +} + +GStatus::GStatus(int errorCode, const char* arg1) +{ + init(errorCode); + + if (s_errors[errorCode].vararg == true) + { + char* buffer = (char*)malloc(1025); + _snprintf(buffer, 1024, s_errors[errorCode].errorString, arg1); + errorString_ = new std::string(buffer); + free(buffer); + } +} + +GStatus::GStatus(int errorCode, const char* arg1, const char* arg2) +{ + init(errorCode); + + if (s_errors[errorCode].vararg == true) + { + char* buffer = (char*)malloc(1025); + _snprintf(buffer, 1024, s_errors[errorCode].errorString, arg1, arg2); + errorString_ = new std::string(buffer); + free(buffer); + } +} + +GStatus::GStatus(const GStatus& status) +{ + errorCode_ = status.errorCode_; + + if (status.errorString_ == NULL) + errorString_ = NULL; + else + errorString_ = new std::string(*status.errorString_); +} + +GStatus::~GStatus() +{ + delete errorString_; +} + +GStatus& GStatus::operator=(const GStatus& status) +{ + GStatus(status).swap(*this); + return *this; +} + +GStatus::Type GStatus::type() const +{ + return s_errors[errorCode_].type; +} + +bool GStatus::error() const +{ + return errorCode_ != 0; +} + +const char* GStatus::errorString() const +{ + if (errorString_ != NULL) + return errorString_->c_str(); + + return s_errors[errorCode_].errorString; +} + +void GStatus::clear() +{ + errorCode_ = 0; + delete errorString_; + errorString_ = NULL; +} + + +void GStatus::swap(GStatus& other) +{ + std::swap(errorCode_, other.errorCode_); + std::swap(errorString_, other.errorString_); +} diff --git a/2dsg/gstatus.h b/2dsg/gstatus.h index 4daaf650d..b14bac294 100644 --- a/2dsg/gstatus.h +++ b/2dsg/gstatus.h @@ -1,39 +1,39 @@ -#ifndef GSTATUS_H -#define GSTATUS_H - -#include - -class GStatus -{ -public: - enum Type - { - eArgumentError, - eRangeError, - eRuntimeError, - }; - - GStatus(); - GStatus(int errorCode, ...); - GStatus(int errorCode, const char* arg1); - GStatus(int errorCode, const char* arg1, const char* arg2); - GStatus(const GStatus& status); - ~GStatus(); - - GStatus& operator=(const GStatus& status); - - Type type() const; - bool error() const; - const char* errorString() const; - void clear(); - - void swap(GStatus& other); - -private: - int errorCode_; - std::string* errorString_; - - void init(int errorCode); -}; - -#endif +#ifndef GSTATUS_H +#define GSTATUS_H + +#include + +class GStatus +{ +public: + enum Type + { + eArgumentError, + eRangeError, + eRuntimeError, + }; + + GStatus(); + GStatus(int errorCode, ...); + GStatus(int errorCode, const char* arg1); + GStatus(int errorCode, const char* arg1, const char* arg2); + GStatus(const GStatus& status); + ~GStatus(); + + GStatus& operator=(const GStatus& status); + + Type type() const; + bool error() const; + const char* errorString() const; + void clear(); + + void swap(GStatus& other); + +private: + int errorCode_; + std::string* errorString_; + + void init(int errorCode); +}; + +#endif diff --git a/2dsg/keyboardevent.cpp b/2dsg/keyboardevent.cpp index 1ad083d54..8c04394fb 100644 --- a/2dsg/keyboardevent.cpp +++ b/2dsg/keyboardevent.cpp @@ -1,10 +1,10 @@ -#include "keyboardevent.h" -#include "eventvisitor.h" - -KeyboardEvent::Type KeyboardEvent::KEY_DOWN("keyDown"); -KeyboardEvent::Type KeyboardEvent::KEY_UP("keyUp"); - -void KeyboardEvent::apply(EventVisitor* v) -{ - v->visit(this); -} +#include "keyboardevent.h" +#include "eventvisitor.h" + +KeyboardEvent::Type KeyboardEvent::KEY_DOWN("keyDown"); +KeyboardEvent::Type KeyboardEvent::KEY_UP("keyUp"); + +void KeyboardEvent::apply(EventVisitor* v) +{ + v->visit(this); +} diff --git a/2dsg/keyboardevent.h b/2dsg/keyboardevent.h index ec7fc35fe..9c8c62b23 100644 --- a/2dsg/keyboardevent.h +++ b/2dsg/keyboardevent.h @@ -1,25 +1,25 @@ -#ifndef KEYBOARDEVENT_H -#define KEYBOARDEVENT_H - -#include "event.h" - -class KeyboardEvent : public Event -{ -public: - typedef EventType Type; - - KeyboardEvent(const Type& type, int keyCode, int realCode) : Event(type.type()), keyCode(keyCode), realCode(realCode) - { - - } - - static Type KEY_DOWN; - static Type KEY_UP; - - int keyCode; - int realCode; - - virtual void apply(EventVisitor* v); -}; - -#endif +#ifndef KEYBOARDEVENT_H +#define KEYBOARDEVENT_H + +#include "event.h" + +class KeyboardEvent : public Event +{ +public: + typedef EventType Type; + + KeyboardEvent(const Type& type, int keyCode, int realCode) : Event(type.type()), keyCode(keyCode), realCode(realCode) + { + + } + + static Type KEY_DOWN; + static Type KEY_UP; + + int keyCode; + int realCode; + + virtual void apply(EventVisitor* v); +}; + +#endif diff --git a/2dsg/keycode.h b/2dsg/keycode.h index cdad5a55e..7b043f427 100644 --- a/2dsg/keycode.h +++ b/2dsg/keycode.h @@ -1,4 +1,4 @@ -#ifndef KEYCODE_H -#define KEYCODE_H - -#endif +#ifndef KEYCODE_H +#define KEYCODE_H + +#endif diff --git a/2dsg/matrix.cpp b/2dsg/matrix.cpp index 79cb2363a..fbbe244f8 100644 --- a/2dsg/matrix.cpp +++ b/2dsg/matrix.cpp @@ -1,86 +1,86 @@ -#include "matrix.h" - -void Matrix2D::transformPoint(float x, float y, float* newx, float* newy) const -{ - float nx = m11() * x + m12() * y + tx(); - float ny = m21() * x + m22() * y + ty(); - - if (newx) - *newx = nx; - - if (newy) - *newy = ny; -} - -void Matrix2D::inverseTransformPoint(float x, float y, float* newx, float* newy) const -{ - float invdet = 1 / (m11() * m22() - m21() * m12()); - - float nx = invdet * m22() * (x - tx()) + invdet * -m12() * (y - ty()); - float ny = invdet * -m21() * (x - tx()) + invdet * m11() * (y - ty()); - - if (newx) - *newx = nx; - - if (newy) - *newy = ny; -} - -Matrix2D Matrix2D::inverse() const -{ - Matrix2D T(1, 0, 0, 1, -tx(), -ty()); - - float invdet = 1 / (m11() * m22() - m21() * m12()); - Matrix2D L(m22() * invdet, -m12() * invdet, -m21() * invdet, m11() * invdet); - - return L * T; -} - -Matrix2D operator*(const Matrix2D& m0, const Matrix2D& m1) -{ - float m11 = m0.m11() * m1.m11() + m0.m12() * m1.m21(); - float m12 = m0.m11() * m1.m12() + m0.m12() * m1.m22(); - float m21 = m0.m21() * m1.m11() + m0.m22() * m1.m21(); - float m22 = m0.m21() * m1.m12() + m0.m22() * m1.m22(); - float tx = m0.m11() * m1.tx() + m0.m12() * m1.ty() + m0.tx(); - float ty = m0.m21() * m1.tx() + m0.m22() * m1.ty() + m0.ty(); - - return Matrix2D(m11, m12, m21, m22, tx, ty); -} - -void Matrix2D::setType() -{ - bool I = fabs(m_[0] - 1) < 1e-6f && - fabs(m_[1] - 0) < 1e-6f && - fabs(m_[4] - 0) < 1e-6f && - fabs(m_[5] - 1) < 1e-6f; - - bool tI = fabs(m_[12] - 0) < 1e-6f && - fabs(m_[13] - 0) < 1e-6f; - - - if (I == true && tI == true) - type_ = eIdentity; - else if (I == true) - type_ = eTranslationOnly; - else - type_ = eArbitrary; -} - -bool operator==(const Matrix2D& m0, const Matrix2D& m1) -{ - for (int i = 0; i < 16; ++i) - if (!(m0.m_[i] == m1.m_[i])) - return false; - - return true; -} - -bool operator!=(const Matrix2D& m0, const Matrix2D& m1) -{ - for (int i = 0; i < 16; ++i) - if (m0.m_[i] != m1.m_[i]) - return true; - - return false; -} +#include "matrix.h" + +void Matrix2D::transformPoint(float x, float y, float* newx, float* newy) const +{ + float nx = m11() * x + m12() * y + tx(); + float ny = m21() * x + m22() * y + ty(); + + if (newx) + *newx = nx; + + if (newy) + *newy = ny; +} + +void Matrix2D::inverseTransformPoint(float x, float y, float* newx, float* newy) const +{ + float invdet = 1 / (m11() * m22() - m21() * m12()); + + float nx = invdet * m22() * (x - tx()) + invdet * -m12() * (y - ty()); + float ny = invdet * -m21() * (x - tx()) + invdet * m11() * (y - ty()); + + if (newx) + *newx = nx; + + if (newy) + *newy = ny; +} + +Matrix2D Matrix2D::inverse() const +{ + Matrix2D T(1, 0, 0, 1, -tx(), -ty()); + + float invdet = 1 / (m11() * m22() - m21() * m12()); + Matrix2D L(m22() * invdet, -m12() * invdet, -m21() * invdet, m11() * invdet); + + return L * T; +} + +Matrix2D operator*(const Matrix2D& m0, const Matrix2D& m1) +{ + float m11 = m0.m11() * m1.m11() + m0.m12() * m1.m21(); + float m12 = m0.m11() * m1.m12() + m0.m12() * m1.m22(); + float m21 = m0.m21() * m1.m11() + m0.m22() * m1.m21(); + float m22 = m0.m21() * m1.m12() + m0.m22() * m1.m22(); + float tx = m0.m11() * m1.tx() + m0.m12() * m1.ty() + m0.tx(); + float ty = m0.m21() * m1.tx() + m0.m22() * m1.ty() + m0.ty(); + + return Matrix2D(m11, m12, m21, m22, tx, ty); +} + +void Matrix2D::setType() +{ + bool I = fabs(m_[0] - 1) < 1e-6f && + fabs(m_[1] - 0) < 1e-6f && + fabs(m_[4] - 0) < 1e-6f && + fabs(m_[5] - 1) < 1e-6f; + + bool tI = fabs(m_[12] - 0) < 1e-6f && + fabs(m_[13] - 0) < 1e-6f; + + + if (I == true && tI == true) + type_ = eIdentity; + else if (I == true) + type_ = eTranslationOnly; + else + type_ = eArbitrary; +} + +bool operator==(const Matrix2D& m0, const Matrix2D& m1) +{ + for (int i = 0; i < 16; ++i) + if (!(m0.m_[i] == m1.m_[i])) + return false; + + return true; +} + +bool operator!=(const Matrix2D& m0, const Matrix2D& m1) +{ + for (int i = 0; i < 16; ++i) + if (m0.m_[i] != m1.m_[i]) + return true; + + return false; +} diff --git a/2dsg/matrix.h b/2dsg/matrix.h index 7925b7fa2..85b7f56bb 100644 --- a/2dsg/matrix.h +++ b/2dsg/matrix.h @@ -1,140 +1,140 @@ -#ifndef MATRIX_H -#define MATRIX_H - -#include - -class Matrix2D -{ -public: - enum Type - { - eIdentity, - eTranslationOnly, - eArbitrary, - }; - - Matrix2D(float m11 = 1, float m12 = 0, float m21 = 0, float m22 = 1, float tx = 0, float ty = 0) - { - for (int i = 0; i < 16; ++i) - m_[i] = i % 5 ? 0.f : 1.f; - - set(m11, m12, m21, m22, tx, ty); - setType(); - } - - void set(float m11 = 1, float m12 = 0, float m21 = 0, float m22 = 1, float tx = 0, float ty = 0) - { - m_[0] = m11; - m_[1] = m21; - m_[4] = m12; - m_[5] = m22; - m_[12] = tx; - m_[13] = ty; - setType(); - } - - void transformPoint(float x, float y, float* newx, float* newy) const; - void inverseTransformPoint(float x, float y, float* newx, float* newy) const; - - void setTx(float tx) - { - m_[12] = tx; - setType(); - } - - void setTy(float ty) - { - m_[13] = ty; - setType(); - } - - float tx() const - { - return m_[12]; - } - - float ty() const - { - return m_[13]; - } - - float m11() const - { - return m_[0]; - } - - float m21() const - { - return m_[1]; - } - - float m12() const - { - return m_[4]; - } - - float m22() const - { - return m_[5]; - } - - void setM11(float m11) - { - m_[0] = m11; - setType(); - } - - void setM21(float m21) - { - m_[1] = m21; - setType(); - } - - void setM12(float m12) - { - m_[4] = m12; - setType(); - } - - void setM22(float m22) - { - m_[5] = m22; - setType(); - } - - const float* data() const - { - return m_; - } - - Type type() const - { - return type_; - } - - friend Matrix2D operator*(const Matrix2D& m0, const Matrix2D& m1); - friend bool operator==(const Matrix2D& m0, const Matrix2D& m1); - friend bool operator!=(const Matrix2D& m0, const Matrix2D& m1); - - Matrix2D inverse() const; - -private: - float m_[16]; - // old - // a, b, 0, 0, - // c, d, 0, 0, - // 0, 0, 1, 0, - // tx, ty, 0, 1 - - // new - // m11, m21, 0, 0, - // m12, m22, 0, 0, - // 0, 0, 1, 0, - // tx, ty, 0, 1 - - - void setType(); - Type type_; -}; - -#endif +#ifndef MATRIX_H +#define MATRIX_H + +#include + +class Matrix2D +{ +public: + enum Type + { + eIdentity, + eTranslationOnly, + eArbitrary, + }; + + Matrix2D(float m11 = 1, float m12 = 0, float m21 = 0, float m22 = 1, float tx = 0, float ty = 0) + { + for (int i = 0; i < 16; ++i) + m_[i] = i % 5 ? 0.f : 1.f; + + set(m11, m12, m21, m22, tx, ty); + setType(); + } + + void set(float m11 = 1, float m12 = 0, float m21 = 0, float m22 = 1, float tx = 0, float ty = 0) + { + m_[0] = m11; + m_[1] = m21; + m_[4] = m12; + m_[5] = m22; + m_[12] = tx; + m_[13] = ty; + setType(); + } + + void transformPoint(float x, float y, float* newx, float* newy) const; + void inverseTransformPoint(float x, float y, float* newx, float* newy) const; + + void setTx(float tx) + { + m_[12] = tx; + setType(); + } + + void setTy(float ty) + { + m_[13] = ty; + setType(); + } + + float tx() const + { + return m_[12]; + } + + float ty() const + { + return m_[13]; + } + + float m11() const + { + return m_[0]; + } + + float m21() const + { + return m_[1]; + } + + float m12() const + { + return m_[4]; + } + + float m22() const + { + return m_[5]; + } + + void setM11(float m11) + { + m_[0] = m11; + setType(); + } + + void setM21(float m21) + { + m_[1] = m21; + setType(); + } + + void setM12(float m12) + { + m_[4] = m12; + setType(); + } + + void setM22(float m22) + { + m_[5] = m22; + setType(); + } + + const float* data() const + { + return m_; + } + + Type type() const + { + return type_; + } + + friend Matrix2D operator*(const Matrix2D& m0, const Matrix2D& m1); + friend bool operator==(const Matrix2D& m0, const Matrix2D& m1); + friend bool operator!=(const Matrix2D& m0, const Matrix2D& m1); + + Matrix2D inverse() const; + +private: + float m_[16]; + // old + // a, b, 0, 0, + // c, d, 0, 0, + // 0, 0, 1, 0, + // tx, ty, 0, 1 + + // new + // m11, m21, 0, 0, + // m12, m22, 0, 0, + // 0, 0, 1, 0, + // tx, ty, 0, 1 + + + void setType(); + Type type_; +}; + +#endif diff --git a/2dsg/movieclip2.cpp b/2dsg/movieclip2.cpp index b4de832e8..66960e79a 100644 --- a/2dsg/movieclip2.cpp +++ b/2dsg/movieclip2.cpp @@ -1,1309 +1,1322 @@ -#include "movieclip2.h" -#include -#include "completeevent.h" -#include "platformutil.h" - -/* -Disclaimer for Robert Penner's Easing Equations license: - -TERMS OF USE - EASING EQUATIONS - -Open source under the BSD License. - -Copyright (c) 2001 Robert Penner -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of the author nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif -#ifndef M_PI_2 -#define M_PI_2 (M_PI / 2) -#endif - -//QT_USE_NAMESPACE -typedef double qreal; - -inline qreal qCos(qreal a) -{ - return ::cos(a); -} -inline qreal qSin(qreal a) -{ - return ::sin(a); -} -inline qreal qPow(qreal a, qreal b) -{ - return ::pow(a, b); -} -inline qreal qFabs(qreal a) -{ - return ::fabs(a); -} -inline qreal qAsin(qreal a) -{ - return ::asin(a); -} -inline qreal qMin(qreal a, qreal b) -{ - return std::min(a, b); -} -inline qreal qMax(qreal a, qreal b) -{ - return std::max(a, b); -} - - -/** - * Easing equation function for a simple linear tweening, with no easing. - * - * @param t Current time (in frames or seconds). - * @return The correct value. - */ -static qreal easeNone(qreal progress) -{ - return progress; -} - -/** - * Easing equation function for a quadratic (t^2) easing in: accelerating from zero velocity. - * - * @param t Current time (in frames or seconds). - * @return The correct value. - */ -static qreal easeInQuad(qreal t) -{ - return t*t; -} - -/** -* Easing equation function for a quadratic (t^2) easing out: decelerating to zero velocity. -* -* @param t Current time (in frames or seconds). -* @return The correct value. -*/ -static qreal easeOutQuad(qreal t) -{ - return -t*(t-2); -} - -/** - * Easing equation function for a quadratic (t^2) easing in/out: acceleration until halfway, then deceleration. - * - * @param t Current time (in frames or seconds). - * @return The correct value. - */ -static qreal easeInOutQuad(qreal t) -{ - t*=2.0; - if (t < 1) { - return t*t/qreal(2); - } else { - --t; - return -0.5 * (t*(t-2) - 1); - } -} - -/** - * Easing equation function for a quadratic (t^2) easing out/in: deceleration until halfway, then acceleration. - * - * @param t Current time (in frames or seconds). - * @return The correct value. - */ -static qreal easeOutInQuad(qreal t) -{ - if (t < 0.5) return easeOutQuad (t*2)/2; - return easeInQuad((2*t)-1)/2 + 0.5; -} - -/** - * Easing equation function for a cubic (t^3) easing in: accelerating from zero velocity. - * - * @param t Current time (in frames or seconds). - * @return The correct value. - */ -static qreal easeInCubic(qreal t) -{ - return t*t*t; -} - -/** - * Easing equation function for a cubic (t^3) easing out: decelerating from zero velocity. - * - * @param t Current time (in frames or seconds). - * @return The correct value. - */ -static qreal easeOutCubic(qreal t) -{ - t-=1.0; - return t*t*t + 1; -} - -/** - * Easing equation function for a cubic (t^3) easing in/out: acceleration until halfway, then deceleration. - * - * @param t Current time (in frames or seconds). - * @return The correct value. - */ -static qreal easeInOutCubic(qreal t) -{ - t*=2.0; - if(t < 1) { - return 0.5*t*t*t; - } else { - t -= qreal(2.0); - return 0.5*(t*t*t + 2); - } -} - -/** - * Easing equation function for a cubic (t^3) easing out/in: deceleration until halfway, then acceleration. - * - * @param t Current time (in frames or seconds). - * @return The correct value. - */ -static qreal easeOutInCubic(qreal t) -{ - if (t < 0.5) return easeOutCubic (2*t)/2; - return easeInCubic(2*t - 1)/2 + 0.5; -} - -/** - * Easing equation function for a quartic (t^4) easing in: accelerating from zero velocity. - * - * @param t Current time (in frames or seconds). - * @return The correct value. - */ -static qreal easeInQuart(qreal t) -{ - return t*t*t*t; -} - -/** - * Easing equation function for a quartic (t^4) easing out: decelerating from zero velocity. - * - * @param t Current time (in frames or seconds). - * @return The correct value. - */ -static qreal easeOutQuart(qreal t) -{ - t-= qreal(1.0); - return - (t*t*t*t- 1); -} - -/** - * Easing equation function for a quartic (t^4) easing in/out: acceleration until halfway, then deceleration. - * - * @param t Current time (in frames or seconds). - * @return The correct value. - */ -static qreal easeInOutQuart(qreal t) -{ - t*=2; - if (t < 1) return 0.5*t*t*t*t; - else { - t -= 2.0f; - return -0.5 * (t*t*t*t- 2); - } -} - -/** - * Easing equation function for a quartic (t^4) easing out/in: deceleration until halfway, then acceleration. - * - * @param t Current time (in frames or seconds). - * @return The correct value. - */ -static qreal easeOutInQuart(qreal t) -{ - if (t < 0.5) return easeOutQuart (2*t)/2; - return easeInQuart(2*t-1)/2 + 0.5; -} - -/** - * Easing equation function for a quintic (t^5) easing in: accelerating from zero velocity. - * - * @param t Current time (in frames or seconds). - * @return The correct value. - */ -static qreal easeInQuint(qreal t) -{ - return t*t*t*t*t; -} - -/** - * Easing equation function for a quintic (t^5) easing out: decelerating from zero velocity. - * - * @param t Current time (in frames or seconds). - * @return The correct value. - */ -static qreal easeOutQuint(qreal t) -{ - t-=1.0; - return t*t*t*t*t + 1; -} - -/** - * Easing equation function for a quintic (t^5) easing in/out: acceleration until halfway, then deceleration. - * - * @param t Current time (in frames or seconds). - * @return The correct value. - */ -static qreal easeInOutQuint(qreal t) -{ - t*=2.0; - if (t < 1) return 0.5*t*t*t*t*t; - else { - t -= 2.0; - return 0.5*(t*t*t*t*t + 2); - } -} - -/** - * Easing equation function for a quintic (t^5) easing out/in: deceleration until halfway, then acceleration. - * - * @param t Current time (in frames or seconds). - * @return The correct value. - */ -static qreal easeOutInQuint(qreal t) -{ - if (t < 0.5) return easeOutQuint (2*t)/2; - return easeInQuint(2*t - 1)/2 + 0.5; -} - -/** - * Easing equation function for a sinusoidal (sin(t)) easing in: accelerating from zero velocity. - * - * @param t Current time (in frames or seconds). - * @return The correct value. - */ -static qreal easeInSine(qreal t) -{ - return (t == 1.0) ? 1.0 : -::qCos(t * M_PI_2) + 1.0; -} - -/** - * Easing equation function for a sinusoidal (sin(t)) easing out: decelerating from zero velocity. - * - * @param t Current time (in frames or seconds). - * @return The correct value. - */ -static qreal easeOutSine(qreal t) -{ - return ::qSin(t* M_PI_2); -} - -/** - * Easing equation function for a sinusoidal (sin(t)) easing in/out: acceleration until halfway, then deceleration. - * - * @param t Current time (in frames or seconds). - * @return The correct value. - */ -static qreal easeInOutSine(qreal t) -{ - return -0.5 * (::qCos(M_PI*t) - 1); -} - -/** - * Easing equation function for a sinusoidal (sin(t)) easing out/in: deceleration until halfway, then acceleration. - * - * @param t Current time (in frames or seconds). - * @return The correct value. - */ -static qreal easeOutInSine(qreal t) -{ - if (t < 0.5) return easeOutSine (2*t)/2; - return easeInSine(2*t - 1)/2 + 0.5; -} - -/** - * Easing equation function for an exponential (2^t) easing in: accelerating from zero velocity. - * - * @param t Current time (in frames or seconds). - * @return The correct value. - */ -static qreal easeInExpo(qreal t) -{ - return (t==0 || t == 1.0) ? t : ::qPow(2.0, 10 * (t - 1)) - qreal(0.001); -} - -/** - * Easing equation function for an exponential (2^t) easing out: decelerating from zero velocity. - * - * @param t Current time (in frames or seconds). - * @return The correct value. - */ -static qreal easeOutExpo(qreal t) -{ - return (t==1.0) ? 1.0 : 1.001 * (-::qPow(2.0f, -10 * t) + 1); -} - -/** - * Easing equation function for an exponential (2^t) easing in/out: acceleration until halfway, then deceleration. - * - * @param t Current time (in frames or seconds). - * @return The correct value. - */ -static qreal easeInOutExpo(qreal t) -{ - if (t==0.0) return qreal(0.0); - if (t==1.0) return qreal(1.0); - t*=2.0; - if (t < 1) return 0.5 * ::qPow(qreal(2.0), 10 * (t - 1)) - 0.0005; - return 0.5 * 1.0005 * (-::qPow(qreal(2.0), -10 * (t - 1)) + 2); -} - -/** - * Easing equation function for an exponential (2^t) easing out/in: deceleration until halfway, then acceleration. - * - * @param t Current time (in frames or seconds). - * @return The correct value. - */ -static qreal easeOutInExpo(qreal t) -{ - if (t < 0.5) return easeOutExpo (2*t)/2; - return easeInExpo(2*t - 1)/2 + 0.5; -} - -/** - * Easing equation function for a circular (sqrt(1-t^2)) easing in: accelerating from zero velocity. - * - * @param t Current time (in frames or seconds). - * @return The correct value. - */ -static qreal easeInCirc(qreal t) -{ - return -(::sqrt(1 - t*t) - 1); -} - -/** - * Easing equation function for a circular (sqrt(1-t^2)) easing out: decelerating from zero velocity. - * - * @param t Current time (in frames or seconds). - * @return The correct value. - */ -static qreal easeOutCirc(qreal t) -{ - t-= qreal(1.0); - return ::sqrt(1 - t* t); -} - -/** - * Easing equation function for a circular (sqrt(1-t^2)) easing in/out: acceleration until halfway, then deceleration. - * - * @param t Current time (in frames or seconds). - * @return The correct value. - */ -static qreal easeInOutCirc(qreal t) -{ - t*=qreal(2.0); - if (t < 1) { - return -0.5 * (::sqrt(1 - t*t) - 1); - } else { - t -= qreal(2.0); - return 0.5 * (::sqrt(1 - t*t) + 1); - } -} - -/** - * Easing equation function for a circular (sqrt(1-t^2)) easing out/in: deceleration until halfway, then acceleration. - * - * @param t Current time (in frames or seconds). - * @return The correct value. - */ -static qreal easeOutInCirc(qreal t) -{ - if (t < 0.5) return easeOutCirc (2*t)/2; - return easeInCirc(2*t - 1)/2 + 0.5; -} - -static qreal easeInElastic_helper(qreal t, qreal b, qreal c, qreal d, qreal a, qreal p) -{ - if (t==0) return b; - qreal t_adj = (qreal)t / (qreal)d; - if (t_adj==1) return b+c; - - qreal s; - if(a < ::qFabs(c)) { - a = c; - s = p / 4.0f; - } else { - s = p / (2 * M_PI) * ::qAsin(c / a); - } - - t_adj -= 1.0f; - return -(a*::qPow(2.0f,10*t_adj) * ::qSin( (t_adj*d-s)*(2*M_PI)/p )) + b; -} - -/** - * Easing equation function for an elastic (exponentially decaying sine wave) easing in: accelerating from zero velocity. - * - * @param t Current time (in frames or seconds). - * @param a Amplitude. - * @param p Period. - * @return The correct value. - */ -static qreal easeInElastic(qreal t, qreal a, qreal p) -{ - return easeInElastic_helper(t, 0, 1, 1, a, p); -} - -static qreal easeOutElastic_helper(qreal t, qreal /*b*/, qreal c, qreal /*d*/, qreal a, qreal p) -{ - if (t==0) return 0; - if (t==1) return c; - - qreal s; - if(a < c) { - a = c; - s = p / 4.0f; - } else { - s = p / (2 * M_PI) * ::qAsin(c / a); - } - - return (a*::qPow(2.0f,-10*t) * ::qSin( (t-s)*(2*M_PI)/p ) + c); -} - -/** - * Easing equation function for an elastic (exponentially decaying sine wave) easing out: decelerating from zero velocity. - * - * @param t Current time (in frames or seconds). - * @param a Amplitude. - * @param p Period. - * @return The correct value. - */ -static qreal easeOutElastic(qreal t, qreal a, qreal p) -{ - return easeOutElastic_helper(t, 0, 1, 1, a, p); -} - -/** - * Easing equation function for an elastic (exponentially decaying sine wave) easing in/out: acceleration until halfway, then deceleration. - * - * @param t Current time (in frames or seconds). - * @param a Amplitude. - * @param p Period. - * @return The correct value. - */ -static qreal easeInOutElastic(qreal t, qreal a, qreal p) -{ - if (t==0) return 0.0; - t*=2.0; - if (t==2) return 1.0; - - qreal s; - if(a < 1.0) { - a = 1.0; - s = p / 4.0f; - } else { - s = p / (2 * M_PI) * ::qAsin(1.0 / a); - } - - if (t < 1) return -.5*(a*::qPow(2.0f,10*(t-1)) * ::qSin( (t-1-s)*(2*M_PI)/p )); - return a*::qPow(2.0f,-10*(t-1)) * ::qSin( (t-1-s)*(2*M_PI)/p )*.5 + 1.0; -} - -/** - * Easing equation function for an elastic (exponentially decaying sine wave) easing out/in: deceleration until halfway, then acceleration. - * - * @param t Current time (in frames or seconds). - * @param a Amplitude. - * @param p Period. - * @return The correct value. - */ -static qreal easeOutInElastic(qreal t, qreal a, qreal p) -{ - if (t < 0.5) return easeOutElastic_helper(t*2, 0, 0.5, 1.0, a, p); - return easeInElastic_helper(2*t - 1.0, 0.5, 0.5, 1.0, a, p); -} - -/** - * Easing equation function for a back (overshooting cubic easing: (s+1)*t^3 - s*t^2) easing in: accelerating from zero velocity. - * - * @param t Current time (in frames or seconds). - * @param s Overshoot ammount: higher s means greater overshoot (0 produces cubic easing with no overshoot, and the default value of 1.70158 produces an overshoot of 10 percent). - * @return The correct value. - */ -static qreal easeInBack(qreal t, qreal s) -{ - return t*t*((s+1)*t - s); -} - -/** - * Easing equation function for a back (overshooting cubic easing: (s+1)*t^3 - s*t^2) easing out: decelerating from zero velocity. - * - * @param t Current time (in frames or seconds). - * @param s Overshoot ammount: higher s means greater overshoot (0 produces cubic easing with no overshoot, and the default value of 1.70158 produces an overshoot of 10 percent). - * @return The correct value. - */ -static qreal easeOutBack(qreal t, qreal s) -{ - t-= qreal(1.0); - return t*t*((s+1)*t+ s) + 1; -} - -/** - * Easing equation function for a back (overshooting cubic easing: (s+1)*t^3 - s*t^2) easing in/out: acceleration until halfway, then deceleration. - * - * @param t Current time (in frames or seconds). - * @param s Overshoot ammount: higher s means greater overshoot (0 produces cubic easing with no overshoot, and the default value of 1.70158 produces an overshoot of 10 percent). - * @return The correct value. - */ -static qreal easeInOutBack(qreal t, qreal s) -{ - t *= 2.0; - if (t < 1) { - s *= 1.525f; - return 0.5*(t*t*((s+1)*t - s)); - } else { - t -= 2; - s *= 1.525f; - return 0.5*(t*t*((s+1)*t+ s) + 2); - } -} - -/** - * Easing equation function for a back (overshooting cubic easing: (s+1)*t^3 - s*t^2) easing out/in: deceleration until halfway, then acceleration. - * - * @param t Current time (in frames or seconds). - * @param s Overshoot ammount: higher s means greater overshoot (0 produces cubic easing with no overshoot, and the default value of 1.70158 produces an overshoot of 10 percent). - * @return The correct value. - */ -static qreal easeOutInBack(qreal t, qreal s) -{ - if (t < 0.5) return easeOutBack (2*t, s)/2; - return easeInBack(2*t - 1, s)/2 + 0.5; -} - -static qreal easeOutBounce_helper(qreal t, qreal c, qreal a) -{ - if (t == 1.0) return c; - if (t < (4/11.0)) { - return c*(7.5625*t*t); - } else if (t < (8/11.0)) { - t -= (6/11.0); - return -a * (1. - (7.5625*t*t + .75)) + c; - } else if (t < (10/11.0)) { - t -= (9/11.0); - return -a * (1. - (7.5625*t*t + .9375)) + c; - } else { - t -= (21/22.0); - return -a * (1. - (7.5625*t*t + .984375)) + c; - } -} - -/** - * Easing equation function for a bounce (exponentially decaying parabolic bounce) easing out: decelerating from zero velocity. - * - * @param t Current time (in frames or seconds). - * @param a Amplitude. - * @return The correct value. - */ -static qreal easeOutBounce(qreal t, qreal a) -{ - return easeOutBounce_helper(t, 1, a); -} - -/** - * Easing equation function for a bounce (exponentially decaying parabolic bounce) easing in: accelerating from zero velocity. - * - * @param t Current time (in frames or seconds). - * @param a Amplitude. - * @return The correct value. - */ -static qreal easeInBounce(qreal t, qreal a) -{ - return 1.0 - easeOutBounce_helper(1.0-t, 1.0, a); -} - - -/** - * Easing equation function for a bounce (exponentially decaying parabolic bounce) easing in/out: acceleration until halfway, then deceleration. - * - * @param t Current time (in frames or seconds). - * @param a Amplitude. - * @return The correct value. - */ -static qreal easeInOutBounce(qreal t, qreal a) -{ - if (t < 0.5) return easeInBounce (2*t, a)/2; - else return (t == 1.0) ? 1.0 : easeOutBounce (2*t - 1, a)/2 + 0.5; -} - -/** - * Easing equation function for a bounce (exponentially decaying parabolic bounce) easing out/in: deceleration until halfway, then acceleration. - * - * @param t Current time (in frames or seconds). - * @param a Amplitude. - * @return The correct value. - */ -static qreal easeOutInBounce(qreal t, qreal a) -{ - if (t < 0.5) return easeOutBounce_helper(t*2, 0.5, a); - return 1.0 - easeOutBounce_helper (2.0-2*t, 0.5, a); -} - -static inline qreal qt_sinProgress(qreal value) -{ - return qSin((value * M_PI) - M_PI_2) / 2 + qreal(0.5); -} - -static inline qreal qt_smoothBeginEndMixFactor(qreal value) -{ - return qMin(qMax(1 - value * 2 + qreal(0.3), qreal(0.0)), qreal(1.0)); -} - -// SmoothBegin blends Smooth and Linear Interpolation. -// Progress 0 - 0.3 : Smooth only -// Progress 0.3 - ~ 0.5 : Mix of Smooth and Linear -// Progress ~ 0.5 - 1 : Linear only - -/** - * Easing function that starts growing slowly, then increases in speed. At the end of the curve the speed will be constant. - */ -static qreal easeInCurve(qreal t) -{ - const qreal sinProgress = qt_sinProgress(t); - const qreal mix = qt_smoothBeginEndMixFactor(t); - return sinProgress * mix + t * (1 - mix); -} - -/** - * Easing function that starts growing steadily, then ends slowly. The speed will be constant at the beginning of the curve. - */ -static qreal easeOutCurve(qreal t) -{ - const qreal sinProgress = qt_sinProgress(t); - const qreal mix = qt_smoothBeginEndMixFactor(1 - t); - return sinProgress * mix + t * (1 - mix); -} - -/** - * Easing function where the value grows sinusoidally. Note that the calculated end value will be 0 rather than 1. - */ -static qreal easeSineCurve(qreal t) -{ - return (qSin(((t * M_PI * 2)) - M_PI_2) + 1) / 2; -} - -/** - * Easing function where the value grows cosinusoidally. Note that the calculated start value will be 0.5 and the end value will be 0.5 - * contrary to the usual 0 to 1 easing curve. - */ -static qreal easeCosineCurve(qreal t) -{ - return (qCos(((t * M_PI * 2)) - M_PI_2) + 1) / 2; -} - -////////////////////////////////////////////////////////////////////////// - -static qreal easeInElastic(qreal t) -{ - const qreal a = 0; - const qreal p = 0.3; - return easeInElastic(t, a, p); -} -static qreal easeOutElastic(qreal t) -{ - const qreal a = 0; - const qreal p = 0.3; - return easeOutElastic(t, a, p); -} -static qreal easeInOutElastic(qreal t) -{ - const qreal a = 0; - const qreal p = 0.3; - return easeInOutElastic(t, a, p); -} -static qreal easeOutInElastic(qreal t) -{ - const qreal a = 0; - const qreal p = 0.3; - return easeOutInElastic(t, a, p); -} - -static qreal easeInBack(qreal t) -{ - const qreal s = 1.70158; - return easeInBack(t, s); -} -static qreal easeOutBack(qreal t) -{ - const qreal s = 1.70158; - return easeOutBack(t, s); -} -static qreal easeInOutBack(qreal t) -{ - const qreal s = 1.70158; - return easeInOutBack(t, s); -} -static qreal easeOutInBack(qreal t) -{ - const qreal s = 1.70158; - return easeOutInBack(t, s); -} - - -static qreal easeOutBounce(qreal t) -{ - const qreal a = 1; - return easeOutBounce(t, a); -} -static qreal easeInBounce(qreal t) -{ - const qreal a = 1; - return easeInBounce(t, a); -} -static qreal easeInOutBounce(qreal t) -{ - static qreal a = 1; - return easeInOutBounce(t, a); -} -static qreal easeOutInBounce(qreal t) -{ - const qreal a = 1; - return easeOutInBounce(t, a); -} - -static double (*getTweenFunction(TweenType tweenType))(double) -{ - double (*tweenFunction)(double) = easeNone; - - switch (tweenType) - { - case eEaseLinear: - tweenFunction = easeNone; - break; - case eEaseInQuad: - tweenFunction = easeInQuad; - break; - case eEaseOutQuad: - tweenFunction = easeOutQuad; - break; - case eEaseInOutQuad: - tweenFunction = easeInOutQuad; - break; - case eEaseOutInQuad: - tweenFunction = easeOutInQuad; - break; - case eEaseInCubic: - tweenFunction = easeInCubic; - break; - case eEaseOutCubic: - tweenFunction = easeOutCubic; - break; - case eEaseInOutCubic: - tweenFunction = easeInOutCubic; - break; - case eEaseOutInCubic: - tweenFunction = easeOutInCubic; - break; - case eEaseInQuart: - tweenFunction = easeInQuart; - break; - case eEaseOutQuart: - tweenFunction = easeOutQuart; - break; - case eEaseInOutQuart: - tweenFunction = easeInOutQuart; - break; - case eEaseOutInQuart: - tweenFunction = easeOutInQuart; - break; - case eEaseInQuint: - tweenFunction = easeInQuint; - break; - case eEaseOutQuint: - tweenFunction = easeOutQuint; - break; - case eEaseInOutQuint: - tweenFunction = easeInOutQuint; - break; - case eEaseOutInQuint: - tweenFunction = easeOutInQuint; - break; - case eEaseInSine: - tweenFunction = easeInSine; - break; - case eEaseOutSine: - tweenFunction = easeOutSine; - break; - case eEaseInOutSine: - tweenFunction = easeInOutSine; - break; - case eEaseOutInSine: - tweenFunction = easeOutInSine; - break; - case eEaseInExpo: - tweenFunction = easeInExpo; - break; - case eEaseOutExpo: - tweenFunction = easeOutExpo; - break; - case eEaseInOutExpo: - tweenFunction = easeInOutExpo; - break; - case eEaseOutInExpo: - tweenFunction = easeOutInExpo; - break; - case eEaseInCirc: - tweenFunction = easeInCirc; - break; - case eEaseOutCirc: - tweenFunction = easeOutCirc; - break; - case eEaseInOutCirc: - tweenFunction = easeInOutCirc; - break; - case eEaseOutInCirc: - tweenFunction = easeOutInCirc; - break; - case eEaseInElastic: - tweenFunction = easeInElastic; - break; - case eEaseOutElastic: - tweenFunction = easeOutElastic; - break; - case eEaseInOutElastic: - tweenFunction = easeInOutElastic; - break; - case eEaseOutInElastic: - tweenFunction = easeOutInElastic; - break; - case eEaseInBack: - tweenFunction = easeInBack; - break; - case eEaseOutBack: - tweenFunction = easeOutBack; - break; - case eEaseInOutBack: - tweenFunction = easeInOutBack; - break; - case eEaseOutInBack: - tweenFunction = easeOutInBack; - break; - case eEaseOutBounce: - tweenFunction = easeOutBounce; - break; - case eEaseInBounce: - tweenFunction = easeInBounce; - break; - case eEaseInOutBounce: - tweenFunction = easeInOutBounce; - break; - case eEaseOutInBounce: - tweenFunction = easeOutInBounce; - break; - case eEaseInCurve: - tweenFunction = easeInCurve; - break; - case eEaseOutCurve: - tweenFunction = easeOutCurve; - break; - case eEaseSineCurve: - tweenFunction = easeSineCurve; - break; - case eEaseCosineCurve: - tweenFunction = easeCosineCurve; - break; - } - - return tweenFunction; -} - -Parameter::Parameter(int param, float start, float end, TweenType tweenType) : - param(param), - start(start), - end(end) -{ - tweenFunction = getTweenFunction(tweenType); -} - -Parameter::Parameter(const char* strparam, float start, float end, TweenType tweenType) : - param(StringId::instance().id(strparam)), - start(start), - end(end) -{ - tweenFunction = getTweenFunction(tweenType); -} - -Parameter::Parameter(int param, float start, float end, const char* tweenType) : - param(param), - start(start), - end(end) -{ - tweenFunction = getTweenFunction((TweenType)StringId::instance().id(tweenType)); -} -Parameter::Parameter(const char* strparam, float start, float end, const char* tweenType) : - param(StringId::instance().id(strparam)), - start(start), - end(end) -{ - tweenFunction = getTweenFunction((TweenType)StringId::instance().id(tweenType)); -} - -MovieClip::MovieClip(Type type, Application *application) : Sprite(application) -{ - type_ = type; -} - -MovieClip::~MovieClip() -{ - for (std::size_t i = 0; i < frames_.size(); ++i) - frames_[i].sprite->unref(); -} - -void MovieClip::addFrame(int start, int end, Sprite* sprite, const std::vector& parameters, GStatus* status/* = NULL*/) -{ - switch (type_) - { - case eFrame: - if (start < 1 || end < 1) - { - if (status) - *status = GStatus(2100); // Error #2100: Start and end frames must be greater than or equal to 1. - return; - } - break; - case eTime: - if (start < 0 || end < 0) - { - if (status) - *status = GStatus(2104); // Error #2100: Start and end times must be greater than or equal to 0. - return; - } - break; - } - - if (start > end) - { - if (status) - *status = GStatus(2101); // Error #2101: End frame/time must be greater than or equal to start frame/time. - return; - } - - Frame frame; - - frame.start = start; - frame.end = end; - frame.parameters = parameters; - -#if 0 - frame.sprite = new Sprite; - frame.sprite->addChild(sprite); -#else - frame.sprite = sprite; - frame.sprite->ref(); -#endif - - frames_.push_back(frame); -} - -void MovieClip::finalize() -{ - switch (type_) - { - case eFrame: - maxframe_ = 1; - break; - case eTime: - maxframe_ = 0; - break; - } - - for (std::size_t i = 0; i < frames_.size(); ++i) - { - allFrames_[frames_[i].start].push_back(&frames_[i]); - maxframe_ = std::max(maxframe_, frames_[i].end); - } - - switch (type_) - { - case eFrame: - gotoAndPlay(1); - break; - case eTime: - gotoAndPlay(0); - break; - } -} - -void MovieClip::oneFrame() -{ - if (!playing_) - { - return; - } - - if (passoneframe_ == true) - { - passoneframe_ = false; - return; - } - - std::map::iterator iter2 = actions_.find(frame_); - if (iter2 != actions_.end()) - { - if (iter2->second == -1) - { - stop(); - CompleteEvent event(CompleteEvent::COMPLETE); - dispatchEvent(&event); - } - else - gotoFrame(iter2->second); - - return; - } - - if (frame_ == maxframe_) - { - stop(); - CompleteEvent event(CompleteEvent::COMPLETE); - dispatchEvent(&event); - return; - } - - std::map >::iterator iter; - - iter = activeFrames_.find(frame_); - if (iter != activeFrames_.end()) - { - const std::vector& frames = iter->second; - for (std::size_t i = 0; i < frames.size(); ++i) - removeChild2(frames[i]->sprite); - activeFrames_.erase(iter); - } - - frame_ = frame_ + 1; - - iter = allFrames_.find(frame_); - if (iter != allFrames_.end()) - { - const std::vector& frames = iter->second; - for (std::size_t i = 0; i < frames.size(); ++i) - { - activeFrames_[frames[i]->end].push_back(frames[i]); - addChild2(frames[i]->sprite); - } - } - - interpolateParameters(); -} - -void MovieClip::nextFrame(EnterFrameEvent *) -{ - switch (type_) - { - case eFrame: - oneFrame(); - break; - case eTime: - { - double curr = iclock(); - int delta = (curr - prevClock_) * 1000; - prevClock_ = curr; - - delta = std::min(std::max(delta, 0), 1000); - - for (int i = 0; i < delta; ++i) - oneFrame(); - break; - } - } -} - -void MovieClip::gotoFrame(int frame) -{ - std::map >::iterator iter; - - for (iter = activeFrames_.begin(); iter != activeFrames_.end(); ++iter) - { - const std::vector& frames = iter->second; - for (std::size_t i = 0; i < frames.size(); ++i) - removeChild2(frames[i]->sprite); - } - - activeFrames_.clear(); - - frame_ = frame; - - for (std::size_t i = 0; i < frames_.size(); ++i) - { - int start = frames_[i].start; - int end = frames_[i].end; - - if (start <= frame_ && frame_ <= end) - { - activeFrames_[end].push_back(&frames_[i]); - addChild2(frames_[i].sprite); - } - } - - interpolateParameters(); -} - -void MovieClip::interpolateParameters() -{ - std::map >::iterator iter; - - for (iter = activeFrames_.begin(); iter != activeFrames_.end(); ++iter) - { - const std::vector& frames = iter->second; - for (std::size_t i = 0; i < frames.size(); ++i) - { - Sprite* sprite = frames[i]->sprite; - - int s = frames[i]->start; - int e = frames[i]->end; - - float t = s == e ? 0 : ((float)(frame_ - s) / (float)(e - s)); - - for (std::size_t j = 0; j < frames[i]->parameters.size(); ++j) - { - const Parameter& parameter = frames[i]->parameters[j]; - - float s = parameter.start; - float e = parameter.end; - float tw = parameter.tweenFunction(t); - float value = s * (1 - tw) + e * tw; - - sprite->set(parameter.param, value); - } - } - } -} - -void MovieClip::gotoAndPlay(int frame) -{ - gotoFrame(frame); - play(); -} - -void MovieClip::gotoAndStop(int frame) -{ - gotoFrame(frame); - stop(); -} - -void MovieClip::play() -{ - passoneframe_ = true; - playing_ = true; - prevClock_ = iclock(); - addEventListener(EnterFrameEvent::ENTER_FRAME, &MovieClip::nextFrame); -} - -void MovieClip::stop() -{ - passoneframe_ = false; - playing_ = false; - removeEventListener(EnterFrameEvent::ENTER_FRAME, &MovieClip::nextFrame); -} - -void MovieClip::setStopAction(int frame) -{ - actions_[frame] = -1; -} - -void MovieClip::setGotoAction(int frame, int destframe) -{ - actions_[frame] = destframe; -} - -void MovieClip::clearAction(int frame) -{ - actions_.erase(frame); -} - -void MovieClip::addChild2(Sprite* sprite) -{ - std::map::iterator iter = counts_.find(sprite); - - if (iter == counts_.end() || iter->second == 0) - { -#if 0 - addChild(sprite); -#else - currentSprites_.push_back(sprite); -#endif - counts_[sprite] = 1; - } - else - { - counts_[sprite]++; - } -} - -void MovieClip::removeChild2(Sprite* sprite) -{ - if (--counts_[sprite] == 0) - { -#if 0 - removeChild(sprite); -#else - currentSprites_.erase(std::find(currentSprites_.begin(), currentSprites_.end(), sprite)); -#endif - } -} - -void MovieClip::doDraw(const CurrentTransform& transform, float sx, float sy, float ex, float ey) -{ - for (size_t i = 0; i < currentSprites_.size(); ++i) - currentSprites_[i]->draw(transform, sx, sy, ex, ey); -} - -void MovieClip::extraBounds(float* pminx, float* pminy, float* pmaxx, float* pmaxy) const -{ - float minx = 1e30; - float miny = 1e30; - float maxx = -1e30; - float maxy = -1e30; - - for (size_t i = 0; i < currentSprites_.size(); ++i) - { - Sprite* sprite = currentSprites_[i]; - - // get object bounds - float ominx, ominy, omaxx, omaxy; - sprite->objectBounds(&ominx, &ominy, &omaxx, &omaxy); - - // if empty bounds, continue - if (ominx > omaxx || ominy > omaxy) - continue; - - // transform 4 corners - float x[4], y[4]; - sprite->matrix().transformPoint(ominx, ominy, &x[0], &y[0]); - sprite->matrix().transformPoint(omaxx, ominy, &x[1], &y[1]); - sprite->matrix().transformPoint(omaxx, omaxy, &x[2], &y[2]); - sprite->matrix().transformPoint(ominx, omaxy, &x[3], &y[3]); - - // expand bounds - for (int i = 0; i < 4; ++i) - { - minx = std::min(minx, x[i]); - miny = std::min(miny, y[i]); - maxx = std::max(maxx, x[i]); - maxy = std::max(maxy, y[i]); - } - } - - if (pminx) - *pminx = minx; - if (pminy) - *pminy = miny; - if (pmaxx) - *pmaxx = maxx; - if (pmaxy) - *pmaxy = maxy; -} - +#include "movieclip2.h" +#include +#include "completeevent.h" +#include "platformutil.h" + +/* +Disclaimer for Robert Penner's Easing Equations license: + +TERMS OF USE - EASING EQUATIONS + +Open source under the BSD License. + +Copyright (c) 2001 Robert Penner +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + * Neither the name of the author nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif +#ifndef M_PI_2 +#define M_PI_2 (M_PI / 2) +#endif + +//QT_USE_NAMESPACE +typedef double qreal; + +inline qreal qCos(qreal a) +{ + return ::cos(a); +} +inline qreal qSin(qreal a) +{ + return ::sin(a); +} +inline qreal qPow(qreal a, qreal b) +{ + return ::pow(a, b); +} +inline qreal qFabs(qreal a) +{ + return ::fabs(a); +} +inline qreal qAsin(qreal a) +{ + return ::asin(a); +} +inline qreal qMin(qreal a, qreal b) +{ + return std::min(a, b); +} +inline qreal qMax(qreal a, qreal b) +{ + return std::max(a, b); +} + + +/** + * Easing equation function for a simple linear tweening, with no easing. + * + * @param t Current time (in frames or seconds). + * @return The correct value. + */ +static qreal easeNone(qreal progress) +{ + return progress; +} + +/** + * Easing equation function for a quadratic (t^2) easing in: accelerating from zero velocity. + * + * @param t Current time (in frames or seconds). + * @return The correct value. + */ +static qreal easeInQuad(qreal t) +{ + return t*t; +} + +/** +* Easing equation function for a quadratic (t^2) easing out: decelerating to zero velocity. +* +* @param t Current time (in frames or seconds). +* @return The correct value. +*/ +static qreal easeOutQuad(qreal t) +{ + return -t*(t-2); +} + +/** + * Easing equation function for a quadratic (t^2) easing in/out: acceleration until halfway, then deceleration. + * + * @param t Current time (in frames or seconds). + * @return The correct value. + */ +static qreal easeInOutQuad(qreal t) +{ + t*=2.0; + if (t < 1) { + return t*t/qreal(2); + } else { + --t; + return -0.5 * (t*(t-2) - 1); + } +} + +/** + * Easing equation function for a quadratic (t^2) easing out/in: deceleration until halfway, then acceleration. + * + * @param t Current time (in frames or seconds). + * @return The correct value. + */ +static qreal easeOutInQuad(qreal t) +{ + if (t < 0.5) return easeOutQuad (t*2)/2; + return easeInQuad((2*t)-1)/2 + 0.5; +} + +/** + * Easing equation function for a cubic (t^3) easing in: accelerating from zero velocity. + * + * @param t Current time (in frames or seconds). + * @return The correct value. + */ +static qreal easeInCubic(qreal t) +{ + return t*t*t; +} + +/** + * Easing equation function for a cubic (t^3) easing out: decelerating from zero velocity. + * + * @param t Current time (in frames or seconds). + * @return The correct value. + */ +static qreal easeOutCubic(qreal t) +{ + t-=1.0; + return t*t*t + 1; +} + +/** + * Easing equation function for a cubic (t^3) easing in/out: acceleration until halfway, then deceleration. + * + * @param t Current time (in frames or seconds). + * @return The correct value. + */ +static qreal easeInOutCubic(qreal t) +{ + t*=2.0; + if(t < 1) { + return 0.5*t*t*t; + } else { + t -= qreal(2.0); + return 0.5*(t*t*t + 2); + } +} + +/** + * Easing equation function for a cubic (t^3) easing out/in: deceleration until halfway, then acceleration. + * + * @param t Current time (in frames or seconds). + * @return The correct value. + */ +static qreal easeOutInCubic(qreal t) +{ + if (t < 0.5) return easeOutCubic (2*t)/2; + return easeInCubic(2*t - 1)/2 + 0.5; +} + +/** + * Easing equation function for a quartic (t^4) easing in: accelerating from zero velocity. + * + * @param t Current time (in frames or seconds). + * @return The correct value. + */ +static qreal easeInQuart(qreal t) +{ + return t*t*t*t; +} + +/** + * Easing equation function for a quartic (t^4) easing out: decelerating from zero velocity. + * + * @param t Current time (in frames or seconds). + * @return The correct value. + */ +static qreal easeOutQuart(qreal t) +{ + t-= qreal(1.0); + return - (t*t*t*t- 1); +} + +/** + * Easing equation function for a quartic (t^4) easing in/out: acceleration until halfway, then deceleration. + * + * @param t Current time (in frames or seconds). + * @return The correct value. + */ +static qreal easeInOutQuart(qreal t) +{ + t*=2; + if (t < 1) return 0.5*t*t*t*t; + else { + t -= 2.0f; + return -0.5 * (t*t*t*t- 2); + } +} + +/** + * Easing equation function for a quartic (t^4) easing out/in: deceleration until halfway, then acceleration. + * + * @param t Current time (in frames or seconds). + * @return The correct value. + */ +static qreal easeOutInQuart(qreal t) +{ + if (t < 0.5) return easeOutQuart (2*t)/2; + return easeInQuart(2*t-1)/2 + 0.5; +} + +/** + * Easing equation function for a quintic (t^5) easing in: accelerating from zero velocity. + * + * @param t Current time (in frames or seconds). + * @return The correct value. + */ +static qreal easeInQuint(qreal t) +{ + return t*t*t*t*t; +} + +/** + * Easing equation function for a quintic (t^5) easing out: decelerating from zero velocity. + * + * @param t Current time (in frames or seconds). + * @return The correct value. + */ +static qreal easeOutQuint(qreal t) +{ + t-=1.0; + return t*t*t*t*t + 1; +} + +/** + * Easing equation function for a quintic (t^5) easing in/out: acceleration until halfway, then deceleration. + * + * @param t Current time (in frames or seconds). + * @return The correct value. + */ +static qreal easeInOutQuint(qreal t) +{ + t*=2.0; + if (t < 1) return 0.5*t*t*t*t*t; + else { + t -= 2.0; + return 0.5*(t*t*t*t*t + 2); + } +} + +/** + * Easing equation function for a quintic (t^5) easing out/in: deceleration until halfway, then acceleration. + * + * @param t Current time (in frames or seconds). + * @return The correct value. + */ +static qreal easeOutInQuint(qreal t) +{ + if (t < 0.5) return easeOutQuint (2*t)/2; + return easeInQuint(2*t - 1)/2 + 0.5; +} + +/** + * Easing equation function for a sinusoidal (sin(t)) easing in: accelerating from zero velocity. + * + * @param t Current time (in frames or seconds). + * @return The correct value. + */ +static qreal easeInSine(qreal t) +{ + return (t == 1.0) ? 1.0 : -::qCos(t * M_PI_2) + 1.0; +} + +/** + * Easing equation function for a sinusoidal (sin(t)) easing out: decelerating from zero velocity. + * + * @param t Current time (in frames or seconds). + * @return The correct value. + */ +static qreal easeOutSine(qreal t) +{ + return ::qSin(t* M_PI_2); +} + +/** + * Easing equation function for a sinusoidal (sin(t)) easing in/out: acceleration until halfway, then deceleration. + * + * @param t Current time (in frames or seconds). + * @return The correct value. + */ +static qreal easeInOutSine(qreal t) +{ + return -0.5 * (::qCos(M_PI*t) - 1); +} + +/** + * Easing equation function for a sinusoidal (sin(t)) easing out/in: deceleration until halfway, then acceleration. + * + * @param t Current time (in frames or seconds). + * @return The correct value. + */ +static qreal easeOutInSine(qreal t) +{ + if (t < 0.5) return easeOutSine (2*t)/2; + return easeInSine(2*t - 1)/2 + 0.5; +} + +/** + * Easing equation function for an exponential (2^t) easing in: accelerating from zero velocity. + * + * @param t Current time (in frames or seconds). + * @return The correct value. + */ +static qreal easeInExpo(qreal t) +{ + return (t==0 || t == 1.0) ? t : ::qPow(2.0, 10 * (t - 1)) - qreal(0.001); +} + +/** + * Easing equation function for an exponential (2^t) easing out: decelerating from zero velocity. + * + * @param t Current time (in frames or seconds). + * @return The correct value. + */ +static qreal easeOutExpo(qreal t) +{ + return (t==1.0) ? 1.0 : 1.001 * (-::qPow(2.0f, -10 * t) + 1); +} + +/** + * Easing equation function for an exponential (2^t) easing in/out: acceleration until halfway, then deceleration. + * + * @param t Current time (in frames or seconds). + * @return The correct value. + */ +static qreal easeInOutExpo(qreal t) +{ + if (t==0.0) return qreal(0.0); + if (t==1.0) return qreal(1.0); + t*=2.0; + if (t < 1) return 0.5 * ::qPow(qreal(2.0), 10 * (t - 1)) - 0.0005; + return 0.5 * 1.0005 * (-::qPow(qreal(2.0), -10 * (t - 1)) + 2); +} + +/** + * Easing equation function for an exponential (2^t) easing out/in: deceleration until halfway, then acceleration. + * + * @param t Current time (in frames or seconds). + * @return The correct value. + */ +static qreal easeOutInExpo(qreal t) +{ + if (t < 0.5) return easeOutExpo (2*t)/2; + return easeInExpo(2*t - 1)/2 + 0.5; +} + +/** + * Easing equation function for a circular (sqrt(1-t^2)) easing in: accelerating from zero velocity. + * + * @param t Current time (in frames or seconds). + * @return The correct value. + */ +static qreal easeInCirc(qreal t) +{ + return -(::sqrt(1 - t*t) - 1); +} + +/** + * Easing equation function for a circular (sqrt(1-t^2)) easing out: decelerating from zero velocity. + * + * @param t Current time (in frames or seconds). + * @return The correct value. + */ +static qreal easeOutCirc(qreal t) +{ + t-= qreal(1.0); + return ::sqrt(1 - t* t); +} + +/** + * Easing equation function for a circular (sqrt(1-t^2)) easing in/out: acceleration until halfway, then deceleration. + * + * @param t Current time (in frames or seconds). + * @return The correct value. + */ +static qreal easeInOutCirc(qreal t) +{ + t*=qreal(2.0); + if (t < 1) { + return -0.5 * (::sqrt(1 - t*t) - 1); + } else { + t -= qreal(2.0); + return 0.5 * (::sqrt(1 - t*t) + 1); + } +} + +/** + * Easing equation function for a circular (sqrt(1-t^2)) easing out/in: deceleration until halfway, then acceleration. + * + * @param t Current time (in frames or seconds). + * @return The correct value. + */ +static qreal easeOutInCirc(qreal t) +{ + if (t < 0.5) return easeOutCirc (2*t)/2; + return easeInCirc(2*t - 1)/2 + 0.5; +} + +static qreal easeInElastic_helper(qreal t, qreal b, qreal c, qreal d, qreal a, qreal p) +{ + if (t==0) return b; + qreal t_adj = (qreal)t / (qreal)d; + if (t_adj==1) return b+c; + + qreal s; + if(a < ::qFabs(c)) { + a = c; + s = p / 4.0f; + } else { + s = p / (2 * M_PI) * ::qAsin(c / a); + } + + t_adj -= 1.0f; + return -(a*::qPow(2.0f,10*t_adj) * ::qSin( (t_adj*d-s)*(2*M_PI)/p )) + b; +} + +/** + * Easing equation function for an elastic (exponentially decaying sine wave) easing in: accelerating from zero velocity. + * + * @param t Current time (in frames or seconds). + * @param a Amplitude. + * @param p Period. + * @return The correct value. + */ +static qreal easeInElastic(qreal t, qreal a, qreal p) +{ + return easeInElastic_helper(t, 0, 1, 1, a, p); +} + +static qreal easeOutElastic_helper(qreal t, qreal /*b*/, qreal c, qreal /*d*/, qreal a, qreal p) +{ + if (t==0) return 0; + if (t==1) return c; + + qreal s; + if(a < c) { + a = c; + s = p / 4.0f; + } else { + s = p / (2 * M_PI) * ::qAsin(c / a); + } + + return (a*::qPow(2.0f,-10*t) * ::qSin( (t-s)*(2*M_PI)/p ) + c); +} + +/** + * Easing equation function for an elastic (exponentially decaying sine wave) easing out: decelerating from zero velocity. + * + * @param t Current time (in frames or seconds). + * @param a Amplitude. + * @param p Period. + * @return The correct value. + */ +static qreal easeOutElastic(qreal t, qreal a, qreal p) +{ + return easeOutElastic_helper(t, 0, 1, 1, a, p); +} + +/** + * Easing equation function for an elastic (exponentially decaying sine wave) easing in/out: acceleration until halfway, then deceleration. + * + * @param t Current time (in frames or seconds). + * @param a Amplitude. + * @param p Period. + * @return The correct value. + */ +static qreal easeInOutElastic(qreal t, qreal a, qreal p) +{ + if (t==0) return 0.0; + t*=2.0; + if (t==2) return 1.0; + + qreal s; + if(a < 1.0) { + a = 1.0; + s = p / 4.0f; + } else { + s = p / (2 * M_PI) * ::qAsin(1.0 / a); + } + + if (t < 1) return -.5*(a*::qPow(2.0f,10*(t-1)) * ::qSin( (t-1-s)*(2*M_PI)/p )); + return a*::qPow(2.0f,-10*(t-1)) * ::qSin( (t-1-s)*(2*M_PI)/p )*.5 + 1.0; +} + +/** + * Easing equation function for an elastic (exponentially decaying sine wave) easing out/in: deceleration until halfway, then acceleration. + * + * @param t Current time (in frames or seconds). + * @param a Amplitude. + * @param p Period. + * @return The correct value. + */ +static qreal easeOutInElastic(qreal t, qreal a, qreal p) +{ + if (t < 0.5) return easeOutElastic_helper(t*2, 0, 0.5, 1.0, a, p); + return easeInElastic_helper(2*t - 1.0, 0.5, 0.5, 1.0, a, p); +} + +/** + * Easing equation function for a back (overshooting cubic easing: (s+1)*t^3 - s*t^2) easing in: accelerating from zero velocity. + * + * @param t Current time (in frames or seconds). + * @param s Overshoot ammount: higher s means greater overshoot (0 produces cubic easing with no overshoot, and the default value of 1.70158 produces an overshoot of 10 percent). + * @return The correct value. + */ +static qreal easeInBack(qreal t, qreal s) +{ + return t*t*((s+1)*t - s); +} + +/** + * Easing equation function for a back (overshooting cubic easing: (s+1)*t^3 - s*t^2) easing out: decelerating from zero velocity. + * + * @param t Current time (in frames or seconds). + * @param s Overshoot ammount: higher s means greater overshoot (0 produces cubic easing with no overshoot, and the default value of 1.70158 produces an overshoot of 10 percent). + * @return The correct value. + */ +static qreal easeOutBack(qreal t, qreal s) +{ + t-= qreal(1.0); + return t*t*((s+1)*t+ s) + 1; +} + +/** + * Easing equation function for a back (overshooting cubic easing: (s+1)*t^3 - s*t^2) easing in/out: acceleration until halfway, then deceleration. + * + * @param t Current time (in frames or seconds). + * @param s Overshoot ammount: higher s means greater overshoot (0 produces cubic easing with no overshoot, and the default value of 1.70158 produces an overshoot of 10 percent). + * @return The correct value. + */ +static qreal easeInOutBack(qreal t, qreal s) +{ + t *= 2.0; + if (t < 1) { + s *= 1.525f; + return 0.5*(t*t*((s+1)*t - s)); + } else { + t -= 2; + s *= 1.525f; + return 0.5*(t*t*((s+1)*t+ s) + 2); + } +} + +/** + * Easing equation function for a back (overshooting cubic easing: (s+1)*t^3 - s*t^2) easing out/in: deceleration until halfway, then acceleration. + * + * @param t Current time (in frames or seconds). + * @param s Overshoot ammount: higher s means greater overshoot (0 produces cubic easing with no overshoot, and the default value of 1.70158 produces an overshoot of 10 percent). + * @return The correct value. + */ +static qreal easeOutInBack(qreal t, qreal s) +{ + if (t < 0.5) return easeOutBack (2*t, s)/2; + return easeInBack(2*t - 1, s)/2 + 0.5; +} + +static qreal easeOutBounce_helper(qreal t, qreal c, qreal a) +{ + if (t == 1.0) return c; + if (t < (4/11.0)) { + return c*(7.5625*t*t); + } else if (t < (8/11.0)) { + t -= (6/11.0); + return -a * (1. - (7.5625*t*t + .75)) + c; + } else if (t < (10/11.0)) { + t -= (9/11.0); + return -a * (1. - (7.5625*t*t + .9375)) + c; + } else { + t -= (21/22.0); + return -a * (1. - (7.5625*t*t + .984375)) + c; + } +} + +/** + * Easing equation function for a bounce (exponentially decaying parabolic bounce) easing out: decelerating from zero velocity. + * + * @param t Current time (in frames or seconds). + * @param a Amplitude. + * @return The correct value. + */ +static qreal easeOutBounce(qreal t, qreal a) +{ + return easeOutBounce_helper(t, 1, a); +} + +/** + * Easing equation function for a bounce (exponentially decaying parabolic bounce) easing in: accelerating from zero velocity. + * + * @param t Current time (in frames or seconds). + * @param a Amplitude. + * @return The correct value. + */ +static qreal easeInBounce(qreal t, qreal a) +{ + return 1.0 - easeOutBounce_helper(1.0-t, 1.0, a); +} + + +/** + * Easing equation function for a bounce (exponentially decaying parabolic bounce) easing in/out: acceleration until halfway, then deceleration. + * + * @param t Current time (in frames or seconds). + * @param a Amplitude. + * @return The correct value. + */ +static qreal easeInOutBounce(qreal t, qreal a) +{ + if (t < 0.5) return easeInBounce (2*t, a)/2; + else return (t == 1.0) ? 1.0 : easeOutBounce (2*t - 1, a)/2 + 0.5; +} + +/** + * Easing equation function for a bounce (exponentially decaying parabolic bounce) easing out/in: deceleration until halfway, then acceleration. + * + * @param t Current time (in frames or seconds). + * @param a Amplitude. + * @return The correct value. + */ +static qreal easeOutInBounce(qreal t, qreal a) +{ + if (t < 0.5) return easeOutBounce_helper(t*2, 0.5, a); + return 1.0 - easeOutBounce_helper (2.0-2*t, 0.5, a); +} + +static inline qreal qt_sinProgress(qreal value) +{ + return qSin((value * M_PI) - M_PI_2) / 2 + qreal(0.5); +} + +static inline qreal qt_smoothBeginEndMixFactor(qreal value) +{ + return qMin(qMax(1 - value * 2 + qreal(0.3), qreal(0.0)), qreal(1.0)); +} + +// SmoothBegin blends Smooth and Linear Interpolation. +// Progress 0 - 0.3 : Smooth only +// Progress 0.3 - ~ 0.5 : Mix of Smooth and Linear +// Progress ~ 0.5 - 1 : Linear only + +/** + * Easing function that starts growing slowly, then increases in speed. At the end of the curve the speed will be constant. + */ +static qreal easeInCurve(qreal t) +{ + const qreal sinProgress = qt_sinProgress(t); + const qreal mix = qt_smoothBeginEndMixFactor(t); + return sinProgress * mix + t * (1 - mix); +} + +/** + * Easing function that starts growing steadily, then ends slowly. The speed will be constant at the beginning of the curve. + */ +static qreal easeOutCurve(qreal t) +{ + const qreal sinProgress = qt_sinProgress(t); + const qreal mix = qt_smoothBeginEndMixFactor(1 - t); + return sinProgress * mix + t * (1 - mix); +} + +/** + * Easing function where the value grows sinusoidally. Note that the calculated end value will be 0 rather than 1. + */ +static qreal easeSineCurve(qreal t) +{ + return (qSin(((t * M_PI * 2)) - M_PI_2) + 1) / 2; +} + +/** + * Easing function where the value grows cosinusoidally. Note that the calculated start value will be 0.5 and the end value will be 0.5 + * contrary to the usual 0 to 1 easing curve. + */ +static qreal easeCosineCurve(qreal t) +{ + return (qCos(((t * M_PI * 2)) - M_PI_2) + 1) / 2; +} + +////////////////////////////////////////////////////////////////////////// + +static qreal easeInElastic(qreal t) +{ + const qreal a = 0; + const qreal p = 0.3; + return easeInElastic(t, a, p); +} +static qreal easeOutElastic(qreal t) +{ + const qreal a = 0; + const qreal p = 0.3; + return easeOutElastic(t, a, p); +} +static qreal easeInOutElastic(qreal t) +{ + const qreal a = 0; + const qreal p = 0.3; + return easeInOutElastic(t, a, p); +} +static qreal easeOutInElastic(qreal t) +{ + const qreal a = 0; + const qreal p = 0.3; + return easeOutInElastic(t, a, p); +} + +static qreal easeInBack(qreal t) +{ + const qreal s = 1.70158; + return easeInBack(t, s); +} +static qreal easeOutBack(qreal t) +{ + const qreal s = 1.70158; + return easeOutBack(t, s); +} +static qreal easeInOutBack(qreal t) +{ + const qreal s = 1.70158; + return easeInOutBack(t, s); +} +static qreal easeOutInBack(qreal t) +{ + const qreal s = 1.70158; + return easeOutInBack(t, s); +} + + +static qreal easeOutBounce(qreal t) +{ + const qreal a = 1; + return easeOutBounce(t, a); +} +static qreal easeInBounce(qreal t) +{ + const qreal a = 1; + return easeInBounce(t, a); +} +static qreal easeInOutBounce(qreal t) +{ + static qreal a = 1; + return easeInOutBounce(t, a); +} +static qreal easeOutInBounce(qreal t) +{ + const qreal a = 1; + return easeOutInBounce(t, a); +} + +static double (*getTweenFunction(TweenType tweenType))(double) +{ + double (*tweenFunction)(double) = easeNone; + + switch (tweenType) + { + case eEaseLinear: + tweenFunction = easeNone; + break; + case eEaseInQuad: + tweenFunction = easeInQuad; + break; + case eEaseOutQuad: + tweenFunction = easeOutQuad; + break; + case eEaseInOutQuad: + tweenFunction = easeInOutQuad; + break; + case eEaseOutInQuad: + tweenFunction = easeOutInQuad; + break; + case eEaseInCubic: + tweenFunction = easeInCubic; + break; + case eEaseOutCubic: + tweenFunction = easeOutCubic; + break; + case eEaseInOutCubic: + tweenFunction = easeInOutCubic; + break; + case eEaseOutInCubic: + tweenFunction = easeOutInCubic; + break; + case eEaseInQuart: + tweenFunction = easeInQuart; + break; + case eEaseOutQuart: + tweenFunction = easeOutQuart; + break; + case eEaseInOutQuart: + tweenFunction = easeInOutQuart; + break; + case eEaseOutInQuart: + tweenFunction = easeOutInQuart; + break; + case eEaseInQuint: + tweenFunction = easeInQuint; + break; + case eEaseOutQuint: + tweenFunction = easeOutQuint; + break; + case eEaseInOutQuint: + tweenFunction = easeInOutQuint; + break; + case eEaseOutInQuint: + tweenFunction = easeOutInQuint; + break; + case eEaseInSine: + tweenFunction = easeInSine; + break; + case eEaseOutSine: + tweenFunction = easeOutSine; + break; + case eEaseInOutSine: + tweenFunction = easeInOutSine; + break; + case eEaseOutInSine: + tweenFunction = easeOutInSine; + break; + case eEaseInExpo: + tweenFunction = easeInExpo; + break; + case eEaseOutExpo: + tweenFunction = easeOutExpo; + break; + case eEaseInOutExpo: + tweenFunction = easeInOutExpo; + break; + case eEaseOutInExpo: + tweenFunction = easeOutInExpo; + break; + case eEaseInCirc: + tweenFunction = easeInCirc; + break; + case eEaseOutCirc: + tweenFunction = easeOutCirc; + break; + case eEaseInOutCirc: + tweenFunction = easeInOutCirc; + break; + case eEaseOutInCirc: + tweenFunction = easeOutInCirc; + break; + case eEaseInElastic: + tweenFunction = easeInElastic; + break; + case eEaseOutElastic: + tweenFunction = easeOutElastic; + break; + case eEaseInOutElastic: + tweenFunction = easeInOutElastic; + break; + case eEaseOutInElastic: + tweenFunction = easeOutInElastic; + break; + case eEaseInBack: + tweenFunction = easeInBack; + break; + case eEaseOutBack: + tweenFunction = easeOutBack; + break; + case eEaseInOutBack: + tweenFunction = easeInOutBack; + break; + case eEaseOutInBack: + tweenFunction = easeOutInBack; + break; + case eEaseOutBounce: + tweenFunction = easeOutBounce; + break; + case eEaseInBounce: + tweenFunction = easeInBounce; + break; + case eEaseInOutBounce: + tweenFunction = easeInOutBounce; + break; + case eEaseOutInBounce: + tweenFunction = easeOutInBounce; + break; + case eEaseInCurve: + tweenFunction = easeInCurve; + break; + case eEaseOutCurve: + tweenFunction = easeOutCurve; + break; + case eEaseSineCurve: + tweenFunction = easeSineCurve; + break; + case eEaseCosineCurve: + tweenFunction = easeCosineCurve; + break; + } + + return tweenFunction; +} + +Parameter::Parameter(int param, float start, float end, TweenType tweenType) : + param(param), + start(start), + end(end) +{ + tweenFunction = getTweenFunction(tweenType); +} + +Parameter::Parameter(const char* strparam, float start, float end, TweenType tweenType) : + param(StringId::instance().id(strparam)), + start(start), + end(end) +{ + strParam=strparam; + tweenFunction = getTweenFunction(tweenType); +} + +Parameter::Parameter(int param, float start, float end, const char* tweenType) : + param(param), + start(start), + end(end) +{ + tweenFunction = getTweenFunction((TweenType)StringId::instance().id(tweenType)); +} +Parameter::Parameter(const char* strparam, float start, float end, const char* tweenType) : + param(StringId::instance().id(strparam)), + start(start), + end(end) +{ + strParam=strparam; + tweenFunction = getTweenFunction((TweenType)StringId::instance().id(tweenType)); +} + +MovieClip::MovieClip(Type type, Application *application) : Sprite(application) +{ + type_ = type; +} + +MovieClip::~MovieClip() +{ + for (std::size_t i = 0; i < frames_.size(); ++i) + frames_[i].sprite->unref(); +} + +void MovieClip::addFrame(int start, int end, Sprite* sprite, const std::vector& parameters, GStatus* status/* = NULL*/) +{ + switch (type_) + { + case eFrame: + if (start < 1 || end < 1) + { + if (status) + *status = GStatus(2100); // Error #2100: Start and end frames must be greater than or equal to 1. + return; + } + break; + case eTime: + if (start < 0 || end < 0) + { + if (status) + *status = GStatus(2104); // Error #2100: Start and end times must be greater than or equal to 0. + return; + } + break; + } + + if (start > end) + { + if (status) + *status = GStatus(2101); // Error #2101: End frame/time must be greater than or equal to start frame/time. + return; + } + + Frame frame; + + frame.start = start; + frame.end = end; + frame.parameters = parameters; + +#if 0 + frame.sprite = new Sprite; + frame.sprite->addChild(sprite); +#else + frame.sprite = sprite; + frame.sprite->ref(); +#endif + + frames_.push_back(frame); +} + +void MovieClip::finalize() +{ + switch (type_) + { + case eFrame: + maxframe_ = 1; + break; + case eTime: + maxframe_ = 0; + break; + } + + for (std::size_t i = 0; i < frames_.size(); ++i) + { + allFrames_[frames_[i].start].push_back(&frames_[i]); + maxframe_ = std::max(maxframe_, frames_[i].end); + } + + switch (type_) + { + case eFrame: + gotoAndPlay(1); + break; + case eTime: + gotoAndPlay(0); + break; + } +} + +void MovieClip::oneFrame() +{ + if (!playing_) + { + return; + } + + if (passoneframe_ == true) + { + passoneframe_ = false; + return; + } + + std::map::iterator iter2 = actions_.find(frame_); + if (iter2 != actions_.end()) + { + if (iter2->second == -1) + { + stop(); + CompleteEvent event(CompleteEvent::COMPLETE); + dispatchEvent(&event); + } + else + gotoFrame(iter2->second); + + return; + } + + if (frame_ == maxframe_) + { + stop(); + CompleteEvent event(CompleteEvent::COMPLETE); + dispatchEvent(&event); + return; + } + + std::map >::iterator iter; + + iter = activeFrames_.find(frame_); + if (iter != activeFrames_.end()) + { + const std::vector& frames = iter->second; + for (std::size_t i = 0; i < frames.size(); ++i) + removeChild2(frames[i]->sprite); + activeFrames_.erase(iter); + } + + frame_ = frame_ + 1; + + iter = allFrames_.find(frame_); + if (iter != allFrames_.end()) + { + const std::vector& frames = iter->second; + for (std::size_t i = 0; i < frames.size(); ++i) + { + activeFrames_[frames[i]->end].push_back(frames[i]); + addChild2(frames[i]->sprite); + } + } + + interpolateParameters(); +} + +void MovieClip::nextFrame(EnterFrameEvent *) +{ + switch (type_) + { + case eFrame: + oneFrame(); + break; + case eTime: + { + double curr = iclock(); + int delta = (curr - prevClock_) * 1000; + prevClock_ = curr; + + delta = std::min(std::max(delta, 0), 1000); + + for (int i = 0; i < delta; ++i) + oneFrame(); + break; + } + } +} + +void MovieClip::gotoFrame(int frame) +{ + std::map >::iterator iter; + + for (iter = activeFrames_.begin(); iter != activeFrames_.end(); ++iter) + { + const std::vector& frames = iter->second; + for (std::size_t i = 0; i < frames.size(); ++i) + removeChild2(frames[i]->sprite); + } + + activeFrames_.clear(); + + frame_ = frame; + + for (std::size_t i = 0; i < frames_.size(); ++i) + { + int start = frames_[i].start; + int end = frames_[i].end; + + if (start <= frame_ && frame_ <= end) + { + activeFrames_[end].push_back(&frames_[i]); + addChild2(frames_[i].sprite); + } + } + + interpolateParameters(); +} + +void MovieClip::interpolateParameters() +{ + std::map >::iterator iter; + + for (iter = activeFrames_.begin(); iter != activeFrames_.end(); ++iter) + { + const std::vector& frames = iter->second; + for (std::size_t i = 0; i < frames.size(); ++i) + { + Sprite* sprite = frames[i]->sprite; + + int s = frames[i]->start; + int e = frames[i]->end; + + float t = s == e ? 0 : ((float)(frame_ - s) / (float)(e - s)); + + for (std::size_t j = 0; j < frames[i]->parameters.size(); ++j) + { + const Parameter& parameter = frames[i]->parameters[j]; + + float s = parameter.start; + float e = parameter.end; + float tw = parameter.tweenFunction(t); + float value = s * (1 - tw) + e * tw; + + setField(i,parameter, value); + } + } + } +} + + +void MovieClip::setField(int frmIndex,Parameter param, float value) +{ + frames_[frmIndex].sprite->set(param.param,value); +} + +float MovieClip::getField(int frmIndex,Parameter param) +{ + return frames_[frmIndex].sprite->get(param.param); +} + +void MovieClip::gotoAndPlay(int frame) +{ + gotoFrame(frame); + play(); +} + +void MovieClip::gotoAndStop(int frame) +{ + gotoFrame(frame); + stop(); +} + +void MovieClip::play() +{ + passoneframe_ = true; + playing_ = true; + prevClock_ = iclock(); + addEventListener(EnterFrameEvent::ENTER_FRAME, &MovieClip::nextFrame); +} + +void MovieClip::stop() +{ + passoneframe_ = false; + playing_ = false; + removeEventListener(EnterFrameEvent::ENTER_FRAME, &MovieClip::nextFrame); +} + +void MovieClip::setStopAction(int frame) +{ + actions_[frame] = -1; +} + +void MovieClip::setGotoAction(int frame, int destframe) +{ + actions_[frame] = destframe; +} + +void MovieClip::clearAction(int frame) +{ + actions_.erase(frame); +} + +void MovieClip::addChild2(Sprite* sprite) +{ + std::map::iterator iter = counts_.find(sprite); + + if (iter == counts_.end() || iter->second == 0) + { +#if 0 + addChild(sprite); +#else + currentSprites_.push_back(sprite); +#endif + counts_[sprite] = 1; + } + else + { + counts_[sprite]++; + } +} + +void MovieClip::removeChild2(Sprite* sprite) +{ + if (--counts_[sprite] == 0) + { +#if 0 + removeChild(sprite); +#else + currentSprites_.erase(std::find(currentSprites_.begin(), currentSprites_.end(), sprite)); +#endif + } +} + +void MovieClip::doDraw(const CurrentTransform& transform, float sx, float sy, float ex, float ey) +{ + for (size_t i = 0; i < currentSprites_.size(); ++i) + currentSprites_[i]->draw(transform, sx, sy, ex, ey); +} + +void MovieClip::extraBounds(float* pminx, float* pminy, float* pmaxx, float* pmaxy) const +{ + float minx = 1e30; + float miny = 1e30; + float maxx = -1e30; + float maxy = -1e30; + + for (size_t i = 0; i < currentSprites_.size(); ++i) + { + Sprite* sprite = currentSprites_[i]; + + // get object bounds + float ominx, ominy, omaxx, omaxy; + sprite->objectBounds(&ominx, &ominy, &omaxx, &omaxy); + + // if empty bounds, continue + if (ominx > omaxx || ominy > omaxy) + continue; + + // transform 4 corners + float x[4], y[4]; + sprite->matrix().transformPoint(ominx, ominy, &x[0], &y[0]); + sprite->matrix().transformPoint(omaxx, ominy, &x[1], &y[1]); + sprite->matrix().transformPoint(omaxx, omaxy, &x[2], &y[2]); + sprite->matrix().transformPoint(ominx, omaxy, &x[3], &y[3]); + + // expand bounds + for (int i = 0; i < 4; ++i) + { + minx = std::min(minx, x[i]); + miny = std::min(miny, y[i]); + maxx = std::max(maxx, x[i]); + maxy = std::max(maxy, y[i]); + } + } + + if (pminx) + *pminx = minx; + if (pminy) + *pminy = miny; + if (pmaxx) + *pmaxx = maxx; + if (pmaxy) + *pmaxy = maxy; +} + diff --git a/2dsg/movieclip2.h b/2dsg/movieclip2.h index 8df3abc0e..a41de898a 100644 --- a/2dsg/movieclip2.h +++ b/2dsg/movieclip2.h @@ -1,140 +1,142 @@ -#ifndef MOVIECLIP_H -#define MOVIECLIP_H - -#include "sprite.h" -#include -#include -#include "enterframeevent.h" - -class Application; - -enum TweenType -{ - eEaseLinear = eStringIdLinear, - eEaseInQuad, - eEaseOutQuad, - eEaseInOutQuad, - eEaseOutInQuad, - eEaseInCubic, - eEaseOutCubic, - eEaseInOutCubic, - eEaseOutInCubic, - eEaseInQuart, - eEaseOutQuart, - eEaseInOutQuart, - eEaseOutInQuart, - eEaseInQuint, - eEaseOutQuint, - eEaseInOutQuint, - eEaseOutInQuint, - eEaseInSine, - eEaseOutSine, - eEaseInOutSine, - eEaseOutInSine, - eEaseInExpo, - eEaseOutExpo, - eEaseInOutExpo, - eEaseOutInExpo, - eEaseInCirc, - eEaseOutCirc, - eEaseInOutCirc, - eEaseOutInCirc, - eEaseInElastic, - eEaseOutElastic, - eEaseInOutElastic, - eEaseOutInElastic, - eEaseInBack, - eEaseOutBack, - eEaseInOutBack, - eEaseOutInBack, - eEaseOutBounce, - eEaseInBounce, - eEaseInOutBounce, - eEaseOutInBounce, - eEaseInCurve, - eEaseOutCurve, - eEaseSineCurve, - eEaseCosineCurve, -}; - -struct Parameter -{ - Parameter() {} - - Parameter(int param, float start, float end, TweenType tweenType = eEaseLinear); - Parameter(const char* strparam, float start, float end, TweenType tweenType = eEaseLinear); - Parameter(int param, float start, float end, const char* tweenType); - Parameter(const char* strparam, float start, float end, const char* tweenType); - - int param; - float start, end; - double (*tweenFunction)(double); -}; - -class MovieClip : public Sprite -{ -public: - enum Type - { - eFrame, - eTime - }; - - MovieClip(Type type, Application *application); - virtual ~MovieClip(); - - // start >= 1 && end >= 1 && start <= end - void addFrame(int start, int end, Sprite* sprite, const std::vector& parameters, GStatus* status = NULL); - - void setStopAction(int frame); - void setGotoAction(int frame, int destframe); - void clearAction(int frame); - - void finalize(); - - void play(); - void stop(); - void gotoAndPlay(int frame); - void gotoAndStop(int frame); - -private: - virtual void doDraw(const CurrentTransform&, float sx, float sy, float ex, float ey); - virtual void extraBounds(float* minx, float* miny, float* maxx, float* maxy) const; - -private: - void oneFrame(); - void nextFrame(EnterFrameEvent* event); - void gotoFrame(int frame); - void interpolateParameters(); - - Type type_; - double prevClock_; - - int frame_; - int maxframe_; - bool playing_; - bool passoneframe_; - - struct Frame - { - int start; - int end; - Sprite* sprite; - std::vector parameters; - }; - - std::vector frames_; - - std::map > allFrames_; // indexed with start - std::map > activeFrames_; // indexed with end - - std::map actions_; - - std::map counts_; - void addChild2(Sprite* sprite); - void removeChild2(Sprite* sprite); - - std::vector currentSprites_; -}; - -#endif +#ifndef MOVIECLIP_H +#define MOVIECLIP_H + +#include "sprite.h" +#include +#include +#include "enterframeevent.h" + +class Application; + +enum TweenType +{ + eEaseLinear = eStringIdLinear, + eEaseInQuad, + eEaseOutQuad, + eEaseInOutQuad, + eEaseOutInQuad, + eEaseInCubic, + eEaseOutCubic, + eEaseInOutCubic, + eEaseOutInCubic, + eEaseInQuart, + eEaseOutQuart, + eEaseInOutQuart, + eEaseOutInQuart, + eEaseInQuint, + eEaseOutQuint, + eEaseInOutQuint, + eEaseOutInQuint, + eEaseInSine, + eEaseOutSine, + eEaseInOutSine, + eEaseOutInSine, + eEaseInExpo, + eEaseOutExpo, + eEaseInOutExpo, + eEaseOutInExpo, + eEaseInCirc, + eEaseOutCirc, + eEaseInOutCirc, + eEaseOutInCirc, + eEaseInElastic, + eEaseOutElastic, + eEaseInOutElastic, + eEaseOutInElastic, + eEaseInBack, + eEaseOutBack, + eEaseInOutBack, + eEaseOutInBack, + eEaseOutBounce, + eEaseInBounce, + eEaseInOutBounce, + eEaseOutInBounce, + eEaseInCurve, + eEaseOutCurve, + eEaseSineCurve, + eEaseCosineCurve, +}; + +struct Parameter +{ + Parameter() {} + + Parameter(int param, float start, float end, TweenType tweenType = eEaseLinear); + Parameter(const char* strparam, float start, float end, TweenType tweenType = eEaseLinear); + Parameter(int param, float start, float end, const char* tweenType); + Parameter(const char* strparam, float start, float end, const char* tweenType); + + std::string strParam; + int param; + float start, end; + double (*tweenFunction)(double); +}; + +class MovieClip : public Sprite +{ +public: + enum Type + { + eFrame, + eTime + }; + + MovieClip(Type type, Application *application); + virtual ~MovieClip(); + + // start >= 1 && end >= 1 && start <= end + void addFrame(int start, int end, Sprite* sprite, const std::vector& parameters, GStatus* status = NULL); + + void setStopAction(int frame); + void setGotoAction(int frame, int destframe); + void clearAction(int frame); + + void finalize(); + + void play(); + void stop(); + void gotoAndPlay(int frame); + void gotoAndStop(int frame); + +protected: + struct Frame + { + int start; + int end; + Sprite* sprite; + std::vector parameters; + }; + std::vector frames_; + virtual void setField(int frmIndex,Parameter param, float value); + virtual float getField(int frmIndex,Parameter param); +private: + virtual void doDraw(const CurrentTransform&, float sx, float sy, float ex, float ey); + virtual void extraBounds(float* minx, float* miny, float* maxx, float* maxy) const; + +private: + void oneFrame(); + void nextFrame(EnterFrameEvent* event); + void gotoFrame(int frame); + void interpolateParameters(); + + Type type_; + double prevClock_; + + int frame_; + int maxframe_; + bool playing_; + bool passoneframe_; + + std::map > allFrames_; // indexed with start + std::map > activeFrames_; // indexed with end + + std::map actions_; + + std::map counts_; + void addChild2(Sprite* sprite); + void removeChild2(Sprite* sprite); + + std::vector currentSprites_; +}; + +#endif diff --git a/2dsg/ogl.cpp b/2dsg/ogl.cpp index 2c584cd6c..f93d1e01a 100644 --- a/2dsg/ogl.cpp +++ b/2dsg/ogl.cpp @@ -1,29 +1,29 @@ -#include "ogl.h" -#include "glog.h" -#include -#include "gtexture.h" - -#ifdef WINSTORE -#include "dx11Shaders.h" -#else -#include "gl2Shaders.h" -#endif - -void oglInitialize(unsigned int sw, unsigned int sh) { - if (ShaderEngine::Engine) - return; -#ifdef WINSTORE - ShaderEngine::Engine = new dx11ShaderEngine(sw, sh); -#else - ShaderEngine::Engine = new ogl2ShaderEngine(sw, sh); -#endif - gtexture_set_engine(ShaderEngine::Engine); -} - -void oglCleanup() { - if (ShaderEngine::Engine) { - gtexture_set_engine(NULL); - delete ShaderEngine::Engine; - ShaderEngine::Engine = NULL; - } -} +#include "ogl.h" +#include "glog.h" +#include +#include "gtexture.h" + +#ifdef WINSTORE +#include "dx11Shaders.h" +#else +#include "gl2Shaders.h" +#endif + +void oglInitialize(unsigned int sw, unsigned int sh) { + if (ShaderEngine::Engine) + return; +#ifdef WINSTORE + ShaderEngine::Engine = new dx11ShaderEngine(sw, sh); +#else + ShaderEngine::Engine = new ogl2ShaderEngine(sw, sh); +#endif + gtexture_set_engine(ShaderEngine::Engine); +} + +void oglCleanup() { + if (ShaderEngine::Engine) { + gtexture_set_engine(NULL); + delete ShaderEngine::Engine; + ShaderEngine::Engine = NULL; + } +} diff --git a/2dsg/ogl.h b/2dsg/ogl.h index 7cfa30cfa..b4d758526 100644 --- a/2dsg/ogl.h +++ b/2dsg/ogl.h @@ -1,23 +1,23 @@ -#ifndef OGL_H_INCLUDED -#define OGL_H_INCLUDED - -#include "Shaders.h" - -#define PREMULTIPLIED_ALPHA 1 - -// remove any macros which will clash with C++ std::max, std::min -#ifdef WINSTORE -#undef min -#undef max - -#ifndef M_PI -#define M_PI 3.141592654 -#endif -#endif - - -void oglInitialize(unsigned int sw,unsigned int sh); -void oglCleanup(); - -#endif - +#ifndef OGL_H_INCLUDED +#define OGL_H_INCLUDED + +#include "Shaders.h" + +#define PREMULTIPLIED_ALPHA 1 + +// remove any macros which will clash with C++ std::max, std::min +#ifdef WINSTORE +#undef min +#undef max + +#ifndef M_PI +#define M_PI 3.141592654 +#endif +#endif + + +void oglInitialize(unsigned int sw,unsigned int sh); +void oglCleanup(); + +#endif + diff --git a/2dsg/orientation.h b/2dsg/orientation.h index 8c11b8f5b..103837782 100644 --- a/2dsg/orientation.h +++ b/2dsg/orientation.h @@ -1,24 +1,24 @@ -#ifndef ORIENTATION_H -#define ORIENTATION_H - -enum Orientation -{ - ePortrait, // The device is in portrait mode, with the device held upright and the home button on the bottom. - eLandscapeLeft, // The device is in landscape mode, with the device held upright and the home button on the right side. - ePortraitUpsideDown, // The device is in portrait mode but upside down, with the device held upright and the home button at the top. - eLandscapeRight, // The device is in landscape mode, with the device held upright and the home button on the left side. -}; - -enum LogicalScaleMode -{ - eNoScale, - eCenter, - ePixelPerfect, - eLetterBox, - eCrop, - eStretch, - eFitWidth, - eFitHeight, -}; - -#endif +#ifndef ORIENTATION_H +#define ORIENTATION_H + +enum Orientation +{ + ePortrait, // The device is in portrait mode, with the device held upright and the home button on the bottom. + eLandscapeLeft, // The device is in landscape mode, with the device held upright and the home button on the right side. + ePortraitUpsideDown, // The device is in portrait mode but upside down, with the device held upright and the home button at the top. + eLandscapeRight, // The device is in landscape mode, with the device held upright and the home button on the left side. +}; + +enum LogicalScaleMode +{ + eNoScale, + eCenter, + ePixelPerfect, + eLetterBox, + eCrop, + eStretch, + eFitWidth, + eFitHeight, +}; + +#endif diff --git a/2dsg/point.h b/2dsg/point.h index b3d34acbd..640860e3a 100644 --- a/2dsg/point.h +++ b/2dsg/point.h @@ -1,7 +1,7 @@ -#ifndef POINT_H -#define POINT_H - -template +#ifndef POINT_H +#define POINT_H + +template struct Point2 { Point2() : x(T()), y(T()) {} @@ -10,23 +10,23 @@ struct Point2 T x; T y; }; - -template -inline bool operator == (const Point2& p0, const Point2& p1) -{ - return p0.x == p1.x && p0.y == p1.y; -} - -template -inline bool operator != (const Point2& p0, const Point2& p1) -{ - return p0.x != p1.x || p0.y != p1.y; -} - -typedef Point2 Point2i; -typedef Point2 Point2f; - - - - + +template +inline bool operator == (const Point2& p0, const Point2& p1) +{ + return p0.x == p1.x && p0.y == p1.y; +} + +template +inline bool operator != (const Point2& p0, const Point2& p1) +{ + return p0.x != p1.x || p0.y != p1.y; +} + +typedef Point2 Point2i; +typedef Point2 Point2f; + + + + #endif \ No newline at end of file diff --git a/2dsg/progressevent.cpp b/2dsg/progressevent.cpp index b76c9ade8..b1d4a12f6 100644 --- a/2dsg/progressevent.cpp +++ b/2dsg/progressevent.cpp @@ -1,9 +1,9 @@ -#include "progressevent.h" -#include "eventvisitor.h" - -ProgressEvent::Type ProgressEvent::PROGRESS("progress"); - -void ProgressEvent::apply(EventVisitor* v) -{ - v->visit(this); -} +#include "progressevent.h" +#include "eventvisitor.h" + +ProgressEvent::Type ProgressEvent::PROGRESS("progress"); + +void ProgressEvent::apply(EventVisitor* v) +{ + v->visit(this); +} diff --git a/2dsg/progressevent.h b/2dsg/progressevent.h index bbab3263d..c9674f5aa 100644 --- a/2dsg/progressevent.h +++ b/2dsg/progressevent.h @@ -1,24 +1,24 @@ -#ifndef PROGRESSEVENT_H -#define PROGRESSEVENT_H - -#include "event.h" - -class ProgressEvent : public Event -{ -public: - typedef EventType Type; - - ProgressEvent(const Type& type, size_t bytesLoaded, size_t bytesTotal) : Event(type.type()), bytesLoaded(bytesLoaded), bytesTotal(bytesTotal) - { - - } - - static Type PROGRESS; - - size_t bytesLoaded; - size_t bytesTotal; - - virtual void apply(EventVisitor* v); -}; - -#endif +#ifndef PROGRESSEVENT_H +#define PROGRESSEVENT_H + +#include "event.h" + +class ProgressEvent : public Event +{ +public: + typedef EventType Type; + + ProgressEvent(const Type& type, size_t bytesLoaded, size_t bytesTotal) : Event(type.type()), bytesLoaded(bytesLoaded), bytesTotal(bytesTotal) + { + + } + + static Type PROGRESS; + + size_t bytesLoaded; + size_t bytesTotal; + + virtual void apply(EventVisitor* v); +}; + +#endif diff --git a/2dsg/shape.h b/2dsg/shape.h index 087928c96..798c5f7c0 100644 --- a/2dsg/shape.h +++ b/2dsg/shape.h @@ -1,74 +1,74 @@ -#ifndef SHAPE_H -#define SHAPE_H - -#include "sprite.h" -#include -#include "texturebase.h" - -class Application; - -class Shape : public Sprite -{ -public: - enum WindingRule - { - eEvenOdd, - eNonZero, - }; - - Shape(Application *application); - virtual ~Shape(); - - void setLineStyle(float thickness, unsigned int color, float alpha = 1.f); - - void clearFillStyle(); - void setSolidFillStyle(unsigned int color, float alpha = 1.f); - void setTextureFillStyle(TextureBase* texture, const Matrix* matrix = NULL); -// void setLinearGradientFillStyle(); -// void setRadialGradientFillStyle(); - - void beginPath(WindingRule windingRule = eEvenOdd); - void moveTo(float x, float y); - void lineTo(float x, float y); - void closePath(); - void endPath(); - - void clear(); -protected: - virtual void extraBounds(float* minx, float* miny, float* maxx, float* maxy) const; - -private: - enum FillType - { - eNone, - eSolid, - eTexture, - }; - - FillType fillType_; - float fillr_, fillg_, fillb_, filla_; - TextureBase* texture_; - Matrix matrix_; - - std::vector textures_; - - float liner_, lineg_, lineb_, linea_; - float thickness_; - - std::vector > paths_; - - Point2f min_, max_; - - WindingRule windingRule_; - -private: - void ensureSubpath(float x, float y); - void extendBounds(float x, float y, float thickness); - -private: - virtual void doDraw(const CurrentTransform&, float sx, float sy, float ex, float ey); - typedef std::list GraphicsBaseList; - GraphicsBaseList graphicsBases_; -}; - -#endif +#ifndef SHAPE_H +#define SHAPE_H + +#include "sprite.h" +#include +#include "texturebase.h" + +class Application; + +class Shape : public Sprite +{ +public: + enum WindingRule + { + eEvenOdd, + eNonZero, + }; + + Shape(Application *application); + virtual ~Shape(); + + void setLineStyle(float thickness, unsigned int color, float alpha = 1.f); + + void clearFillStyle(); + void setSolidFillStyle(unsigned int color, float alpha = 1.f); + void setTextureFillStyle(TextureBase* texture, const Matrix* matrix = NULL); +// void setLinearGradientFillStyle(); +// void setRadialGradientFillStyle(); + + void beginPath(WindingRule windingRule = eEvenOdd); + void moveTo(float x, float y); + void lineTo(float x, float y); + void closePath(); + void endPath(); + + void clear(); +protected: + virtual void extraBounds(float* minx, float* miny, float* maxx, float* maxy) const; + +private: + enum FillType + { + eNone, + eSolid, + eTexture, + }; + + FillType fillType_; + float fillr_, fillg_, fillb_, filla_; + TextureBase* texture_; + Matrix matrix_; + + std::vector textures_; + + float liner_, lineg_, lineb_, linea_; + float thickness_; + + std::vector > paths_; + + Point2f min_, max_; + + WindingRule windingRule_; + +private: + void ensureSubpath(float x, float y); + void extendBounds(float x, float y, float thickness); + +private: + virtual void doDraw(const CurrentTransform&, float sx, float sy, float ex, float ey); + typedef std::list GraphicsBaseList; + GraphicsBaseList graphicsBases_; +}; + +#endif diff --git a/2dsg/splashscreen.h b/2dsg/splashscreen.h index 6304c2eb6..4fd2ff44b 100644 --- a/2dsg/splashscreen.h +++ b/2dsg/splashscreen.h @@ -1,27 +1,27 @@ -#ifndef SPLASHSCREEN_H -#define SPLASHSCREEN_H - -#include "sprite.h" - -class Application; - -class SplashScreen : public Sprite -{ -public: - SplashScreen(Application* application); - virtual ~SplashScreen(); - - bool isFinished() const; - -private: - virtual void doDraw(const CurrentTransform&, float sx, float sy, float ex, float ey); - -private: - GraphicsBase graphicsBase1_; - GraphicsBase graphicsBase2_; - TextureData* data1_; - TextureData* data2_; - double startTime_; -}; - -#endif +#ifndef SPLASHSCREEN_H +#define SPLASHSCREEN_H + +#include "sprite.h" + +class Application; + +class SplashScreen : public Sprite +{ +public: + SplashScreen(Application* application); + virtual ~SplashScreen(); + + bool isFinished() const; + +private: + virtual void doDraw(const CurrentTransform&, float sx, float sy, float ex, float ey); + +private: + GraphicsBase graphicsBase1_; + GraphicsBase graphicsBase2_; + TextureData* data1_; + TextureData* data2_; + double startTime_; +}; + +#endif diff --git a/2dsg/stageorientationevent.cpp b/2dsg/stageorientationevent.cpp index fcc6e6270..205d6d249 100644 --- a/2dsg/stageorientationevent.cpp +++ b/2dsg/stageorientationevent.cpp @@ -1,9 +1,9 @@ -#include "stageorientationevent.h" -#include "eventvisitor.h" - -StageOrientationEvent::Type StageOrientationEvent::ORIENTATION_CHANGE("orientationChange"); - -void StageOrientationEvent::apply(EventVisitor* v) -{ - v->visit(this); -} +#include "stageorientationevent.h" +#include "eventvisitor.h" + +StageOrientationEvent::Type StageOrientationEvent::ORIENTATION_CHANGE("orientationChange"); + +void StageOrientationEvent::apply(EventVisitor* v) +{ + v->visit(this); +} diff --git a/2dsg/stageorientationevent.h b/2dsg/stageorientationevent.h index 337710b28..4469627eb 100644 --- a/2dsg/stageorientationevent.h +++ b/2dsg/stageorientationevent.h @@ -1,28 +1,28 @@ -#ifndef STAGE_ORIENTATION_EVENT -#define STAGE_ORIENTATION_EVENT - -#include "event.h" -#include - -class EventVisitor; - -class StageOrientationEvent : public Event -{ -public: - typedef EventType Type; - - StageOrientationEvent(const Type& type, gapplication_Orientation orientation) : - Event(type.type()), orientation(orientation) - { - - } - - gapplication_Orientation orientation; - - static Type ORIENTATION_CHANGE; - - virtual void apply(EventVisitor* v); -}; - - -#endif +#ifndef STAGE_ORIENTATION_EVENT +#define STAGE_ORIENTATION_EVENT + +#include "event.h" +#include + +class EventVisitor; + +class StageOrientationEvent : public Event +{ +public: + typedef EventType Type; + + StageOrientationEvent(const Type& type, gapplication_Orientation orientation) : + Event(type.type()), orientation(orientation) + { + + } + + gapplication_Orientation orientation; + + static Type ORIENTATION_CHANGE; + + virtual void apply(EventVisitor* v); +}; + + +#endif diff --git a/2dsg/stopwatch.cpp b/2dsg/stopwatch.cpp index 2864d12a0..05dd53ae4 100644 --- a/2dsg/stopwatch.cpp +++ b/2dsg/stopwatch.cpp @@ -1,38 +1,38 @@ -#include "stopwatch.h" -#include "platform.h" - -StopWatch::StopWatch() -{ - isRunning_ = true; - last_ = iclock(); - total_ = 0; -} - -double StopWatch::clock() -{ - double current = iclock(); - if (isRunning_ == true) - total_ += current - last_; - last_ = current; - - return total_; -} - -void StopWatch::pause() -{ - clock(); - isRunning_ = false; - clock(); -} - -void StopWatch::resume() -{ - clock(); - isRunning_ = true; - clock(); -} - -bool StopWatch::isPaused() const -{ - return !isRunning_; -} +#include "stopwatch.h" +#include "platform.h" + +StopWatch::StopWatch() +{ + isRunning_ = true; + last_ = iclock(); + total_ = 0; +} + +double StopWatch::clock() +{ + double current = iclock(); + if (isRunning_ == true) + total_ += current - last_; + last_ = current; + + return total_; +} + +void StopWatch::pause() +{ + clock(); + isRunning_ = false; + clock(); +} + +void StopWatch::resume() +{ + clock(); + isRunning_ = true; + clock(); +} + +bool StopWatch::isPaused() const +{ + return !isRunning_; +} diff --git a/2dsg/stopwatch.h b/2dsg/stopwatch.h index e813dceaa..d9a4d240b 100644 --- a/2dsg/stopwatch.h +++ b/2dsg/stopwatch.h @@ -1,21 +1,21 @@ -#ifndef STOPWATCH_H -#define STOPWATCH_H - -class StopWatch -{ -public: - StopWatch(); - - double clock(); - void pause(); - void resume(); - bool isPaused() const; - -private: - bool isRunning_; - double last_; - double total_; -}; - - +#ifndef STOPWATCH_H +#define STOPWATCH_H + +class StopWatch +{ +public: + StopWatch(); + + double clock(); + void pause(); + void resume(); + bool isPaused() const; + +private: + bool isRunning_; + double last_; + double total_; +}; + + #endif \ No newline at end of file diff --git a/2dsg/textfield.h b/2dsg/textfield.h index cc25b3b7a..0c8896dc6 100644 --- a/2dsg/textfield.h +++ b/2dsg/textfield.h @@ -1,54 +1,54 @@ -#ifndef TEXTFIELD_H -#define TEXTFIELD_H - -#include "font.h" -#include "sprite.h" -#include "graphicsbase.h" -#include "textfieldbase.h" - -#include - -class Application; - -class TextField : public TextFieldBase -{ -public: - TextField(Application *application); - TextField(Application *application, BMFontBase* font); - TextField(Application *application, BMFontBase* font, const char* text); - - virtual ~TextField() - { - if (font_ != 0) - font_->unref(); - } - - void setFont(Font* font); - - virtual void setText(const char* text); - virtual const char* text() const; - - virtual void setTextColor(unsigned int color); - virtual unsigned int textColor() const; - - virtual void setLetterSpacing(float letterSpacing); - virtual float letterSpacing() const; - - void createGraphics(); - -private: - virtual void extraBounds(float* minx, float* miny, float* maxx, float* maxy) const; - - BMFontBase* font_; - - float r_, g_, b_; - unsigned int textColor_; - float letterSpacing_; - -private: - GraphicsBase graphicsBase_; - virtual void doDraw(const CurrentTransform&, float sx, float sy, float ex, float ey); - float minx_, miny_, maxx_, maxy_; -}; - -#endif +#ifndef TEXTFIELD_H +#define TEXTFIELD_H + +#include "font.h" +#include "sprite.h" +#include "graphicsbase.h" +#include "textfieldbase.h" + +#include + +class Application; + +class TextField : public TextFieldBase +{ +public: + TextField(Application *application); + TextField(Application *application, BMFontBase* font); + TextField(Application *application, BMFontBase* font, const char* text); + + virtual ~TextField() + { + if (font_ != 0) + font_->unref(); + } + + void setFont(Font* font); + + virtual void setText(const char* text); + virtual const char* text() const; + + virtual void setTextColor(unsigned int color); + virtual unsigned int textColor() const; + + virtual void setLetterSpacing(float letterSpacing); + virtual float letterSpacing() const; + + void createGraphics(); + +private: + virtual void extraBounds(float* minx, float* miny, float* maxx, float* maxy) const; + + BMFontBase* font_; + + float r_, g_, b_; + unsigned int textColor_; + float letterSpacing_; + +private: + GraphicsBase graphicsBase_; + virtual void doDraw(const CurrentTransform&, float sx, float sy, float ex, float ey); + float minx_, miny_, maxx_, maxy_; +}; + +#endif diff --git a/2dsg/textfieldbase.cpp b/2dsg/textfieldbase.cpp index d0c088516..576029f3e 100644 --- a/2dsg/textfieldbase.cpp +++ b/2dsg/textfieldbase.cpp @@ -1,16 +1,16 @@ -#include "textfieldbase.h" -#include - -void TextFieldBase::updateWide() -{ - size_t wsize = utf8_to_wchar(text_.c_str(), text_.size(), NULL, 0, 0); - - if (wsize == 0) - { - wtext_.clear(); - return; - } - - wtext_.resize(wsize); - utf8_to_wchar(text_.c_str(), text_.size(), &wtext_[0], wsize, 0); -} +#include "textfieldbase.h" +#include + +void TextFieldBase::updateWide() +{ + size_t wsize = utf8_to_wchar(text_.c_str(), text_.size(), NULL, 0, 0); + + if (wsize == 0) + { + wtext_.clear(); + return; + } + + wtext_.resize(wsize); + utf8_to_wchar(text_.c_str(), text_.size(), &wtext_[0], wsize, 0); +} diff --git a/2dsg/textfieldbase.h b/2dsg/textfieldbase.h index 0ff2c8290..071e11b9f 100644 --- a/2dsg/textfieldbase.h +++ b/2dsg/textfieldbase.h @@ -1,33 +1,33 @@ -#ifndef TEXTFIELDBASE_H -#define TEXTFIELDBASE_H - -#include "sprite.h" - -#include -#include - -class Application; - -class TextFieldBase : public Sprite -{ -public: - TextFieldBase(Application *application) : Sprite(application) {} - virtual ~TextFieldBase() {} - - virtual void setText(const char* text) = 0; - virtual const char* text() const = 0; - - virtual void setTextColor(unsigned int color) = 0; - virtual unsigned int textColor() const = 0; - - virtual void setLetterSpacing(float letterSpacing) = 0; - virtual float letterSpacing() const = 0; - -protected: - void updateWide(); - - std::string text_; - std::basic_string wtext_; -}; - -#endif +#ifndef TEXTFIELDBASE_H +#define TEXTFIELDBASE_H + +#include "sprite.h" + +#include +#include + +class Application; + +class TextFieldBase : public Sprite +{ +public: + TextFieldBase(Application *application) : Sprite(application) {} + virtual ~TextFieldBase() {} + + virtual void setText(const char* text) = 0; + virtual const char* text() const = 0; + + virtual void setTextColor(unsigned int color) = 0; + virtual unsigned int textColor() const = 0; + + virtual void setLetterSpacing(float letterSpacing) = 0; + virtual float letterSpacing() const = 0; + +protected: + void updateWide(); + + std::string text_; + std::basic_string wtext_; +}; + +#endif diff --git a/2dsg/texture.cpp b/2dsg/texture.cpp index 1209a8da1..4fcfe47f9 100644 --- a/2dsg/texture.cpp +++ b/2dsg/texture.cpp @@ -1,14 +1,14 @@ -#include "texture.h" - -Texture::Texture(Application* application, - const char* filename, Filter filter, Wrap wrap, Format format, - bool maketransparent/* = false*/, unsigned int transparentcolor/* = 0x00000000*/) : - TextureBase(application, filename, filter, wrap, format, maketransparent, transparentcolor) -{ -} - -Texture::~Texture() -{ - -} - +#include "texture.h" + +Texture::Texture(Application* application, + const char* filename, Filter filter, Wrap wrap, Format format, + bool maketransparent/* = false*/, unsigned int transparentcolor/* = 0x00000000*/) : + TextureBase(application, filename, filter, wrap, format, maketransparent, transparentcolor) +{ +} + +Texture::~Texture() +{ + +} + diff --git a/2dsg/texture.h b/2dsg/texture.h index 5c0f7ede6..ccdace9fc 100644 --- a/2dsg/texture.h +++ b/2dsg/texture.h @@ -1,18 +1,18 @@ -#ifndef TEXTURE_H -#define TEXTURE_H - -#include "texturebase.h" - -class Texture : public TextureBase -{ -public: - // can throw GiderosException - Texture(Application* application, - const char* filename, Filter filter, Wrap wrap, Format format, - bool maketransparent = false, unsigned int transparentcolor = 0x00000000); - virtual ~Texture(); -}; - - - -#endif +#ifndef TEXTURE_H +#define TEXTURE_H + +#include "texturebase.h" + +class Texture : public TextureBase +{ +public: + // can throw GiderosException + Texture(Application* application, + const char* filename, Filter filter, Wrap wrap, Format format, + bool maketransparent = false, unsigned int transparentcolor = 0x00000000); + virtual ~Texture(); +}; + + + +#endif diff --git a/2dsg/texturebase.cpp b/2dsg/texturebase.cpp index 74d36f880..ef3225358 100644 --- a/2dsg/texturebase.cpp +++ b/2dsg/texturebase.cpp @@ -1,37 +1,37 @@ -#include "texturebase.h" -#include "application.h" - -TextureBase::TextureBase(Application* application) : application_(application) -{ - data = NULL; - sizescalex = 1; - sizescaley = 1; - uvscalex = 1; - uvscaley = 1; -} - -TextureBase::TextureBase( Application* application, - const char* filename, Filter filter, Wrap wrap, Format format, - bool maketransparent/* = false*/, unsigned int transparentcolor/* = 0x00000000*/) : - application_(application) -{ - - TextureParameters parameters; - parameters.filter = filter; - parameters.wrap = wrap; - parameters.format = format; - parameters.maketransparent = maketransparent; - parameters.transparentcolor = transparentcolor; - - data = application_->getTextureManager()->createTextureFromFile(filename, parameters); - sizescalex = 1; - sizescaley = 1; - uvscalex = (float)data->width / (float)data->baseWidth; - uvscaley = (float)data->height / (float)data->baseHeight; -} - -TextureBase::~TextureBase() -{ - if (data) - application_->getTextureManager()->destroyTexture(data); -} +#include "texturebase.h" +#include "application.h" + +TextureBase::TextureBase(Application* application) : application_(application) +{ + data = NULL; + sizescalex = 1; + sizescaley = 1; + uvscalex = 1; + uvscaley = 1; +} + +TextureBase::TextureBase( Application* application, + const char* filename, Filter filter, Wrap wrap, Format format, + bool maketransparent/* = false*/, unsigned int transparentcolor/* = 0x00000000*/) : + application_(application) +{ + + TextureParameters parameters; + parameters.filter = filter; + parameters.wrap = wrap; + parameters.format = format; + parameters.maketransparent = maketransparent; + parameters.transparentcolor = transparentcolor; + + data = application_->getTextureManager()->createTextureFromFile(filename, parameters); + sizescalex = 1; + sizescaley = 1; + uvscalex = (float)data->width / (float)data->baseWidth; + uvscaley = (float)data->height / (float)data->baseHeight; +} + +TextureBase::~TextureBase() +{ + if (data) + application_->getTextureManager()->destroyTexture(data); +} diff --git a/2dsg/texturebase.h b/2dsg/texturebase.h index 705bc3738..344e24d41 100644 --- a/2dsg/texturebase.h +++ b/2dsg/texturebase.h @@ -1,31 +1,31 @@ -#ifndef TEXTUREBASE_H -#define TEXTUREBASE_H - -#include "texturemanager.h" -#include "refptr.h" - -class TextureBase : public GReferenced -{ -public: - float sizescalex; - float sizescaley; - float uvscalex; - float uvscaley; - - TextureData* data; - -protected: - TextureBase(Application* application); - TextureBase(Application* application, - const char* filename, Filter filter, Wrap wrap, Format format, - bool maketransparent = false, unsigned int transparentcolor = 0x00000000); - - virtual ~TextureBase(); - -private: - Application* application_; -}; - - - -#endif +#ifndef TEXTUREBASE_H +#define TEXTUREBASE_H + +#include "texturemanager.h" +#include "refptr.h" + +class TextureBase : public GReferenced +{ +public: + float sizescalex; + float sizescaley; + float uvscalex; + float uvscaley; + + TextureData* data; + +protected: + TextureBase(Application* application); + TextureBase(Application* application, + const char* filename, Filter filter, Wrap wrap, Format format, + bool maketransparent = false, unsigned int transparentcolor = 0x00000000); + + virtual ~TextureBase(); + +private: + Application* application_; +}; + + + +#endif diff --git a/2dsg/texturemanager.cpp b/2dsg/texturemanager.cpp index 96f60c549..2d8e7d65c 100644 --- a/2dsg/texturemanager.cpp +++ b/2dsg/texturemanager.cpp @@ -1,360 +1,360 @@ -#include "texturemanager.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include "ogl.h" -#include - -ShaderTexture *TextureData::id() -{ - return gtexture_getInternalTexture(gid); -} - -static void append(std::vector& buffer, const void *data, size_t len) -{ - size_t s = buffer.size(); - buffer.resize(s + len); - memcpy(&buffer[s], data, len); -} - -static void append(std::vector& buffer, const TextureParameters& parameters) -{ - append(buffer, ¶meters.filter, sizeof(parameters.filter)); - append(buffer, ¶meters.wrap, sizeof(parameters.wrap)); - append(buffer, ¶meters.maketransparent, sizeof(parameters.maketransparent)); - append(buffer, ¶meters.transparentcolor, sizeof(parameters.transparentcolor)); - append(buffer, ¶meters.grayscale, sizeof(parameters.grayscale)); -} - -TextureManager::TextureManager(Application* application) : - application_(application) -{ -} - -TextureManager::~TextureManager() -{ -} - -TextureData* TextureManager::createTextureFromFile(const char* filename, const TextureParameters& parameters) -{ - int flags = gpath_getDriveFlags(gpath_getPathDrive(filename)); - - std::vector sig; - if (flags & GPATH_RO) - { - append(sig, filename, strlen(filename) + 1); - append(sig, parameters); - } - else - { - if (flags & GPATH_REAL) - { - struct stat s; - stat(gpath_transform(filename), &s); - - append(sig, filename, strlen(filename) + 1); - append(sig, parameters); - append(sig, &s.st_mtime, sizeof(s.st_mtime)); - } - } - - int wrap = 0; - switch (parameters.wrap) - { - case eClamp: - wrap = GTEXTURE_CLAMP; - break; - case eRepeat: - wrap = GTEXTURE_REPEAT; - break; - } - - int filter = 0; - switch (parameters.filter) - { - case eNearest: - filter = GTEXTURE_NEAREST; - break; - case eLinear: - filter = GTEXTURE_LINEAR; - break; - } - - int format = 0; - int type = 0; - switch (parameters.format) - { - case eRGBA8888: - format = GTEXTURE_RGBA; - type = GTEXTURE_UNSIGNED_BYTE; - break; - case eRGB888: - format = GTEXTURE_RGB; - type = GTEXTURE_UNSIGNED_BYTE; - break; - case eRGB565: - format = GTEXTURE_RGB; - type = GTEXTURE_UNSIGNED_SHORT_5_6_5; - break; - case eRGBA4444: - format = GTEXTURE_RGBA; - type = GTEXTURE_UNSIGNED_SHORT_4_4_4_4; - break; - case eRGBA5551: - format = GTEXTURE_RGBA; - type = GTEXTURE_UNSIGNED_SHORT_5_5_5_1; - break; - } - - if (!sig.empty()) - { - g_id gid = gtexture_reuse(format, type, wrap, filter, &sig[0], sig.size()); - if (gid != 0) - { - TextureData* internal = (TextureData*)gtexture_getUserData(gid); - TextureData* data = new TextureData(*internal); - data->gid = gid; - - return data; - } - } - - Dib dib(application_, filename, true, true, parameters.maketransparent, parameters.transparentcolor); - - if (parameters.grayscale) - dib.convertGrayscale(); - -#if PREMULTIPLIED_ALPHA - dib.premultiplyAlpha(); -#endif - - g_id gid = 0; - switch (parameters.format) - { - case eRGBA8888: - gid = gtexture_create(dib.width(), dib.height(), format, type, wrap, filter, dib.data(), &sig[0], sig.size()); - break; - case eRGB888: - { - std::vector data = dib.to888(); - gid = gtexture_create(dib.width(), dib.height(), format, type, wrap, filter, &data[0], &sig[0], sig.size()); - break; - } - case eRGB565: - { - std::vector data = dib.to565(); - gid = gtexture_create(dib.width(), dib.height(), format, type, wrap, filter, &data[0], &sig[0], sig.size()); - break; - } - case eRGBA4444: - { - std::vector data = dib.to4444(); - gid = gtexture_create(dib.width(), dib.height(), format, type, wrap, filter, &data[0], &sig[0], sig.size()); - break; - } - case eRGBA5551: - { - std::vector data = dib.to5551(); - gid = gtexture_create(dib.width(), dib.height(), format, type, wrap, filter, &data[0], &sig[0], sig.size()); - break; - } - } - - TextureData* data = new TextureData; - - data->gid = gid; - data->parameters = parameters; - data->width = dib.originalWidth(); - data->height = dib.originalHeight(); - data->exwidth = dib.width(); - data->exheight = dib.height(); - data->baseWidth = dib.baseOriginalWidth(); - data->baseHeight = dib.baseOriginalHeight(); - - TextureData* internal = new TextureData(*data); - gtexture_setUserData(gid, internal); - - return data; -} - -TextureData* TextureManager::createTextureFromDib(const Dib& dib, const TextureParameters& parameters) -{ - int wrap = 0; - switch (parameters.wrap) - { - case eClamp: - wrap = GTEXTURE_CLAMP; - break; - case eRepeat: - wrap = GTEXTURE_REPEAT; - break; - } - - int filter = 0; - switch (parameters.filter) - { - case eNearest: - filter = GTEXTURE_NEAREST; - break; - case eLinear: - filter = GTEXTURE_LINEAR; - break; - } - - int format = 0; - int type = 0; - switch (parameters.format) - { - case eRGBA8888: - format = GTEXTURE_RGBA; - type = GTEXTURE_UNSIGNED_BYTE; - break; - case eRGB888: - format = GTEXTURE_RGB; - type = GTEXTURE_UNSIGNED_BYTE; - break; - case eRGB565: - format = GTEXTURE_RGB; - type = GTEXTURE_UNSIGNED_SHORT_5_6_5; - break; - case eRGBA4444: - format = GTEXTURE_RGBA; - type = GTEXTURE_UNSIGNED_SHORT_4_4_4_4; - break; - case eRGBA5551: - format = GTEXTURE_RGBA; - type = GTEXTURE_UNSIGNED_SHORT_5_5_5_1; - break; - } - - - Dib dib2 = dib; - - if (parameters.grayscale) - dib2.convertGrayscale(); - -#if PREMULTIPLIED_ALPHA - dib2.premultiplyAlpha(); -#endif - - - g_id gid = 0; - switch (parameters.format) - { - case eRGBA8888: - gid = gtexture_create(dib.width(), dib.height(), format, type, wrap, filter, dib2.data(), NULL, 0); - break; - case eRGB888: - { - std::vector data = dib2.to888(); - gid = gtexture_create(dib.width(), dib.height(), format, type, wrap, filter, &data[0], NULL, 0); - break; - } - case eRGB565: - { - std::vector data = dib2.to565(); - gid = gtexture_create(dib.width(), dib.height(), format, type, wrap, filter, &data[0], NULL, 0); - break; - } - case eRGBA4444: - { - std::vector data = dib2.to4444(); - gid = gtexture_create(dib.width(), dib.height(), format, type, wrap, filter, &data[0], NULL, 0); - break; - } - case eRGBA5551: - { - std::vector data = dib2.to5551(); - gid = gtexture_create(dib.width(), dib.height(), format, type, wrap, filter, &data[0], NULL, 0); - break; - } - } - - TextureData* data = new TextureData; - - data->gid = gid; - data->parameters = parameters; - data->width = dib.originalWidth(); - data->height = dib.originalHeight(); - data->exwidth = dib.width(); - data->exheight = dib.height(); - data->baseWidth = dib.baseOriginalWidth(); - data->baseHeight = dib.baseOriginalHeight(); - - return data; -} - -static unsigned int nextpow2(unsigned int v) -{ - v--; - v |= v >> 1; - v |= v >> 2; - v |= v >> 4; - v |= v >> 8; - v |= v >> 16; - v++; - - return v; -} - -TextureData* TextureManager::createRenderTarget(int w, int h, const TextureParameters& parameters) -{ - int wrap = 0; - switch (parameters.wrap) - { - case eClamp: - wrap = GTEXTURE_CLAMP; - break; - case eRepeat: - wrap = GTEXTURE_REPEAT; - break; - } - - int filter = 0; - switch (parameters.filter) - { - case eNearest: - filter = GTEXTURE_NEAREST; - break; - case eLinear: - filter = GTEXTURE_LINEAR; - break; - } - - int baseWidth = w; - int baseHeight = h; - int width = w; - int height = h; - int exwidth = nextpow2(w); - int exheight = nextpow2(h); - - g_id gid = gtexture_RenderTargetCreate(exwidth, exheight, wrap, filter); - - TextureData *data = new TextureData; - - data->gid = gid; - data->parameters = parameters; - data->width = width; - data->height = height; - data->exwidth = exwidth; - data->exheight = exheight; - data->baseWidth = baseWidth; - data->baseHeight = baseHeight; - - return data; -} - -void TextureManager::destroyTexture(TextureData* texture) -{ - TextureData* internal = (TextureData*)gtexture_getUserData(texture->gid); - if (gtexture_delete(texture->gid)) - if (internal) - delete internal; - delete texture; -} - +#include "texturemanager.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include "ogl.h" +#include + +ShaderTexture *TextureData::id() +{ + return gtexture_getInternalTexture(gid); +} + +static void append(std::vector& buffer, const void *data, size_t len) +{ + size_t s = buffer.size(); + buffer.resize(s + len); + memcpy(&buffer[s], data, len); +} + +static void append(std::vector& buffer, const TextureParameters& parameters) +{ + append(buffer, ¶meters.filter, sizeof(parameters.filter)); + append(buffer, ¶meters.wrap, sizeof(parameters.wrap)); + append(buffer, ¶meters.maketransparent, sizeof(parameters.maketransparent)); + append(buffer, ¶meters.transparentcolor, sizeof(parameters.transparentcolor)); + append(buffer, ¶meters.grayscale, sizeof(parameters.grayscale)); +} + +TextureManager::TextureManager(Application* application) : + application_(application) +{ +} + +TextureManager::~TextureManager() +{ +} + +TextureData* TextureManager::createTextureFromFile(const char* filename, const TextureParameters& parameters) +{ + int flags = gpath_getDriveFlags(gpath_getPathDrive(filename)); + + std::vector sig; + if (flags & GPATH_RO) + { + append(sig, filename, strlen(filename) + 1); + append(sig, parameters); + } + else + { + if (flags & GPATH_REAL) + { + struct stat s; + stat(gpath_transform(filename), &s); + + append(sig, filename, strlen(filename) + 1); + append(sig, parameters); + append(sig, &s.st_mtime, sizeof(s.st_mtime)); + } + } + + int wrap = 0; + switch (parameters.wrap) + { + case eClamp: + wrap = GTEXTURE_CLAMP; + break; + case eRepeat: + wrap = GTEXTURE_REPEAT; + break; + } + + int filter = 0; + switch (parameters.filter) + { + case eNearest: + filter = GTEXTURE_NEAREST; + break; + case eLinear: + filter = GTEXTURE_LINEAR; + break; + } + + int format = 0; + int type = 0; + switch (parameters.format) + { + case eRGBA8888: + format = GTEXTURE_RGBA; + type = GTEXTURE_UNSIGNED_BYTE; + break; + case eRGB888: + format = GTEXTURE_RGB; + type = GTEXTURE_UNSIGNED_BYTE; + break; + case eRGB565: + format = GTEXTURE_RGB; + type = GTEXTURE_UNSIGNED_SHORT_5_6_5; + break; + case eRGBA4444: + format = GTEXTURE_RGBA; + type = GTEXTURE_UNSIGNED_SHORT_4_4_4_4; + break; + case eRGBA5551: + format = GTEXTURE_RGBA; + type = GTEXTURE_UNSIGNED_SHORT_5_5_5_1; + break; + } + + if (!sig.empty()) + { + g_id gid = gtexture_reuse(format, type, wrap, filter, &sig[0], sig.size()); + if (gid != 0) + { + TextureData* internal = (TextureData*)gtexture_getUserData(gid); + TextureData* data = new TextureData(*internal); + data->gid = gid; + + return data; + } + } + + Dib dib(application_, filename, true, true, parameters.maketransparent, parameters.transparentcolor); + + if (parameters.grayscale) + dib.convertGrayscale(); + +#if PREMULTIPLIED_ALPHA + dib.premultiplyAlpha(); +#endif + + g_id gid = 0; + switch (parameters.format) + { + case eRGBA8888: + gid = gtexture_create(dib.width(), dib.height(), format, type, wrap, filter, dib.data(), &sig[0], sig.size()); + break; + case eRGB888: + { + std::vector data = dib.to888(); + gid = gtexture_create(dib.width(), dib.height(), format, type, wrap, filter, &data[0], &sig[0], sig.size()); + break; + } + case eRGB565: + { + std::vector data = dib.to565(); + gid = gtexture_create(dib.width(), dib.height(), format, type, wrap, filter, &data[0], &sig[0], sig.size()); + break; + } + case eRGBA4444: + { + std::vector data = dib.to4444(); + gid = gtexture_create(dib.width(), dib.height(), format, type, wrap, filter, &data[0], &sig[0], sig.size()); + break; + } + case eRGBA5551: + { + std::vector data = dib.to5551(); + gid = gtexture_create(dib.width(), dib.height(), format, type, wrap, filter, &data[0], &sig[0], sig.size()); + break; + } + } + + TextureData* data = new TextureData; + + data->gid = gid; + data->parameters = parameters; + data->width = dib.originalWidth(); + data->height = dib.originalHeight(); + data->exwidth = dib.width(); + data->exheight = dib.height(); + data->baseWidth = dib.baseOriginalWidth(); + data->baseHeight = dib.baseOriginalHeight(); + + TextureData* internal = new TextureData(*data); + gtexture_setUserData(gid, internal); + + return data; +} + +TextureData* TextureManager::createTextureFromDib(const Dib& dib, const TextureParameters& parameters) +{ + int wrap = 0; + switch (parameters.wrap) + { + case eClamp: + wrap = GTEXTURE_CLAMP; + break; + case eRepeat: + wrap = GTEXTURE_REPEAT; + break; + } + + int filter = 0; + switch (parameters.filter) + { + case eNearest: + filter = GTEXTURE_NEAREST; + break; + case eLinear: + filter = GTEXTURE_LINEAR; + break; + } + + int format = 0; + int type = 0; + switch (parameters.format) + { + case eRGBA8888: + format = GTEXTURE_RGBA; + type = GTEXTURE_UNSIGNED_BYTE; + break; + case eRGB888: + format = GTEXTURE_RGB; + type = GTEXTURE_UNSIGNED_BYTE; + break; + case eRGB565: + format = GTEXTURE_RGB; + type = GTEXTURE_UNSIGNED_SHORT_5_6_5; + break; + case eRGBA4444: + format = GTEXTURE_RGBA; + type = GTEXTURE_UNSIGNED_SHORT_4_4_4_4; + break; + case eRGBA5551: + format = GTEXTURE_RGBA; + type = GTEXTURE_UNSIGNED_SHORT_5_5_5_1; + break; + } + + + Dib dib2 = dib; + + if (parameters.grayscale) + dib2.convertGrayscale(); + +#if PREMULTIPLIED_ALPHA + dib2.premultiplyAlpha(); +#endif + + + g_id gid = 0; + switch (parameters.format) + { + case eRGBA8888: + gid = gtexture_create(dib.width(), dib.height(), format, type, wrap, filter, dib2.data(), NULL, 0); + break; + case eRGB888: + { + std::vector data = dib2.to888(); + gid = gtexture_create(dib.width(), dib.height(), format, type, wrap, filter, &data[0], NULL, 0); + break; + } + case eRGB565: + { + std::vector data = dib2.to565(); + gid = gtexture_create(dib.width(), dib.height(), format, type, wrap, filter, &data[0], NULL, 0); + break; + } + case eRGBA4444: + { + std::vector data = dib2.to4444(); + gid = gtexture_create(dib.width(), dib.height(), format, type, wrap, filter, &data[0], NULL, 0); + break; + } + case eRGBA5551: + { + std::vector data = dib2.to5551(); + gid = gtexture_create(dib.width(), dib.height(), format, type, wrap, filter, &data[0], NULL, 0); + break; + } + } + + TextureData* data = new TextureData; + + data->gid = gid; + data->parameters = parameters; + data->width = dib.originalWidth(); + data->height = dib.originalHeight(); + data->exwidth = dib.width(); + data->exheight = dib.height(); + data->baseWidth = dib.baseOriginalWidth(); + data->baseHeight = dib.baseOriginalHeight(); + + return data; +} + +static unsigned int nextpow2(unsigned int v) +{ + v--; + v |= v >> 1; + v |= v >> 2; + v |= v >> 4; + v |= v >> 8; + v |= v >> 16; + v++; + + return v; +} + +TextureData* TextureManager::createRenderTarget(int w, int h, const TextureParameters& parameters) +{ + int wrap = 0; + switch (parameters.wrap) + { + case eClamp: + wrap = GTEXTURE_CLAMP; + break; + case eRepeat: + wrap = GTEXTURE_REPEAT; + break; + } + + int filter = 0; + switch (parameters.filter) + { + case eNearest: + filter = GTEXTURE_NEAREST; + break; + case eLinear: + filter = GTEXTURE_LINEAR; + break; + } + + int baseWidth = w; + int baseHeight = h; + int width = w; + int height = h; + int exwidth = nextpow2(w); + int exheight = nextpow2(h); + + g_id gid = gtexture_RenderTargetCreate(exwidth, exheight, wrap, filter); + + TextureData *data = new TextureData; + + data->gid = gid; + data->parameters = parameters; + data->width = width; + data->height = height; + data->exwidth = exwidth; + data->exheight = exheight; + data->baseWidth = baseWidth; + data->baseHeight = baseHeight; + + return data; +} + +void TextureManager::destroyTexture(TextureData* texture) +{ + TextureData* internal = (TextureData*)gtexture_getUserData(texture->gid); + if (gtexture_delete(texture->gid)) + if (internal) + delete internal; + delete texture; +} + diff --git a/2dsg/texturemanager.h b/2dsg/texturemanager.h index 5c7af38a8..0d1bb59ed 100644 --- a/2dsg/texturemanager.h +++ b/2dsg/texturemanager.h @@ -1,79 +1,79 @@ -#ifndef _TEXTUREMANAGER_H_ -#define _TEXTUREMANAGER_H_ - -#include -#include - -class Application; -class TextureData; -class Dib; - -enum Filter -{ - eNearest, - eLinear, -}; - -enum Wrap -{ - eClamp, - eRepeat, -}; - -enum Format -{ - eRGBA8888, - eRGB888, - eRGB565, - eRGBA4444, - eRGBA5551, -}; - -struct TextureParameters -{ - TextureParameters() - { - filter = eNearest; - wrap = eClamp; - format = eRGBA8888; - maketransparent = false; - transparentcolor = 0x00000000; - grayscale = false; - } - - Filter filter; - Wrap wrap; - Format format; - bool maketransparent; - unsigned int transparentcolor; - bool grayscale; -}; - -struct TextureData -{ - ShaderTexture *id(); - g_id gid; - TextureParameters parameters; - int width, height; - int exwidth, exheight; - int baseWidth, baseHeight; -}; - - -class TextureManager -{ -public: - TextureManager(Application* application); - ~TextureManager(); - - TextureData* createTextureFromFile(const char* filename, const TextureParameters& parameters); - TextureData* createTextureFromDib(const Dib& dib, const TextureParameters& parameters); - TextureData* createRenderTarget(int width, int height, const TextureParameters& parameters); - void destroyTexture(TextureData* texture); - -private: - Application *application_; -}; - - -#endif +#ifndef _TEXTUREMANAGER_H_ +#define _TEXTUREMANAGER_H_ + +#include +#include + +class Application; +class TextureData; +class Dib; + +enum Filter +{ + eNearest, + eLinear, +}; + +enum Wrap +{ + eClamp, + eRepeat, +}; + +enum Format +{ + eRGBA8888, + eRGB888, + eRGB565, + eRGBA4444, + eRGBA5551, +}; + +struct TextureParameters +{ + TextureParameters() + { + filter = eNearest; + wrap = eClamp; + format = eRGBA8888; + maketransparent = false; + transparentcolor = 0x00000000; + grayscale = false; + } + + Filter filter; + Wrap wrap; + Format format; + bool maketransparent; + unsigned int transparentcolor; + bool grayscale; +}; + +struct TextureData +{ + ShaderTexture *id(); + g_id gid; + TextureParameters parameters; + int width, height; + int exwidth, exheight; + int baseWidth, baseHeight; +}; + + +class TextureManager +{ +public: + TextureManager(Application* application); + ~TextureManager(); + + TextureData* createTextureFromFile(const char* filename, const TextureParameters& parameters); + TextureData* createTextureFromDib(const Dib& dib, const TextureParameters& parameters); + TextureData* createRenderTarget(int width, int height, const TextureParameters& parameters); + void destroyTexture(TextureData* texture); + +private: + Application *application_; +}; + + +#endif diff --git a/2dsg/texturepack.cpp b/2dsg/texturepack.cpp index f43860804..f4b0a32ea 100644 --- a/2dsg/texturepack.cpp +++ b/2dsg/texturepack.cpp @@ -1,226 +1,226 @@ -#include "texturepack.h" -#include "dib.h" -#include "texturepacker.h" -#include "bitmapdata.h" -#include "ogl.h" -#include -#include -#include -#include "application.h" -#include "giderosexception.h" -#include - -TexturePack::TexturePack(Application* application, - const char* texturelistfile, const char* imagefile, Filter filter, Wrap wrap, Format format, - bool maketransparent/* = false*/, unsigned int transparentcolor/* = 0x00000000*/) : - TextureBase(application, imagefile, filter, wrap, format, maketransparent, transparentcolor) -{ - float scale; - const char *suffix = application->getImageSuffix(imagefile, &scale); - - const char *ext = strrchr(texturelistfile, '.'); - if (ext == NULL) - ext = texturelistfile + strlen(texturelistfile); - - std::string texturelistfilex = std::string(texturelistfile, ext - texturelistfile) + (suffix ? suffix : "") + ext; - - G_FILE *f = g_fopen(texturelistfilex.c_str(), "r"); - if (f) - g_fclose(f); - - if (f) - { - readTextureList(texturelistfilex.c_str(), textures_, filenameMap_); - sizescalex = 1 / scale; - sizescaley = 1 / scale; - uvscalex = 1; - uvscaley = 1; - } - else - { - readTextureList(texturelistfile, textures_, filenameMap_); - // sizescalex, sizescaley, uvscalex, uvscaley are set at TextureBase's constructor - } -} - -TexturePack::TexturePack(Application* application, - const char** filenames, int padding, Filter filter, Wrap wrap, Format format, - bool maketransparent/* = false*/, unsigned int transparentcolor/* = 0x00000000*/) : - TextureBase(application) -{ - std::vector dibs; - - int count = 0; - while (*filenames) - { - dibs.push_back(Dib(application, *filenames, true, false, maketransparent, transparentcolor)); - filenameMap_[*filenames] = count++; - filenames++; - } - - if (dibs.empty() == false) - { - TexturePacker* tp = createTexturePacker(); - - tp->setTextureCount((int)dibs.size()); - for (std::size_t i = 0; i < dibs.size(); ++i) - tp->addTexture(dibs[i].width(), dibs[i].height()); - - tp->packTextures(&this->data->width, &this->data->height, padding); - this->data->exwidth = this->data->width; - this->data->exheight = this->data->height; - - Dib texture(application, data->width, data->height); - //unsigned char* texture = new unsigned char[width * height * 4]; - //int texwidth = width; - //int texheight = height; - - for (int i = 0; i < (int)dibs.size(); ++i) - { - int xo, yo; - int width, height; - tp->getTextureLocation(i, &xo, &yo, &width, &height); - - for (int y = 0; y < height; ++y) - for (int x = 0; x < width; ++x) - { - unsigned char rgba[4]; - dibs[i].getPixel(x, y, rgba); - texture.setPixel(xo + x, yo + y, rgba); - } - - textures_.push_back(Rect(xo, yo, width, height)); - } - - TextureParameters parameters; - parameters.filter = filter; - parameters.wrap = wrap; - parameters.format = format; - - data = application->getTextureManager()->createTextureFromDib(texture, parameters); - - releaseTexturePacker(tp); - } -} - -TexturePack::~TexturePack() -{ -} - -bool TexturePack::location(int index, int* x, int* y, int* width, int* height, int* dx1, int* dy1, int* dx2, int* dy2) const -{ - if (index < 0 || index >= (int)textures_.size()) - return false; - - if (x) - *x = textures_[index].x; - if (y) - *y = textures_[index].y; - if (width) - *width = textures_[index].width; - if (height) - *height = textures_[index].height; - if (dx1) - *dx1 = textures_[index].dx1; - if (dy1) - *dy1 = textures_[index].dy1; - if (dx2) - *dx2 = textures_[index].dx2; - if (dy2) - *dy2 = textures_[index].dy2; - - return true; -} - -bool TexturePack::location(const char* filename, int* x, int* y, int* width, int* height, int* dx1, int* dy1, int* dx2, int* dy2) const -{ - std::map::const_iterator iter = filenameMap_.find(filename); - - if (iter == filenameMap_.end()) - return false; - - location(iter->second, x, y, width, height, dx1, dy1, dx2, dy2); - - return true; -} - - -void TexturePack::readTextureList(const char* texturelistfile, - std::vector& textures_, - std::map& filenameMap_, - int* pwidth, int* pheight) -{ - G_FILE* fis = g_fopen(texturelistfile, "rt"); - - if (fis == NULL) - { - throw GiderosException(GStatus(6000, texturelistfile)); // Error #6000: %s: No such file or directory. - return; - } - - textures_.clear(); - filenameMap_.clear(); - - int width = 0; - int height = 0; - - char line[1024]; - - while (true) - { - line[0] = line[1023] = 0; - if (g_fgets(line, 1024, fis) == NULL) - break; - - char* c; - if ((c = strrchr(line, 0xa))) - *c = '\0'; - if ((c = strrchr(line, 0xd))) - *c = '\0'; - - if (line[0] == '\0') - break; - - std::vector result; - pystring::split(line, result, ","); - - for (std::size_t i = 0; i < result.size(); ++i) - { - if (result[i].empty() == false) - result[i] = pystring::strip(result[i]); - } - - if (result.size() >= 9) - { - Rect rect; - - rect.x = atoi(result[1].c_str()); - rect.y = atoi(result[2].c_str()); - rect.width = atoi(result[3].c_str()); - rect.height = atoi(result[4].c_str()); - rect.dx1 = atoi(result[5].c_str()); - rect.dy1 = atoi(result[6].c_str()); - rect.dx2 = atoi(result[7].c_str()); - rect.dy2 = atoi(result[8].c_str()); - - filenameMap_[result[0]] = textures_.size(); - textures_.push_back(rect); - - width += rect.width + rect.dx1 + rect.dx2; - height += rect.height + rect.dy1 + rect.dy2; - } - } - - g_fclose(fis); - - if (pwidth) - *pwidth = width; - if (pheight) - *pheight = height; - - if (textures_.empty() == true) - { - throw GiderosException(GStatus(6008, texturelistfile)); // Error #6008: %s: File does not contain texture region information. - return; - } -} +#include "texturepack.h" +#include "dib.h" +#include "texturepacker.h" +#include "bitmapdata.h" +#include "ogl.h" +#include +#include +#include +#include "application.h" +#include "giderosexception.h" +#include + +TexturePack::TexturePack(Application* application, + const char* texturelistfile, const char* imagefile, Filter filter, Wrap wrap, Format format, + bool maketransparent/* = false*/, unsigned int transparentcolor/* = 0x00000000*/) : + TextureBase(application, imagefile, filter, wrap, format, maketransparent, transparentcolor) +{ + float scale; + const char *suffix = application->getImageSuffix(imagefile, &scale); + + const char *ext = strrchr(texturelistfile, '.'); + if (ext == NULL) + ext = texturelistfile + strlen(texturelistfile); + + std::string texturelistfilex = std::string(texturelistfile, ext - texturelistfile) + (suffix ? suffix : "") + ext; + + G_FILE *f = g_fopen(texturelistfilex.c_str(), "r"); + if (f) + g_fclose(f); + + if (f) + { + readTextureList(texturelistfilex.c_str(), textures_, filenameMap_); + sizescalex = 1 / scale; + sizescaley = 1 / scale; + uvscalex = 1; + uvscaley = 1; + } + else + { + readTextureList(texturelistfile, textures_, filenameMap_); + // sizescalex, sizescaley, uvscalex, uvscaley are set at TextureBase's constructor + } +} + +TexturePack::TexturePack(Application* application, + const char** filenames, int padding, Filter filter, Wrap wrap, Format format, + bool maketransparent/* = false*/, unsigned int transparentcolor/* = 0x00000000*/) : + TextureBase(application) +{ + std::vector dibs; + + int count = 0; + while (*filenames) + { + dibs.push_back(Dib(application, *filenames, true, false, maketransparent, transparentcolor)); + filenameMap_[*filenames] = count++; + filenames++; + } + + if (dibs.empty() == false) + { + TexturePacker* tp = createTexturePacker(); + + tp->setTextureCount((int)dibs.size()); + for (std::size_t i = 0; i < dibs.size(); ++i) + tp->addTexture(dibs[i].width(), dibs[i].height()); + + tp->packTextures(&this->data->width, &this->data->height, padding); + this->data->exwidth = this->data->width; + this->data->exheight = this->data->height; + + Dib texture(application, data->width, data->height); + //unsigned char* texture = new unsigned char[width * height * 4]; + //int texwidth = width; + //int texheight = height; + + for (int i = 0; i < (int)dibs.size(); ++i) + { + int xo, yo; + int width, height; + tp->getTextureLocation(i, &xo, &yo, &width, &height); + + for (int y = 0; y < height; ++y) + for (int x = 0; x < width; ++x) + { + unsigned char rgba[4]; + dibs[i].getPixel(x, y, rgba); + texture.setPixel(xo + x, yo + y, rgba); + } + + textures_.push_back(Rect(xo, yo, width, height)); + } + + TextureParameters parameters; + parameters.filter = filter; + parameters.wrap = wrap; + parameters.format = format; + + data = application->getTextureManager()->createTextureFromDib(texture, parameters); + + releaseTexturePacker(tp); + } +} + +TexturePack::~TexturePack() +{ +} + +bool TexturePack::location(int index, int* x, int* y, int* width, int* height, int* dx1, int* dy1, int* dx2, int* dy2) const +{ + if (index < 0 || index >= (int)textures_.size()) + return false; + + if (x) + *x = textures_[index].x; + if (y) + *y = textures_[index].y; + if (width) + *width = textures_[index].width; + if (height) + *height = textures_[index].height; + if (dx1) + *dx1 = textures_[index].dx1; + if (dy1) + *dy1 = textures_[index].dy1; + if (dx2) + *dx2 = textures_[index].dx2; + if (dy2) + *dy2 = textures_[index].dy2; + + return true; +} + +bool TexturePack::location(const char* filename, int* x, int* y, int* width, int* height, int* dx1, int* dy1, int* dx2, int* dy2) const +{ + std::map::const_iterator iter = filenameMap_.find(filename); + + if (iter == filenameMap_.end()) + return false; + + location(iter->second, x, y, width, height, dx1, dy1, dx2, dy2); + + return true; +} + + +void TexturePack::readTextureList(const char* texturelistfile, + std::vector& textures_, + std::map& filenameMap_, + int* pwidth, int* pheight) +{ + G_FILE* fis = g_fopen(texturelistfile, "rt"); + + if (fis == NULL) + { + throw GiderosException(GStatus(6000, texturelistfile)); // Error #6000: %s: No such file or directory. + return; + } + + textures_.clear(); + filenameMap_.clear(); + + int width = 0; + int height = 0; + + char line[1024]; + + while (true) + { + line[0] = line[1023] = 0; + if (g_fgets(line, 1024, fis) == NULL) + break; + + char* c; + if ((c = strrchr(line, 0xa))) + *c = '\0'; + if ((c = strrchr(line, 0xd))) + *c = '\0'; + + if (line[0] == '\0') + break; + + std::vector result; + pystring::split(line, result, ","); + + for (std::size_t i = 0; i < result.size(); ++i) + { + if (result[i].empty() == false) + result[i] = pystring::strip(result[i]); + } + + if (result.size() >= 9) + { + Rect rect; + + rect.x = atoi(result[1].c_str()); + rect.y = atoi(result[2].c_str()); + rect.width = atoi(result[3].c_str()); + rect.height = atoi(result[4].c_str()); + rect.dx1 = atoi(result[5].c_str()); + rect.dy1 = atoi(result[6].c_str()); + rect.dx2 = atoi(result[7].c_str()); + rect.dy2 = atoi(result[8].c_str()); + + filenameMap_[result[0]] = textures_.size(); + textures_.push_back(rect); + + width += rect.width + rect.dx1 + rect.dx2; + height += rect.height + rect.dy1 + rect.dy2; + } + } + + g_fclose(fis); + + if (pwidth) + *pwidth = width; + if (pheight) + *pheight = height; + + if (textures_.empty() == true) + { + throw GiderosException(GStatus(6008, texturelistfile)); // Error #6008: %s: File does not contain texture region information. + return; + } +} diff --git a/2dsg/texturepack.h b/2dsg/texturepack.h index 319ca0e5e..2cbb33d84 100644 --- a/2dsg/texturepack.h +++ b/2dsg/texturepack.h @@ -1,54 +1,54 @@ -#ifndef TEXTUREPACK_H -#define TEXTUREPACK_H - -#include "texturebase.h" -#include -#include - -class BitmapData; - -class TexturePack : public TextureBase -{ -public: - // can throw GiderosException - TexturePack(Application* application, const char** filenames, int padding, Filter filter, Wrap wrap, Format format, bool maketransparent = false, unsigned int transparentcolor = 0x00000000); - TexturePack(Application* application, const char* texturelistfile, const char* imagefile, Filter filter, Wrap wrap, Format format, bool maketransparent = false, unsigned int transparentcolor = 0x00000000); - virtual ~TexturePack(); - - bool location(int index, int* x, int* y, int* width, int* height, int* dx1, int* dy1, int* dx2, int* dy2) const; - bool location(const char* filename, int* x, int* y, int* width, int* height, int* dx1, int* dy1, int* dx2, int* dy2) const; - -private: - struct Rect - { - Rect() - { - - } - - Rect(int x, int y, int width, int height, int dx1 = 0, int dy1 = 0, int dx2 = 0, int dy2 = 0) : - x(x), - y(y), - width(width), - height(height), - dx1(dx1), dy1(dy1), - dx2(dx2), dy2(dy2) - { - - } - - int x, y; - int width, height; - int dx1, dy1; - int dx2, dy2; - }; - - std::vector textures_; - std::map filenameMap_; - static void readTextureList(const char* texturelistfile, - std::vector& textures_, - std::map& filenameMap_, - int* pwidth = NULL, int* pheight = NULL); -}; - -#endif +#ifndef TEXTUREPACK_H +#define TEXTUREPACK_H + +#include "texturebase.h" +#include +#include + +class BitmapData; + +class TexturePack : public TextureBase +{ +public: + // can throw GiderosException + TexturePack(Application* application, const char** filenames, int padding, Filter filter, Wrap wrap, Format format, bool maketransparent = false, unsigned int transparentcolor = 0x00000000); + TexturePack(Application* application, const char* texturelistfile, const char* imagefile, Filter filter, Wrap wrap, Format format, bool maketransparent = false, unsigned int transparentcolor = 0x00000000); + virtual ~TexturePack(); + + bool location(int index, int* x, int* y, int* width, int* height, int* dx1, int* dy1, int* dx2, int* dy2) const; + bool location(const char* filename, int* x, int* y, int* width, int* height, int* dx1, int* dy1, int* dx2, int* dy2) const; + +private: + struct Rect + { + Rect() + { + + } + + Rect(int x, int y, int width, int height, int dx1 = 0, int dy1 = 0, int dx2 = 0, int dy2 = 0) : + x(x), + y(y), + width(width), + height(height), + dx1(dx1), dy1(dy1), + dx2(dx2), dy2(dy2) + { + + } + + int x, y; + int width, height; + int dx1, dy1; + int dx2, dy2; + }; + + std::vector textures_; + std::map filenameMap_; + static void readTextureList(const char* texturelistfile, + std::vector& textures_, + std::map& filenameMap_, + int* pwidth = NULL, int* pheight = NULL); +}; + +#endif diff --git a/2dsg/texturepacker.cpp b/2dsg/texturepacker.cpp index 4c47aa5be..33df81313 100644 --- a/2dsg/texturepacker.cpp +++ b/2dsg/texturepacker.cpp @@ -1,152 +1,152 @@ -#include "texturepacker.h" -#include "MaxRectsBinPack.h" -#include -#include - -class MyTexturePacker : public TexturePacker -{ -public: - MyTexturePacker() - { - textureindex_ = 0; - } - - virtual ~MyTexturePacker() {} - virtual void setTextureCount(int tcount) - { - rects_.resize(tcount); - textureindex_ = 0; - } - - virtual void addTexture(int width, int height) - { - rects_[textureindex_].width = width; - rects_[textureindex_++].height = height; - } - - virtual void packTextures(int* pwidth, int* pheight, int border, bool forceSquare) - { - for (size_t i = 0; i < rects_.size(); ++i) - { - rects_[i].width += border * 2; - rects_[i].height += border * 2; - } - - int maxWidth = 0; - int maxHeight = 0; - int totalArea = 0; - for (size_t i = 0; i < rects_.size(); ++i) - { - int width = rects_[i].width; - int height = rects_[i].height; - - maxWidth = std::max(maxWidth, width); - maxHeight = std::max(maxHeight, height); - totalArea += width * height; - } - - int max = 11; // 2^11 = 2048 - for (int i = 0; i < max * 2 + 1; ++i) - { - int jmax = max - abs(max - i) + 1; - int jstart = (i < max) ? 0 : (i - max); - for (int j = 0; j < jmax; ++j) - { - int x = (jmax / 2) + offset(j) + jstart; // j + jstart - int y = i - x; - - if (forceSquare && (x != y)) - continue; - - int width = 1 << x; - int height = 1 << y; - int area = width * height; - - if (width < maxWidth || height < maxHeight || area < totalArea) - continue; - - packHelper2(width, height); - - if (result_.size() == rects_.size()) - { - *pwidth = width; - *pheight = height; - - for (size_t i = 0; i < result_.size(); ++i) - { - result_[i].width -= 2 * border; - result_[i].height -= 2 * border; - result_[i].x += border; - result_[i].y += border; - } - - return; - } - } - } - } - - virtual void getTextureLocation(int index, int* x, int* y, int* width, int* height) - { - *x = result_[index].x; - *y = result_[index].y; - *width = result_[index].width; - *height = result_[index].height; - } - -private: - // 0, -1, 1, -2, 2, -3, 3, -4, 4, -5, 5, -6, 6 ... - inline int offset(int i) - { - return ((i + 1) / 2) * ((i % 2) ? -1 : 1); - } - - void packHelper1(int width, int height, MaxRectsBinPack::FreeRectChoiceHeuristic method) - { - result_.clear(); - binPack_.Init(width, height); - for (size_t i = 0; i < rects_.size(); ++i) - { - Rect rect = binPack_.Insert(rects_[i].width, rects_[i].height, method); - if (rect.height == 0) - break; - result_.push_back(rect); - } - } - - void packHelper2(int width, int height) - { - packHelper1(width, height, MaxRectsBinPack::RectBestShortSideFit); - if (result_.size() == rects_.size()) - return; - packHelper1(width, height, MaxRectsBinPack::RectBestLongSideFit); - if (result_.size() == rects_.size()) - return; - packHelper1(width, height, MaxRectsBinPack::RectBestAreaFit); - if (result_.size() == rects_.size()) - return; - packHelper1(width, height, MaxRectsBinPack::RectBottomLeftRule); - if (result_.size() == rects_.size()) - return; - packHelper1(width, height, MaxRectsBinPack::RectContactPointRule); - if (result_.size() == rects_.size()) - return; - } - - std::vector rects_; - std::vector result_; - int textureindex_; - MaxRectsBinPack binPack_; -}; - -TexturePacker* createTexturePacker(void) -{ - MyTexturePacker* m = new MyTexturePacker; - return static_cast(m); -} - -void releaseTexturePacker(TexturePacker *tp) -{ - MyTexturePacker* m = static_cast(tp); - delete m; -} +#include "texturepacker.h" +#include "MaxRectsBinPack.h" +#include +#include + +class MyTexturePacker : public TexturePacker +{ +public: + MyTexturePacker() + { + textureindex_ = 0; + } + + virtual ~MyTexturePacker() {} + virtual void setTextureCount(int tcount) + { + rects_.resize(tcount); + textureindex_ = 0; + } + + virtual void addTexture(int width, int height) + { + rects_[textureindex_].width = width; + rects_[textureindex_++].height = height; + } + + virtual void packTextures(int* pwidth, int* pheight, int border, bool forceSquare) + { + for (size_t i = 0; i < rects_.size(); ++i) + { + rects_[i].width += border * 2; + rects_[i].height += border * 2; + } + + int maxWidth = 0; + int maxHeight = 0; + int totalArea = 0; + for (size_t i = 0; i < rects_.size(); ++i) + { + int width = rects_[i].width; + int height = rects_[i].height; + + maxWidth = std::max(maxWidth, width); + maxHeight = std::max(maxHeight, height); + totalArea += width * height; + } + + int max = 11; // 2^11 = 2048 + for (int i = 0; i < max * 2 + 1; ++i) + { + int jmax = max - abs(max - i) + 1; + int jstart = (i < max) ? 0 : (i - max); + for (int j = 0; j < jmax; ++j) + { + int x = (jmax / 2) + offset(j) + jstart; // j + jstart + int y = i - x; + + if (forceSquare && (x != y)) + continue; + + int width = 1 << x; + int height = 1 << y; + int area = width * height; + + if (width < maxWidth || height < maxHeight || area < totalArea) + continue; + + packHelper2(width, height); + + if (result_.size() == rects_.size()) + { + *pwidth = width; + *pheight = height; + + for (size_t i = 0; i < result_.size(); ++i) + { + result_[i].width -= 2 * border; + result_[i].height -= 2 * border; + result_[i].x += border; + result_[i].y += border; + } + + return; + } + } + } + } + + virtual void getTextureLocation(int index, int* x, int* y, int* width, int* height) + { + *x = result_[index].x; + *y = result_[index].y; + *width = result_[index].width; + *height = result_[index].height; + } + +private: + // 0, -1, 1, -2, 2, -3, 3, -4, 4, -5, 5, -6, 6 ... + inline int offset(int i) + { + return ((i + 1) / 2) * ((i % 2) ? -1 : 1); + } + + void packHelper1(int width, int height, MaxRectsBinPack::FreeRectChoiceHeuristic method) + { + result_.clear(); + binPack_.Init(width, height); + for (size_t i = 0; i < rects_.size(); ++i) + { + Rect rect = binPack_.Insert(rects_[i].width, rects_[i].height, method); + if (rect.height == 0) + break; + result_.push_back(rect); + } + } + + void packHelper2(int width, int height) + { + packHelper1(width, height, MaxRectsBinPack::RectBestShortSideFit); + if (result_.size() == rects_.size()) + return; + packHelper1(width, height, MaxRectsBinPack::RectBestLongSideFit); + if (result_.size() == rects_.size()) + return; + packHelper1(width, height, MaxRectsBinPack::RectBestAreaFit); + if (result_.size() == rects_.size()) + return; + packHelper1(width, height, MaxRectsBinPack::RectBottomLeftRule); + if (result_.size() == rects_.size()) + return; + packHelper1(width, height, MaxRectsBinPack::RectContactPointRule); + if (result_.size() == rects_.size()) + return; + } + + std::vector rects_; + std::vector result_; + int textureindex_; + MaxRectsBinPack binPack_; +}; + +TexturePacker* createTexturePacker(void) +{ + MyTexturePacker* m = new MyTexturePacker; + return static_cast(m); +} + +void releaseTexturePacker(TexturePacker *tp) +{ + MyTexturePacker* m = static_cast(tp); + delete m; +} diff --git a/2dsg/texturepacker.h b/2dsg/texturepacker.h index ecba15171..164d4a465 100644 --- a/2dsg/texturepacker.h +++ b/2dsg/texturepacker.h @@ -1,17 +1,17 @@ -#ifndef TEXTURE_PACKER_H -#define TEXTURE_PACKER_H - -class TexturePacker -{ -public: - virtual ~TexturePacker() {} - virtual void setTextureCount(int tcount) = 0; - virtual void addTexture(int width, int height) = 0; - virtual void packTextures(int* width, int* height, int border, bool forceSquare = false) = 0; - virtual void getTextureLocation(int index, int* x, int* y, int* width, int* height) = 0; -}; - -TexturePacker* createTexturePacker(void); -void releaseTexturePacker(TexturePacker* tp); - -#endif +#ifndef TEXTURE_PACKER_H +#define TEXTURE_PACKER_H + +class TexturePacker +{ +public: + virtual ~TexturePacker() {} + virtual void setTextureCount(int tcount) = 0; + virtual void addTexture(int width, int height) = 0; + virtual void packTextures(int* width, int* height, int border, bool forceSquare = false) = 0; + virtual void getTextureLocation(int index, int* x, int* y, int* width, int* height) = 0; +}; + +TexturePacker* createTexturePacker(void); +void releaseTexturePacker(TexturePacker* tp); + +#endif diff --git a/2dsg/ticker.h b/2dsg/ticker.h index 4a57865c5..dd363c3e9 100644 --- a/2dsg/ticker.h +++ b/2dsg/ticker.h @@ -1,11 +1,11 @@ -#ifndef TICKER_H -#define TICKER_H - -class Ticker -{ -public: - virtual ~Ticker() {} - virtual void tick() = 0; -}; - -#endif +#ifndef TICKER_H +#define TICKER_H + +class Ticker +{ +public: + virtual ~Ticker() {} + virtual void tick() = 0; +}; + +#endif diff --git a/2dsg/timer.cpp b/2dsg/timer.cpp index bb5b22147..c13b6e2f6 100644 --- a/2dsg/timer.cpp +++ b/2dsg/timer.cpp @@ -1,69 +1,69 @@ -#include "timer.h" -#include "timercontainer.h" -#include "timerevent.h" -#include "platform.h" -#include -#include "application.h" - -Timer::Timer(Application *application, double delay, int repeatCount) -{ - application_ = application; - delay_ = delay; - repeatCount_ = repeatCount; - running_ = false; - currentCount_ = 0; - additionalDelay_ = 0; - - container_ = application_->getTimerContainer(); -} - -Timer::~Timer() -{ - stop(); -} - -void Timer::start() -{ - if (!running_) - { - container_->addTimer(this, additionalDelay_); - additionalDelay_ = 0; - running_ = true; - } -} - -void Timer::stop() -{ - additionalDelay_ = 0; - if (running_) - { - container_->removeTimer(this); - running_ = false; - } - container_->removeEvents(this); -} - -void Timer::pause() -{ - if (running_) - { - additionalDelay_ = container_->getAdditionalDelay(this); - container_->removeTimer(this); - running_ = false; - } -} - -void Timer::tick() -{ - currentCount_++; - - container_->queueTimerEvent(this); - - if (repeatCount_ != 0 && currentCount_ >= repeatCount_) - { - additionalDelay_ = 0; - container_->removeTimer(this); - running_ = false; - container_->queueTimerCompleteEvent(this); - } -} +#include "timer.h" +#include "timercontainer.h" +#include "timerevent.h" +#include "platform.h" +#include +#include "application.h" + +Timer::Timer(Application *application, double delay, int repeatCount) +{ + application_ = application; + delay_ = delay; + repeatCount_ = repeatCount; + running_ = false; + currentCount_ = 0; + additionalDelay_ = 0; + + container_ = application_->getTimerContainer(); +} + +Timer::~Timer() +{ + stop(); +} + +void Timer::start() +{ + if (!running_) + { + container_->addTimer(this, additionalDelay_); + additionalDelay_ = 0; + running_ = true; + } +} + +void Timer::stop() +{ + additionalDelay_ = 0; + if (running_) + { + container_->removeTimer(this); + running_ = false; + } + container_->removeEvents(this); +} + +void Timer::pause() +{ + if (running_) + { + additionalDelay_ = container_->getAdditionalDelay(this); + container_->removeTimer(this); + running_ = false; + } +} + +void Timer::tick() +{ + currentCount_++; + + container_->queueTimerEvent(this); + + if (repeatCount_ != 0 && currentCount_ >= repeatCount_) + { + additionalDelay_ = 0; + container_->removeTimer(this); + running_ = false; + container_->queueTimerCompleteEvent(this); + } +} diff --git a/2dsg/timer.h b/2dsg/timer.h index f2c72d9be..40cadc1cf 100644 --- a/2dsg/timer.h +++ b/2dsg/timer.h @@ -1,78 +1,78 @@ -#ifndef TIMER_H_AC -#define TIMER_H_AC - -#include "eventdispatcher.h" - -class Application; - -class TimerContainer; - -class Timer : public EventDispatcher -{ -public: - Timer(Application *application, double delay, int repeatCount = 0); - virtual ~Timer(); - - void start(); - void stop(); - void reset() - { - stop(); - currentCount_ = 0; - } - void pause(); - - virtual void tick(); - - double delay() const - { - return delay_; - } - - int currentCount() const - { - return currentCount_; - } - - int repeatCount() const - { - return repeatCount_; - } - - bool running() const - { - return running_; - } - - void setDelay(double delay) - { - delay_ = delay; - - if (running() == true) - { - stop(); - start(); - } - } - - void setRepeatCount(int repeatCount) - { - repeatCount_ = repeatCount; - - if (repeatCount_ != 0 && currentCount_ >= repeatCount_) - stop(); - } - -private: - double delay_; - int repeatCount_; - bool running_; - int currentCount_; - double additionalDelay_; - - TimerContainer* container_; - - Application *application_; -}; - -#endif +#ifndef TIMER_H_AC +#define TIMER_H_AC + +#include "eventdispatcher.h" + +class Application; + +class TimerContainer; + +class Timer : public EventDispatcher +{ +public: + Timer(Application *application, double delay, int repeatCount = 0); + virtual ~Timer(); + + void start(); + void stop(); + void reset() + { + stop(); + currentCount_ = 0; + } + void pause(); + + virtual void tick(); + + double delay() const + { + return delay_; + } + + int currentCount() const + { + return currentCount_; + } + + int repeatCount() const + { + return repeatCount_; + } + + bool running() const + { + return running_; + } + + void setDelay(double delay) + { + delay_ = delay; + + if (running() == true) + { + stop(); + start(); + } + } + + void setRepeatCount(int repeatCount) + { + repeatCount_ = repeatCount; + + if (repeatCount_ != 0 && currentCount_ >= repeatCount_) + stop(); + } + +private: + double delay_; + int repeatCount_; + bool running_; + int currentCount_; + double additionalDelay_; + + TimerContainer* container_; + + Application *application_; +}; + +#endif diff --git a/2dsg/timercontainer.cpp b/2dsg/timercontainer.cpp index dbce5847d..ff5405d51 100644 --- a/2dsg/timercontainer.cpp +++ b/2dsg/timercontainer.cpp @@ -1,139 +1,139 @@ -#include "timercontainer.h" -#include "timer.h" -#include "platform.h" -#include -#include -#include "timerevent.h" -#include -#include - -TimerContainer::TimerContainer(Application *application) : application_(application) -{ - -} - -TimerContainer::~TimerContainer() -{ - -} - -void TimerContainer::addTimer(Timer* timer, double additionalDelay) -{ - double clock = stopWatch_.clock() - additionalDelay; - - timers_.insert(timer); - timer->ref(); - queue_[clock + timer->delay() / 1000].push_back(timer); -} - -void TimerContainer::removeTimer(Timer* timer) -{ - timers_.erase(timer); - - for (std::map >::iterator iter = queue_.begin(); iter != queue_.end(); ++iter) - { - std::vector& timers = iter->second; - timers.erase( - std::remove_if( - timers.begin(), - timers.end(), - std::bind2nd(std::equal_to(), timer)), - timers.end()); - } - timer->unref(); -} - -void TimerContainer::removeAllTimers() -{ - while (timers_.empty() == false) - (*timers_.begin())->stop(); -} - -void TimerContainer::tick() -{ - void *pool = application_->createAutounrefPool(); - - double clock = stopWatch_.clock(); - - while (queue_.empty() == false && queue_.begin()->first < clock) - { - std::vector timers = queue_.begin()->second; - - queue_.erase(queue_.begin()); - - for (std::size_t i = 0; i < timers.size(); ++i) - if (timers[i]->running() == true) - timers[i]->tick(); - - for (std::size_t i = 0; i < timers.size(); ++i) - if (timers[i]->running() == true) - queue_[clock + timers[i]->delay() / 1000].push_back(timers[i]); - } - - while (!eventQueue_.empty()) - { - Timer *timer = eventQueue_.front().first; - int type = eventQueue_.front().second; - eventQueue_.pop_front(); - - timer->ref(); - application_->autounref(timer); - - if (type == 0) - { - TimerEvent timerEvent(TimerEvent::TIMER); - timer->dispatchEvent(&timerEvent); - } - else if (type == 1) - { - TimerEvent timerEvent(TimerEvent::TIMER_COMPLETE); - timer->dispatchEvent(&timerEvent); - } - } - - application_->deleteAutounrefPool(pool); -} - -double TimerContainer::getAdditionalDelay(const Timer *timer) -{ - std::map >::iterator iter, e = queue_.end(); - for (iter = queue_.begin(); iter != e; ++iter) - { - const std::vector &timers = iter->second; - if (std::find(timers.begin(), timers.end(), timer) != timers.end()) - return (timer->delay() / 1000) - (iter->first - stopWatch_.clock()); - } - - return 0; -} - -void TimerContainer::queueTimerEvent(Timer *timer) -{ - eventQueue_.push_back(std::make_pair(timer, 0)); -} - -void TimerContainer::queueTimerCompleteEvent(Timer *timer) -{ - eventQueue_.push_back(std::make_pair(timer, 1)); -} - -void TimerContainer::removeEvents(Timer *timer) -{ - eventQueue_.erase(std::remove(eventQueue_.begin(), eventQueue_.end(), std::make_pair(timer, 0)), eventQueue_.end()); - eventQueue_.erase(std::remove(eventQueue_.begin(), eventQueue_.end(), std::make_pair(timer, 1)), eventQueue_.end()); -} - -void TimerContainer::pauseAllTimers() -{ - stopWatch_.pause(); -} - -void TimerContainer::resumeAllTimers() -{ - stopWatch_.resume(); -} - -bool TimerContainer::isAllTimersPaused() const -{ - return stopWatch_.isPaused(); -} +#include "timercontainer.h" +#include "timer.h" +#include "platform.h" +#include +#include +#include "timerevent.h" +#include +#include + +TimerContainer::TimerContainer(Application *application) : application_(application) +{ + +} + +TimerContainer::~TimerContainer() +{ + +} + +void TimerContainer::addTimer(Timer* timer, double additionalDelay) +{ + double clock = stopWatch_.clock() - additionalDelay; + + timers_.insert(timer); + timer->ref(); + queue_[clock + timer->delay() / 1000].push_back(timer); +} + +void TimerContainer::removeTimer(Timer* timer) +{ + timers_.erase(timer); + + for (std::map >::iterator iter = queue_.begin(); iter != queue_.end(); ++iter) + { + std::vector& timers = iter->second; + timers.erase( + std::remove_if( + timers.begin(), + timers.end(), + std::bind2nd(std::equal_to(), timer)), + timers.end()); + } + timer->unref(); +} + +void TimerContainer::removeAllTimers() +{ + while (timers_.empty() == false) + (*timers_.begin())->stop(); +} + +void TimerContainer::tick() +{ + void *pool = application_->createAutounrefPool(); + + double clock = stopWatch_.clock(); + + while (queue_.empty() == false && queue_.begin()->first < clock) + { + std::vector timers = queue_.begin()->second; + + queue_.erase(queue_.begin()); + + for (std::size_t i = 0; i < timers.size(); ++i) + if (timers[i]->running() == true) + timers[i]->tick(); + + for (std::size_t i = 0; i < timers.size(); ++i) + if (timers[i]->running() == true) + queue_[clock + timers[i]->delay() / 1000].push_back(timers[i]); + } + + while (!eventQueue_.empty()) + { + Timer *timer = eventQueue_.front().first; + int type = eventQueue_.front().second; + eventQueue_.pop_front(); + + timer->ref(); + application_->autounref(timer); + + if (type == 0) + { + TimerEvent timerEvent(TimerEvent::TIMER); + timer->dispatchEvent(&timerEvent); + } + else if (type == 1) + { + TimerEvent timerEvent(TimerEvent::TIMER_COMPLETE); + timer->dispatchEvent(&timerEvent); + } + } + + application_->deleteAutounrefPool(pool); +} + +double TimerContainer::getAdditionalDelay(const Timer *timer) +{ + std::map >::iterator iter, e = queue_.end(); + for (iter = queue_.begin(); iter != e; ++iter) + { + const std::vector &timers = iter->second; + if (std::find(timers.begin(), timers.end(), timer) != timers.end()) + return (timer->delay() / 1000) - (iter->first - stopWatch_.clock()); + } + + return 0; +} + +void TimerContainer::queueTimerEvent(Timer *timer) +{ + eventQueue_.push_back(std::make_pair(timer, 0)); +} + +void TimerContainer::queueTimerCompleteEvent(Timer *timer) +{ + eventQueue_.push_back(std::make_pair(timer, 1)); +} + +void TimerContainer::removeEvents(Timer *timer) +{ + eventQueue_.erase(std::remove(eventQueue_.begin(), eventQueue_.end(), std::make_pair(timer, 0)), eventQueue_.end()); + eventQueue_.erase(std::remove(eventQueue_.begin(), eventQueue_.end(), std::make_pair(timer, 1)), eventQueue_.end()); +} + +void TimerContainer::pauseAllTimers() +{ + stopWatch_.pause(); +} + +void TimerContainer::resumeAllTimers() +{ + stopWatch_.resume(); +} + +bool TimerContainer::isAllTimersPaused() const +{ + return stopWatch_.isPaused(); +} diff --git a/2dsg/timercontainer.h b/2dsg/timercontainer.h index 9ac573be1..c21932d7b 100644 --- a/2dsg/timercontainer.h +++ b/2dsg/timercontainer.h @@ -1,42 +1,42 @@ -#ifndef TIMERCONTAINER_H -#define TIMERCONTAINER_H - -#include -#include -#include -#include -#include "stopwatch.h" - -class Timer; -class Application; - -class TimerContainer -{ -public: - TimerContainer(Application *application); - ~TimerContainer(); - - void addTimer(Timer* timer, double additionalDelay); - void removeTimer(Timer* timer); - void removeAllTimers(); - void tick(); - - double getAdditionalDelay(const Timer *timer); - - void pauseAllTimers(); - void resumeAllTimers(); - bool isAllTimersPaused() const; - - void queueTimerEvent(Timer *timer); - void queueTimerCompleteEvent(Timer *timer); - void removeEvents(Timer *timer); - -private: - Application *application_; - std::set timers_; - std::map > queue_; - StopWatch stopWatch_; - std::deque > eventQueue_; -}; - -#endif +#ifndef TIMERCONTAINER_H +#define TIMERCONTAINER_H + +#include +#include +#include +#include +#include "stopwatch.h" + +class Timer; +class Application; + +class TimerContainer +{ +public: + TimerContainer(Application *application); + ~TimerContainer(); + + void addTimer(Timer* timer, double additionalDelay); + void removeTimer(Timer* timer); + void removeAllTimers(); + void tick(); + + double getAdditionalDelay(const Timer *timer); + + void pauseAllTimers(); + void resumeAllTimers(); + bool isAllTimersPaused() const; + + void queueTimerEvent(Timer *timer); + void queueTimerCompleteEvent(Timer *timer); + void removeEvents(Timer *timer); + +private: + Application *application_; + std::set timers_; + std::map > queue_; + StopWatch stopWatch_; + std::deque > eventQueue_; +}; + +#endif diff --git a/2dsg/timerevent.cpp b/2dsg/timerevent.cpp index d6b86e063..cf4937b88 100644 --- a/2dsg/timerevent.cpp +++ b/2dsg/timerevent.cpp @@ -1,10 +1,10 @@ -#include "timerevent.h" -#include "eventvisitor.h" - -TimerEvent::Type TimerEvent::TIMER("timer"); -TimerEvent::Type TimerEvent::TIMER_COMPLETE("timerComplete"); - -void TimerEvent::apply(EventVisitor* v) -{ - v->visit(this); -} +#include "timerevent.h" +#include "eventvisitor.h" + +TimerEvent::Type TimerEvent::TIMER("timer"); +TimerEvent::Type TimerEvent::TIMER_COMPLETE("timerComplete"); + +void TimerEvent::apply(EventVisitor* v) +{ + v->visit(this); +} diff --git a/2dsg/timerevent.h b/2dsg/timerevent.h index 55763a93a..67b53b6f8 100644 --- a/2dsg/timerevent.h +++ b/2dsg/timerevent.h @@ -1,22 +1,22 @@ -#ifndef TIMEREVENT_H -#define TIMEREVENT_H - -#include "event.h" - -class TimerEvent : public Event -{ -public: - typedef EventType Type; - - TimerEvent(const Type& type) : Event(type.type()) - { - - } - - static Type TIMER; - static Type TIMER_COMPLETE; - - virtual void apply(EventVisitor* v); -}; - -#endif +#ifndef TIMEREVENT_H +#define TIMEREVENT_H + +#include "event.h" + +class TimerEvent : public Event +{ +public: + typedef EventType Type; + + TimerEvent(const Type& type) : Event(type.type()) + { + + } + + static Type TIMER; + static Type TIMER_COMPLETE; + + virtual void apply(EventVisitor* v); +}; + +#endif diff --git a/2dsg/touch.cpp b/2dsg/touch.cpp index 5cce6a38a..427c81294 100644 --- a/2dsg/touch.cpp +++ b/2dsg/touch.cpp @@ -1 +1 @@ -#include "touch.h" +#include "touch.h" diff --git a/2dsg/touch.h b/2dsg/touch.h index 6d17f5af1..868430ee3 100644 --- a/2dsg/touch.h +++ b/2dsg/touch.h @@ -1,4 +1,4 @@ -#ifndef TOUCH_H -#define TOUCH_H - -#endif +#ifndef TOUCH_H +#define TOUCH_H + +#endif diff --git a/2dsg/touchevent.cpp b/2dsg/touchevent.cpp index 7c1436c85..bd78af254 100644 --- a/2dsg/touchevent.cpp +++ b/2dsg/touchevent.cpp @@ -1,12 +1,12 @@ -#include "touchevent.h" -#include "eventvisitor.h" - -TouchEvent::Type TouchEvent::TOUCHES_BEGIN("touchesBegin"); -TouchEvent::Type TouchEvent::TOUCHES_MOVE("touchesMove"); -TouchEvent::Type TouchEvent::TOUCHES_END("touchesEnd"); -TouchEvent::Type TouchEvent::TOUCHES_CANCEL("touchesCancel"); - -void TouchEvent::apply(EventVisitor* v) -{ - v->visit(this); -} +#include "touchevent.h" +#include "eventvisitor.h" + +TouchEvent::Type TouchEvent::TOUCHES_BEGIN("touchesBegin"); +TouchEvent::Type TouchEvent::TOUCHES_MOVE("touchesMove"); +TouchEvent::Type TouchEvent::TOUCHES_END("touchesEnd"); +TouchEvent::Type TouchEvent::TOUCHES_CANCEL("touchesCancel"); + +void TouchEvent::apply(EventVisitor* v) +{ + v->visit(this); +} diff --git a/2dsg/touchevent.h b/2dsg/touchevent.h index dbd7b8995..7191854d9 100644 --- a/2dsg/touchevent.h +++ b/2dsg/touchevent.h @@ -1,36 +1,36 @@ -#ifndef TOUCHEVENT_H -#define TOUCHEVENT_H - -#include "event.h" -#include "touch.h" - -#include - -#include - -class TouchEvent : public Event -{ -public: - typedef EventType Type; - - TouchEvent(const Type& type, ginput_TouchEvent *event, float sx, float sy, float tx, float ty) : - Event(type.type()), - event(event), - sx(sx), sy(sy), tx(tx), ty(ty) - { - - } - - ginput_TouchEvent *event; - - float sx, sy, tx, ty; - - static Type TOUCHES_BEGIN; - static Type TOUCHES_MOVE; - static Type TOUCHES_END; - static Type TOUCHES_CANCEL; - - virtual void apply(EventVisitor* v); -}; - -#endif +#ifndef TOUCHEVENT_H +#define TOUCHEVENT_H + +#include "event.h" +#include "touch.h" + +#include + +#include + +class TouchEvent : public Event +{ +public: + typedef EventType Type; + + TouchEvent(const Type& type, ginput_TouchEvent *event, float sx, float sy, float tx, float ty) : + Event(type.type()), + event(event), + sx(sx), sy(sy), tx(tx), ty(ty) + { + + } + + ginput_TouchEvent *event; + + float sx, sy, tx, ty; + + static Type TOUCHES_BEGIN; + static Type TOUCHES_MOVE; + static Type TOUCHES_END; + static Type TOUCHES_CANCEL; + + virtual void apply(EventVisitor* v); +}; + +#endif diff --git a/2dsg/transform.cpp b/2dsg/transform.cpp index 7c06a589d..9672c1e01 100644 --- a/2dsg/transform.cpp +++ b/2dsg/transform.cpp @@ -1,170 +1,170 @@ -#include "transform.h" -#include - -#ifndef M_PI -#define M_PI 3.141592654 -#endif - -static void multiply(const float m0[2][2], const float m1[2][2], float result[2][2]) -{ - float r[2][2]; - - r[0][0] = m0[0][0] * m1[0][0] + m0[0][1] * m1[1][0]; - r[0][1] = m0[0][0] * m1[0][1] + m0[0][1] * m1[1][1]; - r[1][0] = m0[1][0] * m1[0][0] + m0[1][1] * m1[1][0]; - r[1][1] = m0[1][0] * m1[0][1] + m0[1][1] * m1[1][1]; - - result[0][0] = r[0][0]; - result[0][1] = r[0][1]; - result[1][0] = r[1][0]; - result[1][1] = r[1][1]; -} - - -static void rotation(float angle, float result[2][2]) -{ - result[0][0] = std::cos(angle); - result[0][1] = -std::sin(angle); - result[1][0] = std::sin(angle); - result[1][1] = std::cos(angle); -} - -void Transform::setMatrix(float m11,float m12,float m21,float m22,float tx,float ty) -{ - float m[2][2] = {{m11, m12}, {m21, m22}}; - - bool bx = m[0][0] == 0 && m[1][0] == 0; - bool by = m[0][1] == 0 && m[1][1] == 0; - - float sx = std::sqrt(m[0][0] * m[0][0] + m[1][0] * m[1][0]); - float sy = std::sqrt(m[0][1] * m[0][1] + m[1][1] * m[1][1]); - float angle = std::atan2(m[1][0], m[0][0]); - - float r[2][2]; - ::rotation(-angle, r); - multiply(r, m, m); - - if (m[1][1] < 0) - sy = -sy; - - rotationZ_ = angle * 180 / M_PI; - rotationX_=0; - rotationY_=0; - scaleX_ = bx ? 0 : sx; - scaleY_ = by ? 0 : sy; - scaleZ_=1.0; - - tx_=tx; - ty_=ty; - tz_=0; - - refX_=0; - refY_=0; - refZ_=0; - - compose(); -} - -void Transform::compose() -{ -#if 1 - const float DEG2RAD = 3.141593f / 180; - // Perform straight scale/rotate/translate - /*matrix_.identity(); - matrix_.translate(-refX_,-refY_,-refZ_); //12 Mult - matrix_.scale(scaleX_,scaleY_,scaleZ_); //12 Mult - */ - float *m=matrix_.raw(); - m[15] = 1.0f; - m[1] = m[2] = m[3] = m[4] = m[6] = m[7] = m[8] = m[9] = m[11] = 0.0f; - m[0]=scaleX_; m[5]=scaleY_; m[10]=scaleZ_; - m[12]=-refX_*scaleX_; m[13]=-refY_*scaleY_; m[14]=-refZ_*scaleZ_; - matrix_.type=Matrix4::TRANSLATE; - if ((scaleX_!=1)||(scaleY_!=1)) - matrix_.type=Matrix4::M2D; - if (scaleZ_!=1) - matrix_.type=Matrix4::M3D; - /* sx 0 0 0 - * 0 sy 0 0 - * 0 0 sz 0 - * -refx*sx -refy*sy -refz*sz 1 - */ - if (rotationZ_) - { - //matrix_.rotateZ(rotationZ_); - float c = cosf(rotationZ_ * DEG2RAD); - float s = sinf(rotationZ_ * DEG2RAD); - float m0 = m[0], m1 = m[1], - m4 = m[4], m5 = m[5], - m8 = m[8], m9 = m[9], - m12= m[12], m13= m[13]; - - // First rot: m1, m2, m4, m6, m8 and m9 are zero - - m[0] = m0 * c /*+ m1 *-s*/; - m[1] = m0 * s /*+ m1 * c*/; - m[4] = /*m4 * c +*/ m5 *-s; - m[5] = /*m4 * s +*/ m5 * c; - //m[8] = m8 * c + m9 *-s; - //m[9] = m8 * s + m9 * c; - m[12]= m12* c + m13*-s; - m[13]= m12* s + m13* c; - if (matrix_.type==Matrix4::TRANSLATE) - matrix_.type=Matrix4::M2D; - } - if (rotationY_) - { - //matrix_.rotateY(rotationY_); - float c = cosf(rotationY_ * DEG2RAD); - float s = sinf(rotationY_ * DEG2RAD); - float m0 = m[0], m2 = m[2], - m4 = m[4], m6 = m[6], - m8 = m[8], m10= m[10], - m12= m[12], m14= m[14]; - - // Second rot: m2, m6, m8 and m9 are still zero - m[0] = m0 * c /*+ m2 * s*/; - m[2] = m0 *-s /*+ m2 * c*/; - m[4] = m4 * c /*+ m6 * s*/; - m[6] = m4 *-s /*+ m6 * c*/; - m[8] = /*m8 * c + */m10* s; - m[10]= /*m8 *-s + */m10* c; - m[12]= m12* c + m14* s; - m[14]= m12*-s + m14* c; - matrix_.type=Matrix4::M3D; - } - if (rotationX_) - { - //matrix_.rotateX(rotationX_); - float c = cosf(rotationX_ * DEG2RAD); - float s = sinf(rotationX_ * DEG2RAD); - float m1 = m[1], m2 = m[2], - m5 = m[5], m6 = m[6], - m9 = m[9], m10= m[10], - m13= m[13], m14= m[14]; - - // Third rot: m9 is still zero - m[1] = m1 * c + m2 *-s; - m[2] = m1 * s + m2 * c; - m[5] = m5 * c + m6 *-s; - m[6] = m5 * s + m6 * c; - m[9] = /*m9 * c +*/ m10*-s; - m[10]= /*m9 * s +*/ m10* c; - m[13]= m13* c + m14*-s; - m[14]= m13* s + m14* c; - matrix_.type=Matrix4::M3D; - } - //matrix_.translate(tx_,ty_,tz_); //12 Mult - m[12]+=tx_; m[13]+=ty_; m[14]+=tz_; - isDirty_=false; - -#else - // optimized version of the code above - // {{cos(a),-sin(a)},{sin(a),cos(a)}} * {{x, u * y},{0,v * y}} - float c = cos(rotation_ * M_PI / 180); - float s = sin(rotation_ * M_PI / 180); - - -#endif - -} +#include "transform.h" +#include + +#ifndef M_PI +#define M_PI 3.141592654 +#endif + +static void multiply(const float m0[2][2], const float m1[2][2], float result[2][2]) +{ + float r[2][2]; + + r[0][0] = m0[0][0] * m1[0][0] + m0[0][1] * m1[1][0]; + r[0][1] = m0[0][0] * m1[0][1] + m0[0][1] * m1[1][1]; + r[1][0] = m0[1][0] * m1[0][0] + m0[1][1] * m1[1][0]; + r[1][1] = m0[1][0] * m1[0][1] + m0[1][1] * m1[1][1]; + + result[0][0] = r[0][0]; + result[0][1] = r[0][1]; + result[1][0] = r[1][0]; + result[1][1] = r[1][1]; +} + + +static void rotation(float angle, float result[2][2]) +{ + result[0][0] = std::cos(angle); + result[0][1] = -std::sin(angle); + result[1][0] = std::sin(angle); + result[1][1] = std::cos(angle); +} + +void Transform::setMatrix(float m11,float m12,float m21,float m22,float tx,float ty) +{ + float m[2][2] = {{m11, m12}, {m21, m22}}; + + bool bx = m[0][0] == 0 && m[1][0] == 0; + bool by = m[0][1] == 0 && m[1][1] == 0; + + float sx = std::sqrt(m[0][0] * m[0][0] + m[1][0] * m[1][0]); + float sy = std::sqrt(m[0][1] * m[0][1] + m[1][1] * m[1][1]); + float angle = std::atan2(m[1][0], m[0][0]); + + float r[2][2]; + ::rotation(-angle, r); + multiply(r, m, m); + + if (m[1][1] < 0) + sy = -sy; + + rotationZ_ = angle * 180 / M_PI; + rotationX_=0; + rotationY_=0; + scaleX_ = bx ? 0 : sx; + scaleY_ = by ? 0 : sy; + scaleZ_=1.0; + + tx_=tx; + ty_=ty; + tz_=0; + + refX_=0; + refY_=0; + refZ_=0; + + compose(); +} + +void Transform::compose() +{ +#if 1 + const float DEG2RAD = 3.141593f / 180; + // Perform straight scale/rotate/translate + /*matrix_.identity(); + matrix_.translate(-refX_,-refY_,-refZ_); //12 Mult + matrix_.scale(scaleX_,scaleY_,scaleZ_); //12 Mult + */ + float *m=matrix_.raw(); + m[15] = 1.0f; + m[1] = m[2] = m[3] = m[4] = m[6] = m[7] = m[8] = m[9] = m[11] = 0.0f; + m[0]=scaleX_; m[5]=scaleY_; m[10]=scaleZ_; + m[12]=-refX_*scaleX_; m[13]=-refY_*scaleY_; m[14]=-refZ_*scaleZ_; + matrix_.type=Matrix4::TRANSLATE; + if ((scaleX_!=1)||(scaleY_!=1)) + matrix_.type=Matrix4::M2D; + if (scaleZ_!=1) + matrix_.type=Matrix4::M3D; + /* sx 0 0 0 + * 0 sy 0 0 + * 0 0 sz 0 + * -refx*sx -refy*sy -refz*sz 1 + */ + if (rotationZ_) + { + //matrix_.rotateZ(rotationZ_); + float c = cosf(rotationZ_ * DEG2RAD); + float s = sinf(rotationZ_ * DEG2RAD); + float m0 = m[0], m1 = m[1], + m4 = m[4], m5 = m[5], + m8 = m[8], m9 = m[9], + m12= m[12], m13= m[13]; + + // First rot: m1, m2, m4, m6, m8 and m9 are zero + + m[0] = m0 * c /*+ m1 *-s*/; + m[1] = m0 * s /*+ m1 * c*/; + m[4] = /*m4 * c +*/ m5 *-s; + m[5] = /*m4 * s +*/ m5 * c; + //m[8] = m8 * c + m9 *-s; + //m[9] = m8 * s + m9 * c; + m[12]= m12* c + m13*-s; + m[13]= m12* s + m13* c; + if (matrix_.type==Matrix4::TRANSLATE) + matrix_.type=Matrix4::M2D; + } + if (rotationY_) + { + //matrix_.rotateY(rotationY_); + float c = cosf(rotationY_ * DEG2RAD); + float s = sinf(rotationY_ * DEG2RAD); + float m0 = m[0], m2 = m[2], + m4 = m[4], m6 = m[6], + m8 = m[8], m10= m[10], + m12= m[12], m14= m[14]; + + // Second rot: m2, m6, m8 and m9 are still zero + m[0] = m0 * c /*+ m2 * s*/; + m[2] = m0 *-s /*+ m2 * c*/; + m[4] = m4 * c /*+ m6 * s*/; + m[6] = m4 *-s /*+ m6 * c*/; + m[8] = /*m8 * c + */m10* s; + m[10]= /*m8 *-s + */m10* c; + m[12]= m12* c + m14* s; + m[14]= m12*-s + m14* c; + matrix_.type=Matrix4::M3D; + } + if (rotationX_) + { + //matrix_.rotateX(rotationX_); + float c = cosf(rotationX_ * DEG2RAD); + float s = sinf(rotationX_ * DEG2RAD); + float m1 = m[1], m2 = m[2], + m5 = m[5], m6 = m[6], + m9 = m[9], m10= m[10], + m13= m[13], m14= m[14]; + + // Third rot: m9 is still zero + m[1] = m1 * c + m2 *-s; + m[2] = m1 * s + m2 * c; + m[5] = m5 * c + m6 *-s; + m[6] = m5 * s + m6 * c; + m[9] = /*m9 * c +*/ m10*-s; + m[10]= /*m9 * s +*/ m10* c; + m[13]= m13* c + m14*-s; + m[14]= m13* s + m14* c; + matrix_.type=Matrix4::M3D; + } + //matrix_.translate(tx_,ty_,tz_); //12 Mult + m[12]+=tx_; m[13]+=ty_; m[14]+=tz_; + isDirty_=false; + +#else + // optimized version of the code above + // {{cos(a),-sin(a)},{sin(a),cos(a)}} * {{x, u * y},{0,v * y}} + float c = cos(rotation_ * M_PI / 180); + float s = sin(rotation_ * M_PI / 180); + + +#endif + +} diff --git a/2dsg/transform.h b/2dsg/transform.h index 9daa1a58c..47819b018 100644 --- a/2dsg/transform.h +++ b/2dsg/transform.h @@ -1,247 +1,247 @@ -#ifndef TRANSFORM_H -#define TRANSFORM_H - -#include "Matrices.h" - -class Transform -{ -public: - Transform() - { - scaleX_=1; - scaleY_=1; - scaleZ_=1; - tx_=0; - ty_=0; - tz_=0; - rotationX_=0; - rotationY_=0; - rotationZ_=0; - refX_ = 0; - refY_ = 0; - refZ_ = 0; - isDirty_=false; - } - - void setRotationZ(float r) - { - rotationZ_ = r; - compose(); - } - - void setRotationY(float r) - { - rotationY_ = r; - compose(); - } - - void setRotationX(float r) - { - rotationX_ = r; - compose(); - } - - void setScaleX(float sx) - { - scaleX_ = sx; - compose(); - } - - void setScaleY(float sy) - { - scaleY_ = sy; - compose(); - } - - void setScaleZ(float sz) - { - scaleZ_ = sz; - compose(); - } - - void setScaleXY(float sx, float sy) - { - scaleX_ = sx; - scaleY_ = sy; - compose(); - } - - void setScaleXYZ(float sx, float sy,float sz) - { - scaleX_ = sx; - scaleY_ = sy; - scaleZ_ = sz; - compose(); - } - - void setX(float x) - { - matrix_[12]+=(x-tx_); - tx_=x; - } - - void setY(float y) - { - matrix_[13]+=(y-ty_); - ty_=y; - } - - void setZ(float z) - { - matrix_[14]+=(z-tz_); - tz_=z; - } - - void setXY(float x, float y) - { - matrix_[12]+=(x-tx_); - matrix_[13]+=(y-ty_); - tx_=x; - ty_=y; - } - - void setXYZ(float x, float y, float z) - { - matrix_[12]+=(x-tx_); - matrix_[13]+=(y-ty_); - matrix_[14]+=(z-tz_); - tx_=x; - ty_=y; - tz_=z; - } - - void setRefX(float x) - { - refX_ = x; - compose(); - } - - void setRefY(float y) - { - refY_ = y; - compose(); - } - - void setRefZ(float z) - { - refZ_ = z; - compose(); - } - - void setRefXY(float x, float y) - { - refX_ = x; - refY_ = y; - compose(); - } - - void setRefXYZ(float x, float y, float z) - { - refX_ = x; - refY_ = y; - refZ_ = z; - compose(); - } - - float rotationX() const - { - return rotationX_; - } - - float rotationY() const - { - return rotationY_; - } - - float rotationZ() const - { - return rotationZ_; - } - - float scaleX() const - { - return scaleX_; - } - - float scaleY() const - { - return scaleY_; - } - - float scaleZ() const - { - return scaleZ_; - } - - float x() const - { - return tx_; - } - - float y() const - { - return ty_; - } - - float z() const - { - return tz_; - } - - float refX() const - { - return refX_; - } - - float refY() const - { - return refY_; - } - - float refZ() const - { - return refZ_; - } - - const Matrix4& matrix() const - { - return matrix_; - } - void setMatrix(float m11,float m12,float m21,float m22,float tx,float ty); -private: - Matrix4 matrix_; - - float rotationX_; - float rotationY_; - float rotationZ_; - float scaleX_; - float scaleY_; - float scaleZ_; - float tx_,ty_,tz_; - float refX_; - float refY_; - float refZ_; - mutable bool isDirty_; - void compose(); -}; - - -class TransformContainer -{ -public: - TransformContainer(Transform* transform) : transform(transform) - { - } - - TransformContainer(const Transform& t) : transformInstance(t) - { - transform = &transformInstance; - } - - Transform* transform; - Transform transformInstance; -}; - - - -#endif +#ifndef TRANSFORM_H +#define TRANSFORM_H + +#include "Matrices.h" + +class Transform +{ +public: + Transform() + { + scaleX_=1; + scaleY_=1; + scaleZ_=1; + tx_=0; + ty_=0; + tz_=0; + rotationX_=0; + rotationY_=0; + rotationZ_=0; + refX_ = 0; + refY_ = 0; + refZ_ = 0; + isDirty_=false; + } + + void setRotationZ(float r) + { + rotationZ_ = r; + compose(); + } + + void setRotationY(float r) + { + rotationY_ = r; + compose(); + } + + void setRotationX(float r) + { + rotationX_ = r; + compose(); + } + + void setScaleX(float sx) + { + scaleX_ = sx; + compose(); + } + + void setScaleY(float sy) + { + scaleY_ = sy; + compose(); + } + + void setScaleZ(float sz) + { + scaleZ_ = sz; + compose(); + } + + void setScaleXY(float sx, float sy) + { + scaleX_ = sx; + scaleY_ = sy; + compose(); + } + + void setScaleXYZ(float sx, float sy,float sz) + { + scaleX_ = sx; + scaleY_ = sy; + scaleZ_ = sz; + compose(); + } + + void setX(float x) + { + matrix_[12]+=(x-tx_); + tx_=x; + } + + void setY(float y) + { + matrix_[13]+=(y-ty_); + ty_=y; + } + + void setZ(float z) + { + matrix_[14]+=(z-tz_); + tz_=z; + } + + void setXY(float x, float y) + { + matrix_[12]+=(x-tx_); + matrix_[13]+=(y-ty_); + tx_=x; + ty_=y; + } + + void setXYZ(float x, float y, float z) + { + matrix_[12]+=(x-tx_); + matrix_[13]+=(y-ty_); + matrix_[14]+=(z-tz_); + tx_=x; + ty_=y; + tz_=z; + } + + void setRefX(float x) + { + refX_ = x; + compose(); + } + + void setRefY(float y) + { + refY_ = y; + compose(); + } + + void setRefZ(float z) + { + refZ_ = z; + compose(); + } + + void setRefXY(float x, float y) + { + refX_ = x; + refY_ = y; + compose(); + } + + void setRefXYZ(float x, float y, float z) + { + refX_ = x; + refY_ = y; + refZ_ = z; + compose(); + } + + float rotationX() const + { + return rotationX_; + } + + float rotationY() const + { + return rotationY_; + } + + float rotationZ() const + { + return rotationZ_; + } + + float scaleX() const + { + return scaleX_; + } + + float scaleY() const + { + return scaleY_; + } + + float scaleZ() const + { + return scaleZ_; + } + + float x() const + { + return tx_; + } + + float y() const + { + return ty_; + } + + float z() const + { + return tz_; + } + + float refX() const + { + return refX_; + } + + float refY() const + { + return refY_; + } + + float refZ() const + { + return refZ_; + } + + const Matrix4& matrix() const + { + return matrix_; + } + void setMatrix(float m11,float m12,float m21,float m22,float tx,float ty); +private: + Matrix4 matrix_; + + float rotationX_; + float rotationY_; + float rotationZ_; + float scaleX_; + float scaleY_; + float scaleZ_; + float tx_,ty_,tz_; + float refX_; + float refY_; + float refZ_; + mutable bool isDirty_; + void compose(); +}; + + +class TransformContainer +{ +public: + TransformContainer(Transform* transform) : transform(transform) + { + } + + TransformContainer(const Transform& t) : transformInstance(t) + { + transform = &transformInstance; + } + + Transform* transform; + Transform transformInstance; +}; + + + +#endif diff --git a/2dsg/ttbmfont.h b/2dsg/ttbmfont.h index 8b235f1d5..fe53676b6 100644 --- a/2dsg/ttbmfont.h +++ b/2dsg/ttbmfont.h @@ -1,66 +1,66 @@ -#ifndef TTBMFONT_H -#define TTBMFONT_H - -#include -#include -#include - -#include -#include FT_FREETYPE_H - -class GStatus; -class GraphicsBase; -struct TextureData; - -class TTBMFont : public BMFontBase -{ -public: - TTBMFont(Application *application, const char *filename, float size, const char *chars, bool filtering, GStatus *status); - virtual ~TTBMFont(); - - virtual Type getType() const - { - return eTTBMFont; - } - - virtual void drawText(GraphicsBase *graphicsBase, const wchar32_t *text, float r, float g, float b, float letterSpacing) const; - - virtual void getBounds(const char *text, float letterSpacing, float *minx, float *miny, float *maxx, float *maxy) const; - virtual float getAdvanceX(const char *text, float letterSpacing, int size = -1) const; - virtual float getAscender() const; - virtual float getLineHeight() const; - -private: - void constructor(const char *filename, float size, const char *chars, bool filtering); - int kerning(wchar32_t left, wchar32_t right) const; - -private: - struct TextureGlyph - { - wchar32_t chr; - FT_UInt glyphIndex; - int x, y; - int width, height; - int left, top; - int advancex, advancey; - }; - - struct FontInfo - { - int height; - int ascender; - std::map textureGlyphs; - std::map, int> kernings; - }; - - FontInfo fontInfo_; - - float sizescalex_; - float sizescaley_; - float uvscalex_; - float uvscaley_; - - TextureData *data_; -}; - -#endif +#ifndef TTBMFONT_H +#define TTBMFONT_H + +#include +#include +#include + +#include +#include FT_FREETYPE_H + +class GStatus; +class GraphicsBase; +struct TextureData; + +class TTBMFont : public BMFontBase +{ +public: + TTBMFont(Application *application, const char *filename, float size, const char *chars, bool filtering, GStatus *status); + virtual ~TTBMFont(); + + virtual Type getType() const + { + return eTTBMFont; + } + + virtual void drawText(GraphicsBase *graphicsBase, const wchar32_t *text, float r, float g, float b, float letterSpacing) const; + + virtual void getBounds(const char *text, float letterSpacing, float *minx, float *miny, float *maxx, float *maxy) const; + virtual float getAdvanceX(const char *text, float letterSpacing, int size = -1) const; + virtual float getAscender() const; + virtual float getLineHeight() const; + +private: + void constructor(const char *filename, float size, const char *chars, bool filtering); + int kerning(wchar32_t left, wchar32_t right) const; + +private: + struct TextureGlyph + { + wchar32_t chr; + FT_UInt glyphIndex; + int x, y; + int width, height; + int left, top; + int advancex, advancey; + }; + + struct FontInfo + { + int height; + int ascender; + std::map textureGlyphs; + std::map, int> kernings; + }; + + FontInfo fontInfo_; + + float sizescalex_; + float sizescaley_; + float uvscalex_; + float uvscaley_; + + TextureData *data_; +}; + +#endif diff --git a/2dsg/ttfont.cpp b/2dsg/ttfont.cpp index d527f2b1c..dee33fca6 100644 --- a/2dsg/ttfont.cpp +++ b/2dsg/ttfont.cpp @@ -1,356 +1,356 @@ -#include "ttfont.h" -#include -#include -#include "giderosexception.h" -#include "gstatus.h" -#include "application.h" -#include "ftlibrarysingleton.h" - -#include -#include FT_OUTLINE_H - -#include -#include - -static unsigned long read( FT_Stream stream, - unsigned long offset, - unsigned char* buffer, - unsigned long count) -{ - G_FILE* fis = (G_FILE*)stream->descriptor.pointer; - g_fseek(fis, offset, SEEK_SET); - if (count == 0) - return 0; - return g_fread(buffer, 1, count, fis); -} - -static void close(FT_Stream stream) -{ - G_FILE* fis = (G_FILE*)stream->descriptor.pointer; - g_fclose(fis); -} - -TTFont::TTFont(Application *application, const char *filename, float size, bool smoothing, GStatus *status) : FontBase(application) -{ - try - { - constructor(filename, size, smoothing); - } - catch (GiderosException &e) - { - if (status) - *status = e.status(); - } -} - -void TTFont::constructor(const char *filename, float size, bool smoothing) -{ - face_ = NULL; - - G_FILE* fis = g_fopen(filename, "rb"); - if (fis == NULL) - { - throw GiderosException(GStatus(6000, filename)); // Error #6000: %s: No such file or directory. - return; - } - - memset(&stream_, 0, sizeof(stream_)); - - g_fseek(fis, 0, SEEK_END); - stream_.size = g_ftell(fis); - g_fseek(fis, 0, SEEK_SET); - stream_.descriptor.pointer = fis; - stream_.read = read; - stream_.close = close; - - FT_Open_Args args; - memset(&args, 0, sizeof(args)); - args.flags = FT_OPEN_STREAM; - args.stream = &stream_; - - if (FT_Open_Face(FT_Library_Singleton::instance(), &args, 0, &face_)) - throw GiderosException(GStatus(6012, filename)); // Error #6012: %s: Error while reading font file. - - float scalex = application_->getLogicalScaleX(); - float scaley = application_->getLogicalScaleY(); - - const int RESOLUTION = 72; - if (FT_Set_Char_Size(face_, 0L, (int)floor(size * 64 + 0.5f), (int)floor(RESOLUTION * scalex + 0.5f), (int)floor(RESOLUTION * scaley + 0.5f))) - { - FT_Done_Face(face_); - face_ = NULL; - throw GiderosException(GStatus(6017, filename)); // Error #6017: Invalid font size. - } - - ascender_ = face_->size->metrics.ascender >> 6; - height_ = face_->size->metrics.height >> 6; - - smoothing_ = smoothing; -} - -TTFont::~TTFont() -{ - if (face_) - FT_Done_Face(face_); -} - -void TTFont::getBounds(const wchar32_t *text, float letterSpacing, int *pminx, int *pminy, int *pmaxx, int *pmaxy) const -{ - float scalex = application_->getLogicalScaleX(); - - int minx = 0x7fffffff; - int miny = 0x7fffffff; - int maxx = -0x7fffffff; - int maxy = -0x7fffffff; - - int size = 0; - for (const wchar32_t *t = text; *t; ++t, ++size) - ; - - int x = 0, y = 0; - FT_UInt prev = 0; - for (int i = 0; i < size; ++i) - { - FT_UInt glyphIndex = FT_Get_Char_Index(face_, text[i]); - if (glyphIndex == 0) - continue; - - if (FT_Load_Glyph(face_, glyphIndex, FT_LOAD_DEFAULT)) - continue; - - int top, left, width, height; - if (face_->glyph->format == FT_GLYPH_FORMAT_OUTLINE) - { - FT_BBox bbox; - FT_Outline_Get_CBox(&face_->glyph->outline, &bbox); - - bbox.xMin &= ~63; - bbox.yMin &= ~63; - bbox.xMax = (bbox.xMax + 63) & ~63; - bbox.yMax = (bbox.yMax + 63) & ~63; - - width = (bbox.xMax - bbox.xMin) >> 6; - height = (bbox.yMax - bbox.yMin) >> 6; - top = bbox.yMax >> 6; - left = bbox.xMin >> 6; - } - else if (face_->glyph->format == FT_GLYPH_FORMAT_BITMAP) - { - width = face_->glyph->bitmap.width; - height = face_->glyph->bitmap.rows; - top = face_->glyph->bitmap_top; - left = face_->glyph->bitmap_left; - } - else - continue; - - x += kerning(prev, glyphIndex) >> 6; - prev = glyphIndex; - - int xo = x + left; - int yo = y - top; - - minx = std::min(minx, xo); - miny = std::min(miny, yo); - maxx = std::max(maxx, xo + width); - maxy = std::max(maxy, yo + height); - - x += face_->glyph->advance.x >> 6; - - x += (int)(letterSpacing * scalex); - } - - if (pminx) - *pminx = minx; - if (pminy) - *pminy = miny; - if (pmaxx) - *pmaxx = maxx; - if (pmaxy) - *pmaxy = maxy; -} - -Dib TTFont::renderFont(const wchar32_t *text, float letterSpacing, int *pminx, int *pminy, int *pmaxx, int *pmaxy) const -{ - float scalex = application_->getLogicalScaleX(); - - int minx, miny, maxx, maxy; - getBounds(text, letterSpacing, &minx, &miny, &maxx, &maxy); - - Dib dib(application_, (maxx - minx) + 2, (maxy - miny) + 2, true); - unsigned char rgba[] = {255, 255, 255, 0}; - dib.fill(rgba); - - int size = 0; - for (const wchar32_t *t = text; *t; ++t, ++size) - ; - - int x = 1, y = 1; - FT_UInt prev = 0; - for (int i = 0; i < size; ++i) - { - FT_UInt glyphIndex = FT_Get_Char_Index(face_, text[i]); - if (glyphIndex == 0) - continue; - - if (FT_Load_Glyph(face_, glyphIndex, FT_LOAD_DEFAULT)) - continue; - - int top, left, width, height; - if (face_->glyph->format == FT_GLYPH_FORMAT_OUTLINE) - { - FT_BBox bbox; - FT_Outline_Get_CBox(&face_->glyph->outline, &bbox); - - bbox.xMin &= ~63; - bbox.yMin &= ~63; - bbox.xMax = (bbox.xMax + 63) & ~63; - bbox.yMax = (bbox.yMax + 63) & ~63; - - width = (bbox.xMax - bbox.xMin) >> 6; - height = (bbox.yMax - bbox.yMin) >> 6; - top = bbox.yMax >> 6; - left = bbox.xMin >> 6; - } - else if (face_->glyph->format == FT_GLYPH_FORMAT_BITMAP) - { - width = face_->glyph->bitmap.width; - height = face_->glyph->bitmap.rows; - top = face_->glyph->bitmap_top; - left = face_->glyph->bitmap_left; - } - else - continue; - - if (FT_Render_Glyph(face_->glyph, FT_RENDER_MODE_NORMAL)) - continue; - - FT_Bitmap &bitmap = face_->glyph->bitmap; - - width = std::min(width, (int)bitmap.width); - height = std::min(height, (int)bitmap.rows); - - x += kerning(prev, glyphIndex) >> 6; - prev = glyphIndex; - - int xo = x + left; - int yo = y - top; - - for (int y = 0; y < height; ++y) - for (int x = 0; x < width; ++x) - { - int index = x + y * bitmap.pitch; - int c = bitmap.buffer[index]; - - unsigned char a = dib.getAlpha(xo + x - minx, yo + y - miny); - dib.setAlpha(xo + x - minx, yo + y - miny, std::min(255, c + a)); - } - - x += face_->glyph->advance.x >> 6; - - x += (int)(letterSpacing * scalex); - } - - if (pminx) - *pminx = minx; - if (pminy) - *pminy = miny; - if (pmaxx) - *pmaxx = maxx; - if (pmaxy) - *pmaxy = maxy; - - return dib; -} - -void TTFont::getBounds(const char *text, float letterSpacing, float *pminx, float *pminy, float *pmaxx, float *pmaxy) const -{ - std::vector wtext; - size_t len = utf8_to_wchar(text, strlen(text), NULL, 0, 0); - if (len != 0) - { - wtext.resize(len); - utf8_to_wchar(text, strlen(text), &wtext[0], len, 0); - } - wtext.push_back(0); - - int minx, miny, maxx, maxy; - getBounds(&wtext[0], letterSpacing, &minx, &miny, &maxx, &maxy); - - float scalex = application_->getLogicalScaleX(); - float scaley = application_->getLogicalScaleY(); - - if (pminx) - *pminx = minx / scalex; - if (pminy) - *pminy = miny / scaley; - if (pmaxx) - *pmaxx = maxx / scalex; - if (pmaxy) - *pmaxy = maxy / scaley; -} - -float TTFont::getAdvanceX(const char *text, float letterSpacing, int size) const -{ - float scalex = application_->getLogicalScaleX(); - - std::vector wtext; - size_t len = utf8_to_wchar(text, strlen(text), NULL, 0, 0); - if (len != 0) - { - wtext.resize(len); - utf8_to_wchar(text, strlen(text), &wtext[0], len, 0); - } - - if (size < 0 || size > wtext.size()) - size = wtext.size(); - - wtext.push_back(0); - - int x = 0; - FT_UInt prev = 0; - for (int i = 0; i < size; ++i) - { - FT_UInt glyphIndex = FT_Get_Char_Index(face_, text[i]); - if (glyphIndex == 0) - continue; - - if (FT_Load_Glyph(face_, glyphIndex, FT_LOAD_DEFAULT)) - continue; - - x += kerning(prev, glyphIndex) >> 6; - prev = glyphIndex; - - x += face_->glyph->advance.x >> 6; - - x += (int)(letterSpacing * scalex); - } - - x += kerning(prev, FT_Get_Char_Index(face_, text[size])) >> 6; - - return x / scalex; -} - -int TTFont::kerning(FT_UInt left, FT_UInt right) const -{ - if (FT_HAS_KERNING(face_)) - { - FT_Vector delta; - FT_Get_Kerning(face_, left, right, FT_KERNING_DEFAULT, &delta); - return delta.x; - } - - return 0; -} - -float TTFont::getAscender() const -{ - float scaley = application_->getLogicalScaleY(); - return ascender_ / scaley; -} - -float TTFont::getLineHeight() const -{ - float scaley = application_->getLogicalScaleY(); - return height_ / scaley; -} +#include "ttfont.h" +#include +#include +#include "giderosexception.h" +#include "gstatus.h" +#include "application.h" +#include "ftlibrarysingleton.h" + +#include +#include FT_OUTLINE_H + +#include +#include + +static unsigned long read( FT_Stream stream, + unsigned long offset, + unsigned char* buffer, + unsigned long count) +{ + G_FILE* fis = (G_FILE*)stream->descriptor.pointer; + g_fseek(fis, offset, SEEK_SET); + if (count == 0) + return 0; + return g_fread(buffer, 1, count, fis); +} + +static void close(FT_Stream stream) +{ + G_FILE* fis = (G_FILE*)stream->descriptor.pointer; + g_fclose(fis); +} + +TTFont::TTFont(Application *application, const char *filename, float size, bool smoothing, GStatus *status) : FontBase(application) +{ + try + { + constructor(filename, size, smoothing); + } + catch (GiderosException &e) + { + if (status) + *status = e.status(); + } +} + +void TTFont::constructor(const char *filename, float size, bool smoothing) +{ + face_ = NULL; + + G_FILE* fis = g_fopen(filename, "rb"); + if (fis == NULL) + { + throw GiderosException(GStatus(6000, filename)); // Error #6000: %s: No such file or directory. + return; + } + + memset(&stream_, 0, sizeof(stream_)); + + g_fseek(fis, 0, SEEK_END); + stream_.size = g_ftell(fis); + g_fseek(fis, 0, SEEK_SET); + stream_.descriptor.pointer = fis; + stream_.read = read; + stream_.close = close; + + FT_Open_Args args; + memset(&args, 0, sizeof(args)); + args.flags = FT_OPEN_STREAM; + args.stream = &stream_; + + if (FT_Open_Face(FT_Library_Singleton::instance(), &args, 0, &face_)) + throw GiderosException(GStatus(6012, filename)); // Error #6012: %s: Error while reading font file. + + float scalex = application_->getLogicalScaleX(); + float scaley = application_->getLogicalScaleY(); + + const int RESOLUTION = 72; + if (FT_Set_Char_Size(face_, 0L, (int)floor(size * 64 + 0.5f), (int)floor(RESOLUTION * scalex + 0.5f), (int)floor(RESOLUTION * scaley + 0.5f))) + { + FT_Done_Face(face_); + face_ = NULL; + throw GiderosException(GStatus(6017, filename)); // Error #6017: Invalid font size. + } + + ascender_ = face_->size->metrics.ascender >> 6; + height_ = face_->size->metrics.height >> 6; + + smoothing_ = smoothing; +} + +TTFont::~TTFont() +{ + if (face_) + FT_Done_Face(face_); +} + +void TTFont::getBounds(const wchar32_t *text, float letterSpacing, int *pminx, int *pminy, int *pmaxx, int *pmaxy) const +{ + float scalex = application_->getLogicalScaleX(); + + int minx = 0x7fffffff; + int miny = 0x7fffffff; + int maxx = -0x7fffffff; + int maxy = -0x7fffffff; + + int size = 0; + for (const wchar32_t *t = text; *t; ++t, ++size) + ; + + int x = 0, y = 0; + FT_UInt prev = 0; + for (int i = 0; i < size; ++i) + { + FT_UInt glyphIndex = FT_Get_Char_Index(face_, text[i]); + if (glyphIndex == 0) + continue; + + if (FT_Load_Glyph(face_, glyphIndex, FT_LOAD_DEFAULT)) + continue; + + int top, left, width, height; + if (face_->glyph->format == FT_GLYPH_FORMAT_OUTLINE) + { + FT_BBox bbox; + FT_Outline_Get_CBox(&face_->glyph->outline, &bbox); + + bbox.xMin &= ~63; + bbox.yMin &= ~63; + bbox.xMax = (bbox.xMax + 63) & ~63; + bbox.yMax = (bbox.yMax + 63) & ~63; + + width = (bbox.xMax - bbox.xMin) >> 6; + height = (bbox.yMax - bbox.yMin) >> 6; + top = bbox.yMax >> 6; + left = bbox.xMin >> 6; + } + else if (face_->glyph->format == FT_GLYPH_FORMAT_BITMAP) + { + width = face_->glyph->bitmap.width; + height = face_->glyph->bitmap.rows; + top = face_->glyph->bitmap_top; + left = face_->glyph->bitmap_left; + } + else + continue; + + x += kerning(prev, glyphIndex) >> 6; + prev = glyphIndex; + + int xo = x + left; + int yo = y - top; + + minx = std::min(minx, xo); + miny = std::min(miny, yo); + maxx = std::max(maxx, xo + width); + maxy = std::max(maxy, yo + height); + + x += face_->glyph->advance.x >> 6; + + x += (int)(letterSpacing * scalex); + } + + if (pminx) + *pminx = minx; + if (pminy) + *pminy = miny; + if (pmaxx) + *pmaxx = maxx; + if (pmaxy) + *pmaxy = maxy; +} + +Dib TTFont::renderFont(const wchar32_t *text, float letterSpacing, int *pminx, int *pminy, int *pmaxx, int *pmaxy) const +{ + float scalex = application_->getLogicalScaleX(); + + int minx, miny, maxx, maxy; + getBounds(text, letterSpacing, &minx, &miny, &maxx, &maxy); + + Dib dib(application_, (maxx - minx) + 2, (maxy - miny) + 2, true); + unsigned char rgba[] = {255, 255, 255, 0}; + dib.fill(rgba); + + int size = 0; + for (const wchar32_t *t = text; *t; ++t, ++size) + ; + + int x = 1, y = 1; + FT_UInt prev = 0; + for (int i = 0; i < size; ++i) + { + FT_UInt glyphIndex = FT_Get_Char_Index(face_, text[i]); + if (glyphIndex == 0) + continue; + + if (FT_Load_Glyph(face_, glyphIndex, FT_LOAD_DEFAULT)) + continue; + + int top, left, width, height; + if (face_->glyph->format == FT_GLYPH_FORMAT_OUTLINE) + { + FT_BBox bbox; + FT_Outline_Get_CBox(&face_->glyph->outline, &bbox); + + bbox.xMin &= ~63; + bbox.yMin &= ~63; + bbox.xMax = (bbox.xMax + 63) & ~63; + bbox.yMax = (bbox.yMax + 63) & ~63; + + width = (bbox.xMax - bbox.xMin) >> 6; + height = (bbox.yMax - bbox.yMin) >> 6; + top = bbox.yMax >> 6; + left = bbox.xMin >> 6; + } + else if (face_->glyph->format == FT_GLYPH_FORMAT_BITMAP) + { + width = face_->glyph->bitmap.width; + height = face_->glyph->bitmap.rows; + top = face_->glyph->bitmap_top; + left = face_->glyph->bitmap_left; + } + else + continue; + + if (FT_Render_Glyph(face_->glyph, FT_RENDER_MODE_NORMAL)) + continue; + + FT_Bitmap &bitmap = face_->glyph->bitmap; + + width = std::min(width, (int)bitmap.width); + height = std::min(height, (int)bitmap.rows); + + x += kerning(prev, glyphIndex) >> 6; + prev = glyphIndex; + + int xo = x + left; + int yo = y - top; + + for (int y = 0; y < height; ++y) + for (int x = 0; x < width; ++x) + { + int index = x + y * bitmap.pitch; + int c = bitmap.buffer[index]; + + unsigned char a = dib.getAlpha(xo + x - minx, yo + y - miny); + dib.setAlpha(xo + x - minx, yo + y - miny, std::min(255, c + a)); + } + + x += face_->glyph->advance.x >> 6; + + x += (int)(letterSpacing * scalex); + } + + if (pminx) + *pminx = minx; + if (pminy) + *pminy = miny; + if (pmaxx) + *pmaxx = maxx; + if (pmaxy) + *pmaxy = maxy; + + return dib; +} + +void TTFont::getBounds(const char *text, float letterSpacing, float *pminx, float *pminy, float *pmaxx, float *pmaxy) const +{ + std::vector wtext; + size_t len = utf8_to_wchar(text, strlen(text), NULL, 0, 0); + if (len != 0) + { + wtext.resize(len); + utf8_to_wchar(text, strlen(text), &wtext[0], len, 0); + } + wtext.push_back(0); + + int minx, miny, maxx, maxy; + getBounds(&wtext[0], letterSpacing, &minx, &miny, &maxx, &maxy); + + float scalex = application_->getLogicalScaleX(); + float scaley = application_->getLogicalScaleY(); + + if (pminx) + *pminx = minx / scalex; + if (pminy) + *pminy = miny / scaley; + if (pmaxx) + *pmaxx = maxx / scalex; + if (pmaxy) + *pmaxy = maxy / scaley; +} + +float TTFont::getAdvanceX(const char *text, float letterSpacing, int size) const +{ + float scalex = application_->getLogicalScaleX(); + + std::vector wtext; + size_t len = utf8_to_wchar(text, strlen(text), NULL, 0, 0); + if (len != 0) + { + wtext.resize(len); + utf8_to_wchar(text, strlen(text), &wtext[0], len, 0); + } + + if (size < 0 || size > wtext.size()) + size = wtext.size(); + + wtext.push_back(0); + + int x = 0; + FT_UInt prev = 0; + for (int i = 0; i < size; ++i) + { + FT_UInt glyphIndex = FT_Get_Char_Index(face_, text[i]); + if (glyphIndex == 0) + continue; + + if (FT_Load_Glyph(face_, glyphIndex, FT_LOAD_DEFAULT)) + continue; + + x += kerning(prev, glyphIndex) >> 6; + prev = glyphIndex; + + x += face_->glyph->advance.x >> 6; + + x += (int)(letterSpacing * scalex); + } + + x += kerning(prev, FT_Get_Char_Index(face_, text[size])) >> 6; + + return x / scalex; +} + +int TTFont::kerning(FT_UInt left, FT_UInt right) const +{ + if (FT_HAS_KERNING(face_)) + { + FT_Vector delta; + FT_Get_Kerning(face_, left, right, FT_KERNING_DEFAULT, &delta); + return delta.x; + } + + return 0; +} + +float TTFont::getAscender() const +{ + float scaley = application_->getLogicalScaleY(); + return ascender_ / scaley; +} + +float TTFont::getLineHeight() const +{ + float scaley = application_->getLogicalScaleY(); + return height_ / scaley; +} diff --git a/2dsg/ttfont.h b/2dsg/ttfont.h index 6d8f8e740..b785a273a 100644 --- a/2dsg/ttfont.h +++ b/2dsg/ttfont.h @@ -1,49 +1,49 @@ -#ifndef TTFONT_H -#define TTFONT_H - -#include -#include FT_FREETYPE_H - -#include -#include -#include -#include - -class TTFont : public FontBase -{ -public: - TTFont(Application *application, const char *filename, float size, bool smoothing, GStatus *status); - virtual ~TTFont(); - - virtual Type getType() const - { - return eTTFont; - } - - void getBounds(const wchar32_t *text, float letterSpacing, int *pminx, int *pminy, int *pmaxx, int *pmaxy) const; - - Dib renderFont(const wchar32_t *text, float letterSpacing, int *pminx, int *pminy, int *pmaxx, int *pmaxy) const; - - virtual void getBounds(const char *text, float letterSpacing, float *minx, float *miny, float *maxx, float *maxy) const; - virtual float getAdvanceX(const char *text, float letterSpacing, int size = -1) const; - virtual float getAscender() const; - virtual float getLineHeight() const; - - bool getSmoothing() const - { - return smoothing_; - } - -private: - void constructor(const char *filename, float size, bool smoothing); - int kerning(FT_UInt left, FT_UInt right) const; - -private: - FT_Face face_; - int ascender_; - int height_; - FT_StreamRec stream_; - bool smoothing_; -}; - -#endif +#ifndef TTFONT_H +#define TTFONT_H + +#include +#include FT_FREETYPE_H + +#include +#include +#include +#include + +class TTFont : public FontBase +{ +public: + TTFont(Application *application, const char *filename, float size, bool smoothing, GStatus *status); + virtual ~TTFont(); + + virtual Type getType() const + { + return eTTFont; + } + + void getBounds(const wchar32_t *text, float letterSpacing, int *pminx, int *pminy, int *pmaxx, int *pmaxy) const; + + Dib renderFont(const wchar32_t *text, float letterSpacing, int *pminx, int *pminy, int *pmaxx, int *pmaxy) const; + + virtual void getBounds(const char *text, float letterSpacing, float *minx, float *miny, float *maxx, float *maxy) const; + virtual float getAdvanceX(const char *text, float letterSpacing, int size = -1) const; + virtual float getAscender() const; + virtual float getLineHeight() const; + + bool getSmoothing() const + { + return smoothing_; + } + +private: + void constructor(const char *filename, float size, bool smoothing); + int kerning(FT_UInt left, FT_UInt right) const; + +private: + FT_Face face_; + int ascender_; + int height_; + FT_StreamRec stream_; + bool smoothing_; +}; + +#endif diff --git a/2dsg/tttextfield.h b/2dsg/tttextfield.h index adf850858..016da8db4 100644 --- a/2dsg/tttextfield.h +++ b/2dsg/tttextfield.h @@ -1,41 +1,41 @@ -#ifndef TTTEXTFIELD_H -#define TTTEXTFIELD_H - -#include "textfieldbase.h" - -class TTFont; -struct TextureData; -class Application; - -class TTTextField : public TextFieldBase -{ -public: - TTTextField(Application* application, TTFont* font); - TTTextField(Application* application, TTFont* font, const char* text); - virtual ~TTTextField(); - - virtual void setText(const char* text); - virtual const char* text() const; - - virtual void setTextColor(unsigned int color); - virtual unsigned int textColor() const; - - virtual void setLetterSpacing(float letterSpacing); - virtual float letterSpacing() const; - -private: - void createGraphics(); - - virtual void extraBounds(float* minx, float* miny, float* maxx, float* maxy) const; - virtual void doDraw(const CurrentTransform&, float sx, float sy, float ex, float ey); - - TextureData* data_; - TTFont* font_; - GraphicsBase graphicsBase_; - unsigned int textColor_; - float letterSpacing_; - float minx_, miny_, maxx_, maxy_; -}; - - -#endif +#ifndef TTTEXTFIELD_H +#define TTTEXTFIELD_H + +#include "textfieldbase.h" + +class TTFont; +struct TextureData; +class Application; + +class TTTextField : public TextFieldBase +{ +public: + TTTextField(Application* application, TTFont* font); + TTTextField(Application* application, TTFont* font, const char* text); + virtual ~TTTextField(); + + virtual void setText(const char* text); + virtual const char* text() const; + + virtual void setTextColor(unsigned int color); + virtual unsigned int textColor() const; + + virtual void setLetterSpacing(float letterSpacing); + virtual float letterSpacing() const; + +private: + void createGraphics(); + + virtual void extraBounds(float* minx, float* miny, float* maxx, float* maxy) const; + virtual void doDraw(const CurrentTransform&, float sx, float sy, float ex, float ey); + + TextureData* data_; + TTFont* font_; + GraphicsBase graphicsBase_; + unsigned int textColor_; + float letterSpacing_; + float minx_, miny_, maxx_, maxy_; +}; + + +#endif diff --git a/android/GiderosAndroidPlayer/proguard-project.txt b/android/GiderosAndroidPlayer/proguard-project.txt index b60ae7ea0..f2fe1559a 100644 --- a/android/GiderosAndroidPlayer/proguard-project.txt +++ b/android/GiderosAndroidPlayer/proguard-project.txt @@ -1,20 +1,20 @@ -# To enable ProGuard in your project, edit project.properties -# to define the proguard.config property as described in that file. -# -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in ${sdk.dir}/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the ProGuard -# include property in project.properties. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# Add any project specific keep options here: - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} +# To enable ProGuard in your project, edit project.properties +# to define the proguard.config property as described in that file. +# +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in ${sdk.dir}/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the ProGuard +# include property in project.properties. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/Accelerometer.java b/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/Accelerometer.java index 0bcffe536..b6b939d90 100644 --- a/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/Accelerometer.java +++ b/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/Accelerometer.java @@ -1,97 +1,97 @@ -package com.giderosmobile.android.player; - -import android.app.Activity; -import android.content.Context; -import android.content.res.Configuration; -import android.hardware.Sensor; -import android.hardware.SensorEvent; -import android.hardware.SensorEventListener; -import android.hardware.SensorManager; -import android.view.Surface; - -public class Accelerometer implements SensorEventListener { - private SensorManager mSensorManager; - private Sensor mAccelerometer; - private boolean isEnabled_; - private int mNativeOrientation; - - public Accelerometer() { - Activity activity = WeakActivityHolder.get(); - - mSensorManager = (SensorManager)activity.getSystemService(Context.SENSOR_SERVICE); - mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); - - int rotation = 0; - switch (activity.getWindowManager().getDefaultDisplay().getRotation()) { - case Surface.ROTATION_0: - rotation = 0; - break; - case Surface.ROTATION_90: - rotation = 90; - break; - case Surface.ROTATION_180: - rotation = 180; - break; - case Surface.ROTATION_270: - rotation = 270; - break; - } - - int orientation = activity.getResources().getConfiguration().orientation; - if (((rotation == 0 || rotation == 180) && (orientation == Configuration.ORIENTATION_LANDSCAPE)) || ((rotation == 90 || rotation == 270) && (orientation == Configuration.ORIENTATION_PORTRAIT))) { - mNativeOrientation = Configuration.ORIENTATION_LANDSCAPE; - } else { - mNativeOrientation = Configuration.ORIENTATION_PORTRAIT; - } - - isEnabled_ = false; - } - - boolean isAvailable() { - return mAccelerometer != null; - } - - public void enable() { - if (!isAvailable()) - return; - if (isEnabled_) - return; - mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_GAME); - isEnabled_ = true; - } - - public void disable() { - if (!isAvailable()) - return; - if (!isEnabled_) - return; - mSensorManager.unregisterListener(this); - isEnabled_ = false; - } - - @Override - public void onSensorChanged(SensorEvent event) { - if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER) { - return; - } - - float x, y, z; - if (mNativeOrientation == Configuration.ORIENTATION_PORTRAIT) { - x = event.values[0]; - y = event.values[1]; - z = event.values[2]; - } else { - x = event.values[1]; - y = -event.values[0]; - z = event.values[2]; - } - - onSensorChanged(-x / 9.80665f, -y / 9.80665f, -z / 9.80665f); - } - - @Override - public void onAccuracyChanged(Sensor sensor, int accuracy) { - } - - private static native void onSensorChanged(float x, float y, float z); -} +package com.giderosmobile.android.player; + +import android.app.Activity; +import android.content.Context; +import android.content.res.Configuration; +import android.hardware.Sensor; +import android.hardware.SensorEvent; +import android.hardware.SensorEventListener; +import android.hardware.SensorManager; +import android.view.Surface; + +public class Accelerometer implements SensorEventListener { + private SensorManager mSensorManager; + private Sensor mAccelerometer; + private boolean isEnabled_; + private int mNativeOrientation; + + public Accelerometer() { + Activity activity = WeakActivityHolder.get(); + + mSensorManager = (SensorManager)activity.getSystemService(Context.SENSOR_SERVICE); + mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); + + int rotation = 0; + switch (activity.getWindowManager().getDefaultDisplay().getRotation()) { + case Surface.ROTATION_0: + rotation = 0; + break; + case Surface.ROTATION_90: + rotation = 90; + break; + case Surface.ROTATION_180: + rotation = 180; + break; + case Surface.ROTATION_270: + rotation = 270; + break; + } + + int orientation = activity.getResources().getConfiguration().orientation; + if (((rotation == 0 || rotation == 180) && (orientation == Configuration.ORIENTATION_LANDSCAPE)) || ((rotation == 90 || rotation == 270) && (orientation == Configuration.ORIENTATION_PORTRAIT))) { + mNativeOrientation = Configuration.ORIENTATION_LANDSCAPE; + } else { + mNativeOrientation = Configuration.ORIENTATION_PORTRAIT; + } + + isEnabled_ = false; + } + + boolean isAvailable() { + return mAccelerometer != null; + } + + public void enable() { + if (!isAvailable()) + return; + if (isEnabled_) + return; + mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_GAME); + isEnabled_ = true; + } + + public void disable() { + if (!isAvailable()) + return; + if (!isEnabled_) + return; + mSensorManager.unregisterListener(this); + isEnabled_ = false; + } + + @Override + public void onSensorChanged(SensorEvent event) { + if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER) { + return; + } + + float x, y, z; + if (mNativeOrientation == Configuration.ORIENTATION_PORTRAIT) { + x = event.values[0]; + y = event.values[1]; + z = event.values[2]; + } else { + x = event.values[1]; + y = -event.values[0]; + z = event.values[2]; + } + + onSensorChanged(-x / 9.80665f, -y / 9.80665f, -z / 9.80665f); + } + + @Override + public void onAccuracyChanged(Sensor sensor, int accuracy) { + } + + private static native void onSensorChanged(float x, float y, float z); +} diff --git a/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/AlertBox.java b/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/AlertBox.java index e9aabc431..f97393baa 100644 --- a/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/AlertBox.java +++ b/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/AlertBox.java @@ -1,122 +1,122 @@ -package com.giderosmobile.android.player; - -import android.app.AlertDialog; -import android.content.DialogInterface; - -public class AlertBox implements DialogInterface.OnShowListener, DialogInterface.OnClickListener, DialogInterface.OnCancelListener, DialogInterface.OnDismissListener -{ - private native void completeCallback(int buttonIndex, String buttonText, long udata); - - private AlertDialog alertDialog_; - private boolean isVisible_ = false; - private long udata_; - - private String cancel_; - private String button1_; - private String button2_; - - public AlertBox(String title, String message, String cancel, String button1, String button2, long udata) - { - cancel_ = cancel; - button1_ = button1; - button2_ = button2; - - udata_ = udata; - - final AlertBox this2 = this; - final String title2 = title; - final String message2 = message; - final String cancel2 = cancel; - final String button12 = button1; - final String button22 = button2; - - WeakActivityHolder.get().runOnUiThread(new Runnable() - { - @Override - public void run() - { - alertDialog_ = new AlertDialog.Builder(WeakActivityHolder.get()).create(); - alertDialog_.setTitle(title2); - alertDialog_.setMessage(message2); - alertDialog_.setCancelable(true); - alertDialog_.setOnShowListener(this2); - alertDialog_.setButton(DialogInterface.BUTTON_NEGATIVE, cancel2, this2); - if (button12 != null) - alertDialog_.setButton(DialogInterface.BUTTON_POSITIVE, button12, this2); - if (button22 != null) - alertDialog_.setButton(DialogInterface.BUTTON_NEUTRAL, button22, this2); - alertDialog_.setOnCancelListener(this2); - alertDialog_.setOnDismissListener(this2); - } - }); - } - - public void show() - { - WeakActivityHolder.get().runOnUiThread(new Runnable() - { - @Override - public void run() - { - alertDialog_.show(); - } - }); - } - - public void hide() - { - WeakActivityHolder.get().runOnUiThread(new Runnable() - { - @Override - public void run() - { - alertDialog_.hide(); - } - }); - } - - public void delete() - { - alertDialog_.dismiss(); - } - - @Override - public void onClick(DialogInterface dialog, int which) - { - switch (which) - { - case DialogInterface.BUTTON_NEGATIVE: - completeCallback(0, cancel_, udata_); - break; - case DialogInterface.BUTTON_POSITIVE: - completeCallback(1, button1_, udata_); - break; - case DialogInterface.BUTTON_NEUTRAL: - completeCallback(2, button2_, udata_); - break; - } - } - - @Override - public void onCancel(DialogInterface dialog) - { - completeCallback(0, cancel_, udata_); - } - - @Override - public void onShow(DialogInterface dialog) - { - isVisible_ = true; - } - - @Override - public void onDismiss(DialogInterface dialog) - { - isVisible_ = false; - } - - public boolean isVisible() - { - return isVisible_; - } -} +package com.giderosmobile.android.player; + +import android.app.AlertDialog; +import android.content.DialogInterface; + +public class AlertBox implements DialogInterface.OnShowListener, DialogInterface.OnClickListener, DialogInterface.OnCancelListener, DialogInterface.OnDismissListener +{ + private native void completeCallback(int buttonIndex, String buttonText, long udata); + + private AlertDialog alertDialog_; + private boolean isVisible_ = false; + private long udata_; + + private String cancel_; + private String button1_; + private String button2_; + + public AlertBox(String title, String message, String cancel, String button1, String button2, long udata) + { + cancel_ = cancel; + button1_ = button1; + button2_ = button2; + + udata_ = udata; + + final AlertBox this2 = this; + final String title2 = title; + final String message2 = message; + final String cancel2 = cancel; + final String button12 = button1; + final String button22 = button2; + + WeakActivityHolder.get().runOnUiThread(new Runnable() + { + @Override + public void run() + { + alertDialog_ = new AlertDialog.Builder(WeakActivityHolder.get()).create(); + alertDialog_.setTitle(title2); + alertDialog_.setMessage(message2); + alertDialog_.setCancelable(true); + alertDialog_.setOnShowListener(this2); + alertDialog_.setButton(DialogInterface.BUTTON_NEGATIVE, cancel2, this2); + if (button12 != null) + alertDialog_.setButton(DialogInterface.BUTTON_POSITIVE, button12, this2); + if (button22 != null) + alertDialog_.setButton(DialogInterface.BUTTON_NEUTRAL, button22, this2); + alertDialog_.setOnCancelListener(this2); + alertDialog_.setOnDismissListener(this2); + } + }); + } + + public void show() + { + WeakActivityHolder.get().runOnUiThread(new Runnable() + { + @Override + public void run() + { + alertDialog_.show(); + } + }); + } + + public void hide() + { + WeakActivityHolder.get().runOnUiThread(new Runnable() + { + @Override + public void run() + { + alertDialog_.hide(); + } + }); + } + + public void delete() + { + alertDialog_.dismiss(); + } + + @Override + public void onClick(DialogInterface dialog, int which) + { + switch (which) + { + case DialogInterface.BUTTON_NEGATIVE: + completeCallback(0, cancel_, udata_); + break; + case DialogInterface.BUTTON_POSITIVE: + completeCallback(1, button1_, udata_); + break; + case DialogInterface.BUTTON_NEUTRAL: + completeCallback(2, button2_, udata_); + break; + } + } + + @Override + public void onCancel(DialogInterface dialog) + { + completeCallback(0, cancel_, udata_); + } + + @Override + public void onShow(DialogInterface dialog) + { + isVisible_ = true; + } + + @Override + public void onDismiss(DialogInterface dialog) + { + isVisible_ = false; + } + + public boolean isVisible() + { + return isVisible_; + } +} diff --git a/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/AudioDevice.java b/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/AudioDevice.java index 9a0521751..5e3c8e52d 100644 --- a/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/AudioDevice.java +++ b/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/AudioDevice.java @@ -1,134 +1,134 @@ -package com.giderosmobile.android.player; - -import android.media.AudioTrack; -import java.nio.ByteBuffer; - -public class AudioDevice implements Runnable -{ - private static int NUMCHANNELS = 2; - - private Thread mThread = null; - private AudioTrack mTrack = null; - private boolean mRunning = false; - private boolean mInitialised = false; - - private static int INFO_SAMPLERATE = 0; - private static int INFO_DSPBUFFERLENGTH = 1; - private static int INFO_DSPNUMBUFFERS = 2; - private static int INFO_MIXERRUNNING = 3; - - public void start() - { - if (this.mThread != null) - { - stop(); - } - - this.mThread = new Thread(this); - this.mThread.setPriority(10); - - this.mRunning = true; - this.mThread.start(); - } - - public void stop() - { - while (this.mThread != null) - { - this.mRunning = false; - try - { - this.mThread.join(); - this.mThread = null; - } catch (InterruptedException localInterruptedException) - { - } - } - } - - public void run() - { - ByteBuffer localByteBuffer = null; - byte[] arrayOfByte = null; - - while (this.mRunning) - { - if (!this.mInitialised) - { - int i = getInfo(INFO_SAMPLERATE); - int k = getInfo(INFO_DSPBUFFERLENGTH); - int m = getInfo(INFO_DSPNUMBUFFERS); - if (i == 0 || k == 0 || m == 0) - { - try { Thread.sleep(1L); } catch (InterruptedException localInterruptedException) {} - continue; - } - - if (this.mTrack != null) - { - this.mTrack.stop(); - this.mTrack.release(); - this.mTrack = null; - } - - int j = AudioTrack.getMinBufferSize(i, 3, 2); - - if (k * m * 2 * NUMCHANNELS > j) - { - j = k * m * 2 * NUMCHANNELS; - } - - this.mTrack = new AudioTrack(3, i, 3, 2, j, 1); - - if (this.mTrack.getState() != AudioTrack.STATE_INITIALIZED) - { - this.mTrack.release(); - this.mTrack = null; - try { Thread.sleep(1L); } catch (InterruptedException localInterruptedException) {} - continue; - } - - this.mTrack.play(); - - localByteBuffer = ByteBuffer.allocateDirect(k * 2 * NUMCHANNELS); - arrayOfByte = new byte[localByteBuffer.capacity()]; - - this.mInitialised = true; - } - - int i = getInfo(INFO_MIXERRUNNING); - if (i == 1) - { - process(localByteBuffer); - - localByteBuffer.get(arrayOfByte); - localByteBuffer.position(0); - this.mTrack.write(arrayOfByte, 0, localByteBuffer.capacity()); - -/* localByteBuffer.get(arrayOfByte, 0, localByteBuffer.capacity()); - this.mTrack.write(arrayOfByte, 0, localByteBuffer.capacity()); - localByteBuffer.position(0); */ - } else - { - localByteBuffer = null; - arrayOfByte = null; - - this.mInitialised = false; - } - - } - - if (this.mTrack != null) - { - this.mTrack.stop(); - this.mTrack.release(); - this.mTrack = null; - } - - this.mInitialised = false; - } - - private native int getInfo(int paramInt); - - private native int process(ByteBuffer paramByteBuffer); -} +package com.giderosmobile.android.player; + +import android.media.AudioTrack; +import java.nio.ByteBuffer; + +public class AudioDevice implements Runnable +{ + private static int NUMCHANNELS = 2; + + private Thread mThread = null; + private AudioTrack mTrack = null; + private boolean mRunning = false; + private boolean mInitialised = false; + + private static int INFO_SAMPLERATE = 0; + private static int INFO_DSPBUFFERLENGTH = 1; + private static int INFO_DSPNUMBUFFERS = 2; + private static int INFO_MIXERRUNNING = 3; + + public void start() + { + if (this.mThread != null) + { + stop(); + } + + this.mThread = new Thread(this); + this.mThread.setPriority(10); + + this.mRunning = true; + this.mThread.start(); + } + + public void stop() + { + while (this.mThread != null) + { + this.mRunning = false; + try + { + this.mThread.join(); + this.mThread = null; + } catch (InterruptedException localInterruptedException) + { + } + } + } + + public void run() + { + ByteBuffer localByteBuffer = null; + byte[] arrayOfByte = null; + + while (this.mRunning) + { + if (!this.mInitialised) + { + int i = getInfo(INFO_SAMPLERATE); + int k = getInfo(INFO_DSPBUFFERLENGTH); + int m = getInfo(INFO_DSPNUMBUFFERS); + if (i == 0 || k == 0 || m == 0) + { + try { Thread.sleep(1L); } catch (InterruptedException localInterruptedException) {} + continue; + } + + if (this.mTrack != null) + { + this.mTrack.stop(); + this.mTrack.release(); + this.mTrack = null; + } + + int j = AudioTrack.getMinBufferSize(i, 3, 2); + + if (k * m * 2 * NUMCHANNELS > j) + { + j = k * m * 2 * NUMCHANNELS; + } + + this.mTrack = new AudioTrack(3, i, 3, 2, j, 1); + + if (this.mTrack.getState() != AudioTrack.STATE_INITIALIZED) + { + this.mTrack.release(); + this.mTrack = null; + try { Thread.sleep(1L); } catch (InterruptedException localInterruptedException) {} + continue; + } + + this.mTrack.play(); + + localByteBuffer = ByteBuffer.allocateDirect(k * 2 * NUMCHANNELS); + arrayOfByte = new byte[localByteBuffer.capacity()]; + + this.mInitialised = true; + } + + int i = getInfo(INFO_MIXERRUNNING); + if (i == 1) + { + process(localByteBuffer); + + localByteBuffer.get(arrayOfByte); + localByteBuffer.position(0); + this.mTrack.write(arrayOfByte, 0, localByteBuffer.capacity()); + +/* localByteBuffer.get(arrayOfByte, 0, localByteBuffer.capacity()); + this.mTrack.write(arrayOfByte, 0, localByteBuffer.capacity()); + localByteBuffer.position(0); */ + } else + { + localByteBuffer = null; + arrayOfByte = null; + + this.mInitialised = false; + } + + } + + if (this.mTrack != null) + { + this.mTrack.stop(); + this.mTrack.release(); + this.mTrack = null; + } + + this.mInitialised = false; + } + + private native int getInfo(int paramInt); + + private native int process(ByteBuffer paramByteBuffer); +} diff --git a/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/GGMediaPlayerManager.java b/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/GGMediaPlayerManager.java index dcb0ff54d..49283301e 100644 --- a/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/GGMediaPlayerManager.java +++ b/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/GGMediaPlayerManager.java @@ -1,455 +1,455 @@ -package com.giderosmobile.android.player; - -import java.io.File; -import java.io.IOException; -import java.util.HashSet; -import java.util.Iterator; - -import android.content.res.AssetFileDescriptor; -import android.media.MediaPlayer; - -public class GGMediaPlayerManager -{ - public static final int GAUDIO_NO_ERROR = 0; - public static final int GAUDIO_CANNOT_OPEN_FILE = 1; - public static final int GAUDIO_UNRECOGNIZED_FORMAT = 2; - public static final int GAUDIO_ERROR_WHILE_READING = 3; - public static final int GAUDIO_UNSUPPORTED_FORMAT = 4; - public static final int GAUDIO_INTERNAL_ERROR = 5; - - private ZipResourceFile mainFile_, patchFile_; - private boolean suspended_ = false; - - public GGMediaPlayerManager(ZipResourceFile mainFile, ZipResourceFile patchFile) - { - mainFile_ = mainFile; - patchFile_ = patchFile; - } - - public synchronized void onPause() - { - if (suspended_) - return; - - for (int i = 0; i < channels_.size(); ++i) - { - Channel channel = channels_.valueAt(i); - - if (channel.player == null) - continue; - - if (channel.player.isPlaying()) - { - channel.player.pause(); - channel.suspended = true; - } - } - - suspended_ = true; - } - - public synchronized void onResume() - { - if (!suspended_) - return; - - for (int i = 0; i < channels_.size(); ++i) - { - Channel channel = channels_.valueAt(i); - - if (channel.player == null) - continue; - - if (channel.suspended) - { - channel.player.start(); - channel.suspended = false; - } - } - - suspended_ = false; - } - - public synchronized long BackgroundMusicCreateFromFile(String fileName, int[] error) - { - if (fileName.equals("")) - { - error[0] = GAUDIO_CANNOT_OPEN_FILE; - return 0; - } - - AssetFileDescriptor fd = null; - - if (fileName.startsWith("/")) - { - File file = new File(fileName); - if (!file.isFile()) - { - error[0] = GAUDIO_CANNOT_OPEN_FILE; - return 0; - } - } - else - { - if (patchFile_ != null) - fd = patchFile_.getAssetFileDescriptor(fileName); - if (fd == null && mainFile_ != null) - fd = mainFile_.getAssetFileDescriptor(fileName); - if (fd == null) - try { fd = WeakActivityHolder.get().getAssets().openFd("assets/" + fileName); } catch (IOException e) {} - - if (fd == null) - { - error[0] = GAUDIO_CANNOT_OPEN_FILE; - return 0; - } - } - - MediaPlayer player = new MediaPlayer(); - - int duration = 0; - - try - { - if (fd != null) - { - player.setDataSource(fd.getFileDescriptor(), fd.getStartOffset(), fd.getLength()); - fd.close(); - } - else - { - player.setDataSource(fileName); - } - player.prepare(); - duration = player.getDuration(); - player.release(); - player = null; - } catch (Exception e) - { - error[0] = GAUDIO_UNRECOGNIZED_FORMAT; - return 0; - } - - long gid = nextgid(); - - sounds_.put(gid, new Sound(fileName, duration)); - - return gid; - } - - public synchronized void BackgroundMusicDelete(long backgroundMusic) - { - Sound sound2 = sounds_.get(backgroundMusic); - - if (sound2 == null) - return; - - Iterator iter2 = sound2.channels.iterator(); - while (iter2.hasNext()) - { - Channel channel = iter2.next(); - - if (channel.player != null) - { - channel.player.release(); - channel.player = null; - } - - channels_.remove(channel.gid); - } - - sounds_.remove(backgroundMusic); - } - - public synchronized int BackgroundMusicGetLength(long backgroundMusic) - { - Sound sound2 = sounds_.get(backgroundMusic); - - if (sound2 == null) - return 0; - - return sound2.length; - } - - public synchronized long BackgroundMusicPlay(long backgroundMusic, boolean paused, long data) - { - Sound sound2 = sounds_.get(backgroundMusic); - - if (sound2 == null) - return 0; - - String fileName = sound2.fileName; - - AssetFileDescriptor fd = null; - - if (fileName.startsWith("/")) - { - File file = new File(fileName); - if (!file.isFile()) - return 0; - } - else - { - if (patchFile_ != null) - fd = patchFile_.getAssetFileDescriptor(fileName); - if (fd == null && mainFile_ != null) - fd = mainFile_.getAssetFileDescriptor(fileName); - if (fd == null) - try { fd = WeakActivityHolder.get().getAssets().openFd("assets/" + fileName); } catch (IOException e) {} - - if (fd == null) - return 0; - } - - MediaPlayer player = new MediaPlayer(); - - try - { - if (fd != null) - { - player.setDataSource(fd.getFileDescriptor(), fd.getStartOffset(), fd.getLength()); - fd.close(); - } - else - { - player.setDataSource(fileName); - } - player.prepare(); - } catch (Exception e) - { - return 0; - } - - long gid = nextgid(); - - player.setOnCompletionListener(new OnCompletionListener(this, gid)); - - Channel channel = new Channel(gid, player, sound2, data); - - sound2.channels.add(channel); - - channels_.put(gid, channel); - - channel.paused = paused; - if (!paused) - channel.player.start(); - - return gid; - } - - public synchronized void BackgroundChannelStop(long backgroundChannel) - { - Channel channel2 = channels_.get(backgroundChannel); - - if (channel2 == null) - return; - - if (channel2.player != null) - { - channel2.player.release(); - channel2.player = null; - } - - channel2.sound.channels.remove(channel2); - - channels_.remove(backgroundChannel); - } - - public synchronized void BackgroundChannelSetPosition(long backgroundChannel, int position) - { - Channel channel2 = channels_.get(backgroundChannel); - - if (channel2 == null) - return; - - if (channel2.player == null) - return; - - channel2.player.seekTo(position); - } - - public synchronized int BackgroundChannelGetPosition(long backgroundChannel) - { - Channel channel2 = channels_.get(backgroundChannel); - - if (channel2 == null) - return 0; - - if (channel2.player == null) - return channel2.lastPosition; - - return channel2.player.getCurrentPosition(); - } - - public synchronized void BackgroundChannelSetPaused(long backgroundChannel, boolean paused) - { - Channel channel2 = channels_.get(backgroundChannel); - - if (channel2 == null) - return; - - if (paused == channel2.paused) - return; - - channel2.paused = paused; - - if (channel2.player != null) - { - if (paused) - channel2.player.pause(); - else - channel2.player.start(); - } - } - - public synchronized boolean BackgroundChannelIsPaused(long backgroundChannel) - { - Channel channel2 = channels_.get(backgroundChannel); - - if (channel2 == null) - return false; - - return channel2.paused; - } - - public synchronized boolean BackgroundChannelIsPlaying(long backgroundChannel) - { - Channel channel2 = channels_.get(backgroundChannel); - - if (channel2 == null) - return false; - - if (channel2.player == null) - return false; - - return channel2.player.isPlaying(); - } - - public synchronized void BackgroundChannelSetVolume(long backgroundChannel, float volume) - { - Channel channel2 = channels_.get(backgroundChannel); - - if (channel2 == null) - return; - - channel2.volume = volume; - - if (channel2.player != null) - channel2.player.setVolume(volume, volume); - } - - public synchronized float BackgroundChannelGetVolume(long backgroundChannel) - { - Channel channel2 = channels_.get(backgroundChannel); - - if (channel2 == null) - return 0.f; - - return channel2.volume; - } - - public synchronized void BackgroundChannelSetLooping(long backgroundChannel, boolean looping) - { - Channel channel2 = channels_.get(backgroundChannel); - - if (channel2 == null) - return; - - channel2.looping = looping; - - if (channel2.player != null) - channel2.player.setLooping(looping); - } - - public synchronized boolean BackgroundChannelIsLooping(long backgroundChannel) - { - Channel channel2 = channels_.get(backgroundChannel); - - if (channel2 == null) - return false; - - return channel2.looping; - } - - synchronized void onCompletion(long backgroundChannel) - { - Channel channel = channels_.get(backgroundChannel); - - if (channel == null) - return; - - channel.lastPosition = channel.sound.length; - - if (channel.player != null) - { - channel.player.release(); - channel.player = null; - } - - onChannelComplete(backgroundChannel, channel.data); - } - - private LongSparseArray sounds_ = new LongSparseArray(); - private LongSparseArray channels_ = new LongSparseArray(); - - static private native long nextgid(); - static private native void onChannelComplete(long backgroundChannel, long data); -} - -class Sound -{ - public Sound(String fileName, int length) - { - this.fileName = fileName; - this.length = length; - } - - public String fileName; - public int zipFile; - public int length; - public HashSet channels = new HashSet(); -} - -class Channel -{ - public Channel(long gid, MediaPlayer player, Sound sound, long data) - { - this.gid = gid; - this.player = player; - this.sound = sound; - this.data = data; - this.paused = true; - this.volume = 1.f; - this.looping = false; - this.suspended = false; - this.lastPosition = 0; - } - - public long gid; - public MediaPlayer player; - public Sound sound; - public long data; - public boolean paused; - public float volume; - public boolean looping; - public boolean suspended; - public int lastPosition; -} - -class OnCompletionListener implements MediaPlayer.OnCompletionListener -{ - public OnCompletionListener(GGMediaPlayerManager manager, long backgroundChannel) - { - manager_ = manager; - backgroundChannel_ = backgroundChannel; - } - - @Override - public void onCompletion(MediaPlayer mediaPlayer) - { - manager_.onCompletion(backgroundChannel_); - } - - GGMediaPlayerManager manager_; - long backgroundChannel_; -} +package com.giderosmobile.android.player; + +import java.io.File; +import java.io.IOException; +import java.util.HashSet; +import java.util.Iterator; + +import android.content.res.AssetFileDescriptor; +import android.media.MediaPlayer; + +public class GGMediaPlayerManager +{ + public static final int GAUDIO_NO_ERROR = 0; + public static final int GAUDIO_CANNOT_OPEN_FILE = 1; + public static final int GAUDIO_UNRECOGNIZED_FORMAT = 2; + public static final int GAUDIO_ERROR_WHILE_READING = 3; + public static final int GAUDIO_UNSUPPORTED_FORMAT = 4; + public static final int GAUDIO_INTERNAL_ERROR = 5; + + private ZipResourceFile mainFile_, patchFile_; + private boolean suspended_ = false; + + public GGMediaPlayerManager(ZipResourceFile mainFile, ZipResourceFile patchFile) + { + mainFile_ = mainFile; + patchFile_ = patchFile; + } + + public synchronized void onPause() + { + if (suspended_) + return; + + for (int i = 0; i < channels_.size(); ++i) + { + Channel channel = channels_.valueAt(i); + + if (channel.player == null) + continue; + + if (channel.player.isPlaying()) + { + channel.player.pause(); + channel.suspended = true; + } + } + + suspended_ = true; + } + + public synchronized void onResume() + { + if (!suspended_) + return; + + for (int i = 0; i < channels_.size(); ++i) + { + Channel channel = channels_.valueAt(i); + + if (channel.player == null) + continue; + + if (channel.suspended) + { + channel.player.start(); + channel.suspended = false; + } + } + + suspended_ = false; + } + + public synchronized long BackgroundMusicCreateFromFile(String fileName, int[] error) + { + if (fileName.equals("")) + { + error[0] = GAUDIO_CANNOT_OPEN_FILE; + return 0; + } + + AssetFileDescriptor fd = null; + + if (fileName.startsWith("/")) + { + File file = new File(fileName); + if (!file.isFile()) + { + error[0] = GAUDIO_CANNOT_OPEN_FILE; + return 0; + } + } + else + { + if (patchFile_ != null) + fd = patchFile_.getAssetFileDescriptor(fileName); + if (fd == null && mainFile_ != null) + fd = mainFile_.getAssetFileDescriptor(fileName); + if (fd == null) + try { fd = WeakActivityHolder.get().getAssets().openFd("assets/" + fileName); } catch (IOException e) {} + + if (fd == null) + { + error[0] = GAUDIO_CANNOT_OPEN_FILE; + return 0; + } + } + + MediaPlayer player = new MediaPlayer(); + + int duration = 0; + + try + { + if (fd != null) + { + player.setDataSource(fd.getFileDescriptor(), fd.getStartOffset(), fd.getLength()); + fd.close(); + } + else + { + player.setDataSource(fileName); + } + player.prepare(); + duration = player.getDuration(); + player.release(); + player = null; + } catch (Exception e) + { + error[0] = GAUDIO_UNRECOGNIZED_FORMAT; + return 0; + } + + long gid = nextgid(); + + sounds_.put(gid, new Sound(fileName, duration)); + + return gid; + } + + public synchronized void BackgroundMusicDelete(long backgroundMusic) + { + Sound sound2 = sounds_.get(backgroundMusic); + + if (sound2 == null) + return; + + Iterator iter2 = sound2.channels.iterator(); + while (iter2.hasNext()) + { + Channel channel = iter2.next(); + + if (channel.player != null) + { + channel.player.release(); + channel.player = null; + } + + channels_.remove(channel.gid); + } + + sounds_.remove(backgroundMusic); + } + + public synchronized int BackgroundMusicGetLength(long backgroundMusic) + { + Sound sound2 = sounds_.get(backgroundMusic); + + if (sound2 == null) + return 0; + + return sound2.length; + } + + public synchronized long BackgroundMusicPlay(long backgroundMusic, boolean paused, long data) + { + Sound sound2 = sounds_.get(backgroundMusic); + + if (sound2 == null) + return 0; + + String fileName = sound2.fileName; + + AssetFileDescriptor fd = null; + + if (fileName.startsWith("/")) + { + File file = new File(fileName); + if (!file.isFile()) + return 0; + } + else + { + if (patchFile_ != null) + fd = patchFile_.getAssetFileDescriptor(fileName); + if (fd == null && mainFile_ != null) + fd = mainFile_.getAssetFileDescriptor(fileName); + if (fd == null) + try { fd = WeakActivityHolder.get().getAssets().openFd("assets/" + fileName); } catch (IOException e) {} + + if (fd == null) + return 0; + } + + MediaPlayer player = new MediaPlayer(); + + try + { + if (fd != null) + { + player.setDataSource(fd.getFileDescriptor(), fd.getStartOffset(), fd.getLength()); + fd.close(); + } + else + { + player.setDataSource(fileName); + } + player.prepare(); + } catch (Exception e) + { + return 0; + } + + long gid = nextgid(); + + player.setOnCompletionListener(new OnCompletionListener(this, gid)); + + Channel channel = new Channel(gid, player, sound2, data); + + sound2.channels.add(channel); + + channels_.put(gid, channel); + + channel.paused = paused; + if (!paused) + channel.player.start(); + + return gid; + } + + public synchronized void BackgroundChannelStop(long backgroundChannel) + { + Channel channel2 = channels_.get(backgroundChannel); + + if (channel2 == null) + return; + + if (channel2.player != null) + { + channel2.player.release(); + channel2.player = null; + } + + channel2.sound.channels.remove(channel2); + + channels_.remove(backgroundChannel); + } + + public synchronized void BackgroundChannelSetPosition(long backgroundChannel, int position) + { + Channel channel2 = channels_.get(backgroundChannel); + + if (channel2 == null) + return; + + if (channel2.player == null) + return; + + channel2.player.seekTo(position); + } + + public synchronized int BackgroundChannelGetPosition(long backgroundChannel) + { + Channel channel2 = channels_.get(backgroundChannel); + + if (channel2 == null) + return 0; + + if (channel2.player == null) + return channel2.lastPosition; + + return channel2.player.getCurrentPosition(); + } + + public synchronized void BackgroundChannelSetPaused(long backgroundChannel, boolean paused) + { + Channel channel2 = channels_.get(backgroundChannel); + + if (channel2 == null) + return; + + if (paused == channel2.paused) + return; + + channel2.paused = paused; + + if (channel2.player != null) + { + if (paused) + channel2.player.pause(); + else + channel2.player.start(); + } + } + + public synchronized boolean BackgroundChannelIsPaused(long backgroundChannel) + { + Channel channel2 = channels_.get(backgroundChannel); + + if (channel2 == null) + return false; + + return channel2.paused; + } + + public synchronized boolean BackgroundChannelIsPlaying(long backgroundChannel) + { + Channel channel2 = channels_.get(backgroundChannel); + + if (channel2 == null) + return false; + + if (channel2.player == null) + return false; + + return channel2.player.isPlaying(); + } + + public synchronized void BackgroundChannelSetVolume(long backgroundChannel, float volume) + { + Channel channel2 = channels_.get(backgroundChannel); + + if (channel2 == null) + return; + + channel2.volume = volume; + + if (channel2.player != null) + channel2.player.setVolume(volume, volume); + } + + public synchronized float BackgroundChannelGetVolume(long backgroundChannel) + { + Channel channel2 = channels_.get(backgroundChannel); + + if (channel2 == null) + return 0.f; + + return channel2.volume; + } + + public synchronized void BackgroundChannelSetLooping(long backgroundChannel, boolean looping) + { + Channel channel2 = channels_.get(backgroundChannel); + + if (channel2 == null) + return; + + channel2.looping = looping; + + if (channel2.player != null) + channel2.player.setLooping(looping); + } + + public synchronized boolean BackgroundChannelIsLooping(long backgroundChannel) + { + Channel channel2 = channels_.get(backgroundChannel); + + if (channel2 == null) + return false; + + return channel2.looping; + } + + synchronized void onCompletion(long backgroundChannel) + { + Channel channel = channels_.get(backgroundChannel); + + if (channel == null) + return; + + channel.lastPosition = channel.sound.length; + + if (channel.player != null) + { + channel.player.release(); + channel.player = null; + } + + onChannelComplete(backgroundChannel, channel.data); + } + + private LongSparseArray sounds_ = new LongSparseArray(); + private LongSparseArray channels_ = new LongSparseArray(); + + static private native long nextgid(); + static private native void onChannelComplete(long backgroundChannel, long data); +} + +class Sound +{ + public Sound(String fileName, int length) + { + this.fileName = fileName; + this.length = length; + } + + public String fileName; + public int zipFile; + public int length; + public HashSet channels = new HashSet(); +} + +class Channel +{ + public Channel(long gid, MediaPlayer player, Sound sound, long data) + { + this.gid = gid; + this.player = player; + this.sound = sound; + this.data = data; + this.paused = true; + this.volume = 1.f; + this.looping = false; + this.suspended = false; + this.lastPosition = 0; + } + + public long gid; + public MediaPlayer player; + public Sound sound; + public long data; + public boolean paused; + public float volume; + public boolean looping; + public boolean suspended; + public int lastPosition; +} + +class OnCompletionListener implements MediaPlayer.OnCompletionListener +{ + public OnCompletionListener(GGMediaPlayerManager manager, long backgroundChannel) + { + manager_ = manager; + backgroundChannel_ = backgroundChannel; + } + + @Override + public void onCompletion(MediaPlayer mediaPlayer) + { + manager_.onCompletion(backgroundChannel_); + } + + GGMediaPlayerManager manager_; + long backgroundChannel_; +} diff --git a/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/Geolocation.java b/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/Geolocation.java index 8b3d06c8d..0a9b29c9e 100644 --- a/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/Geolocation.java +++ b/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/Geolocation.java @@ -1,246 +1,246 @@ -package com.giderosmobile.android.player; - -import android.app.Activity; -import android.content.Context; -import android.hardware.Sensor; -import android.hardware.SensorEvent; -import android.hardware.SensorEventListener; -import android.hardware.SensorManager; -import android.location.Location; -import android.location.LocationListener; -import android.location.LocationManager; -import android.os.Bundle; - -public class Geolocation -{ - private LocationManager locationManager_; - private Location currentBestLocation = null; - private LocationListener locationListener_ = null; - - private SensorManager sensorManager; - private Sensor magneticSensor; - private SensorEventListener magneticListener_ = null; - - Geolocation() - { - Activity activity = WeakActivityHolder.get(); - - locationManager_ = (LocationManager)activity.getSystemService(Context.LOCATION_SERVICE); - - sensorManager = (SensorManager)activity.getSystemService(Context.SENSOR_SERVICE); - magneticSensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); - } - - public boolean isAvailable() - { - boolean gps_enabled = locationManager_.isProviderEnabled(LocationManager.GPS_PROVIDER); - boolean network_enabled = locationManager_.isProviderEnabled(LocationManager.NETWORK_PROVIDER); - - return gps_enabled || network_enabled; - } - - public boolean isHeadingAvailable() - { - return magneticSensor != null; - } - - public void setAccuracy(double accuracy) - { - - } - - public double getAccuracy() - { - return 0; - } - - public void setThreshold(double threshold) - { - - } - public double getThreshold() - { - return 0; - } - public void start() - { - startUpdatingLocation(); - startUpdatingHeading(); - } - public void stop() - { - stopUpdatingLocation(); - stopUpdatingHeading(); - } - - public void startUpdatingLocation() - { - WeakActivityHolder.get().runOnUiThread(new Runnable() - { - @Override - public void run() - { - if (locationListener_ != null) - return; - - locationListener_ = new LocationListener() { - public void onLocationChanged(Location location) - { - if (isBetterLocation(location, currentBestLocation)) - { - currentBestLocation = location; - sendLocationUpdate(currentBestLocation); - } - } - public void onStatusChanged(String arg0, int arg1, Bundle arg2) {} - public void onProviderDisabled(String arg0) {} - public void onProviderEnabled(String arg0) {} - }; - - locationManager_.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener_); - locationManager_.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener_); - - Location location = locationManager_.getLastKnownLocation(LocationManager.GPS_PROVIDER); - if (location != null) - locationListener_.onLocationChanged(location); - } - }); - } - - public void stopUpdatingLocation() - { - WeakActivityHolder.get().runOnUiThread(new Runnable() - { - @Override - public void run() - { - if (locationListener_ == null) - return; - - locationManager_.removeUpdates(locationListener_); - locationListener_ = null; - } - }); - } - - public void startUpdatingHeading() - { - WeakActivityHolder.get().runOnUiThread(new Runnable() - { - @Override - public void run() - { - if (magneticSensor == null) - return; - - if (magneticListener_ != null) - return; - - magneticListener_ = new SensorEventListener() { - @Override - public void onAccuracyChanged(Sensor sensor, int accuracy) { } - - @Override - public void onSensorChanged(SensorEvent event) - { - float x = event.values[0]; - float y = event.values[1]; - float z = event.values[2]; - - double magneticHeading = (Math.atan2(x, -y) + Math.PI) * (180 / Math.PI); - - onHeadingChanged(magneticHeading, magneticHeading); - } - }; - - sensorManager.registerListener(magneticListener_, magneticSensor, SensorManager.SENSOR_DELAY_NORMAL); - } - }); - } - - public void stopUpdatingHeading() - { - WeakActivityHolder.get().runOnUiThread(new Runnable() - { - @Override - public void run() - { - if (magneticSensor == null) - return; - - if (magneticListener_ == null) - return; - - sensorManager.unregisterListener(magneticListener_, magneticSensor); - } - }); - } - - private void sendLocationUpdate(Location location) - { - double latitude = location.getLatitude(); - double longitude = location.getLongitude(); - double altitude = location.getAltitude(); - - onLocationChanged(latitude, longitude, altitude); - } - - private static final int TWO_MINUTES = 1000 * 60 * 2; - - /** Determines whether one Location reading is better than the current Location fix - * @param location The new Location that you want to evaluate - * @param currentBestLocation The current Location fix, to which you want to compare the new one - */ - protected boolean isBetterLocation(Location location, Location currentBestLocation) { - if (currentBestLocation == null) { - // A new location is always better than no location - return true; - } - - // Check whether the new location fix is newer or older - long timeDelta = location.getTime() - currentBestLocation.getTime(); - boolean isSignificantlyNewer = timeDelta > TWO_MINUTES; - boolean isSignificantlyOlder = timeDelta < -TWO_MINUTES; - boolean isNewer = timeDelta > 0; - - // If it's been more than two minutes since the current location, use the new location - // because the user has likely moved - if (isSignificantlyNewer) { - return true; - // If the new location is more than two minutes older, it must be worse - } else if (isSignificantlyOlder) { - return false; - } - - // Check whether the new location fix is more or less accurate - int accuracyDelta = (int) (location.getAccuracy() - currentBestLocation.getAccuracy()); - boolean isLessAccurate = accuracyDelta > 0; - boolean isMoreAccurate = accuracyDelta < 0; - boolean isSignificantlyLessAccurate = accuracyDelta > 200; - - // Check if the old and new location are from the same provider - boolean isFromSameProvider = isSameProvider(location.getProvider(), - currentBestLocation.getProvider()); - - // Determine location quality using a combination of timeliness and accuracy - if (isMoreAccurate) { - return true; - } else if (isNewer && !isLessAccurate) { - return true; - } else if (isNewer && !isSignificantlyLessAccurate && isFromSameProvider) { - return true; - } - return false; - } - - /** Checks whether two providers are the same */ - private boolean isSameProvider(String provider1, String provider2) { - if (provider1 == null) { - return provider2 == null; - } - return provider1.equals(provider2); - } - - private static native void onLocationChanged(double latitude, double longitude, double altitude); - private static native void onHeadingChanged(double magneticHeading, double trueHeading); -} +package com.giderosmobile.android.player; + +import android.app.Activity; +import android.content.Context; +import android.hardware.Sensor; +import android.hardware.SensorEvent; +import android.hardware.SensorEventListener; +import android.hardware.SensorManager; +import android.location.Location; +import android.location.LocationListener; +import android.location.LocationManager; +import android.os.Bundle; + +public class Geolocation +{ + private LocationManager locationManager_; + private Location currentBestLocation = null; + private LocationListener locationListener_ = null; + + private SensorManager sensorManager; + private Sensor magneticSensor; + private SensorEventListener magneticListener_ = null; + + Geolocation() + { + Activity activity = WeakActivityHolder.get(); + + locationManager_ = (LocationManager)activity.getSystemService(Context.LOCATION_SERVICE); + + sensorManager = (SensorManager)activity.getSystemService(Context.SENSOR_SERVICE); + magneticSensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); + } + + public boolean isAvailable() + { + boolean gps_enabled = locationManager_.isProviderEnabled(LocationManager.GPS_PROVIDER); + boolean network_enabled = locationManager_.isProviderEnabled(LocationManager.NETWORK_PROVIDER); + + return gps_enabled || network_enabled; + } + + public boolean isHeadingAvailable() + { + return magneticSensor != null; + } + + public void setAccuracy(double accuracy) + { + + } + + public double getAccuracy() + { + return 0; + } + + public void setThreshold(double threshold) + { + + } + public double getThreshold() + { + return 0; + } + public void start() + { + startUpdatingLocation(); + startUpdatingHeading(); + } + public void stop() + { + stopUpdatingLocation(); + stopUpdatingHeading(); + } + + public void startUpdatingLocation() + { + WeakActivityHolder.get().runOnUiThread(new Runnable() + { + @Override + public void run() + { + if (locationListener_ != null) + return; + + locationListener_ = new LocationListener() { + public void onLocationChanged(Location location) + { + if (isBetterLocation(location, currentBestLocation)) + { + currentBestLocation = location; + sendLocationUpdate(currentBestLocation); + } + } + public void onStatusChanged(String arg0, int arg1, Bundle arg2) {} + public void onProviderDisabled(String arg0) {} + public void onProviderEnabled(String arg0) {} + }; + + locationManager_.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener_); + locationManager_.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener_); + + Location location = locationManager_.getLastKnownLocation(LocationManager.GPS_PROVIDER); + if (location != null) + locationListener_.onLocationChanged(location); + } + }); + } + + public void stopUpdatingLocation() + { + WeakActivityHolder.get().runOnUiThread(new Runnable() + { + @Override + public void run() + { + if (locationListener_ == null) + return; + + locationManager_.removeUpdates(locationListener_); + locationListener_ = null; + } + }); + } + + public void startUpdatingHeading() + { + WeakActivityHolder.get().runOnUiThread(new Runnable() + { + @Override + public void run() + { + if (magneticSensor == null) + return; + + if (magneticListener_ != null) + return; + + magneticListener_ = new SensorEventListener() { + @Override + public void onAccuracyChanged(Sensor sensor, int accuracy) { } + + @Override + public void onSensorChanged(SensorEvent event) + { + float x = event.values[0]; + float y = event.values[1]; + float z = event.values[2]; + + double magneticHeading = (Math.atan2(x, -y) + Math.PI) * (180 / Math.PI); + + onHeadingChanged(magneticHeading, magneticHeading); + } + }; + + sensorManager.registerListener(magneticListener_, magneticSensor, SensorManager.SENSOR_DELAY_NORMAL); + } + }); + } + + public void stopUpdatingHeading() + { + WeakActivityHolder.get().runOnUiThread(new Runnable() + { + @Override + public void run() + { + if (magneticSensor == null) + return; + + if (magneticListener_ == null) + return; + + sensorManager.unregisterListener(magneticListener_, magneticSensor); + } + }); + } + + private void sendLocationUpdate(Location location) + { + double latitude = location.getLatitude(); + double longitude = location.getLongitude(); + double altitude = location.getAltitude(); + + onLocationChanged(latitude, longitude, altitude); + } + + private static final int TWO_MINUTES = 1000 * 60 * 2; + + /** Determines whether one Location reading is better than the current Location fix + * @param location The new Location that you want to evaluate + * @param currentBestLocation The current Location fix, to which you want to compare the new one + */ + protected boolean isBetterLocation(Location location, Location currentBestLocation) { + if (currentBestLocation == null) { + // A new location is always better than no location + return true; + } + + // Check whether the new location fix is newer or older + long timeDelta = location.getTime() - currentBestLocation.getTime(); + boolean isSignificantlyNewer = timeDelta > TWO_MINUTES; + boolean isSignificantlyOlder = timeDelta < -TWO_MINUTES; + boolean isNewer = timeDelta > 0; + + // If it's been more than two minutes since the current location, use the new location + // because the user has likely moved + if (isSignificantlyNewer) { + return true; + // If the new location is more than two minutes older, it must be worse + } else if (isSignificantlyOlder) { + return false; + } + + // Check whether the new location fix is more or less accurate + int accuracyDelta = (int) (location.getAccuracy() - currentBestLocation.getAccuracy()); + boolean isLessAccurate = accuracyDelta > 0; + boolean isMoreAccurate = accuracyDelta < 0; + boolean isSignificantlyLessAccurate = accuracyDelta > 200; + + // Check if the old and new location are from the same provider + boolean isFromSameProvider = isSameProvider(location.getProvider(), + currentBestLocation.getProvider()); + + // Determine location quality using a combination of timeliness and accuracy + if (isMoreAccurate) { + return true; + } else if (isNewer && !isLessAccurate) { + return true; + } else if (isNewer && !isSignificantlyLessAccurate && isFromSameProvider) { + return true; + } + return false; + } + + /** Checks whether two providers are the same */ + private boolean isSameProvider(String provider1, String provider2) { + if (provider1 == null) { + return provider2 == null; + } + return provider1.equals(provider2); + } + + private static native void onLocationChanged(double latitude, double longitude, double altitude); + private static native void onHeadingChanged(double magneticHeading, double trueHeading); +} diff --git a/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/GiderosApplication.java b/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/GiderosApplication.java index 7e21d4b73..98dbb1887 100644 --- a/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/GiderosApplication.java +++ b/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/GiderosApplication.java @@ -1,1036 +1,1036 @@ -package com.giderosmobile.android.player; - -import java.io.BufferedReader; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.lang.reflect.Method; -import java.net.InetAddress; -import java.net.NetworkInterface; -import java.net.SocketException; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.List; -import java.util.Locale; - -import android.app.Activity; -import android.content.ActivityNotFoundException; -import android.content.ComponentName; -import android.content.Context; -import android.content.Intent; -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageManager; -import android.content.res.AssetFileDescriptor; -import android.content.res.AssetManager; -import android.content.res.Configuration; -import android.graphics.Color; -import android.net.Uri; -import android.os.Environment; -import android.os.Vibrator; -import android.util.DisplayMetrics; -import android.view.KeyEvent; -import android.view.Surface; -import android.view.View; -import android.view.ViewGroup; -import android.view.WindowManager; -import android.widget.AdapterView; -import android.widget.AdapterView.OnItemClickListener; -import android.widget.ArrayAdapter; -import android.widget.FrameLayout; -import android.widget.ListView; -import android.widget.TextView; - -public class GiderosApplication -{ - public Object lock = new Object(); - - public ZipResourceFile mainFile; - public ZipResourceFile patchFile; - - static private GiderosApplication instance_; - static public GiderosApplication getInstance() - { - return instance_; - } - - private Accelerometer accelerometer_; - private boolean isAccelerometerStarted_ = false; - - private Gyroscope gyroscope_; - private boolean isGyroscopeStarted_ = false; - - private Geolocation geolocation_; - private boolean isLocationStarted_ = false; - private boolean isHeadingStarted_ = false; - - private boolean isForeground_ = false; - - private boolean isSurfaceCreated_ = false; - - private ArrayList eventQueue_ = new ArrayList(); - private static final int PAUSE = 0; - private static final int RESUME = 1; - private static final int STOP = 2; - private static final int START = 3; - - private ListView projectList; - - private GGMediaPlayerManager mediaPlayerManager_; - - private AudioDevice audioDevice_; - - private ArrayList < Class < ? >> sAvailableClasses = new ArrayList < Class < ? >> (); - - private static Class < ? > findClass ( String className ) { - - Class < ? > theClass = null; - try { - - theClass = Class.forName ( className ); - } catch ( Throwable e ) { - - } - - return theClass; - } - - private static Object executeMethod ( Class < ? > theClass, Object theInstance, String methodName, Class < ? > [] parameterTypes, Object [] parameterValues ) { - - Object result = null; - if ( theClass != null ) { - - try { - - Method theMethod = theClass.getMethod ( methodName, parameterTypes ); - - result = theMethod.invoke ( theInstance, parameterValues ); - } catch ( Throwable e ) { - - } - } - - return result; - } - - public GiderosApplication(String[] sExternalClasses) - { - for ( String className : sExternalClasses ) - { - Class < ? > theClass = findClass ( className ); - if ( theClass != null ) { - - sAvailableClasses.add ( theClass ); - } - } - - accelerometer_ = new Accelerometer(); - gyroscope_ = new Gyroscope(); - geolocation_ = new Geolocation(); - - populateAllFiles(); - getDirectories(); - - mediaPlayerManager_ = new GGMediaPlayerManager(mainFile, patchFile); - - audioDevice_ = new AudioDevice(); - - synchronized (lock) - { - GiderosApplication.nativeCreate(allfiles_ == null); - GiderosApplication.nativeSetDirectories(externalDir_, internalDir_, cacheDir_); - if (allfiles_ != null) - GiderosApplication.nativeSetFileSystem(allfiles_); - } - } - - private String allfiles_ = null; - - private void populateAllFiles() - { - allfiles_ = null; - - AssetManager assetManager = WeakActivityHolder.get().getAssets(); - - ArrayList lines = new ArrayList(); - - try - { - InputStream in = assetManager.open("assets/allfiles.txt"); - BufferedReader br = new BufferedReader(new InputStreamReader(in)); - while (true) - { - String line = br.readLine(); - if (line == null) - break; - lines.add(line); - } - in.close(); - } catch (IOException e) - { - loadProjects(); - Logger.log("player mode"); - return; - } - - StringBuilder sb = new StringBuilder(); - - ApplicationInfo applicationInfo = WeakActivityHolder.get().getApplicationInfo(); - sb.append(applicationInfo.sourceDir).append("|"); - - lines.add("properties.bin*"); - lines.add("luafiles.txt*"); - - String mainPath = null; - String patchPath = null; - mainFile = null; - patchFile = null; - try - { - if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) - { - Activity activity = WeakActivityHolder.get(); - - String packageName = activity.getPackageName(); - String root = Environment.getExternalStorageDirectory().getAbsolutePath(); - String expPath = root + "/Android/obb/" + packageName; - - int versionCode = activity.getPackageManager().getPackageInfo(activity.getPackageName(), 0).versionCode; - - mainPath = expPath + "/" + "main." + versionCode + "." + packageName + ".obb"; - if ((new File(mainPath)).isFile()) - mainFile = new ZipResourceFile(mainPath); - - patchPath = expPath + "/" + "patch." + versionCode + "." + packageName + ".obb"; - if ((new File(patchPath)).isFile()) - patchFile = new ZipResourceFile(patchPath); - } - } catch (Exception e) - { - } - - if (mainFile != null) - sb.append(mainPath); - sb.append("|"); - - if (patchFile != null) - sb.append(patchPath); - sb.append("|"); - - for (int i = 0; i < lines.size(); ++i) - { - String line = lines.get(i); - - String suffix = ""; - - if (line.endsWith("*")) - { - line = line.substring(0, line.length() - 1); - suffix = ".jet"; - } - - try - { - int zipFile = 0; - AssetFileDescriptor fd = null; - - if (patchFile != null) - { - fd = patchFile.getAssetFileDescriptor(line + suffix); - zipFile = 2; - } - - if (fd == null) - if (mainFile != null) - { - fd = mainFile.getAssetFileDescriptor(line + suffix); - zipFile = 1; - } - - if (fd == null) - { - fd = assetManager.openFd("assets/" + line + suffix); - zipFile = 0; - } - - if (fd != null) - { - sb.append(line).append("|").append(zipFile).append("|").append(fd.getStartOffset()).append("|").append(fd.getLength()).append("|"); - fd.close(); - } - } catch (IOException e) - { - Logger.log(e.toString()); - } - } - - sb.deleteCharAt(sb.length() - 1); - - allfiles_ = sb.toString(); - } - - String externalDir_, internalDir_, cacheDir_; - private void getDirectories() - { - boolean mExternalStorageAvailable = false; - boolean mExternalStorageWriteable = false; - String state = Environment.getExternalStorageState(); - - if (Environment.MEDIA_MOUNTED.equals(state)) - { - // We can read and write the media - mExternalStorageAvailable = mExternalStorageWriteable = true; - } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) - { - // We can only read the media - mExternalStorageAvailable = true; - mExternalStorageWriteable = false; - } else - { - // Something else is wrong. It may be one of many other states, but - // all we need - // to know is we can neither read nor write - mExternalStorageAvailable = mExternalStorageWriteable = false; - } - - externalDir_ = Environment.getExternalStorageDirectory().getAbsolutePath(); - internalDir_ = WeakActivityHolder.get().getFilesDir().getAbsolutePath(); - cacheDir_ = WeakActivityHolder.get().getCacheDir().getAbsolutePath(); - - Logger.log("externalDir: " + externalDir_); - Logger.log("internalDir: " + internalDir_); - Logger.log("cacheDir: " + cacheDir_); - } - - private void loadProjects(){ - projectList = new ListView(WeakActivityHolder.get()); - TextView text = new TextView(WeakActivityHolder.get()); - text.setText("Gideros Projects"); - text.setTextColor(Color.BLACK); - text.setTextSize(25); - text.setBackgroundColor(Color.WHITE); - projectList.addHeaderView(text); - ArrayAdapter modeAdapter = new ArrayAdapter(WeakActivityHolder.get(), android.R.layout.simple_list_item_1, android.R.id.text1, traverse(new File(Environment.getExternalStorageDirectory().toString()+"/gideros"))){ - @Override - public View getView(int position, View convertView, ViewGroup parent) { - View view =super.getView(position, convertView, parent); - - TextView textView=(TextView) view.findViewById(android.R.id.text1); - textView.setTextColor(Color.BLACK); - textView.setBackgroundColor(Color.WHITE); - - return view; - } - }; - projectList.setAdapter(modeAdapter); - projectList.setOnItemClickListener(new OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - TextView textView=(TextView) view.findViewById(android.R.id.text1); - if(textView != null){ - projectList.setVisibility(View.GONE); - nativeOpenProject((String) textView.getText()); - } - } - }); - projectList.setVisibility(View.GONE); - FrameLayout layout = (FrameLayout)WeakActivityHolder.get().getWindow().getDecorView(); - layout.addView(projectList); - } - - public List traverse (File dir) { - Logger.log("Checking: " + dir.getAbsolutePath()); - List projects = new ArrayList(); - if (dir.exists()) { - File[] files = dir.listFiles(); - for (int i = 0; i < files.length; ++i) { - File file = files[i]; - if (file.isDirectory()) { - Logger.log("Found: " + file.getName()); - projects.add(file.getName()); - } - } - } - return projects; - } - - - static public void onCreate(String[] externalClasses) - { - instance_ = new GiderosApplication(externalClasses); - for ( Class < ? > theClass : instance_.sAvailableClasses ) { - - executeMethod ( theClass, null, "onCreate", new Class < ? > [] { Activity.class }, new Object [] { WeakActivityHolder.get() }); - } - } - - static public void onDestroy() - { - for ( Class < ? > theClass : instance_.sAvailableClasses ) { - - executeMethod ( theClass, null, "onDestroy", new Class < ? > [] { }, new Object [] { }); - } - - synchronized (instance_.lock) - { - GiderosApplication.nativeDestroy(); - } - - instance_ = null; - } - - public void onStart() - { - if (isSurfaceCreated_ == true) { - synchronized (eventQueue_) { - eventQueue_.add(START); - } - } - - for ( Class < ? > theClass : sAvailableClasses ) { - - executeMethod ( theClass, null, "onStart", new Class < ? > [] { }, new Object [] { }); - } - } - - public void onRestart() - { - for ( Class < ? > theClass : sAvailableClasses ) { - - executeMethod ( theClass, null, "onRestart", new Class < ? > [] { }, new Object [] { }); - } - } - - public void onStop() - { - for ( Class < ? > theClass : sAvailableClasses ) { - - executeMethod ( theClass, null, "onStop", new Class < ? > [] { }, new Object [] { }); - } - - if (isSurfaceCreated_ == true) { - synchronized (eventQueue_) { - eventQueue_.add(STOP); - } - } - } - - - public void onPause() - { - isForeground_ = false; - - for ( Class < ? > theClass : sAvailableClasses ) { - - executeMethod ( theClass, null, "onPause", new Class < ? > [] { }, new Object [] { }); - } - - if (isSurfaceCreated_ == true) { - synchronized (eventQueue_) { - eventQueue_.add(PAUSE); - try { - eventQueue_.wait(); - } catch (InterruptedException e) { - } - } - } - - - accelerometer_.disable(); - gyroscope_.disable(); - geolocation_.stopUpdatingLocation(); - geolocation_.stopUpdatingHeading(); - mediaPlayerManager_.onPause(); - audioDevice_.stop(); - } - - public void onResume() - { - isForeground_ = true; - if (isAccelerometerStarted_) - accelerometer_.enable(); - if (isGyroscopeStarted_) - gyroscope_.enable(); - if (isLocationStarted_) - geolocation_.startUpdatingLocation(); - if (isHeadingStarted_) - geolocation_.startUpdatingHeading(); - mediaPlayerManager_.onResume(); - audioDevice_.start(); - - for ( Class < ? > theClass : sAvailableClasses ) { - - executeMethod ( theClass, null, "onResume", new Class < ? > [] { }, new Object [] { }); - } - - if (isSurfaceCreated_ == true) { - synchronized (eventQueue_) { - eventQueue_.add(RESUME); - try { - eventQueue_.wait(); - } catch (InterruptedException e) { - } - } - } - } - - public void onLowMemory() - { - synchronized (lock) - { - nativeLowMemory(); - } - } - - public void onActivityResult(int requestCode, int resultCode, Intent data) - { - for ( Class < ? > theClass : sAvailableClasses ) { - - executeMethod ( theClass, null, "onActivityResult", new Class < ? > [] { java.lang.Integer.TYPE, java.lang.Integer.TYPE, Intent.class }, new Object [] { new Integer ( requestCode ), new Integer ( resultCode ), data }); - } - } - - public void onSurfaceCreated() - { - synchronized (lock) - { - GiderosApplication.nativeSurfaceCreated(); - isSurfaceCreated_ = true; - } - } - - public void onSurfaceChanged(int w, int h) - { - synchronized (lock) - { - GiderosApplication.nativeSurfaceChanged(w, h, getRotation()); - } - } - - static private void sleep(long nsec) - { - try { - Thread.sleep(nsec / 1000000, (int)(nsec % 1000000)); - } catch (InterruptedException e) { - } - } - - private long startTime = System.nanoTime(); - - public void onDrawFrame() - { - long target = 1000000000L / (long)fps_; - - long currentTime = System.nanoTime(); - long dt = currentTime - startTime; - startTime = currentTime; - if (dt < 0) - dt = 0; - if (dt < target) - { - sleep(target - dt); - startTime += target - dt; - } - - synchronized (lock) { - synchronized (eventQueue_) { - while (!eventQueue_.isEmpty()) { - int event = eventQueue_.remove(0); - switch (event) { - case PAUSE: - GiderosApplication.nativePause(); - break; - case RESUME: - GiderosApplication.nativeResume(); - break; - case START: - GiderosApplication.nativeStart(); - break; - case STOP: - GiderosApplication.nativeStop(); - break; - } - } - eventQueue_.notify(); - } - - GiderosApplication.nativeDrawFrame(); - } - } - - public void onTouchesBegin(int size, int[] id, int[] x, int[] y, int actionIndex) - { - if(!isRunning()){ - if(projectList != null && projectList.getVisibility() == View.GONE){ - projectList.setVisibility(View.VISIBLE); - } - } - GiderosApplication.nativeTouchesBegin(size, id, x, y, actionIndex); - } - - public void onTouchesMove(int size, int[] id, int[] x, - int[] y) - { - GiderosApplication.nativeTouchesMove(size, id, x, y); - } - - public void onTouchesEnd(int size, int[] id, int[] x, - int[] y, int actionIndex) - { - GiderosApplication.nativeTouchesEnd(size, id, x, y, actionIndex); - } - - public void onTouchesCancel(int size, int[] id, int[] x, - int[] y) - { - GiderosApplication.nativeTouchesCancel(size, id, x, y); - } - - public boolean onKeyDown(int keyCode, KeyEvent event) - { - if(projectList != null && projectList.getVisibility() == View.VISIBLE){ - projectList.setVisibility(View.GONE); - return true; - } - boolean handled = nativeKeyDown(keyCode, event.getRepeatCount()); - if(keyCode == KeyEvent.KEYCODE_VOLUME_DOWN || keyCode == KeyEvent.KEYCODE_VOLUME_MUTE || keyCode == KeyEvent.KEYCODE_VOLUME_UP || keyCode == KeyEvent.KEYCODE_POWER){ - return false; - } - return handled; - } - - public boolean onKeyUp(int keyCode, KeyEvent event) - { - return nativeKeyUp(keyCode, event.getRepeatCount()); - } - - public boolean isAccelerometerAvailable() - { - return accelerometer_.isAvailable(); - } - - public void startAccelerometer() - { - isAccelerometerStarted_ = true; - if (isForeground_) - accelerometer_.enable(); - } - - public void stopAccelerometer() - { - isAccelerometerStarted_ = false; - accelerometer_.disable(); - } - - - public boolean isGyroscopeAvailable() - { - return gyroscope_.isAvailable(); - } - - public void startGyroscope() - { - isGyroscopeStarted_ = true; - if (isForeground_) - gyroscope_.enable(); - } - - public void stopGyroscope() - { - isGyroscopeStarted_ = false; - gyroscope_.disable(); - } - - - public boolean isGeolocationAvailable() - { - return geolocation_.isAvailable(); - } - - public boolean isHeadingAvailable() - { - return geolocation_.isHeadingAvailable(); - } - - public void setGeolocationAccuracy(double accuracy) - { - geolocation_.setAccuracy(accuracy); - } - - public double getGeolocationAccuracy() - { - return geolocation_.getAccuracy(); - } - - public void setGeolocationThreshold(double threshold) - { - geolocation_.setThreshold(threshold); - } - - public double getGeolocationThreshold() - { - return geolocation_.getThreshold(); - } - - public void startUpdatingLocation() - { - isLocationStarted_ = true; - if (isForeground_) - geolocation_.startUpdatingLocation(); - } - - public void stopUpdatingLocation() - { - isLocationStarted_ = false; - geolocation_.stopUpdatingLocation(); - } - - public void startUpdatingHeading() - { - isHeadingStarted_ = true; - if (isForeground_) - geolocation_.startUpdatingHeading(); - } - - public void stopUpdatingHeading() - { - isHeadingStarted_ = false; - geolocation_.stopUpdatingHeading(); - } - - - // static equivalents - static public boolean isAccelerometerAvailable_s() - { - return instance_.isAccelerometerAvailable(); - } - static public void startAccelerometer_s() - { - instance_.startAccelerometer(); - } - static public void stopAccelerometer_s() - { - instance_.stopAccelerometer(); - } - - - static public boolean isGyroscopeAvailable_s() - { - return instance_.isGyroscopeAvailable(); - } - static public void startGyroscope_s() - { - instance_.startGyroscope(); - } - static public void stopGyroscope_s() - { - instance_.stopGyroscope(); - } - - - static public boolean isGeolocationAvailable_s() - { - return instance_.isGeolocationAvailable(); - } - static public boolean isHeadingAvailable_s() - { - return instance_.isHeadingAvailable(); - } - static public void setGeolocationAccuracy_s(double accuracy) - { - instance_.setGeolocationAccuracy(accuracy); - } - static public double getGeolocationAccuracy_s() - { - return instance_.getGeolocationAccuracy(); - } - static public void setGeolocationThreshold_s(double threshold) - { - instance_.setGeolocationThreshold(threshold); - } - static public double getGeolocationThreshold_s() - { - return instance_.getGeolocationThreshold(); - } - static public void startUpdatingLocation_s() - { - instance_.startUpdatingLocation(); - } - static public void stopUpdatingLocation_s() - { - instance_.stopUpdatingLocation(); - } - static public void startUpdatingHeading_s() - { - instance_.startUpdatingHeading(); - } - static public void stopUpdatingHeading_s() - { - instance_.stopUpdatingHeading(); - } - - static public long BackgroundMusicCreateFromFile(String fileName, int[] error) - { - return instance_.mediaPlayerManager_.BackgroundMusicCreateFromFile(fileName, error); - } - - static public void BackgroundMusicDelete(long backgroundMusic) - { - instance_.mediaPlayerManager_.BackgroundMusicDelete(backgroundMusic); - } - - static public int BackgroundMusicGetLength(long backgroundMusic) - { - return instance_.mediaPlayerManager_.BackgroundMusicGetLength(backgroundMusic); - } - - static public long BackgroundMusicPlay(long backgroundMusic, boolean paused, long data) - { - return instance_.mediaPlayerManager_.BackgroundMusicPlay(backgroundMusic, paused, data); - } - - static public void BackgroundChannelStop(long backgroundChannel) - { - instance_.mediaPlayerManager_.BackgroundChannelStop(backgroundChannel); - } - - static public void BackgroundChannelSetPosition(long backgroundChannel, int position) - { - instance_.mediaPlayerManager_.BackgroundChannelSetPosition(backgroundChannel, position); - } - - static public int BackgroundChannelGetPosition(long backgroundChannel) - { - return instance_.mediaPlayerManager_.BackgroundChannelGetPosition(backgroundChannel); - } - - static public void BackgroundChannelSetPaused(long backgroundChannel, boolean paused) - { - instance_.mediaPlayerManager_.BackgroundChannelSetPaused(backgroundChannel, paused); - } - - static public boolean BackgroundChannelIsPaused(long backgroundChannel) - { - return instance_.mediaPlayerManager_.BackgroundChannelIsPaused(backgroundChannel); - } - - static public boolean BackgroundChannelIsPlaying(long backgroundChannel) - { - return instance_.mediaPlayerManager_.BackgroundChannelIsPlaying(backgroundChannel); - } - - static public void BackgroundChannelSetVolume(long backgroundChannel, float volume) - { - instance_.mediaPlayerManager_.BackgroundChannelSetVolume(backgroundChannel, volume); - } - - static public float BackgroundChannelGetVolume(long backgroundChannel) - { - return instance_.mediaPlayerManager_.BackgroundChannelGetVolume(backgroundChannel); - } - - static public void BackgroundChannelSetLooping(long backgroundChannel, boolean looping) - { - instance_.mediaPlayerManager_.BackgroundChannelSetLooping(backgroundChannel, looping); - } - - static public boolean BackgroundChannelIsLooping(long backgroundChannel) - { - return instance_.mediaPlayerManager_.BackgroundChannelIsLooping(backgroundChannel); - } - - int fps_ = 60; - static public void setFps(int fps) - { - instance_.fps_ = fps; - } - - - static public void setKeepAwake(boolean awake) - { - final Activity activity = WeakActivityHolder.get(); - - if (awake) - activity.runOnUiThread(new Runnable() {public void run() {activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);}}); - else - activity.runOnUiThread(new Runnable() {public void run() {activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);}}); - } - - static public void vibrate(int ms) - { - try - { - ((Vibrator)WeakActivityHolder.get().getSystemService(Context.VIBRATOR_SERVICE)).vibrate(ms); - } - catch (SecurityException e) - { - } - } - - static public String getLocale() - { - Locale locale = Locale.getDefault(); - return locale.getLanguage() + "_" + locale.getCountry(); - } - - static public String getLanguage() - { - Locale locale = Locale.getDefault(); - return locale.getLanguage(); - } - - static public String getVersion() - { - return android.os.Build.VERSION.RELEASE; - } - - static public String getManufacturer() - { - return android.os.Build.MANUFACTURER; - } - - static public String getModel() - { - return android.os.Build.MODEL; - } - - static public void openUrl(String url) - { - Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); - - try - { - WeakActivityHolder.get().startActivity(intent); - } - catch (ActivityNotFoundException e) - { - } - } - - static public boolean canOpenUrl(String url) - { - try - { - Activity activity = WeakActivityHolder.get(); - PackageManager pm = activity.getPackageManager(); - Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); - ComponentName cn = intent.resolveActivity(pm); - - if (cn != null) - return true; - } - catch (Exception e) - { - } - - return false; - } - - static public void finishActivity() - { - final Activity activity = WeakActivityHolder.get(); - - activity.runOnUiThread(new Runnable() { - @Override - public void run() { - activity.finish(); - } - }); - } - - static public int getScreenDensity() - { - DisplayMetrics dm = new DisplayMetrics(); - WeakActivityHolder.get().getWindowManager().getDefaultDisplay().getMetrics(dm); - return dm.densityDpi; - } - - public static String getLocalIPs() - { - StringBuilder sb = new StringBuilder(); - - try - { - for (Enumeration en = NetworkInterface - .getNetworkInterfaces(); en.hasMoreElements();) - { - NetworkInterface intf = en.nextElement(); - for (Enumeration enumIpAddr = intf - .getInetAddresses(); enumIpAddr.hasMoreElements();) - { - InetAddress inetAddress = enumIpAddr.nextElement(); - if (!inetAddress.isLoopbackAddress()) - { - sb.append(inetAddress.getHostAddress().toString()); - sb.append("|"); - } - } - } - } catch (SocketException ex) - { - } - - if (sb.length() != 0) - sb.deleteCharAt(sb.length() - 1); - - return sb.toString(); - } - - public static int getRotation() - { - Activity activity = WeakActivityHolder.get(); - - int orientation = activity.getResources().getConfiguration().orientation; - int rotation = activity.getWindowManager().getDefaultDisplay().getRotation(); - - if (orientation == Configuration.ORIENTATION_PORTRAIT) - { - if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_270) - return 0; - else - return 180; - } - else - { - if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90) - return 90; - else - return 270; - } - } - - static public String getDeviceName() { - String manufacturer = android.os.Build.MANUFACTURER; - String model = android.os.Build.MODEL; - if (model.startsWith(manufacturer)) { - return model; - } else { - return manufacturer + " " + model; - } - } - - static public void throwLuaException(String error) throws LuaException{ - throw new LuaException(error); - } - - static private native void nativeOpenProject(String project); - static private native void nativeLowMemory(); - static private native boolean isRunning(); - static private native boolean nativeKeyDown(int keyCode, int repeatCount); - static private native boolean nativeKeyUp(int keyCode, int repeatCount); - static private native void nativeCreate(boolean player); - static private native void nativeSetDirectories(String externalDir, String internalDir, String cacheDir); - static private native void nativeSetFileSystem(String files); - static private native void nativePause(); - static private native void nativeResume(); - static private native void nativeDestroy(); - static private native void nativeSurfaceCreated(); - static private native void nativeSurfaceChanged(int w, int h, int rotation); - static private native void nativeDrawFrame(); - static private native void nativeTouchesBegin(int size, int[] id, int[] x, int[] y, int actionIndex); - static private native void nativeTouchesMove(int size, int[] id, int[] x, int[] y); - static private native void nativeTouchesEnd(int size, int[] id, int[] x, int[] y, int actionIndex); - static private native void nativeTouchesCancel(int size, int[] id, int[] x, int[] y); - static private native void nativeStop(); - static private native void nativeStart(); -} +package com.giderosmobile.android.player; + +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.lang.reflect.Method; +import java.net.InetAddress; +import java.net.NetworkInterface; +import java.net.SocketException; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.List; +import java.util.Locale; + +import android.app.Activity; +import android.content.ActivityNotFoundException; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.content.res.AssetFileDescriptor; +import android.content.res.AssetManager; +import android.content.res.Configuration; +import android.graphics.Color; +import android.net.Uri; +import android.os.Environment; +import android.os.Vibrator; +import android.util.DisplayMetrics; +import android.view.KeyEvent; +import android.view.Surface; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.ArrayAdapter; +import android.widget.FrameLayout; +import android.widget.ListView; +import android.widget.TextView; + +public class GiderosApplication +{ + public Object lock = new Object(); + + public ZipResourceFile mainFile; + public ZipResourceFile patchFile; + + static private GiderosApplication instance_; + static public GiderosApplication getInstance() + { + return instance_; + } + + private Accelerometer accelerometer_; + private boolean isAccelerometerStarted_ = false; + + private Gyroscope gyroscope_; + private boolean isGyroscopeStarted_ = false; + + private Geolocation geolocation_; + private boolean isLocationStarted_ = false; + private boolean isHeadingStarted_ = false; + + private boolean isForeground_ = false; + + private boolean isSurfaceCreated_ = false; + + private ArrayList eventQueue_ = new ArrayList(); + private static final int PAUSE = 0; + private static final int RESUME = 1; + private static final int STOP = 2; + private static final int START = 3; + + private ListView projectList; + + private GGMediaPlayerManager mediaPlayerManager_; + + private AudioDevice audioDevice_; + + private ArrayList < Class < ? >> sAvailableClasses = new ArrayList < Class < ? >> (); + + private static Class < ? > findClass ( String className ) { + + Class < ? > theClass = null; + try { + + theClass = Class.forName ( className ); + } catch ( Throwable e ) { + + } + + return theClass; + } + + private static Object executeMethod ( Class < ? > theClass, Object theInstance, String methodName, Class < ? > [] parameterTypes, Object [] parameterValues ) { + + Object result = null; + if ( theClass != null ) { + + try { + + Method theMethod = theClass.getMethod ( methodName, parameterTypes ); + + result = theMethod.invoke ( theInstance, parameterValues ); + } catch ( Throwable e ) { + + } + } + + return result; + } + + public GiderosApplication(String[] sExternalClasses) + { + for ( String className : sExternalClasses ) + { + Class < ? > theClass = findClass ( className ); + if ( theClass != null ) { + + sAvailableClasses.add ( theClass ); + } + } + + accelerometer_ = new Accelerometer(); + gyroscope_ = new Gyroscope(); + geolocation_ = new Geolocation(); + + populateAllFiles(); + getDirectories(); + + mediaPlayerManager_ = new GGMediaPlayerManager(mainFile, patchFile); + + audioDevice_ = new AudioDevice(); + + synchronized (lock) + { + GiderosApplication.nativeCreate(allfiles_ == null); + GiderosApplication.nativeSetDirectories(externalDir_, internalDir_, cacheDir_); + if (allfiles_ != null) + GiderosApplication.nativeSetFileSystem(allfiles_); + } + } + + private String allfiles_ = null; + + private void populateAllFiles() + { + allfiles_ = null; + + AssetManager assetManager = WeakActivityHolder.get().getAssets(); + + ArrayList lines = new ArrayList(); + + try + { + InputStream in = assetManager.open("assets/allfiles.txt"); + BufferedReader br = new BufferedReader(new InputStreamReader(in)); + while (true) + { + String line = br.readLine(); + if (line == null) + break; + lines.add(line); + } + in.close(); + } catch (IOException e) + { + loadProjects(); + Logger.log("player mode"); + return; + } + + StringBuilder sb = new StringBuilder(); + + ApplicationInfo applicationInfo = WeakActivityHolder.get().getApplicationInfo(); + sb.append(applicationInfo.sourceDir).append("|"); + + lines.add("properties.bin*"); + lines.add("luafiles.txt*"); + + String mainPath = null; + String patchPath = null; + mainFile = null; + patchFile = null; + try + { + if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) + { + Activity activity = WeakActivityHolder.get(); + + String packageName = activity.getPackageName(); + String root = Environment.getExternalStorageDirectory().getAbsolutePath(); + String expPath = root + "/Android/obb/" + packageName; + + int versionCode = activity.getPackageManager().getPackageInfo(activity.getPackageName(), 0).versionCode; + + mainPath = expPath + "/" + "main." + versionCode + "." + packageName + ".obb"; + if ((new File(mainPath)).isFile()) + mainFile = new ZipResourceFile(mainPath); + + patchPath = expPath + "/" + "patch." + versionCode + "." + packageName + ".obb"; + if ((new File(patchPath)).isFile()) + patchFile = new ZipResourceFile(patchPath); + } + } catch (Exception e) + { + } + + if (mainFile != null) + sb.append(mainPath); + sb.append("|"); + + if (patchFile != null) + sb.append(patchPath); + sb.append("|"); + + for (int i = 0; i < lines.size(); ++i) + { + String line = lines.get(i); + + String suffix = ""; + + if (line.endsWith("*")) + { + line = line.substring(0, line.length() - 1); + suffix = ".jet"; + } + + try + { + int zipFile = 0; + AssetFileDescriptor fd = null; + + if (patchFile != null) + { + fd = patchFile.getAssetFileDescriptor(line + suffix); + zipFile = 2; + } + + if (fd == null) + if (mainFile != null) + { + fd = mainFile.getAssetFileDescriptor(line + suffix); + zipFile = 1; + } + + if (fd == null) + { + fd = assetManager.openFd("assets/" + line + suffix); + zipFile = 0; + } + + if (fd != null) + { + sb.append(line).append("|").append(zipFile).append("|").append(fd.getStartOffset()).append("|").append(fd.getLength()).append("|"); + fd.close(); + } + } catch (IOException e) + { + Logger.log(e.toString()); + } + } + + sb.deleteCharAt(sb.length() - 1); + + allfiles_ = sb.toString(); + } + + String externalDir_, internalDir_, cacheDir_; + private void getDirectories() + { + boolean mExternalStorageAvailable = false; + boolean mExternalStorageWriteable = false; + String state = Environment.getExternalStorageState(); + + if (Environment.MEDIA_MOUNTED.equals(state)) + { + // We can read and write the media + mExternalStorageAvailable = mExternalStorageWriteable = true; + } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) + { + // We can only read the media + mExternalStorageAvailable = true; + mExternalStorageWriteable = false; + } else + { + // Something else is wrong. It may be one of many other states, but + // all we need + // to know is we can neither read nor write + mExternalStorageAvailable = mExternalStorageWriteable = false; + } + + externalDir_ = Environment.getExternalStorageDirectory().getAbsolutePath(); + internalDir_ = WeakActivityHolder.get().getFilesDir().getAbsolutePath(); + cacheDir_ = WeakActivityHolder.get().getCacheDir().getAbsolutePath(); + + Logger.log("externalDir: " + externalDir_); + Logger.log("internalDir: " + internalDir_); + Logger.log("cacheDir: " + cacheDir_); + } + + private void loadProjects(){ + projectList = new ListView(WeakActivityHolder.get()); + TextView text = new TextView(WeakActivityHolder.get()); + text.setText("Gideros Projects"); + text.setTextColor(Color.BLACK); + text.setTextSize(25); + text.setBackgroundColor(Color.WHITE); + projectList.addHeaderView(text); + ArrayAdapter modeAdapter = new ArrayAdapter(WeakActivityHolder.get(), android.R.layout.simple_list_item_1, android.R.id.text1, traverse(new File(Environment.getExternalStorageDirectory().toString()+"/gideros"))){ + @Override + public View getView(int position, View convertView, ViewGroup parent) { + View view =super.getView(position, convertView, parent); + + TextView textView=(TextView) view.findViewById(android.R.id.text1); + textView.setTextColor(Color.BLACK); + textView.setBackgroundColor(Color.WHITE); + + return view; + } + }; + projectList.setAdapter(modeAdapter); + projectList.setOnItemClickListener(new OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + TextView textView=(TextView) view.findViewById(android.R.id.text1); + if(textView != null){ + projectList.setVisibility(View.GONE); + nativeOpenProject((String) textView.getText()); + } + } + }); + projectList.setVisibility(View.GONE); + FrameLayout layout = (FrameLayout)WeakActivityHolder.get().getWindow().getDecorView(); + layout.addView(projectList); + } + + public List traverse (File dir) { + Logger.log("Checking: " + dir.getAbsolutePath()); + List projects = new ArrayList(); + if (dir.exists()) { + File[] files = dir.listFiles(); + for (int i = 0; i < files.length; ++i) { + File file = files[i]; + if (file.isDirectory()) { + Logger.log("Found: " + file.getName()); + projects.add(file.getName()); + } + } + } + return projects; + } + + + static public void onCreate(String[] externalClasses) + { + instance_ = new GiderosApplication(externalClasses); + for ( Class < ? > theClass : instance_.sAvailableClasses ) { + + executeMethod ( theClass, null, "onCreate", new Class < ? > [] { Activity.class }, new Object [] { WeakActivityHolder.get() }); + } + } + + static public void onDestroy() + { + for ( Class < ? > theClass : instance_.sAvailableClasses ) { + + executeMethod ( theClass, null, "onDestroy", new Class < ? > [] { }, new Object [] { }); + } + + synchronized (instance_.lock) + { + GiderosApplication.nativeDestroy(); + } + + instance_ = null; + } + + public void onStart() + { + if (isSurfaceCreated_ == true) { + synchronized (eventQueue_) { + eventQueue_.add(START); + } + } + + for ( Class < ? > theClass : sAvailableClasses ) { + + executeMethod ( theClass, null, "onStart", new Class < ? > [] { }, new Object [] { }); + } + } + + public void onRestart() + { + for ( Class < ? > theClass : sAvailableClasses ) { + + executeMethod ( theClass, null, "onRestart", new Class < ? > [] { }, new Object [] { }); + } + } + + public void onStop() + { + for ( Class < ? > theClass : sAvailableClasses ) { + + executeMethod ( theClass, null, "onStop", new Class < ? > [] { }, new Object [] { }); + } + + if (isSurfaceCreated_ == true) { + synchronized (eventQueue_) { + eventQueue_.add(STOP); + } + } + } + + + public void onPause() + { + isForeground_ = false; + + for ( Class < ? > theClass : sAvailableClasses ) { + + executeMethod ( theClass, null, "onPause", new Class < ? > [] { }, new Object [] { }); + } + + if (isSurfaceCreated_ == true) { + synchronized (eventQueue_) { + eventQueue_.add(PAUSE); + try { + eventQueue_.wait(); + } catch (InterruptedException e) { + } + } + } + + + accelerometer_.disable(); + gyroscope_.disable(); + geolocation_.stopUpdatingLocation(); + geolocation_.stopUpdatingHeading(); + mediaPlayerManager_.onPause(); + audioDevice_.stop(); + } + + public void onResume() + { + isForeground_ = true; + if (isAccelerometerStarted_) + accelerometer_.enable(); + if (isGyroscopeStarted_) + gyroscope_.enable(); + if (isLocationStarted_) + geolocation_.startUpdatingLocation(); + if (isHeadingStarted_) + geolocation_.startUpdatingHeading(); + mediaPlayerManager_.onResume(); + audioDevice_.start(); + + for ( Class < ? > theClass : sAvailableClasses ) { + + executeMethod ( theClass, null, "onResume", new Class < ? > [] { }, new Object [] { }); + } + + if (isSurfaceCreated_ == true) { + synchronized (eventQueue_) { + eventQueue_.add(RESUME); + try { + eventQueue_.wait(); + } catch (InterruptedException e) { + } + } + } + } + + public void onLowMemory() + { + synchronized (lock) + { + nativeLowMemory(); + } + } + + public void onActivityResult(int requestCode, int resultCode, Intent data) + { + for ( Class < ? > theClass : sAvailableClasses ) { + + executeMethod ( theClass, null, "onActivityResult", new Class < ? > [] { java.lang.Integer.TYPE, java.lang.Integer.TYPE, Intent.class }, new Object [] { new Integer ( requestCode ), new Integer ( resultCode ), data }); + } + } + + public void onSurfaceCreated() + { + synchronized (lock) + { + GiderosApplication.nativeSurfaceCreated(); + isSurfaceCreated_ = true; + } + } + + public void onSurfaceChanged(int w, int h) + { + synchronized (lock) + { + GiderosApplication.nativeSurfaceChanged(w, h, getRotation()); + } + } + + static private void sleep(long nsec) + { + try { + Thread.sleep(nsec / 1000000, (int)(nsec % 1000000)); + } catch (InterruptedException e) { + } + } + + private long startTime = System.nanoTime(); + + public void onDrawFrame() + { + long target = 1000000000L / (long)fps_; + + long currentTime = System.nanoTime(); + long dt = currentTime - startTime; + startTime = currentTime; + if (dt < 0) + dt = 0; + if (dt < target) + { + sleep(target - dt); + startTime += target - dt; + } + + synchronized (lock) { + synchronized (eventQueue_) { + while (!eventQueue_.isEmpty()) { + int event = eventQueue_.remove(0); + switch (event) { + case PAUSE: + GiderosApplication.nativePause(); + break; + case RESUME: + GiderosApplication.nativeResume(); + break; + case START: + GiderosApplication.nativeStart(); + break; + case STOP: + GiderosApplication.nativeStop(); + break; + } + } + eventQueue_.notify(); + } + + GiderosApplication.nativeDrawFrame(); + } + } + + public void onTouchesBegin(int size, int[] id, int[] x, int[] y, int actionIndex) + { + if(!isRunning()){ + if(projectList != null && projectList.getVisibility() == View.GONE){ + projectList.setVisibility(View.VISIBLE); + } + } + GiderosApplication.nativeTouchesBegin(size, id, x, y, actionIndex); + } + + public void onTouchesMove(int size, int[] id, int[] x, + int[] y) + { + GiderosApplication.nativeTouchesMove(size, id, x, y); + } + + public void onTouchesEnd(int size, int[] id, int[] x, + int[] y, int actionIndex) + { + GiderosApplication.nativeTouchesEnd(size, id, x, y, actionIndex); + } + + public void onTouchesCancel(int size, int[] id, int[] x, + int[] y) + { + GiderosApplication.nativeTouchesCancel(size, id, x, y); + } + + public boolean onKeyDown(int keyCode, KeyEvent event) + { + if(projectList != null && projectList.getVisibility() == View.VISIBLE){ + projectList.setVisibility(View.GONE); + return true; + } + boolean handled = nativeKeyDown(keyCode, event.getRepeatCount()); + if(keyCode == KeyEvent.KEYCODE_VOLUME_DOWN || keyCode == KeyEvent.KEYCODE_VOLUME_MUTE || keyCode == KeyEvent.KEYCODE_VOLUME_UP || keyCode == KeyEvent.KEYCODE_POWER){ + return false; + } + return handled; + } + + public boolean onKeyUp(int keyCode, KeyEvent event) + { + return nativeKeyUp(keyCode, event.getRepeatCount()); + } + + public boolean isAccelerometerAvailable() + { + return accelerometer_.isAvailable(); + } + + public void startAccelerometer() + { + isAccelerometerStarted_ = true; + if (isForeground_) + accelerometer_.enable(); + } + + public void stopAccelerometer() + { + isAccelerometerStarted_ = false; + accelerometer_.disable(); + } + + + public boolean isGyroscopeAvailable() + { + return gyroscope_.isAvailable(); + } + + public void startGyroscope() + { + isGyroscopeStarted_ = true; + if (isForeground_) + gyroscope_.enable(); + } + + public void stopGyroscope() + { + isGyroscopeStarted_ = false; + gyroscope_.disable(); + } + + + public boolean isGeolocationAvailable() + { + return geolocation_.isAvailable(); + } + + public boolean isHeadingAvailable() + { + return geolocation_.isHeadingAvailable(); + } + + public void setGeolocationAccuracy(double accuracy) + { + geolocation_.setAccuracy(accuracy); + } + + public double getGeolocationAccuracy() + { + return geolocation_.getAccuracy(); + } + + public void setGeolocationThreshold(double threshold) + { + geolocation_.setThreshold(threshold); + } + + public double getGeolocationThreshold() + { + return geolocation_.getThreshold(); + } + + public void startUpdatingLocation() + { + isLocationStarted_ = true; + if (isForeground_) + geolocation_.startUpdatingLocation(); + } + + public void stopUpdatingLocation() + { + isLocationStarted_ = false; + geolocation_.stopUpdatingLocation(); + } + + public void startUpdatingHeading() + { + isHeadingStarted_ = true; + if (isForeground_) + geolocation_.startUpdatingHeading(); + } + + public void stopUpdatingHeading() + { + isHeadingStarted_ = false; + geolocation_.stopUpdatingHeading(); + } + + + // static equivalents + static public boolean isAccelerometerAvailable_s() + { + return instance_.isAccelerometerAvailable(); + } + static public void startAccelerometer_s() + { + instance_.startAccelerometer(); + } + static public void stopAccelerometer_s() + { + instance_.stopAccelerometer(); + } + + + static public boolean isGyroscopeAvailable_s() + { + return instance_.isGyroscopeAvailable(); + } + static public void startGyroscope_s() + { + instance_.startGyroscope(); + } + static public void stopGyroscope_s() + { + instance_.stopGyroscope(); + } + + + static public boolean isGeolocationAvailable_s() + { + return instance_.isGeolocationAvailable(); + } + static public boolean isHeadingAvailable_s() + { + return instance_.isHeadingAvailable(); + } + static public void setGeolocationAccuracy_s(double accuracy) + { + instance_.setGeolocationAccuracy(accuracy); + } + static public double getGeolocationAccuracy_s() + { + return instance_.getGeolocationAccuracy(); + } + static public void setGeolocationThreshold_s(double threshold) + { + instance_.setGeolocationThreshold(threshold); + } + static public double getGeolocationThreshold_s() + { + return instance_.getGeolocationThreshold(); + } + static public void startUpdatingLocation_s() + { + instance_.startUpdatingLocation(); + } + static public void stopUpdatingLocation_s() + { + instance_.stopUpdatingLocation(); + } + static public void startUpdatingHeading_s() + { + instance_.startUpdatingHeading(); + } + static public void stopUpdatingHeading_s() + { + instance_.stopUpdatingHeading(); + } + + static public long BackgroundMusicCreateFromFile(String fileName, int[] error) + { + return instance_.mediaPlayerManager_.BackgroundMusicCreateFromFile(fileName, error); + } + + static public void BackgroundMusicDelete(long backgroundMusic) + { + instance_.mediaPlayerManager_.BackgroundMusicDelete(backgroundMusic); + } + + static public int BackgroundMusicGetLength(long backgroundMusic) + { + return instance_.mediaPlayerManager_.BackgroundMusicGetLength(backgroundMusic); + } + + static public long BackgroundMusicPlay(long backgroundMusic, boolean paused, long data) + { + return instance_.mediaPlayerManager_.BackgroundMusicPlay(backgroundMusic, paused, data); + } + + static public void BackgroundChannelStop(long backgroundChannel) + { + instance_.mediaPlayerManager_.BackgroundChannelStop(backgroundChannel); + } + + static public void BackgroundChannelSetPosition(long backgroundChannel, int position) + { + instance_.mediaPlayerManager_.BackgroundChannelSetPosition(backgroundChannel, position); + } + + static public int BackgroundChannelGetPosition(long backgroundChannel) + { + return instance_.mediaPlayerManager_.BackgroundChannelGetPosition(backgroundChannel); + } + + static public void BackgroundChannelSetPaused(long backgroundChannel, boolean paused) + { + instance_.mediaPlayerManager_.BackgroundChannelSetPaused(backgroundChannel, paused); + } + + static public boolean BackgroundChannelIsPaused(long backgroundChannel) + { + return instance_.mediaPlayerManager_.BackgroundChannelIsPaused(backgroundChannel); + } + + static public boolean BackgroundChannelIsPlaying(long backgroundChannel) + { + return instance_.mediaPlayerManager_.BackgroundChannelIsPlaying(backgroundChannel); + } + + static public void BackgroundChannelSetVolume(long backgroundChannel, float volume) + { + instance_.mediaPlayerManager_.BackgroundChannelSetVolume(backgroundChannel, volume); + } + + static public float BackgroundChannelGetVolume(long backgroundChannel) + { + return instance_.mediaPlayerManager_.BackgroundChannelGetVolume(backgroundChannel); + } + + static public void BackgroundChannelSetLooping(long backgroundChannel, boolean looping) + { + instance_.mediaPlayerManager_.BackgroundChannelSetLooping(backgroundChannel, looping); + } + + static public boolean BackgroundChannelIsLooping(long backgroundChannel) + { + return instance_.mediaPlayerManager_.BackgroundChannelIsLooping(backgroundChannel); + } + + int fps_ = 60; + static public void setFps(int fps) + { + instance_.fps_ = fps; + } + + + static public void setKeepAwake(boolean awake) + { + final Activity activity = WeakActivityHolder.get(); + + if (awake) + activity.runOnUiThread(new Runnable() {public void run() {activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);}}); + else + activity.runOnUiThread(new Runnable() {public void run() {activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);}}); + } + + static public void vibrate(int ms) + { + try + { + ((Vibrator)WeakActivityHolder.get().getSystemService(Context.VIBRATOR_SERVICE)).vibrate(ms); + } + catch (SecurityException e) + { + } + } + + static public String getLocale() + { + Locale locale = Locale.getDefault(); + return locale.getLanguage() + "_" + locale.getCountry(); + } + + static public String getLanguage() + { + Locale locale = Locale.getDefault(); + return locale.getLanguage(); + } + + static public String getVersion() + { + return android.os.Build.VERSION.RELEASE; + } + + static public String getManufacturer() + { + return android.os.Build.MANUFACTURER; + } + + static public String getModel() + { + return android.os.Build.MODEL; + } + + static public void openUrl(String url) + { + Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); + + try + { + WeakActivityHolder.get().startActivity(intent); + } + catch (ActivityNotFoundException e) + { + } + } + + static public boolean canOpenUrl(String url) + { + try + { + Activity activity = WeakActivityHolder.get(); + PackageManager pm = activity.getPackageManager(); + Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); + ComponentName cn = intent.resolveActivity(pm); + + if (cn != null) + return true; + } + catch (Exception e) + { + } + + return false; + } + + static public void finishActivity() + { + final Activity activity = WeakActivityHolder.get(); + + activity.runOnUiThread(new Runnable() { + @Override + public void run() { + activity.finish(); + } + }); + } + + static public int getScreenDensity() + { + DisplayMetrics dm = new DisplayMetrics(); + WeakActivityHolder.get().getWindowManager().getDefaultDisplay().getMetrics(dm); + return dm.densityDpi; + } + + public static String getLocalIPs() + { + StringBuilder sb = new StringBuilder(); + + try + { + for (Enumeration en = NetworkInterface + .getNetworkInterfaces(); en.hasMoreElements();) + { + NetworkInterface intf = en.nextElement(); + for (Enumeration enumIpAddr = intf + .getInetAddresses(); enumIpAddr.hasMoreElements();) + { + InetAddress inetAddress = enumIpAddr.nextElement(); + if (!inetAddress.isLoopbackAddress()) + { + sb.append(inetAddress.getHostAddress().toString()); + sb.append("|"); + } + } + } + } catch (SocketException ex) + { + } + + if (sb.length() != 0) + sb.deleteCharAt(sb.length() - 1); + + return sb.toString(); + } + + public static int getRotation() + { + Activity activity = WeakActivityHolder.get(); + + int orientation = activity.getResources().getConfiguration().orientation; + int rotation = activity.getWindowManager().getDefaultDisplay().getRotation(); + + if (orientation == Configuration.ORIENTATION_PORTRAIT) + { + if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_270) + return 0; + else + return 180; + } + else + { + if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90) + return 90; + else + return 270; + } + } + + static public String getDeviceName() { + String manufacturer = android.os.Build.MANUFACTURER; + String model = android.os.Build.MODEL; + if (model.startsWith(manufacturer)) { + return model; + } else { + return manufacturer + " " + model; + } + } + + static public void throwLuaException(String error) throws LuaException{ + throw new LuaException(error); + } + + static private native void nativeOpenProject(String project); + static private native void nativeLowMemory(); + static private native boolean isRunning(); + static private native boolean nativeKeyDown(int keyCode, int repeatCount); + static private native boolean nativeKeyUp(int keyCode, int repeatCount); + static private native void nativeCreate(boolean player); + static private native void nativeSetDirectories(String externalDir, String internalDir, String cacheDir); + static private native void nativeSetFileSystem(String files); + static private native void nativePause(); + static private native void nativeResume(); + static private native void nativeDestroy(); + static private native void nativeSurfaceCreated(); + static private native void nativeSurfaceChanged(int w, int h, int rotation); + static private native void nativeDrawFrame(); + static private native void nativeTouchesBegin(int size, int[] id, int[] x, int[] y, int actionIndex); + static private native void nativeTouchesMove(int size, int[] id, int[] x, int[] y); + static private native void nativeTouchesEnd(int size, int[] id, int[] x, int[] y, int actionIndex); + static private native void nativeTouchesCancel(int size, int[] id, int[] x, int[] y); + static private native void nativeStop(); + static private native void nativeStart(); +} diff --git a/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/Gyroscope.java b/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/Gyroscope.java index cd707ab5c..dc41544a2 100644 --- a/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/Gyroscope.java +++ b/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/Gyroscope.java @@ -1,73 +1,73 @@ -package com.giderosmobile.android.player; - -import android.app.Activity; -import android.content.Context; -import android.hardware.Sensor; -import android.hardware.SensorEvent; -import android.hardware.SensorEventListener; -import android.hardware.SensorManager; - -/** - * - * This class is used for controlling the Gyroscope - * - */ -public class Gyroscope implements SensorEventListener { - - private Context mContext; - private SensorManager mSensorManager; - private Sensor mGyroscope; - private boolean isEnabled_; - - public Gyroscope(){ - Activity activity = WeakActivityHolder.get(); - - //Get an instance of the SensorManager - mSensorManager = (SensorManager) activity.getSystemService(Context.SENSOR_SERVICE); - mGyroscope = mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE); - - isEnabled_ = false; - } - - boolean isAvailable() - { - return mGyroscope != null; - } - - public void enable() { - if (!isAvailable()) - return; - if (isEnabled_) - return; - mSensorManager.registerListener(this, mGyroscope, SensorManager.SENSOR_DELAY_GAME); - isEnabled_ = true; - } - - public void disable () { - if (!isAvailable()) - return; - if (!isEnabled_) - return; - mSensorManager.unregisterListener(this); - isEnabled_ = false; - } - - @Override - public void onSensorChanged(SensorEvent event) { - if (event.sensor.getType() != Sensor.TYPE_GYROSCOPE){ - return; - } - - float x = event.values[0]; - float y = event.values[1]; - float z = event.values[2]; - - onSensorChanged(x, y, z); - } - - @Override - public void onAccuracyChanged(Sensor sensor, int accuracy) { - } - - private static native void onSensorChanged(float x, float y, float z); -} +package com.giderosmobile.android.player; + +import android.app.Activity; +import android.content.Context; +import android.hardware.Sensor; +import android.hardware.SensorEvent; +import android.hardware.SensorEventListener; +import android.hardware.SensorManager; + +/** + * + * This class is used for controlling the Gyroscope + * + */ +public class Gyroscope implements SensorEventListener { + + private Context mContext; + private SensorManager mSensorManager; + private Sensor mGyroscope; + private boolean isEnabled_; + + public Gyroscope(){ + Activity activity = WeakActivityHolder.get(); + + //Get an instance of the SensorManager + mSensorManager = (SensorManager) activity.getSystemService(Context.SENSOR_SERVICE); + mGyroscope = mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE); + + isEnabled_ = false; + } + + boolean isAvailable() + { + return mGyroscope != null; + } + + public void enable() { + if (!isAvailable()) + return; + if (isEnabled_) + return; + mSensorManager.registerListener(this, mGyroscope, SensorManager.SENSOR_DELAY_GAME); + isEnabled_ = true; + } + + public void disable () { + if (!isAvailable()) + return; + if (!isEnabled_) + return; + mSensorManager.unregisterListener(this); + isEnabled_ = false; + } + + @Override + public void onSensorChanged(SensorEvent event) { + if (event.sensor.getType() != Sensor.TYPE_GYROSCOPE){ + return; + } + + float x = event.values[0]; + float y = event.values[1]; + float z = event.values[2]; + + onSensorChanged(x, y, z); + } + + @Override + public void onAccuracyChanged(Sensor sensor, int accuracy) { + } + + private static native void onSensorChanged(float x, float y, float z); +} diff --git a/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/HTTPManager.java b/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/HTTPManager.java index e402a3cd5..716f655cc 100644 --- a/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/HTTPManager.java +++ b/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/HTTPManager.java @@ -1,361 +1,361 @@ -package com.giderosmobile.android.player; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.net.Socket; -import java.net.URI; -import java.net.UnknownHostException; -import java.security.KeyManagementException; -import java.security.KeyStore; -import java.security.KeyStoreException; -import java.security.NoSuchAlgorithmException; -import java.security.UnrecoverableKeyException; -import java.security.cert.CertificateException; -import java.security.cert.X509Certificate; -import java.util.concurrent.ConcurrentHashMap; - -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; - -import org.apache.http.Header; -import org.apache.http.HttpResponse; -import org.apache.http.client.methods.HttpDelete; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.client.methods.HttpPut; -import org.apache.http.client.methods.HttpUriRequest; -import org.apache.http.conn.ClientConnectionManager; -import org.apache.http.conn.scheme.PlainSocketFactory; -import org.apache.http.conn.scheme.Scheme; -import org.apache.http.conn.scheme.SchemeRegistry; -import org.apache.http.conn.ssl.SSLSocketFactory; -import org.apache.http.entity.ByteArrayEntity; -import org.apache.http.impl.client.DefaultHttpClient; -import org.apache.http.impl.conn.SingleClientConnManager; - -public class HTTPManager { - static boolean ignoreSslErrors = false; - - void Get(String url, String[] headers, long udata, long id) { - HTTPThread thread = new HTTPThread(url, headers, null, 0, udata, id, - this); - - ids_.put(id, thread); - - thread.start(); - } - - void Post(String url, String[] headers, byte[] data, long udata, long id) { - HTTPThread thread = new HTTPThread(url, headers, data, 1, udata, id, - this); - - ids_.put(id, thread); - - thread.start(); - } - - void Put(String url, String[] headers, byte[] data, long udata, long id) { - HTTPThread thread = new HTTPThread(url, headers, data, 2, udata, id, - this); - - ids_.put(id, thread); - - thread.start(); - } - - void Delete(String url, String[] headers, long udata, long id) { - HTTPThread thread = new HTTPThread(url, headers, null, 3, udata, id, - this); - - ids_.put(id, thread); - - thread.start(); - } - - void Close(long id) { - if (!ids_.containsKey(id)) - return; - - HTTPThread thread = ids_.get(id); - - ids_.remove(id); - - thread.close = true; - } - - void CloseAll() { - HTTPThread[] threads = ids_.values().toArray(new HTTPThread[0]); - - ids_.clear(); - - for (int i = 0; i < threads.length; ++i) - threads[i].close = true; - } - - public static native void nativeghttpResponseCallback(long id, byte[] data, - int size, int statusCode, int hdrCount, int hdrSize, long udata); - - public static native void nativeghttpErrorCallback(long id, long udata); - - public static native void nativeghttpProgressCallback(long id, - int bytesLoaded, int bytesTotal, long udata); - - ConcurrentHashMap ids_ = new ConcurrentHashMap(); - - public void responseCallback(long id, long udata, byte[] data, - int statusCode, int hdrCount, int dataSize) { - if (!ids_.containsKey(id)) - return; - - nativeghttpResponseCallback(id, data, dataSize, statusCode, hdrCount, data.length-dataSize, udata); - - ids_.remove(id); - } - - public void errorCallback(long id, long udata) { - if (!ids_.containsKey(id)) - return; - - nativeghttpErrorCallback(id, udata); - - ids_.remove(id); - } - - public void progressCallback(long id, long udata, int bytesLoaded, - int bytesTotal) { - if (!ids_.containsKey(id)) - return; - - nativeghttpProgressCallback(id, bytesLoaded, bytesTotal, udata); - } - - static private HTTPManager httpManager = null; - - static public void ghttp_Init() { - httpManager = new HTTPManager(); - } - - static public void ghttp_Cleanup() { - httpManager.CloseAll(); - httpManager = null; - } - - static public void ghttp_IgnoreSslErrors() { - HTTPManager.ignoreSslErrors = true; - } - - static public void ghttp_Get(String url, String[] headers, long udata, - long id) { - httpManager.Get(url, headers, udata, id); - } - - static public void ghttp_Post(String url, String[] headers, byte[] data, - long udata, long id) { - httpManager.Post(url, headers, data, udata, id); - } - - static public void ghttp_Put(String url, String[] headers, byte[] data, - long udata, long id) { - httpManager.Put(url, headers, data, udata, id); - } - - static public void ghttp_Delete(String url, String[] headers, long udata, - long id) { - httpManager.Delete(url, headers, udata, id); - } - - static public void ghttp_Close(long id) { - httpManager.Close(id); - } - - static public void ghttp_CloseAll() { - httpManager.CloseAll(); - } -} - -class TrustAllHttpClient extends DefaultHttpClient { - TrustManager easyTrustManager = new X509TrustManager() { - @Override - public void checkClientTrusted(X509Certificate[] chain, String authType) - throws CertificateException { - } - - @Override - public void checkServerTrusted(X509Certificate[] chain, String authType) - throws CertificateException { - } - - @Override - public X509Certificate[] getAcceptedIssuers() { - return null; - } - }; - - public TrustAllHttpClient() { - } - - @Override - protected ClientConnectionManager createClientConnectionManager() { - SchemeRegistry registry = new SchemeRegistry(); - registry.register(new Scheme("http", PlainSocketFactory - .getSocketFactory(), 80)); - registry.register(new Scheme("https", newSslSocketFactory(), 443)); - return new SingleClientConnManager(getParams(), registry); - } - - private MySSLSocketFactory newSslSocketFactory() { - try { - KeyStore trusted = KeyStore.getInstance("BKS"); - try { - trusted.load(null, null); - - } finally { - } - - MySSLSocketFactory sslfactory = new MySSLSocketFactory(trusted); - sslfactory - .setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); - return sslfactory; - } catch (Exception e) { - throw new AssertionError(e); - } - - } - - public class MySSLSocketFactory extends SSLSocketFactory { - SSLContext sslContext = SSLContext.getInstance("TLS"); - - public MySSLSocketFactory(KeyStore certs) - throws NoSuchAlgorithmException, KeyManagementException, - KeyStoreException, UnrecoverableKeyException { - super(certs); - sslContext.init(null, new TrustManager[] { easyTrustManager }, null); - } - - @Override - public Socket createSocket(Socket socket, String host, int port, - boolean autoClose) throws IOException, UnknownHostException { - return sslContext.getSocketFactory().createSocket(socket, host, - port, autoClose); - } - - @Override - public Socket createSocket() throws IOException { - return sslContext.getSocketFactory().createSocket(); - } - } -} - -class HTTPThread extends Thread { - long id_; - long udata_; - String url_; - String[] headers_; - byte[] data_; - HTTPManager manager_; - int method_; - - volatile boolean close; - - public HTTPThread(String url, String[] headers, byte[] data, int method, - long udata, long id, HTTPManager manager) { - url_ = url; - headers_ = headers; - data_ = data; - method_ = method; - udata_ = udata; - id_ = id; - manager_ = manager; - - close = false; - } - - @Override - public void run() { - try { - DefaultHttpClient httpClient; - if (HTTPManager.ignoreSslErrors) - httpClient=new TrustAllHttpClient(); - else - httpClient=new DefaultHttpClient(); - - HttpUriRequest method = null; - switch (method_) { - case 0: - HttpGet get = new HttpGet(new URI(url_)); - get.setHeader("User-Agent", "Gideros"); - if (headers_ != null) - for (int i = 0; i < headers_.length; i += 2) - get.setHeader(headers_[i], headers_[i + 1]); - method = get; - break; - case 1: - HttpPost post = new HttpPost(new URI(url_)); - post.setHeader("User-Agent", "Gideros"); - if (headers_ != null) - for (int i = 0; i < headers_.length; i += 2) - post.setHeader(headers_[i], headers_[i + 1]); - if (data_ != null) - post.setEntity(new ByteArrayEntity(data_)); - method = post; - break; - case 2: - HttpPut put = new HttpPut(new URI(url_)); - put.setHeader("User-Agent", "Gideros"); - if (headers_ != null) - for (int i = 0; i < headers_.length; i += 2) - put.setHeader(headers_[i], headers_[i + 1]); - if (data_ != null) - put.setEntity(new ByteArrayEntity(data_)); - method = put; - break; - case 3: - HttpDelete delete = new HttpDelete(new URI(url_)); - delete.setHeader("User-Agent", "Gideros"); - if (headers_ != null) - for (int i = 0; i < headers_.length; i += 2) - delete.setHeader(headers_[i], headers_[i + 1]); - method = delete; - break; - } - HttpResponse response = httpClient.execute(method); - int statusCode = response.getStatusLine().getStatusCode(); - int contentLength = (int) response.getEntity().getContentLength(); - InputStream input = response.getEntity().getContent(); - ByteArrayOutputStream output = new ByteArrayOutputStream(); - - int readBytes = 0; - byte[] sBuffer = new byte[1024]; - while ((readBytes = input.read(sBuffer)) != -1) { - if (close == true) { - httpClient.getConnectionManager().shutdown(); - return; - } - output.write(sBuffer, 0, readBytes); - manager_.progressCallback(id_, udata_, output.size(), - contentLength); - } - int hdrCount=0; - int dataSize=output.size(); - - Header[] hdr=response.getAllHeaders(); - for (Header h:hdr) - { - output.write(h.getName().getBytes()); - output.write(0); - output.write(h.getValue().getBytes()); - output.write(0); - hdrCount++; - } - - httpClient.getConnectionManager().shutdown(); - - manager_.responseCallback(id_, udata_, output.toByteArray(), - statusCode,hdrCount,dataSize); - } catch (Exception e) { - manager_.errorCallback(id_, udata_); - } - } -} +package com.giderosmobile.android.player; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.Socket; +import java.net.URI; +import java.net.UnknownHostException; +import java.security.KeyManagementException; +import java.security.KeyStore; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.UnrecoverableKeyException; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; +import java.util.concurrent.ConcurrentHashMap; + +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; + +import org.apache.http.Header; +import org.apache.http.HttpResponse; +import org.apache.http.client.methods.HttpDelete; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpPut; +import org.apache.http.client.methods.HttpUriRequest; +import org.apache.http.conn.ClientConnectionManager; +import org.apache.http.conn.scheme.PlainSocketFactory; +import org.apache.http.conn.scheme.Scheme; +import org.apache.http.conn.scheme.SchemeRegistry; +import org.apache.http.conn.ssl.SSLSocketFactory; +import org.apache.http.entity.ByteArrayEntity; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.impl.conn.SingleClientConnManager; + +public class HTTPManager { + static boolean ignoreSslErrors = false; + + void Get(String url, String[] headers, long udata, long id) { + HTTPThread thread = new HTTPThread(url, headers, null, 0, udata, id, + this); + + ids_.put(id, thread); + + thread.start(); + } + + void Post(String url, String[] headers, byte[] data, long udata, long id) { + HTTPThread thread = new HTTPThread(url, headers, data, 1, udata, id, + this); + + ids_.put(id, thread); + + thread.start(); + } + + void Put(String url, String[] headers, byte[] data, long udata, long id) { + HTTPThread thread = new HTTPThread(url, headers, data, 2, udata, id, + this); + + ids_.put(id, thread); + + thread.start(); + } + + void Delete(String url, String[] headers, long udata, long id) { + HTTPThread thread = new HTTPThread(url, headers, null, 3, udata, id, + this); + + ids_.put(id, thread); + + thread.start(); + } + + void Close(long id) { + if (!ids_.containsKey(id)) + return; + + HTTPThread thread = ids_.get(id); + + ids_.remove(id); + + thread.close = true; + } + + void CloseAll() { + HTTPThread[] threads = ids_.values().toArray(new HTTPThread[0]); + + ids_.clear(); + + for (int i = 0; i < threads.length; ++i) + threads[i].close = true; + } + + public static native void nativeghttpResponseCallback(long id, byte[] data, + int size, int statusCode, int hdrCount, int hdrSize, long udata); + + public static native void nativeghttpErrorCallback(long id, long udata); + + public static native void nativeghttpProgressCallback(long id, + int bytesLoaded, int bytesTotal, long udata); + + ConcurrentHashMap ids_ = new ConcurrentHashMap(); + + public void responseCallback(long id, long udata, byte[] data, + int statusCode, int hdrCount, int dataSize) { + if (!ids_.containsKey(id)) + return; + + nativeghttpResponseCallback(id, data, dataSize, statusCode, hdrCount, data.length-dataSize, udata); + + ids_.remove(id); + } + + public void errorCallback(long id, long udata) { + if (!ids_.containsKey(id)) + return; + + nativeghttpErrorCallback(id, udata); + + ids_.remove(id); + } + + public void progressCallback(long id, long udata, int bytesLoaded, + int bytesTotal) { + if (!ids_.containsKey(id)) + return; + + nativeghttpProgressCallback(id, bytesLoaded, bytesTotal, udata); + } + + static private HTTPManager httpManager = null; + + static public void ghttp_Init() { + httpManager = new HTTPManager(); + } + + static public void ghttp_Cleanup() { + httpManager.CloseAll(); + httpManager = null; + } + + static public void ghttp_IgnoreSslErrors() { + HTTPManager.ignoreSslErrors = true; + } + + static public void ghttp_Get(String url, String[] headers, long udata, + long id) { + httpManager.Get(url, headers, udata, id); + } + + static public void ghttp_Post(String url, String[] headers, byte[] data, + long udata, long id) { + httpManager.Post(url, headers, data, udata, id); + } + + static public void ghttp_Put(String url, String[] headers, byte[] data, + long udata, long id) { + httpManager.Put(url, headers, data, udata, id); + } + + static public void ghttp_Delete(String url, String[] headers, long udata, + long id) { + httpManager.Delete(url, headers, udata, id); + } + + static public void ghttp_Close(long id) { + httpManager.Close(id); + } + + static public void ghttp_CloseAll() { + httpManager.CloseAll(); + } +} + +class TrustAllHttpClient extends DefaultHttpClient { + TrustManager easyTrustManager = new X509TrustManager() { + @Override + public void checkClientTrusted(X509Certificate[] chain, String authType) + throws CertificateException { + } + + @Override + public void checkServerTrusted(X509Certificate[] chain, String authType) + throws CertificateException { + } + + @Override + public X509Certificate[] getAcceptedIssuers() { + return null; + } + }; + + public TrustAllHttpClient() { + } + + @Override + protected ClientConnectionManager createClientConnectionManager() { + SchemeRegistry registry = new SchemeRegistry(); + registry.register(new Scheme("http", PlainSocketFactory + .getSocketFactory(), 80)); + registry.register(new Scheme("https", newSslSocketFactory(), 443)); + return new SingleClientConnManager(getParams(), registry); + } + + private MySSLSocketFactory newSslSocketFactory() { + try { + KeyStore trusted = KeyStore.getInstance("BKS"); + try { + trusted.load(null, null); + + } finally { + } + + MySSLSocketFactory sslfactory = new MySSLSocketFactory(trusted); + sslfactory + .setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); + return sslfactory; + } catch (Exception e) { + throw new AssertionError(e); + } + + } + + public class MySSLSocketFactory extends SSLSocketFactory { + SSLContext sslContext = SSLContext.getInstance("TLS"); + + public MySSLSocketFactory(KeyStore certs) + throws NoSuchAlgorithmException, KeyManagementException, + KeyStoreException, UnrecoverableKeyException { + super(certs); + sslContext.init(null, new TrustManager[] { easyTrustManager }, null); + } + + @Override + public Socket createSocket(Socket socket, String host, int port, + boolean autoClose) throws IOException, UnknownHostException { + return sslContext.getSocketFactory().createSocket(socket, host, + port, autoClose); + } + + @Override + public Socket createSocket() throws IOException { + return sslContext.getSocketFactory().createSocket(); + } + } +} + +class HTTPThread extends Thread { + long id_; + long udata_; + String url_; + String[] headers_; + byte[] data_; + HTTPManager manager_; + int method_; + + volatile boolean close; + + public HTTPThread(String url, String[] headers, byte[] data, int method, + long udata, long id, HTTPManager manager) { + url_ = url; + headers_ = headers; + data_ = data; + method_ = method; + udata_ = udata; + id_ = id; + manager_ = manager; + + close = false; + } + + @Override + public void run() { + try { + DefaultHttpClient httpClient; + if (HTTPManager.ignoreSslErrors) + httpClient=new TrustAllHttpClient(); + else + httpClient=new DefaultHttpClient(); + + HttpUriRequest method = null; + switch (method_) { + case 0: + HttpGet get = new HttpGet(new URI(url_)); + get.setHeader("User-Agent", "Gideros"); + if (headers_ != null) + for (int i = 0; i < headers_.length; i += 2) + get.setHeader(headers_[i], headers_[i + 1]); + method = get; + break; + case 1: + HttpPost post = new HttpPost(new URI(url_)); + post.setHeader("User-Agent", "Gideros"); + if (headers_ != null) + for (int i = 0; i < headers_.length; i += 2) + post.setHeader(headers_[i], headers_[i + 1]); + if (data_ != null) + post.setEntity(new ByteArrayEntity(data_)); + method = post; + break; + case 2: + HttpPut put = new HttpPut(new URI(url_)); + put.setHeader("User-Agent", "Gideros"); + if (headers_ != null) + for (int i = 0; i < headers_.length; i += 2) + put.setHeader(headers_[i], headers_[i + 1]); + if (data_ != null) + put.setEntity(new ByteArrayEntity(data_)); + method = put; + break; + case 3: + HttpDelete delete = new HttpDelete(new URI(url_)); + delete.setHeader("User-Agent", "Gideros"); + if (headers_ != null) + for (int i = 0; i < headers_.length; i += 2) + delete.setHeader(headers_[i], headers_[i + 1]); + method = delete; + break; + } + HttpResponse response = httpClient.execute(method); + int statusCode = response.getStatusLine().getStatusCode(); + int contentLength = (int) response.getEntity().getContentLength(); + InputStream input = response.getEntity().getContent(); + ByteArrayOutputStream output = new ByteArrayOutputStream(); + + int readBytes = 0; + byte[] sBuffer = new byte[1024]; + while ((readBytes = input.read(sBuffer)) != -1) { + if (close == true) { + httpClient.getConnectionManager().shutdown(); + return; + } + output.write(sBuffer, 0, readBytes); + manager_.progressCallback(id_, udata_, output.size(), + contentLength); + } + int hdrCount=0; + int dataSize=output.size(); + + Header[] hdr=response.getAllHeaders(); + for (Header h:hdr) + { + output.write(h.getName().getBytes()); + output.write(0); + output.write(h.getValue().getBytes()); + output.write(0); + hdrCount++; + } + + httpClient.getConnectionManager().shutdown(); + + manager_.responseCallback(id_, udata_, output.toByteArray(), + statusCode,hdrCount,dataSize); + } catch (Exception e) { + manager_.errorCallback(id_, udata_); + } + } +} diff --git a/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/Logger.java b/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/Logger.java index 80730eaba..f221bbd0a 100644 --- a/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/Logger.java +++ b/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/Logger.java @@ -1,35 +1,35 @@ -package com.giderosmobile.android.player; - -import android.util.Log; - -public class Logger -{ - public static void log(String text) - { - Log.d("Gideros_Java", text); - -/* File logFile = new File("sdcard/java.log"); - if (!logFile.exists()) - { - try - { - logFile.createNewFile(); - } catch (IOException e) - { - e.printStackTrace(); - } - } - try - { - // BufferedWriter for performance, true to set append to file flag - BufferedWriter buf = new BufferedWriter(new FileWriter(logFile, - true)); - buf.append(text); - buf.newLine(); - buf.close(); - } catch (IOException e) - { - e.printStackTrace(); - } */ - } -} +package com.giderosmobile.android.player; + +import android.util.Log; + +public class Logger +{ + public static void log(String text) + { + Log.d("Gideros_Java", text); + +/* File logFile = new File("sdcard/java.log"); + if (!logFile.exists()) + { + try + { + logFile.createNewFile(); + } catch (IOException e) + { + e.printStackTrace(); + } + } + try + { + // BufferedWriter for performance, true to set append to file flag + BufferedWriter buf = new BufferedWriter(new FileWriter(logFile, + true)); + buf.append(text); + buf.newLine(); + buf.close(); + } catch (IOException e) + { + e.printStackTrace(); + } */ + } +} diff --git a/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/TextInputBox.java b/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/TextInputBox.java index 8ed7fa0f7..21c107c65 100644 --- a/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/TextInputBox.java +++ b/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/TextInputBox.java @@ -1,254 +1,254 @@ -package com.giderosmobile.android.player; - -import android.app.AlertDialog; -import android.content.Context; -import android.content.DialogInterface; -import android.text.Editable; -import android.text.InputType; -import android.text.TextWatcher; -import android.view.inputmethod.InputMethodManager; -import android.widget.EditText; - -public class TextInputBox implements DialogInterface.OnShowListener, DialogInterface.OnClickListener, DialogInterface.OnCancelListener, DialogInterface.OnDismissListener, TextWatcher -{ - private native void completeCallback(String text, int buttonIndex, String buttonText, long udata); - - private AlertDialog alertDialog_; - private EditText editText_; - private boolean isVisible_ = false; - private long udata_; - - private String cancel_; - private String button1_; - private String button2_; - - String text_; - int inputType_; - boolean secureInput_; - - static private final int TEXT = 0; - static private final int NUMBER = 1; - static private final int PHONE = 2; - static private final int EMAIL = 3; - static private final int URL = 4; - - public TextInputBox(String title, String message, String text, String cancel, String button1, String button2, long udata) - { - cancel_ = cancel; - button1_ = button1; - button2_ = button2; - - udata_ = udata; - - text_ = text; - inputType_ = TEXT; - secureInput_ = false; - - final TextInputBox this2 = this; - final String title2 = title; - final String message2 = message; - final String text2 = text; - final String cancel2 = cancel; - final String button12 = button1; - final String button22 = button2; - - WeakActivityHolder.get().runOnUiThread(new Runnable() - { - @Override - public void run() - { - alertDialog_ = new AlertDialog.Builder(WeakActivityHolder.get()).create(); - alertDialog_.setTitle(title2); - alertDialog_.setMessage(message2); - - editText_ = new EditText(WeakActivityHolder.get()); - editText_.setText(text2); - editText_.requestFocus(); - editText_.addTextChangedListener(this2); - alertDialog_.setView(editText_); - - alertDialog_.setCancelable(true); - alertDialog_.setOnShowListener(this2); - alertDialog_.setButton(DialogInterface.BUTTON_NEGATIVE, cancel2, this2); - if (button12 != null) - alertDialog_.setButton(DialogInterface.BUTTON_POSITIVE, button12, this2); - if (button22 != null) - alertDialog_.setButton(DialogInterface.BUTTON_NEUTRAL, button22, this2); - alertDialog_.setOnCancelListener(this2); - alertDialog_.setOnDismissListener(this2); - } - }); - } - - public void show() - { - WeakActivityHolder.get().runOnUiThread(new Runnable() - { - @Override - public void run() - { - alertDialog_.show(); - } - }); - } - - public void hide() - { - WeakActivityHolder.get().runOnUiThread(new Runnable() - { - @Override - public void run() - { - alertDialog_.hide(); - } - }); - } - - public void delete() - { - alertDialog_.dismiss(); - } - - void setText(String text) - { - text_ = text; - - WeakActivityHolder.get().runOnUiThread(new Runnable() - { - @Override - public void run() - { - editText_.setText(text_); - } - }); - } - - String getText() - { - return text_; - } - - private static int convertInputType(int inputType, boolean secureInput) - { - int password = secureInput ? InputType.TYPE_TEXT_VARIATION_PASSWORD : 0; - - switch (inputType) - { - case TEXT: - return InputType.TYPE_CLASS_TEXT | password; - case NUMBER: - return InputType.TYPE_CLASS_NUMBER | password; - case PHONE: - return InputType.TYPE_CLASS_PHONE | password; - case EMAIL: - return InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS | password; - case URL: - return InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_URI | password; - } - - return 0; - } - - void setInputType(int inputType) - { - if (inputType != TEXT && inputType != NUMBER && inputType != PHONE && inputType != EMAIL && inputType != URL) - return; - - inputType_ = inputType; - - WeakActivityHolder.get().runOnUiThread(new Runnable() - { - @Override - public void run() - { - editText_.setInputType(convertInputType(inputType_, secureInput_)); - } - }); - } - - int getInputType() - { - return inputType_; - } - - void setSecureInput(boolean secureInput) - { - secureInput_ = secureInput; - - WeakActivityHolder.get().runOnUiThread(new Runnable() - { - @Override - public void run() - { - int inputType = editText_.getInputType(); - if (secureInput_) - editText_.setInputType(inputType | InputType.TYPE_TEXT_VARIATION_PASSWORD); - else - editText_.setInputType(inputType & ~InputType.TYPE_TEXT_VARIATION_PASSWORD); - } - }); - } - - boolean isSecureInput() - { - return secureInput_; - } - - @Override - public void onClick(DialogInterface dialog, int which) - { - switch (which) - { - case DialogInterface.BUTTON_NEGATIVE: - completeCallback(editText_.getText().toString(), 0, cancel_, udata_); - break; - case DialogInterface.BUTTON_POSITIVE: - completeCallback(editText_.getText().toString(), 1, button1_, udata_); - break; - case DialogInterface.BUTTON_NEUTRAL: - completeCallback(editText_.getText().toString(), 2, button2_, udata_); - break; - } - } - - @Override - public void onCancel(DialogInterface dialog) - { - completeCallback(editText_.getText().toString(), 0, cancel_, udata_); - } - - @Override - public void onShow(DialogInterface dialog) - { - isVisible_ = true; - InputMethodManager imm = (InputMethodManager)WeakActivityHolder.get().getSystemService(Context.INPUT_METHOD_SERVICE); - imm.showSoftInput(editText_, InputMethodManager.SHOW_IMPLICIT); - } - - @Override - public void onDismiss(DialogInterface dialog) - { - isVisible_ = false; - } - - public boolean isVisible() - { - return isVisible_; - } - - @Override - public void afterTextChanged(Editable s) - { - text_ = s.toString(); - } - - @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) - { - } - - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) - { - } -} +package com.giderosmobile.android.player; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.text.Editable; +import android.text.InputType; +import android.text.TextWatcher; +import android.view.inputmethod.InputMethodManager; +import android.widget.EditText; + +public class TextInputBox implements DialogInterface.OnShowListener, DialogInterface.OnClickListener, DialogInterface.OnCancelListener, DialogInterface.OnDismissListener, TextWatcher +{ + private native void completeCallback(String text, int buttonIndex, String buttonText, long udata); + + private AlertDialog alertDialog_; + private EditText editText_; + private boolean isVisible_ = false; + private long udata_; + + private String cancel_; + private String button1_; + private String button2_; + + String text_; + int inputType_; + boolean secureInput_; + + static private final int TEXT = 0; + static private final int NUMBER = 1; + static private final int PHONE = 2; + static private final int EMAIL = 3; + static private final int URL = 4; + + public TextInputBox(String title, String message, String text, String cancel, String button1, String button2, long udata) + { + cancel_ = cancel; + button1_ = button1; + button2_ = button2; + + udata_ = udata; + + text_ = text; + inputType_ = TEXT; + secureInput_ = false; + + final TextInputBox this2 = this; + final String title2 = title; + final String message2 = message; + final String text2 = text; + final String cancel2 = cancel; + final String button12 = button1; + final String button22 = button2; + + WeakActivityHolder.get().runOnUiThread(new Runnable() + { + @Override + public void run() + { + alertDialog_ = new AlertDialog.Builder(WeakActivityHolder.get()).create(); + alertDialog_.setTitle(title2); + alertDialog_.setMessage(message2); + + editText_ = new EditText(WeakActivityHolder.get()); + editText_.setText(text2); + editText_.requestFocus(); + editText_.addTextChangedListener(this2); + alertDialog_.setView(editText_); + + alertDialog_.setCancelable(true); + alertDialog_.setOnShowListener(this2); + alertDialog_.setButton(DialogInterface.BUTTON_NEGATIVE, cancel2, this2); + if (button12 != null) + alertDialog_.setButton(DialogInterface.BUTTON_POSITIVE, button12, this2); + if (button22 != null) + alertDialog_.setButton(DialogInterface.BUTTON_NEUTRAL, button22, this2); + alertDialog_.setOnCancelListener(this2); + alertDialog_.setOnDismissListener(this2); + } + }); + } + + public void show() + { + WeakActivityHolder.get().runOnUiThread(new Runnable() + { + @Override + public void run() + { + alertDialog_.show(); + } + }); + } + + public void hide() + { + WeakActivityHolder.get().runOnUiThread(new Runnable() + { + @Override + public void run() + { + alertDialog_.hide(); + } + }); + } + + public void delete() + { + alertDialog_.dismiss(); + } + + void setText(String text) + { + text_ = text; + + WeakActivityHolder.get().runOnUiThread(new Runnable() + { + @Override + public void run() + { + editText_.setText(text_); + } + }); + } + + String getText() + { + return text_; + } + + private static int convertInputType(int inputType, boolean secureInput) + { + int password = secureInput ? InputType.TYPE_TEXT_VARIATION_PASSWORD : 0; + + switch (inputType) + { + case TEXT: + return InputType.TYPE_CLASS_TEXT | password; + case NUMBER: + return InputType.TYPE_CLASS_NUMBER | password; + case PHONE: + return InputType.TYPE_CLASS_PHONE | password; + case EMAIL: + return InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS | password; + case URL: + return InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_URI | password; + } + + return 0; + } + + void setInputType(int inputType) + { + if (inputType != TEXT && inputType != NUMBER && inputType != PHONE && inputType != EMAIL && inputType != URL) + return; + + inputType_ = inputType; + + WeakActivityHolder.get().runOnUiThread(new Runnable() + { + @Override + public void run() + { + editText_.setInputType(convertInputType(inputType_, secureInput_)); + } + }); + } + + int getInputType() + { + return inputType_; + } + + void setSecureInput(boolean secureInput) + { + secureInput_ = secureInput; + + WeakActivityHolder.get().runOnUiThread(new Runnable() + { + @Override + public void run() + { + int inputType = editText_.getInputType(); + if (secureInput_) + editText_.setInputType(inputType | InputType.TYPE_TEXT_VARIATION_PASSWORD); + else + editText_.setInputType(inputType & ~InputType.TYPE_TEXT_VARIATION_PASSWORD); + } + }); + } + + boolean isSecureInput() + { + return secureInput_; + } + + @Override + public void onClick(DialogInterface dialog, int which) + { + switch (which) + { + case DialogInterface.BUTTON_NEGATIVE: + completeCallback(editText_.getText().toString(), 0, cancel_, udata_); + break; + case DialogInterface.BUTTON_POSITIVE: + completeCallback(editText_.getText().toString(), 1, button1_, udata_); + break; + case DialogInterface.BUTTON_NEUTRAL: + completeCallback(editText_.getText().toString(), 2, button2_, udata_); + break; + } + } + + @Override + public void onCancel(DialogInterface dialog) + { + completeCallback(editText_.getText().toString(), 0, cancel_, udata_); + } + + @Override + public void onShow(DialogInterface dialog) + { + isVisible_ = true; + InputMethodManager imm = (InputMethodManager)WeakActivityHolder.get().getSystemService(Context.INPUT_METHOD_SERVICE); + imm.showSoftInput(editText_, InputMethodManager.SHOW_IMPLICIT); + } + + @Override + public void onDismiss(DialogInterface dialog) + { + isVisible_ = false; + } + + public boolean isVisible() + { + return isVisible_; + } + + @Override + public void afterTextChanged(Editable s) + { + text_ = s.toString(); + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) + { + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) + { + } +} diff --git a/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/WeakActivityHolder.java b/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/WeakActivityHolder.java index 0a4d3623f..0d2283beb 100644 --- a/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/WeakActivityHolder.java +++ b/android/GiderosAndroidPlayer/src/com/giderosmobile/android/player/WeakActivityHolder.java @@ -1,20 +1,20 @@ -package com.giderosmobile.android.player; - -import java.lang.ref.WeakReference; - -import android.app.Activity; - -public class WeakActivityHolder -{ - private static WeakReference weakActivity_; - - static public void set(Activity activity) - { - weakActivity_ = new WeakReference(activity); - } - - static public Activity get() - { - return weakActivity_.get(); - } -} +package com.giderosmobile.android.player; + +import java.lang.ref.WeakReference; + +import android.app.Activity; + +public class WeakActivityHolder +{ + private static WeakReference weakActivity_; + + static public void set(Activity activity) + { + weakActivity_ = new WeakReference(activity); + } + + static public Activity get() + { + return weakActivity_.get(); + } +} diff --git a/android/addr2line.bat b/android/addr2line.bat index 51afbf8ad..538b3ac3f 100644 --- a/android/addr2line.bat +++ b/android/addr2line.bat @@ -1,12 +1,12 @@ -C:\android-ndk-r8b\toolchains\arm-linux-androideabi-4.4.3\prebuilt\windows\bin\arm-linux-androideabi-addr2line.exe -f -e C:\myprojects\gideros\android\GiderosAndroidPlayer\libs\armeabi-v7a\libgideros.so 0x00122cb0 - - - - -isaretli kisim onemli olan: - #00 pc 0005fd7c /system/lib/libdvm.so - #01 pc 0004c342 /system/lib/libdvm.so - #02 pc ***000576a0*** /data/data/com.giderosmobile.android.player/lib/libgideros.so - #03 pc ***00122cb0*** /data/data/com.giderosmobile.android.player/lib/libgideros.so - +C:\android-ndk-r8b\toolchains\arm-linux-androideabi-4.4.3\prebuilt\windows\bin\arm-linux-androideabi-addr2line.exe -f -e C:\myprojects\gideros\android\GiderosAndroidPlayer\libs\armeabi-v7a\libgideros.so 0x00122cb0 + + + + +isaretli kisim onemli olan: + #00 pc 0005fd7c /system/lib/libdvm.so + #01 pc 0004c342 /system/lib/libdvm.so + #02 pc ***000576a0*** /data/data/com.giderosmobile.android.player/lib/libgideros.so + #03 pc ***00122cb0*** /data/data/com.giderosmobile.android.player/lib/libgideros.so + \ No newline at end of file diff --git a/android/gettombstone.bat b/android/gettombstone.bat index 6d97044cc..aa3dac8e6 100644 --- a/android/gettombstone.bat +++ b/android/gettombstone.bat @@ -1,2 +1,2 @@ -del tombstone_00 +del tombstone_00 C:\android-sdk\platform-tools\adb.exe pull /data/tombstones/tombstone_00 \ No newline at end of file diff --git a/android/lib/jni/audiodevice.cpp b/android/lib/jni/audiodevice.cpp index d87f8fb58..7907859f5 100644 --- a/android/lib/jni/audiodevice.cpp +++ b/android/lib/jni/audiodevice.cpp @@ -1,47 +1,47 @@ -#include -#include - -const int INFO_SAMPLERATE = 0; -const int INFO_DSPBUFFERLENGTH = 1; -const int INFO_DSPNUMBUFFERS = 2; -const int INFO_MIXERRUNNING = 3; - - -extern "C" -{ -extern int g_sampleRate; -extern int g_bufferLength; -extern int g_bufferCount; -extern int g_mixerRunning; -void g_processBuffer(void *buffer, size_t size); -} - -extern "C" -{ -jint Java_com_giderosmobile_android_player_AudioDevice_getInfo(JNIEnv* env, jobject obj, int paramInt) -{ - switch (paramInt) - { - case INFO_SAMPLERATE: - return g_sampleRate; - case INFO_DSPBUFFERLENGTH: - return g_bufferLength; - case INFO_DSPNUMBUFFERS: - return g_bufferCount; - case INFO_MIXERRUNNING: - return g_mixerRunning; - } - - return 0; -} - -jint Java_com_giderosmobile_android_player_AudioDevice_process(JNIEnv* env, jobject obj, jobject paramByteBuffer) -{ - void* buffer = env->GetDirectBufferAddress(paramByteBuffer); - jlong size = env->GetDirectBufferCapacity(paramByteBuffer); - - g_processBuffer(buffer, size/(2*2)); // 2 for short, 2 for stereo - - return 0; -} -} +#include +#include + +const int INFO_SAMPLERATE = 0; +const int INFO_DSPBUFFERLENGTH = 1; +const int INFO_DSPNUMBUFFERS = 2; +const int INFO_MIXERRUNNING = 3; + + +extern "C" +{ +extern int g_sampleRate; +extern int g_bufferLength; +extern int g_bufferCount; +extern int g_mixerRunning; +void g_processBuffer(void *buffer, size_t size); +} + +extern "C" +{ +jint Java_com_giderosmobile_android_player_AudioDevice_getInfo(JNIEnv* env, jobject obj, int paramInt) +{ + switch (paramInt) + { + case INFO_SAMPLERATE: + return g_sampleRate; + case INFO_DSPBUFFERLENGTH: + return g_bufferLength; + case INFO_DSPNUMBUFFERS: + return g_bufferCount; + case INFO_MIXERRUNNING: + return g_mixerRunning; + } + + return 0; +} + +jint Java_com_giderosmobile_android_player_AudioDevice_process(JNIEnv* env, jobject obj, jobject paramByteBuffer) +{ + void* buffer = env->GetDirectBufferAddress(paramByteBuffer); + jlong size = env->GetDirectBufferCapacity(paramByteBuffer); + + g_processBuffer(buffer, size/(2*2)); // 2 for short, 2 for stereo + + return 0; +} +} diff --git a/android/lib/jni/gideros.cpp b/android/lib/jni/gideros.cpp index 480a58b22..b51365166 100644 --- a/android/lib/jni/gideros.cpp +++ b/android/lib/jni/gideros.cpp @@ -1,1404 +1,1404 @@ -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include - -#include - -#include -#include -#include - -#include -#include - -#include - -#include - -#include - -#include - -#include - -#include - -#include -#include -#include -#include -#include - -#include - -#include - -#include - -#include -#include - - -extern "C" { -int g_getFps(); -void g_setFps(int fps); -} -void drawInfo(); -void refreshLocalIPs(); -void g_exit(); - -static volatile const char* licenseKey_ = "9852564f4728e0c11e34ca3eb5fe20b2"; -//-----------------------------------------01234567890123456------------------ - -struct ProjectProperties -{ - ProjectProperties() - { - scaleMode = 0; - logicalWidth = 320; - logicalHeight = 480; - orientation = 0; - fps = 60; - retinaDisplay = 0; - autorotation = 0; - mouseToTouch = 1; - touchToMouse = 1; - mouseTouchOrder = 0; - } - - int scaleMode; - int logicalWidth; - int logicalHeight; - std::vector > imageScales; - int orientation; - int fps; - int retinaDisplay; - int autorotation; - int mouseToTouch; - int touchToMouse; - int mouseTouchOrder; -}; - -class ApplicationManager; - -class NetworkManager -{ -public: - NetworkManager(ApplicationManager *application); - ~NetworkManager(); - void tick(); - std::string openProject_; - - void setResourceDirectory(const char* resourceDirectory) - { - resourceDirectory_ = resourceDirectory; - } - - void setMd5FileName(const char *md5FileName) - { - md5filename_ = md5FileName; - loadMD5(); - } - - static void printToServer_s(const char *str, int len, void *data) - { - static_cast(data)->printToServer(str, len); - } - - void printToServer(const char *str, int len) - { - unsigned int size = 1 + ((len < 0) ? strlen(str) : len) + 1; - char* buffer = (char*)malloc(size); - - buffer[0] = 4; - memcpy(buffer + 1, str,size-2); - buffer[size-1]=0; - - server_->sendData(buffer, size); - - free(buffer); - } - -private: - void createFolder(const std::vector &data); - void createFile(const std::vector &data); - void play(const std::vector &data); - void stop(); - void sendFileList(); - void setProjectName(const std::vector &data); - void deleteFile(const std::vector &data); - void setProperties(const std::vector &data); - -private: - std::string md5filename_; - std::map > md5_; - void loadMD5(); - void saveMD5(); - void calculateMD5(const char *file); - -private: - ApplicationManager *application_; - Server *server_; - std::string resourceDirectory_; -}; - -class ApplicationManager -{ -public: - ApplicationManager(JNIEnv *env, bool player); - ~ApplicationManager(); - - void luaError(const char *msg); - - void surfaceCreated(); - void surfaceChanged(int width, int height, int rotation); - void updateHardwareOrientation(); - void drawFrame(); - - void setDirectories(const char *externalDir, const char *internalDir, const char *cacheDir); - void setFileSystem(const char *files); - - void openProject(const char* project); - void setOpenProject(const char* project); - void play(const std::vector& luafiles); - void stop(); - void setProjectName(const char *projectName); - void setProjectProperties(const ProjectProperties &properties); - bool isRunning(); - - void touchesBegin(int size, int *id, int *x, int *y, int actionIndex); - void touchesMove(int size, int *id, int *x, int *y); - void touchesEnd(int size, int *id, int *x, int *y, int actionIndex); - void touchesCancel(int size, int *id, int *x, int *y); - - bool keyDown(int keyCode, int repeatCount); - bool keyUp(int keyCode, int repeatCount); - - void pause(); - void resume(); - - void lowMemory(); - - void background(); - void foreground(); - -private: - void loadProperties(); - void loadLuaFiles(); - void drawIPs(); - int convertKeyCode(int keyCode); - -private: - bool player_; - LuaApplication *application_; - NetworkManager *networkManager_; - - bool init_; - - bool running_; - - int width_, height_; - - SplashScreen *splashScreen_; - - std::string externalDir_, internalDir_, cacheDir_; - - ProjectProperties properties_; - - Orientation hardwareOrientation_; - - Orientation deviceOrientation_; - - int nframe_; - - bool applicationStarted_; - - bool skipFirstEnterFrame_; -}; - -NetworkManager::NetworkManager(ApplicationManager* application) -{ - application_ = application; - server_ = new Server(15000, ::getDeviceName().c_str()); -} - -NetworkManager::~NetworkManager() -{ - delete server_; -} - -void NetworkManager::tick() -{ - int dataTotal = 0; - - while (true) - { - if(!openProject_.empty()){ - application_->openProject(openProject_.c_str()); - openProject_.clear(); - } - int dataSent0 = server_->dataSent(); - int dataReceived0 = server_->dataReceived(); - - NetworkEvent event; - server_->tick(&event); - - int dataSent1 = server_->dataSent(); - int dataReceived1 = server_->dataReceived(); - - if (event.eventCode == eDataReceived) - { - const std::vector& data = event.data; - - switch (data[0]) - { - case 0: - createFolder(data); - break; - case 1: - createFile(data); - break; - case 2:{ - const char* absfilename = g_pathForFile("../luafiles.txt"); - FILE* fos = fopen(absfilename, "wb"); - fwrite(&data[0], data.size(), 1, fos); - fclose(fos); - play(data); - } - break; - case 3: - stop(); - break; - case 7: - sendFileList(); - break; - case 8: - setProjectName(data); - break; - case 9: - deleteFile(data); - break; - case 11:{ - const char* absfilename = g_pathForFile("../properties.bin"); - FILE* fos = fopen(absfilename, "wb"); - fwrite(&data[0], data.size(), 1, fos); - fclose(fos); - setProperties(data); - } - break; - } - } - - int dataDelta = (dataSent1 - dataSent0) + (dataReceived1 - dataReceived0); - dataTotal += dataDelta; - - if (dataDelta == 0 || dataTotal > 1024) - break; - } -} - -void NetworkManager::createFolder(const std::vector& data) -{ - std::string folderName = &data[1]; - mkdir(g_pathForFile(folderName.c_str()), 0755); -} - -void NetworkManager::createFile(const std::vector& data) -{ - std::string fileName = &data[1]; - const char* absfilename = g_pathForFile(fileName.c_str()); - FILE* fos = fopen(absfilename, "wb"); - int pos = 1 + fileName.size() + 1; - if (data.size() > pos) - fwrite(&data[pos], data.size() - pos, 1, fos); - fclose(fos); - calculateMD5(fileName.c_str()); - saveMD5(); -} - -void NetworkManager::play(const std::vector &data) -{ - std::vector luafiles; - - ByteBuffer buffer(&data[0], data.size()); - - char chr; - buffer >> chr; - - while (buffer.eob() == false) - { - std::string str; - buffer >> str; - luafiles.push_back(str); - } - - application_->play(luafiles); -} - -void NetworkManager::stop() -{ - application_->stop(); -} - -void NetworkManager::sendFileList() -{ - ByteBuffer buffer; - - // type(byte) 6 - // D or F, file (zero ended string), age (int) - // D or F, file (zero ended string), age (int) - // .... - - buffer.append((char)6); - - std::vector files, directories; - getDirectoryListingR(resourceDirectory_.c_str(), &files, &directories); - - for (std::size_t i = 0; i < files.size(); ++i) - { - buffer.append('F'); - buffer.append(files[i]); - int age = fileAge(pathForFileEx(resourceDirectory_.c_str(), files[i].c_str())); - buffer.append(age); - - std::map >::iterator iter = md5_.find(files[i]); - if (iter == md5_.end()) - { - calculateMD5(files[i].c_str()); - saveMD5(); - iter = md5_.find(files[i]); - } - buffer.append(&iter->second[0], 16); - } - - for (std::size_t i = 0; i < directories.size(); ++i) - { - buffer.append('D'); - buffer.append(directories[i]); - } - - server_->sendData(buffer.data(), buffer.size()); -} - -void NetworkManager::setProjectName(const std::vector &data) -{ - ByteBuffer buffer(&data[0], data.size()); - - char chr; - buffer >> chr; - - std::string str; - buffer >> str; - - application_->setProjectName(str.c_str()); -} - -void NetworkManager::deleteFile(const std::vector &data) -{ - ByteBuffer buffer(&data[0], data.size()); - - char chr; - buffer >> chr; - - std::string fileName; - buffer >> fileName; - - remove(g_pathForFile(fileName.c_str())); - - { - std::map >::iterator iter = md5_.find(fileName); - if (iter != md5_.end()) - { - md5_.erase(iter); - saveMD5(); - } - } -} - -void NetworkManager::setProperties(const std::vector &data) -{ - ProjectProperties properties; - - ByteBuffer buffer(&data[0], data.size()); - - char chr; - buffer >> chr; - - buffer >> properties.scaleMode; - buffer >> properties.logicalWidth; - buffer >> properties.logicalHeight; - - int scaleCount; - buffer >> scaleCount; - properties.imageScales.resize(scaleCount); - for (int i = 0; i < scaleCount; ++i) - { - buffer >> properties.imageScales[i].first; - buffer >> properties.imageScales[i].second; - } - - buffer >> properties.orientation; - buffer >> properties.fps; - buffer >> properties.retinaDisplay; - buffer >> properties.autorotation; - buffer >> properties.mouseToTouch; - buffer >> properties.touchToMouse; - buffer >> properties.mouseTouchOrder; - - application_->setProjectProperties(properties); -} - -void NetworkManager::loadMD5() -{ - md5_.clear(); - - FILE* fis = fopen(md5filename_.c_str(), "rb"); - - if (fis == NULL) - return; - - int nfiles; - fread(&nfiles, sizeof(int), 1, fis); - - for (int i = 0; i < nfiles; ++i) - { - int strlen; - fread(&strlen, sizeof(int), 1, fis); - - char* buffer = (char*)malloc(strlen); - fread(buffer, 1, strlen, fis); - std::string filename(buffer, strlen); - free(buffer); - - std::vector md5(16); - fread(&md5[0], 1, 16, fis); - - md5_[filename] = md5; - } -} -void NetworkManager::saveMD5() -{ - FILE* fos = fopen(md5filename_.c_str(), "wb"); - if (fos == NULL) - return; - - int nfiles = md5_.size(); - fwrite(&nfiles, sizeof(int), 1, fos); - - int i = 0; - std::map >::iterator iter, end = md5_.end(); - for (iter = md5_.begin(); iter != end; ++iter, ++i) - { - int strlen = iter->first.size(); - fwrite(&strlen, sizeof(int), 1, fos); - fwrite(iter->first.c_str(), 1, strlen, fos); - fwrite(&iter->second[0], 1, 16, fos); - } - - fclose(fos); -} -void NetworkManager::calculateMD5(const char* file) -{ - std::vector md5(16); - if (md5_fromfile(g_pathForFile(file), &md5[0])) - md5_[file] = md5; -} - -ApplicationManager::ApplicationManager(JNIEnv *env, bool player) -{ - JavaVM* vm; - env->GetJavaVM(&vm); - jnb_setJavaVM(vm); - - player_ = player; - - // gpath & gvfs - gpath_init(); - gpath_addDrivePrefix(0, "|R|"); - gpath_addDrivePrefix(0, "|r|"); - gpath_addDrivePrefix(1, "|D|"); - gpath_addDrivePrefix(1, "|d|"); - gpath_addDrivePrefix(2, "|T|"); - gpath_addDrivePrefix(2, "|t|"); - - gpath_setDriveFlags(0, GPATH_RO); - gpath_setDriveFlags(1, GPATH_RW | GPATH_REAL); - gpath_setDriveFlags(2, GPATH_RW | GPATH_REAL); - - gpath_setAbsolutePathFlags(GPATH_RW | GPATH_REAL); - - gpath_setDefaultDrive(0); - - gvfs_init(); - gvfs_setPlayerModeEnabled(player ? 1 : 0); - - // event - gevent_Init(); - - // application - gapplication_init(); - - // input - ginput_init(); - - // geolocation - ggeolocation_init(); - - // http - ghttp_Init(); - - // ui - gui_init(); - - // texture - gtexture_init(); - gtexture_setCachingEnabled(1); - - // audio - gaudio_Init(); - - // network - if (player_) - networkManager_ = new NetworkManager(this); - else - networkManager_ = NULL; - - // application - application_ = new LuaApplication; - application_->setPlayerMode(player_); - if (player_) - application_->setPrintFunc(NetworkManager::printToServer_s, networkManager_); - application_->enableExceptions(); - - Binder::disableTypeChecking(); - - init_ = false; - running_ = false; - - width_ = 0; - height_ = 0; - - splashScreen_ = NULL; - - nframe_ = 0; - - applicationStarted_ = false; - - skipFirstEnterFrame_ = false; -} - -ApplicationManager::~ApplicationManager() -{ - // network - if (networkManager_) - delete networkManager_; - - // application - application_->deinitialize(); - delete application_; - - // audio - gaudio_Cleanup(); - - // texture - gtexture_cleanup(); - - // ui - gui_cleanup(); - - // http - ghttp_Cleanup(); - - // geolocation - ggeolocation_cleanup(); - - // input - ginput_cleanup(); - - // application - gapplication_cleanup(); - - // event - gevent_Cleanup(); - - // gpath & gvfs - gvfs_cleanup(); - gpath_cleanup(); -} - -void ApplicationManager::luaError(const char *error) -{ - glog_e("%s", error); - - if (player_ == true) - { - running_ = false; - - networkManager_->printToServer(error, -1); - networkManager_->printToServer("\n", -1); - application_->deinitialize(); - application_->initialize(); - } - else - { - JNIEnv *env = g_getJNIEnv(); - jstring jerrormsg = env->NewStringUTF(error); - jclass localRefCls = env->FindClass("com/giderosmobile/android/player/GiderosApplication"); - jmethodID throwError = env->GetStaticMethodID(localRefCls, "throwLuaException", "(Ljava/lang/String;)V"); - env->CallStaticVoidMethod(localRefCls, throwError, jerrormsg); - env->DeleteLocalRef(jerrormsg); - env->DeleteLocalRef(localRefCls); - //g_exit(); - } -} - -void ApplicationManager::surfaceCreated() -{ - if (!init_) - { - init_ = true; - application_->initialize(); - } - else - { - gtexture_reloadTextures(); - gtexture_RestoreRenderTargets(); - gtexture_RestoreTempTextures(); - } -} - -void ApplicationManager::surfaceChanged(int width, int height, int rotation) -{ - if (player_ == true) - refreshLocalIPs(); - - if (width > height) - { - width_ = height; - height_ = width; - } - else - { - width_ = width; - height_ = height; - } - - application_->setResolution(width_, height_); - - switch (rotation) - { - case 0: - deviceOrientation_ = ePortrait; - break; - case 90: - deviceOrientation_ = eLandscapeLeft; - break; - case 180: - deviceOrientation_ = ePortraitUpsideDown; - break; - case 270: - deviceOrientation_ = eLandscapeRight; - break; - default: - deviceOrientation_ = ePortrait; - break; - } - - application_->getApplication()->setDeviceOrientation(deviceOrientation_); - - updateHardwareOrientation(); -} - -void ApplicationManager::updateHardwareOrientation() -{ - Orientation orientation = application_->orientation(); - - bool b1 = orientation == ePortrait || orientation == ePortraitUpsideDown; - bool b2 = deviceOrientation_ == ePortrait || deviceOrientation_ == ePortraitUpsideDown; - - if (b1 != b2) - hardwareOrientation_ = deviceOrientation_; - else - hardwareOrientation_ = orientation; - - application_->setHardwareOrientation(hardwareOrientation_); -} - -void ApplicationManager::drawFrame() -{ - if (networkManager_) - networkManager_->tick(); - - // if we're in app mode, skip the first 10 frames as black screen - // because a pattern like surfaceChanged(a,b), drawFrame, drawFrame, drawFrame, ..., surfaceChanged(b,a) is possible - // and we want to execute lua files after getting the final device resolution - if (player_ == false) - { - if (nframe_++ < 10) - { - glClearColor(0, 0, 0, 1); - glClear(GL_COLOR_BUFFER_BIT); - - return; - } - } - - if (player_ == false) - { - if (applicationStarted_ == false) - { - loadProperties(); - - // Gideros has became open source and free, because this, there's no more splash art - - loadLuaFiles(); - skipFirstEnterFrame_ = true; - - /* - bool licensed = (licenseKey_[15] == 'f' && licenseKey_[16] == 'f'); - - if (licensed) - { - loadLuaFiles(); - skipFirstEnterFrame_ = true; - } - else - { - application_->getApplication()->setBackgroundColor(0, 0, 0); - splashScreen_ = new SplashScreen(application_->getApplication()); - application_->getApplication()->stage()->addChild(splashScreen_); - splashScreen_->unref(); - } - */ - - applicationStarted_ = true; - } - - if (splashScreen_ && splashScreen_->isFinished()) - { - application_->getApplication()->stage()->removeChild(splashScreen_); - splashScreen_ = NULL; - application_->getApplication()->setBackgroundColor(1, 1, 1); - - loadLuaFiles(); - skipFirstEnterFrame_ = true; - } - } - - if (skipFirstEnterFrame_ == true) - { - skipFirstEnterFrame_ = false; - } - else - { - GStatus status; - application_->enterFrame(&status); - if (status.error()) - luaError(status.errorString()); - } - - application_->clearBuffers(); - application_->renderScene(1); - drawIPs(); -} - -void ApplicationManager::loadProperties() -{ - G_FILE* fis = g_fopen("properties.bin", "rb"); - - g_fseek(fis, 0, SEEK_END); - int len = g_ftell(fis); - g_fseek(fis, 0, SEEK_SET); - - std::vector buf(len); - g_fread(&buf[0], 1, len, fis); - g_fclose(fis); - - ByteBuffer buffer(&buf[0], buf.size()); - - buffer >> properties_.scaleMode; - buffer >> properties_.logicalWidth; - buffer >> properties_.logicalHeight; - - int scaleCount; - buffer >> scaleCount; - properties_.imageScales.resize(scaleCount); - for (int i = 0; i < scaleCount; ++i) - { - buffer >> properties_.imageScales[i].first; - buffer >> properties_.imageScales[i].second; - } - - buffer >> properties_.orientation; - buffer >> properties_.fps; - buffer >> properties_.retinaDisplay; - buffer >> properties_.autorotation; - buffer >> properties_.mouseToTouch; - buffer >> properties_.touchToMouse; - buffer >> properties_.mouseTouchOrder; - - - application_->setResolution(width_, height_); - application_->setOrientation((Orientation)properties_.orientation); - updateHardwareOrientation(); - application_->getApplication()->setDeviceOrientation(deviceOrientation_); - application_->setLogicalDimensions(properties_.logicalWidth, properties_.logicalHeight); - application_->setLogicalScaleMode((LogicalScaleMode)properties_.scaleMode); - application_->setImageScales(properties_.imageScales); - - g_setFps(properties_.fps); - - ginput_setMouseToTouchEnabled(properties_.mouseToTouch); - ginput_setTouchToMouseEnabled(properties_.touchToMouse); - ginput_setMouseTouchOrder(properties_.mouseTouchOrder); -} - -void ApplicationManager::loadLuaFiles() -{ - std::vector luafiles; - - G_FILE* fis = g_fopen("luafiles.txt", "rt"); - - if (fis) - { - char line[1024]; - while (true) - { - if (g_fgets(line, 1024, fis) == NULL) - break; - - size_t len = strlen(line); - - if (len > 0 && line[len - 1] == 0xa) - line[--len] = 0; - - if (len > 0 && line[len - 1] == 0xd) - line[--len] = 0; - - if (len > 0) - luafiles.push_back(line); - } - - g_fclose(fis); - } - - GStatus status; - for (size_t i = 0; i < luafiles.size(); ++i) - { - application_->loadFile(luafiles[i].c_str(), &status); - if (status.error()) - break; - } - - if (!status.error()) - { - gapplication_enqueueEvent(GAPPLICATION_START_EVENT, NULL, 0); - application_->tick(&status); - } - - if (status.error()) - luaError(status.errorString()); -} - -void ApplicationManager::setDirectories(const char *externalDir, const char *internalDir, const char *cacheDir) -{ - externalDir_ = externalDir; - internalDir_ = internalDir; - cacheDir_ = cacheDir; -} - -void ApplicationManager::setFileSystem(const char *fileSystem) -{ - std::vector result; - pystring::split(fileSystem, result, "|"); - - gvfs_setZipFiles(result[0].c_str(), result[1].c_str(), result[2].c_str()); - - for (size_t i = 3; i < result.size(); i += 4) - { - gvfs_addFile(result[i].c_str(), atoi(result[i + 1].c_str()), atoi(result[i + 2].c_str()), atoi(result[i + 3].c_str())); - glog_v("%s %d %d %d", result[i].c_str(), atoi(result[i + 1].c_str()), atoi(result[i + 2].c_str()), atoi(result[i + 3].c_str())); - } - - setDocumentsDirectory(internalDir_.c_str()); - setTemporaryDirectory(cacheDir_.c_str()); -} - -void ApplicationManager::setOpenProject(const char* project){ - networkManager_->openProject_ = project; -} - -void ApplicationManager::openProject(const char* project){ - - //setting project name - setProjectName(project); - - //setting properties - const char* propfilename = g_pathForFile("../properties.bin"); - FILE* fis_prop = fopen(propfilename, "rb"); - - const char* luafilename = g_pathForFile("../luafiles.txt"); - FILE* fis_lua = fopen(luafilename, "rb"); - - if(fis_prop != NULL && fis_lua != NULL){ - - fseek(fis_prop, 0, SEEK_END); - int len = ftell(fis_prop); - fseek(fis_prop, 0, SEEK_SET); - - std::vector buf_prop(len); - fread(&buf_prop[0], 1, len, fis_prop); - fclose(fis_prop); - - ProjectProperties properties; - - ByteBuffer buffer(&buf_prop[0], buf_prop.size()); - - char chr; - buffer >> chr; - - buffer >> properties.scaleMode; - buffer >> properties.logicalWidth; - buffer >> properties.logicalHeight; - - int scaleCount; - buffer >> scaleCount; - properties.imageScales.resize(scaleCount); - for (int i = 0; i < scaleCount; ++i) - { - buffer >> properties.imageScales[i].first; - buffer >> properties.imageScales[i].second; - } - - buffer >> properties.orientation; - buffer >> properties.fps; - buffer >> properties.retinaDisplay; - buffer >> properties.autorotation; - buffer >> properties.mouseToTouch; - buffer >> properties.touchToMouse; - buffer >> properties.mouseTouchOrder; - - setProjectProperties(properties); - - //loading lua files - std::vector luafiles; - - const char* luafilename = g_pathForFile("../luafiles.txt"); - FILE* fis_lua = fopen(luafilename, "rb"); - - fseek(fis_lua, 0, SEEK_END); - len = ftell(fis_lua); - fseek(fis_lua, 0, SEEK_SET); - - std::vector buf_lua(len); - fread(&buf_lua[0], 1, len, fis_lua); - fclose(fis_lua); - - ByteBuffer buffer2(&buf_lua[0], buf_lua.size()); - - buffer2 >> chr; - - while (buffer2.eob() == false) - { - std::string str; - buffer2 >> str; - luafiles.push_back(str); - } - - play(luafiles); - } -} - -void ApplicationManager::play(const std::vector& luafiles) -{ - running_ = true; - - application_->deinitialize(); - application_->initialize(); - application_->setResolution(width_, height_); - application_->setOrientation((Orientation)properties_.orientation); - updateHardwareOrientation(); - application_->getApplication()->setDeviceOrientation(deviceOrientation_); - application_->setLogicalDimensions(properties_.logicalWidth, properties_.logicalHeight); - application_->setLogicalScaleMode((LogicalScaleMode)properties_.scaleMode); - application_->setImageScales(properties_.imageScales); - - g_setFps(properties_.fps); - - ginput_setMouseToTouchEnabled(properties_.mouseToTouch); - ginput_setTouchToMouseEnabled(properties_.touchToMouse); - ginput_setMouseTouchOrder(properties_.mouseTouchOrder); - - GStatus status; - for (std::size_t i = 0; i < luafiles.size(); ++i) - { - application_->loadFile(luafiles[i].c_str(), &status); - if (status.error()) - break; - } - - if (!status.error()) - { - gapplication_enqueueEvent(GAPPLICATION_START_EVENT, NULL, 0); - application_->tick(&status); - } - - if (status.error()) - luaError(status.errorString()); -} - -void ApplicationManager::stop() -{ - if (running_ == true) - { - gapplication_enqueueEvent(GAPPLICATION_EXIT_EVENT, NULL, 0); - - GStatus status; - application_->tick(&status); - if (status.error()) - luaError(status.errorString()); - } - - running_ = false; - - application_->deinitialize(); - application_->initialize(); -} - -bool ApplicationManager::isRunning() -{ - return running_; -} - -void ApplicationManager::drawIPs() -{ - if (player_ == true && running_ == false) - { - drawInfo(); - } -} - -void ApplicationManager::setProjectName(const char *projectName) -{ - glog_v("setProjectName: %s", projectName); - - std::string dir = externalDir_; - - if (dir[dir.size() - 1] != '/') - dir += "/"; - - dir += "gideros"; - - mkdir(dir.c_str(), 0755); - - dir += "/"; - - dir += projectName; - - mkdir(dir.c_str(), 0755); - - dir += "/"; - - std::string md5filename_ = dir + "md5.txt"; - - std::string documents = dir + "documents"; - std::string temporary = dir + "temporary"; - std::string resource = dir + "resource"; - - glog_v("documents: %s", documents.c_str()); - glog_v("temporary: %s", temporary.c_str()); - glog_v("resource: %s", resource.c_str()); - - mkdir(documents.c_str(), 0755); - mkdir(temporary.c_str(), 0755); - mkdir(resource.c_str(), 0755); - - setDocumentsDirectory(documents.c_str()); - setTemporaryDirectory(temporary.c_str()); - setResourceDirectory(resource.c_str()); - - std::string resourceDirectory_ = resource; - - networkManager_->setResourceDirectory(resourceDirectory_.c_str()); - networkManager_->setMd5FileName(md5filename_.c_str()); -} - - -void ApplicationManager::setProjectProperties(const ProjectProperties &properties) -{ - properties_ = properties; -} - -void ApplicationManager::touchesBegin(int size, int *id, int *x, int *y, int actionIndex) -{ - ginputp_touchBegin(size, id, x, y, actionIndex); -} - -void ApplicationManager::touchesMove(int size, int *id, int *x, int *y) -{ - ginputp_touchesMove(size, id, x, y); -} - -void ApplicationManager::touchesEnd(int size, int *id, int *x, int *y, int actionIndex) -{ - ginputp_touchEnd(size, id, x, y, actionIndex); -} - -void ApplicationManager::touchesCancel(int size, int *id, int *x, int *y) -{ - ginputp_touchesCancel(size, id, x, y); -} - -bool ApplicationManager::keyDown(int keyCode, int repeatCount) -{ - int result = ginputp_keyDown(keyCode, repeatCount); - if (result == 0) - return false; - - if (player_ == true && running_ == false) - return false; - - return true; -} - -bool ApplicationManager::keyUp(int keyCode, int repeatCount) -{ - int result = ginputp_keyUp(keyCode, repeatCount); - if (result == 0) - return false; - - if (player_ == true && running_ == false) - return false; - - return true; -} - -void ApplicationManager::pause() -{ - gtexture_SaveRenderTargets(); - - gapplication_enqueueEvent(GAPPLICATION_PAUSE_EVENT, NULL, 0); - - GStatus status; - application_->tick(&status); - if (status.error()) - luaError(status.errorString()); - } - -void ApplicationManager::resume() -{ - gapplication_enqueueEvent(GAPPLICATION_RESUME_EVENT, NULL, 0); - - GStatus status; - application_->tick(&status); - if (status.error()) - luaError(status.errorString()); - } - -void ApplicationManager::lowMemory() -{ - gapplication_enqueueEvent(GAPPLICATION_MEMORY_LOW_EVENT, NULL, 0); - - GStatus status; - application_->tick(&status); - if (status.error()) - luaError(status.errorString()); -} - -void ApplicationManager::background() -{ - gapplication_enqueueEvent(GAPPLICATION_BACKGROUND_EVENT, NULL, 0); - - GStatus status; - application_->tick(&status); - if (status.error()) - luaError(status.errorString()); - } - -void ApplicationManager::foreground() -{ - gapplication_enqueueEvent(GAPPLICATION_FOREGROUND_EVENT, NULL, 0); - - GStatus status; - application_->tick(&status); - if (status.error()) - luaError(status.errorString()); - } - -static ApplicationManager *s_applicationManager = NULL; - -extern "C" { - -void Java_com_giderosmobile_android_player_GiderosApplication_nativeCreate(JNIEnv *env, jclass cls, jboolean player) -{ - if (s_applicationManager != NULL) - delete s_applicationManager; - s_applicationManager = new ApplicationManager(env, player != 0); -} - -void Java_com_giderosmobile_android_player_GiderosApplication_nativeDestroy(JNIEnv *env, jclass cls) -{ - delete s_applicationManager; - s_applicationManager = NULL; -} - -void Java_com_giderosmobile_android_player_GiderosApplication_nativeSurfaceCreated(JNIEnv *env, jclass cls) -{ - s_applicationManager->surfaceCreated(); -} - -void Java_com_giderosmobile_android_player_GiderosApplication_nativeSurfaceChanged(JNIEnv *env, jclass cls, jint width, jint height, jint rotation) -{ - s_applicationManager->surfaceChanged(width, height, rotation); -} - -void Java_com_giderosmobile_android_player_GiderosApplication_nativeDrawFrame(JNIEnv *env, jclass cls) -{ - s_applicationManager->drawFrame(); -} - -void Java_com_giderosmobile_android_player_GiderosApplication_nativeSetDirectories(JNIEnv *env, jclass cls, jstring jExternalDir, jstring jInternalDir, jstring jCacheDir) -{ - const char *szExternalDir = env->GetStringUTFChars(jExternalDir, NULL); - std::string externalDir = szExternalDir; - env->ReleaseStringUTFChars(jExternalDir, szExternalDir); - - const char *szInternalDir = env->GetStringUTFChars(jInternalDir, NULL); - std::string internalDir = szInternalDir; - env->ReleaseStringUTFChars(jInternalDir, szInternalDir); - - const char *szCacheDir = env->GetStringUTFChars(jCacheDir, NULL); - std::string cacheDir = szCacheDir; - env->ReleaseStringUTFChars(jCacheDir, szCacheDir); - - s_applicationManager->setDirectories(externalDir.c_str(), internalDir.c_str(), cacheDir.c_str()); -} - -void Java_com_giderosmobile_android_player_GiderosApplication_nativeSetFileSystem(JNIEnv *env, jclass cls, jstring jFiles) -{ - const char *szFiles = env->GetStringUTFChars(jFiles, NULL); - std::string files = szFiles; - env->ReleaseStringUTFChars(jFiles, szFiles); - - s_applicationManager->setFileSystem(files.c_str()); -} - -void Java_com_giderosmobile_android_player_GiderosApplication_nativeOpenProject(JNIEnv *env, jclass cls, jstring jProject) -{ - const char *sproject = env->GetStringUTFChars(jProject, NULL); - std::string project = sproject; - env->ReleaseStringUTFChars(jProject, sproject); - - s_applicationManager->setOpenProject(project.c_str()); -} - -void Java_com_giderosmobile_android_player_GiderosApplication_nativeTouchesBegin(JNIEnv* env, jobject thiz, jint size, jintArray jid, jintArray jx, jintArray jy, jint actionIndex) -{ - jint* id = (jint*)env->GetPrimitiveArrayCritical(jid, 0); - jint* x = (jint*)env->GetPrimitiveArrayCritical(jx, 0); - jint* y = (jint*)env->GetPrimitiveArrayCritical(jy, 0); - - s_applicationManager->touchesBegin(size, id, x, y, actionIndex); - - env->ReleasePrimitiveArrayCritical(jid, id, 0); - env->ReleasePrimitiveArrayCritical(jx, x, 0); - env->ReleasePrimitiveArrayCritical(jy, y, 0); -} - -void Java_com_giderosmobile_android_player_GiderosApplication_nativeTouchesMove(JNIEnv* env, jobject thiz, jint size, jintArray jid, jintArray jx, jintArray jy) -{ - jint* id = (jint*)env->GetPrimitiveArrayCritical(jid, 0); - jint* x = (jint*)env->GetPrimitiveArrayCritical(jx, 0); - jint* y = (jint*)env->GetPrimitiveArrayCritical(jy, 0); - - s_applicationManager->touchesMove(size, id, x, y); - - env->ReleasePrimitiveArrayCritical(jid, id, 0); - env->ReleasePrimitiveArrayCritical(jx, x, 0); - env->ReleasePrimitiveArrayCritical(jy, y, 0); -} - -void Java_com_giderosmobile_android_player_GiderosApplication_nativeTouchesEnd(JNIEnv* env, jobject thiz, jint size, jintArray jid, jintArray jx, jintArray jy, jint actionIndex) -{ - jint* id = (jint*)env->GetPrimitiveArrayCritical(jid, 0); - jint* x = (jint*)env->GetPrimitiveArrayCritical(jx, 0); - jint* y = (jint*)env->GetPrimitiveArrayCritical(jy, 0); - - s_applicationManager->touchesEnd(size, id, x, y, actionIndex); - - env->ReleasePrimitiveArrayCritical(jid, id, 0); - env->ReleasePrimitiveArrayCritical(jx, x, 0); - env->ReleasePrimitiveArrayCritical(jy, y, 0); -} - -void Java_com_giderosmobile_android_player_GiderosApplication_nativeTouchesCancel(JNIEnv* env, jobject thiz, jint size, jintArray jid, jintArray jx, jintArray jy) -{ - jint* id = (jint*)env->GetPrimitiveArrayCritical(jid, 0); - jint* x = (jint*)env->GetPrimitiveArrayCritical(jx, 0); - jint* y = (jint*)env->GetPrimitiveArrayCritical(jy, 0); - - s_applicationManager->touchesCancel(size, id, x, y); - - env->ReleasePrimitiveArrayCritical(jid, id, 0); - env->ReleasePrimitiveArrayCritical(jx, x, 0); - env->ReleasePrimitiveArrayCritical(jy, y, 0); -} - -jboolean Java_com_giderosmobile_android_player_GiderosApplication_nativeKeyDown(JNIEnv* env, jclass cls, jint keyCode, jint repeatCount) -{ - return s_applicationManager->keyDown(keyCode, repeatCount); -} - -jboolean Java_com_giderosmobile_android_player_GiderosApplication_nativeKeyUp(JNIEnv* env, jclass cls, jint keyCode, jint repeatCount) -{ - return s_applicationManager->keyUp(keyCode, repeatCount); -} - -jboolean Java_com_giderosmobile_android_player_GiderosApplication_isRunning(JNIEnv* env, jclass cls) -{ - return s_applicationManager->isRunning(); -} - -void Java_com_giderosmobile_android_player_GiderosApplication_nativePause(JNIEnv* env, jclass cls) -{ - s_applicationManager->pause(); -} - -void Java_com_giderosmobile_android_player_GiderosApplication_nativeResume(JNIEnv* env, jclass cls) -{ - s_applicationManager->resume(); -} - -void Java_com_giderosmobile_android_player_GiderosApplication_nativeLowMemory(JNIEnv* env, jclass cls) -{ - if (s_applicationManager) - s_applicationManager->lowMemory(); -} - -void Java_com_giderosmobile_android_player_GiderosApplication_nativeStop(JNIEnv* env, jclass cls) -{ - s_applicationManager->background(); -} - -void Java_com_giderosmobile_android_player_GiderosApplication_nativeStart(JNIEnv* env, jclass cls) -{ - s_applicationManager->foreground(); -} - - -} - +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include + +#include + +#include +#include +#include + +#include +#include + +#include + +#include + +#include + +#include + +#include + +#include + +#include +#include +#include +#include +#include + +#include + +#include + +#include + +#include +#include + + +extern "C" { +int g_getFps(); +void g_setFps(int fps); +} +void drawInfo(); +void refreshLocalIPs(); +void g_exit(); + +static volatile const char* licenseKey_ = "9852564f4728e0c11e34ca3eb5fe20b2"; +//-----------------------------------------01234567890123456------------------ + +struct ProjectProperties +{ + ProjectProperties() + { + scaleMode = 0; + logicalWidth = 320; + logicalHeight = 480; + orientation = 0; + fps = 60; + retinaDisplay = 0; + autorotation = 0; + mouseToTouch = 1; + touchToMouse = 1; + mouseTouchOrder = 0; + } + + int scaleMode; + int logicalWidth; + int logicalHeight; + std::vector > imageScales; + int orientation; + int fps; + int retinaDisplay; + int autorotation; + int mouseToTouch; + int touchToMouse; + int mouseTouchOrder; +}; + +class ApplicationManager; + +class NetworkManager +{ +public: + NetworkManager(ApplicationManager *application); + ~NetworkManager(); + void tick(); + std::string openProject_; + + void setResourceDirectory(const char* resourceDirectory) + { + resourceDirectory_ = resourceDirectory; + } + + void setMd5FileName(const char *md5FileName) + { + md5filename_ = md5FileName; + loadMD5(); + } + + static void printToServer_s(const char *str, int len, void *data) + { + static_cast(data)->printToServer(str, len); + } + + void printToServer(const char *str, int len) + { + unsigned int size = 1 + ((len < 0) ? strlen(str) : len) + 1; + char* buffer = (char*)malloc(size); + + buffer[0] = 4; + memcpy(buffer + 1, str,size-2); + buffer[size-1]=0; + + server_->sendData(buffer, size); + + free(buffer); + } + +private: + void createFolder(const std::vector &data); + void createFile(const std::vector &data); + void play(const std::vector &data); + void stop(); + void sendFileList(); + void setProjectName(const std::vector &data); + void deleteFile(const std::vector &data); + void setProperties(const std::vector &data); + +private: + std::string md5filename_; + std::map > md5_; + void loadMD5(); + void saveMD5(); + void calculateMD5(const char *file); + +private: + ApplicationManager *application_; + Server *server_; + std::string resourceDirectory_; +}; + +class ApplicationManager +{ +public: + ApplicationManager(JNIEnv *env, bool player); + ~ApplicationManager(); + + void luaError(const char *msg); + + void surfaceCreated(); + void surfaceChanged(int width, int height, int rotation); + void updateHardwareOrientation(); + void drawFrame(); + + void setDirectories(const char *externalDir, const char *internalDir, const char *cacheDir); + void setFileSystem(const char *files); + + void openProject(const char* project); + void setOpenProject(const char* project); + void play(const std::vector& luafiles); + void stop(); + void setProjectName(const char *projectName); + void setProjectProperties(const ProjectProperties &properties); + bool isRunning(); + + void touchesBegin(int size, int *id, int *x, int *y, int actionIndex); + void touchesMove(int size, int *id, int *x, int *y); + void touchesEnd(int size, int *id, int *x, int *y, int actionIndex); + void touchesCancel(int size, int *id, int *x, int *y); + + bool keyDown(int keyCode, int repeatCount); + bool keyUp(int keyCode, int repeatCount); + + void pause(); + void resume(); + + void lowMemory(); + + void background(); + void foreground(); + +private: + void loadProperties(); + void loadLuaFiles(); + void drawIPs(); + int convertKeyCode(int keyCode); + +private: + bool player_; + LuaApplication *application_; + NetworkManager *networkManager_; + + bool init_; + + bool running_; + + int width_, height_; + + SplashScreen *splashScreen_; + + std::string externalDir_, internalDir_, cacheDir_; + + ProjectProperties properties_; + + Orientation hardwareOrientation_; + + Orientation deviceOrientation_; + + int nframe_; + + bool applicationStarted_; + + bool skipFirstEnterFrame_; +}; + +NetworkManager::NetworkManager(ApplicationManager* application) +{ + application_ = application; + server_ = new Server(15000, ::getDeviceName().c_str()); +} + +NetworkManager::~NetworkManager() +{ + delete server_; +} + +void NetworkManager::tick() +{ + int dataTotal = 0; + + while (true) + { + if(!openProject_.empty()){ + application_->openProject(openProject_.c_str()); + openProject_.clear(); + } + int dataSent0 = server_->dataSent(); + int dataReceived0 = server_->dataReceived(); + + NetworkEvent event; + server_->tick(&event); + + int dataSent1 = server_->dataSent(); + int dataReceived1 = server_->dataReceived(); + + if (event.eventCode == eDataReceived) + { + const std::vector& data = event.data; + + switch (data[0]) + { + case 0: + createFolder(data); + break; + case 1: + createFile(data); + break; + case 2:{ + const char* absfilename = g_pathForFile("../luafiles.txt"); + FILE* fos = fopen(absfilename, "wb"); + fwrite(&data[0], data.size(), 1, fos); + fclose(fos); + play(data); + } + break; + case 3: + stop(); + break; + case 7: + sendFileList(); + break; + case 8: + setProjectName(data); + break; + case 9: + deleteFile(data); + break; + case 11:{ + const char* absfilename = g_pathForFile("../properties.bin"); + FILE* fos = fopen(absfilename, "wb"); + fwrite(&data[0], data.size(), 1, fos); + fclose(fos); + setProperties(data); + } + break; + } + } + + int dataDelta = (dataSent1 - dataSent0) + (dataReceived1 - dataReceived0); + dataTotal += dataDelta; + + if (dataDelta == 0 || dataTotal > 1024) + break; + } +} + +void NetworkManager::createFolder(const std::vector& data) +{ + std::string folderName = &data[1]; + mkdir(g_pathForFile(folderName.c_str()), 0755); +} + +void NetworkManager::createFile(const std::vector& data) +{ + std::string fileName = &data[1]; + const char* absfilename = g_pathForFile(fileName.c_str()); + FILE* fos = fopen(absfilename, "wb"); + int pos = 1 + fileName.size() + 1; + if (data.size() > pos) + fwrite(&data[pos], data.size() - pos, 1, fos); + fclose(fos); + calculateMD5(fileName.c_str()); + saveMD5(); +} + +void NetworkManager::play(const std::vector &data) +{ + std::vector luafiles; + + ByteBuffer buffer(&data[0], data.size()); + + char chr; + buffer >> chr; + + while (buffer.eob() == false) + { + std::string str; + buffer >> str; + luafiles.push_back(str); + } + + application_->play(luafiles); +} + +void NetworkManager::stop() +{ + application_->stop(); +} + +void NetworkManager::sendFileList() +{ + ByteBuffer buffer; + + // type(byte) 6 + // D or F, file (zero ended string), age (int) + // D or F, file (zero ended string), age (int) + // .... + + buffer.append((char)6); + + std::vector files, directories; + getDirectoryListingR(resourceDirectory_.c_str(), &files, &directories); + + for (std::size_t i = 0; i < files.size(); ++i) + { + buffer.append('F'); + buffer.append(files[i]); + int age = fileAge(pathForFileEx(resourceDirectory_.c_str(), files[i].c_str())); + buffer.append(age); + + std::map >::iterator iter = md5_.find(files[i]); + if (iter == md5_.end()) + { + calculateMD5(files[i].c_str()); + saveMD5(); + iter = md5_.find(files[i]); + } + buffer.append(&iter->second[0], 16); + } + + for (std::size_t i = 0; i < directories.size(); ++i) + { + buffer.append('D'); + buffer.append(directories[i]); + } + + server_->sendData(buffer.data(), buffer.size()); +} + +void NetworkManager::setProjectName(const std::vector &data) +{ + ByteBuffer buffer(&data[0], data.size()); + + char chr; + buffer >> chr; + + std::string str; + buffer >> str; + + application_->setProjectName(str.c_str()); +} + +void NetworkManager::deleteFile(const std::vector &data) +{ + ByteBuffer buffer(&data[0], data.size()); + + char chr; + buffer >> chr; + + std::string fileName; + buffer >> fileName; + + remove(g_pathForFile(fileName.c_str())); + + { + std::map >::iterator iter = md5_.find(fileName); + if (iter != md5_.end()) + { + md5_.erase(iter); + saveMD5(); + } + } +} + +void NetworkManager::setProperties(const std::vector &data) +{ + ProjectProperties properties; + + ByteBuffer buffer(&data[0], data.size()); + + char chr; + buffer >> chr; + + buffer >> properties.scaleMode; + buffer >> properties.logicalWidth; + buffer >> properties.logicalHeight; + + int scaleCount; + buffer >> scaleCount; + properties.imageScales.resize(scaleCount); + for (int i = 0; i < scaleCount; ++i) + { + buffer >> properties.imageScales[i].first; + buffer >> properties.imageScales[i].second; + } + + buffer >> properties.orientation; + buffer >> properties.fps; + buffer >> properties.retinaDisplay; + buffer >> properties.autorotation; + buffer >> properties.mouseToTouch; + buffer >> properties.touchToMouse; + buffer >> properties.mouseTouchOrder; + + application_->setProjectProperties(properties); +} + +void NetworkManager::loadMD5() +{ + md5_.clear(); + + FILE* fis = fopen(md5filename_.c_str(), "rb"); + + if (fis == NULL) + return; + + int nfiles; + fread(&nfiles, sizeof(int), 1, fis); + + for (int i = 0; i < nfiles; ++i) + { + int strlen; + fread(&strlen, sizeof(int), 1, fis); + + char* buffer = (char*)malloc(strlen); + fread(buffer, 1, strlen, fis); + std::string filename(buffer, strlen); + free(buffer); + + std::vector md5(16); + fread(&md5[0], 1, 16, fis); + + md5_[filename] = md5; + } +} +void NetworkManager::saveMD5() +{ + FILE* fos = fopen(md5filename_.c_str(), "wb"); + if (fos == NULL) + return; + + int nfiles = md5_.size(); + fwrite(&nfiles, sizeof(int), 1, fos); + + int i = 0; + std::map >::iterator iter, end = md5_.end(); + for (iter = md5_.begin(); iter != end; ++iter, ++i) + { + int strlen = iter->first.size(); + fwrite(&strlen, sizeof(int), 1, fos); + fwrite(iter->first.c_str(), 1, strlen, fos); + fwrite(&iter->second[0], 1, 16, fos); + } + + fclose(fos); +} +void NetworkManager::calculateMD5(const char* file) +{ + std::vector md5(16); + if (md5_fromfile(g_pathForFile(file), &md5[0])) + md5_[file] = md5; +} + +ApplicationManager::ApplicationManager(JNIEnv *env, bool player) +{ + JavaVM* vm; + env->GetJavaVM(&vm); + jnb_setJavaVM(vm); + + player_ = player; + + // gpath & gvfs + gpath_init(); + gpath_addDrivePrefix(0, "|R|"); + gpath_addDrivePrefix(0, "|r|"); + gpath_addDrivePrefix(1, "|D|"); + gpath_addDrivePrefix(1, "|d|"); + gpath_addDrivePrefix(2, "|T|"); + gpath_addDrivePrefix(2, "|t|"); + + gpath_setDriveFlags(0, GPATH_RO); + gpath_setDriveFlags(1, GPATH_RW | GPATH_REAL); + gpath_setDriveFlags(2, GPATH_RW | GPATH_REAL); + + gpath_setAbsolutePathFlags(GPATH_RW | GPATH_REAL); + + gpath_setDefaultDrive(0); + + gvfs_init(); + gvfs_setPlayerModeEnabled(player ? 1 : 0); + + // event + gevent_Init(); + + // application + gapplication_init(); + + // input + ginput_init(); + + // geolocation + ggeolocation_init(); + + // http + ghttp_Init(); + + // ui + gui_init(); + + // texture + gtexture_init(); + gtexture_setCachingEnabled(1); + + // audio + gaudio_Init(); + + // network + if (player_) + networkManager_ = new NetworkManager(this); + else + networkManager_ = NULL; + + // application + application_ = new LuaApplication; + application_->setPlayerMode(player_); + if (player_) + application_->setPrintFunc(NetworkManager::printToServer_s, networkManager_); + application_->enableExceptions(); + + Binder::disableTypeChecking(); + + init_ = false; + running_ = false; + + width_ = 0; + height_ = 0; + + splashScreen_ = NULL; + + nframe_ = 0; + + applicationStarted_ = false; + + skipFirstEnterFrame_ = false; +} + +ApplicationManager::~ApplicationManager() +{ + // network + if (networkManager_) + delete networkManager_; + + // application + application_->deinitialize(); + delete application_; + + // audio + gaudio_Cleanup(); + + // texture + gtexture_cleanup(); + + // ui + gui_cleanup(); + + // http + ghttp_Cleanup(); + + // geolocation + ggeolocation_cleanup(); + + // input + ginput_cleanup(); + + // application + gapplication_cleanup(); + + // event + gevent_Cleanup(); + + // gpath & gvfs + gvfs_cleanup(); + gpath_cleanup(); +} + +void ApplicationManager::luaError(const char *error) +{ + glog_e("%s", error); + + if (player_ == true) + { + running_ = false; + + networkManager_->printToServer(error, -1); + networkManager_->printToServer("\n", -1); + application_->deinitialize(); + application_->initialize(); + } + else + { + JNIEnv *env = g_getJNIEnv(); + jstring jerrormsg = env->NewStringUTF(error); + jclass localRefCls = env->FindClass("com/giderosmobile/android/player/GiderosApplication"); + jmethodID throwError = env->GetStaticMethodID(localRefCls, "throwLuaException", "(Ljava/lang/String;)V"); + env->CallStaticVoidMethod(localRefCls, throwError, jerrormsg); + env->DeleteLocalRef(jerrormsg); + env->DeleteLocalRef(localRefCls); + //g_exit(); + } +} + +void ApplicationManager::surfaceCreated() +{ + if (!init_) + { + init_ = true; + application_->initialize(); + } + else + { + gtexture_reloadTextures(); + gtexture_RestoreRenderTargets(); + gtexture_RestoreTempTextures(); + } +} + +void ApplicationManager::surfaceChanged(int width, int height, int rotation) +{ + if (player_ == true) + refreshLocalIPs(); + + if (width > height) + { + width_ = height; + height_ = width; + } + else + { + width_ = width; + height_ = height; + } + + application_->setResolution(width_, height_); + + switch (rotation) + { + case 0: + deviceOrientation_ = ePortrait; + break; + case 90: + deviceOrientation_ = eLandscapeLeft; + break; + case 180: + deviceOrientation_ = ePortraitUpsideDown; + break; + case 270: + deviceOrientation_ = eLandscapeRight; + break; + default: + deviceOrientation_ = ePortrait; + break; + } + + application_->getApplication()->setDeviceOrientation(deviceOrientation_); + + updateHardwareOrientation(); +} + +void ApplicationManager::updateHardwareOrientation() +{ + Orientation orientation = application_->orientation(); + + bool b1 = orientation == ePortrait || orientation == ePortraitUpsideDown; + bool b2 = deviceOrientation_ == ePortrait || deviceOrientation_ == ePortraitUpsideDown; + + if (b1 != b2) + hardwareOrientation_ = deviceOrientation_; + else + hardwareOrientation_ = orientation; + + application_->setHardwareOrientation(hardwareOrientation_); +} + +void ApplicationManager::drawFrame() +{ + if (networkManager_) + networkManager_->tick(); + + // if we're in app mode, skip the first 10 frames as black screen + // because a pattern like surfaceChanged(a,b), drawFrame, drawFrame, drawFrame, ..., surfaceChanged(b,a) is possible + // and we want to execute lua files after getting the final device resolution + if (player_ == false) + { + if (nframe_++ < 10) + { + glClearColor(0, 0, 0, 1); + glClear(GL_COLOR_BUFFER_BIT); + + return; + } + } + + if (player_ == false) + { + if (applicationStarted_ == false) + { + loadProperties(); + + // Gideros has became open source and free, because this, there's no more splash art + + loadLuaFiles(); + skipFirstEnterFrame_ = true; + + /* + bool licensed = (licenseKey_[15] == 'f' && licenseKey_[16] == 'f'); + + if (licensed) + { + loadLuaFiles(); + skipFirstEnterFrame_ = true; + } + else + { + application_->getApplication()->setBackgroundColor(0, 0, 0); + splashScreen_ = new SplashScreen(application_->getApplication()); + application_->getApplication()->stage()->addChild(splashScreen_); + splashScreen_->unref(); + } + */ + + applicationStarted_ = true; + } + + if (splashScreen_ && splashScreen_->isFinished()) + { + application_->getApplication()->stage()->removeChild(splashScreen_); + splashScreen_ = NULL; + application_->getApplication()->setBackgroundColor(1, 1, 1); + + loadLuaFiles(); + skipFirstEnterFrame_ = true; + } + } + + if (skipFirstEnterFrame_ == true) + { + skipFirstEnterFrame_ = false; + } + else + { + GStatus status; + application_->enterFrame(&status); + if (status.error()) + luaError(status.errorString()); + } + + application_->clearBuffers(); + application_->renderScene(1); + drawIPs(); +} + +void ApplicationManager::loadProperties() +{ + G_FILE* fis = g_fopen("properties.bin", "rb"); + + g_fseek(fis, 0, SEEK_END); + int len = g_ftell(fis); + g_fseek(fis, 0, SEEK_SET); + + std::vector buf(len); + g_fread(&buf[0], 1, len, fis); + g_fclose(fis); + + ByteBuffer buffer(&buf[0], buf.size()); + + buffer >> properties_.scaleMode; + buffer >> properties_.logicalWidth; + buffer >> properties_.logicalHeight; + + int scaleCount; + buffer >> scaleCount; + properties_.imageScales.resize(scaleCount); + for (int i = 0; i < scaleCount; ++i) + { + buffer >> properties_.imageScales[i].first; + buffer >> properties_.imageScales[i].second; + } + + buffer >> properties_.orientation; + buffer >> properties_.fps; + buffer >> properties_.retinaDisplay; + buffer >> properties_.autorotation; + buffer >> properties_.mouseToTouch; + buffer >> properties_.touchToMouse; + buffer >> properties_.mouseTouchOrder; + + + application_->setResolution(width_, height_); + application_->setOrientation((Orientation)properties_.orientation); + updateHardwareOrientation(); + application_->getApplication()->setDeviceOrientation(deviceOrientation_); + application_->setLogicalDimensions(properties_.logicalWidth, properties_.logicalHeight); + application_->setLogicalScaleMode((LogicalScaleMode)properties_.scaleMode); + application_->setImageScales(properties_.imageScales); + + g_setFps(properties_.fps); + + ginput_setMouseToTouchEnabled(properties_.mouseToTouch); + ginput_setTouchToMouseEnabled(properties_.touchToMouse); + ginput_setMouseTouchOrder(properties_.mouseTouchOrder); +} + +void ApplicationManager::loadLuaFiles() +{ + std::vector luafiles; + + G_FILE* fis = g_fopen("luafiles.txt", "rt"); + + if (fis) + { + char line[1024]; + while (true) + { + if (g_fgets(line, 1024, fis) == NULL) + break; + + size_t len = strlen(line); + + if (len > 0 && line[len - 1] == 0xa) + line[--len] = 0; + + if (len > 0 && line[len - 1] == 0xd) + line[--len] = 0; + + if (len > 0) + luafiles.push_back(line); + } + + g_fclose(fis); + } + + GStatus status; + for (size_t i = 0; i < luafiles.size(); ++i) + { + application_->loadFile(luafiles[i].c_str(), &status); + if (status.error()) + break; + } + + if (!status.error()) + { + gapplication_enqueueEvent(GAPPLICATION_START_EVENT, NULL, 0); + application_->tick(&status); + } + + if (status.error()) + luaError(status.errorString()); +} + +void ApplicationManager::setDirectories(const char *externalDir, const char *internalDir, const char *cacheDir) +{ + externalDir_ = externalDir; + internalDir_ = internalDir; + cacheDir_ = cacheDir; +} + +void ApplicationManager::setFileSystem(const char *fileSystem) +{ + std::vector result; + pystring::split(fileSystem, result, "|"); + + gvfs_setZipFiles(result[0].c_str(), result[1].c_str(), result[2].c_str()); + + for (size_t i = 3; i < result.size(); i += 4) + { + gvfs_addFile(result[i].c_str(), atoi(result[i + 1].c_str()), atoi(result[i + 2].c_str()), atoi(result[i + 3].c_str())); + glog_v("%s %d %d %d", result[i].c_str(), atoi(result[i + 1].c_str()), atoi(result[i + 2].c_str()), atoi(result[i + 3].c_str())); + } + + setDocumentsDirectory(internalDir_.c_str()); + setTemporaryDirectory(cacheDir_.c_str()); +} + +void ApplicationManager::setOpenProject(const char* project){ + networkManager_->openProject_ = project; +} + +void ApplicationManager::openProject(const char* project){ + + //setting project name + setProjectName(project); + + //setting properties + const char* propfilename = g_pathForFile("../properties.bin"); + FILE* fis_prop = fopen(propfilename, "rb"); + + const char* luafilename = g_pathForFile("../luafiles.txt"); + FILE* fis_lua = fopen(luafilename, "rb"); + + if(fis_prop != NULL && fis_lua != NULL){ + + fseek(fis_prop, 0, SEEK_END); + int len = ftell(fis_prop); + fseek(fis_prop, 0, SEEK_SET); + + std::vector buf_prop(len); + fread(&buf_prop[0], 1, len, fis_prop); + fclose(fis_prop); + + ProjectProperties properties; + + ByteBuffer buffer(&buf_prop[0], buf_prop.size()); + + char chr; + buffer >> chr; + + buffer >> properties.scaleMode; + buffer >> properties.logicalWidth; + buffer >> properties.logicalHeight; + + int scaleCount; + buffer >> scaleCount; + properties.imageScales.resize(scaleCount); + for (int i = 0; i < scaleCount; ++i) + { + buffer >> properties.imageScales[i].first; + buffer >> properties.imageScales[i].second; + } + + buffer >> properties.orientation; + buffer >> properties.fps; + buffer >> properties.retinaDisplay; + buffer >> properties.autorotation; + buffer >> properties.mouseToTouch; + buffer >> properties.touchToMouse; + buffer >> properties.mouseTouchOrder; + + setProjectProperties(properties); + + //loading lua files + std::vector luafiles; + + const char* luafilename = g_pathForFile("../luafiles.txt"); + FILE* fis_lua = fopen(luafilename, "rb"); + + fseek(fis_lua, 0, SEEK_END); + len = ftell(fis_lua); + fseek(fis_lua, 0, SEEK_SET); + + std::vector buf_lua(len); + fread(&buf_lua[0], 1, len, fis_lua); + fclose(fis_lua); + + ByteBuffer buffer2(&buf_lua[0], buf_lua.size()); + + buffer2 >> chr; + + while (buffer2.eob() == false) + { + std::string str; + buffer2 >> str; + luafiles.push_back(str); + } + + play(luafiles); + } +} + +void ApplicationManager::play(const std::vector& luafiles) +{ + running_ = true; + + application_->deinitialize(); + application_->initialize(); + application_->setResolution(width_, height_); + application_->setOrientation((Orientation)properties_.orientation); + updateHardwareOrientation(); + application_->getApplication()->setDeviceOrientation(deviceOrientation_); + application_->setLogicalDimensions(properties_.logicalWidth, properties_.logicalHeight); + application_->setLogicalScaleMode((LogicalScaleMode)properties_.scaleMode); + application_->setImageScales(properties_.imageScales); + + g_setFps(properties_.fps); + + ginput_setMouseToTouchEnabled(properties_.mouseToTouch); + ginput_setTouchToMouseEnabled(properties_.touchToMouse); + ginput_setMouseTouchOrder(properties_.mouseTouchOrder); + + GStatus status; + for (std::size_t i = 0; i < luafiles.size(); ++i) + { + application_->loadFile(luafiles[i].c_str(), &status); + if (status.error()) + break; + } + + if (!status.error()) + { + gapplication_enqueueEvent(GAPPLICATION_START_EVENT, NULL, 0); + application_->tick(&status); + } + + if (status.error()) + luaError(status.errorString()); +} + +void ApplicationManager::stop() +{ + if (running_ == true) + { + gapplication_enqueueEvent(GAPPLICATION_EXIT_EVENT, NULL, 0); + + GStatus status; + application_->tick(&status); + if (status.error()) + luaError(status.errorString()); + } + + running_ = false; + + application_->deinitialize(); + application_->initialize(); +} + +bool ApplicationManager::isRunning() +{ + return running_; +} + +void ApplicationManager::drawIPs() +{ + if (player_ == true && running_ == false) + { + drawInfo(); + } +} + +void ApplicationManager::setProjectName(const char *projectName) +{ + glog_v("setProjectName: %s", projectName); + + std::string dir = externalDir_; + + if (dir[dir.size() - 1] != '/') + dir += "/"; + + dir += "gideros"; + + mkdir(dir.c_str(), 0755); + + dir += "/"; + + dir += projectName; + + mkdir(dir.c_str(), 0755); + + dir += "/"; + + std::string md5filename_ = dir + "md5.txt"; + + std::string documents = dir + "documents"; + std::string temporary = dir + "temporary"; + std::string resource = dir + "resource"; + + glog_v("documents: %s", documents.c_str()); + glog_v("temporary: %s", temporary.c_str()); + glog_v("resource: %s", resource.c_str()); + + mkdir(documents.c_str(), 0755); + mkdir(temporary.c_str(), 0755); + mkdir(resource.c_str(), 0755); + + setDocumentsDirectory(documents.c_str()); + setTemporaryDirectory(temporary.c_str()); + setResourceDirectory(resource.c_str()); + + std::string resourceDirectory_ = resource; + + networkManager_->setResourceDirectory(resourceDirectory_.c_str()); + networkManager_->setMd5FileName(md5filename_.c_str()); +} + + +void ApplicationManager::setProjectProperties(const ProjectProperties &properties) +{ + properties_ = properties; +} + +void ApplicationManager::touchesBegin(int size, int *id, int *x, int *y, int actionIndex) +{ + ginputp_touchBegin(size, id, x, y, actionIndex); +} + +void ApplicationManager::touchesMove(int size, int *id, int *x, int *y) +{ + ginputp_touchesMove(size, id, x, y); +} + +void ApplicationManager::touchesEnd(int size, int *id, int *x, int *y, int actionIndex) +{ + ginputp_touchEnd(size, id, x, y, actionIndex); +} + +void ApplicationManager::touchesCancel(int size, int *id, int *x, int *y) +{ + ginputp_touchesCancel(size, id, x, y); +} + +bool ApplicationManager::keyDown(int keyCode, int repeatCount) +{ + int result = ginputp_keyDown(keyCode, repeatCount); + if (result == 0) + return false; + + if (player_ == true && running_ == false) + return false; + + return true; +} + +bool ApplicationManager::keyUp(int keyCode, int repeatCount) +{ + int result = ginputp_keyUp(keyCode, repeatCount); + if (result == 0) + return false; + + if (player_ == true && running_ == false) + return false; + + return true; +} + +void ApplicationManager::pause() +{ + gtexture_SaveRenderTargets(); + + gapplication_enqueueEvent(GAPPLICATION_PAUSE_EVENT, NULL, 0); + + GStatus status; + application_->tick(&status); + if (status.error()) + luaError(status.errorString()); + } + +void ApplicationManager::resume() +{ + gapplication_enqueueEvent(GAPPLICATION_RESUME_EVENT, NULL, 0); + + GStatus status; + application_->tick(&status); + if (status.error()) + luaError(status.errorString()); + } + +void ApplicationManager::lowMemory() +{ + gapplication_enqueueEvent(GAPPLICATION_MEMORY_LOW_EVENT, NULL, 0); + + GStatus status; + application_->tick(&status); + if (status.error()) + luaError(status.errorString()); +} + +void ApplicationManager::background() +{ + gapplication_enqueueEvent(GAPPLICATION_BACKGROUND_EVENT, NULL, 0); + + GStatus status; + application_->tick(&status); + if (status.error()) + luaError(status.errorString()); + } + +void ApplicationManager::foreground() +{ + gapplication_enqueueEvent(GAPPLICATION_FOREGROUND_EVENT, NULL, 0); + + GStatus status; + application_->tick(&status); + if (status.error()) + luaError(status.errorString()); + } + +static ApplicationManager *s_applicationManager = NULL; + +extern "C" { + +void Java_com_giderosmobile_android_player_GiderosApplication_nativeCreate(JNIEnv *env, jclass cls, jboolean player) +{ + if (s_applicationManager != NULL) + delete s_applicationManager; + s_applicationManager = new ApplicationManager(env, player != 0); +} + +void Java_com_giderosmobile_android_player_GiderosApplication_nativeDestroy(JNIEnv *env, jclass cls) +{ + delete s_applicationManager; + s_applicationManager = NULL; +} + +void Java_com_giderosmobile_android_player_GiderosApplication_nativeSurfaceCreated(JNIEnv *env, jclass cls) +{ + s_applicationManager->surfaceCreated(); +} + +void Java_com_giderosmobile_android_player_GiderosApplication_nativeSurfaceChanged(JNIEnv *env, jclass cls, jint width, jint height, jint rotation) +{ + s_applicationManager->surfaceChanged(width, height, rotation); +} + +void Java_com_giderosmobile_android_player_GiderosApplication_nativeDrawFrame(JNIEnv *env, jclass cls) +{ + s_applicationManager->drawFrame(); +} + +void Java_com_giderosmobile_android_player_GiderosApplication_nativeSetDirectories(JNIEnv *env, jclass cls, jstring jExternalDir, jstring jInternalDir, jstring jCacheDir) +{ + const char *szExternalDir = env->GetStringUTFChars(jExternalDir, NULL); + std::string externalDir = szExternalDir; + env->ReleaseStringUTFChars(jExternalDir, szExternalDir); + + const char *szInternalDir = env->GetStringUTFChars(jInternalDir, NULL); + std::string internalDir = szInternalDir; + env->ReleaseStringUTFChars(jInternalDir, szInternalDir); + + const char *szCacheDir = env->GetStringUTFChars(jCacheDir, NULL); + std::string cacheDir = szCacheDir; + env->ReleaseStringUTFChars(jCacheDir, szCacheDir); + + s_applicationManager->setDirectories(externalDir.c_str(), internalDir.c_str(), cacheDir.c_str()); +} + +void Java_com_giderosmobile_android_player_GiderosApplication_nativeSetFileSystem(JNIEnv *env, jclass cls, jstring jFiles) +{ + const char *szFiles = env->GetStringUTFChars(jFiles, NULL); + std::string files = szFiles; + env->ReleaseStringUTFChars(jFiles, szFiles); + + s_applicationManager->setFileSystem(files.c_str()); +} + +void Java_com_giderosmobile_android_player_GiderosApplication_nativeOpenProject(JNIEnv *env, jclass cls, jstring jProject) +{ + const char *sproject = env->GetStringUTFChars(jProject, NULL); + std::string project = sproject; + env->ReleaseStringUTFChars(jProject, sproject); + + s_applicationManager->setOpenProject(project.c_str()); +} + +void Java_com_giderosmobile_android_player_GiderosApplication_nativeTouchesBegin(JNIEnv* env, jobject thiz, jint size, jintArray jid, jintArray jx, jintArray jy, jint actionIndex) +{ + jint* id = (jint*)env->GetPrimitiveArrayCritical(jid, 0); + jint* x = (jint*)env->GetPrimitiveArrayCritical(jx, 0); + jint* y = (jint*)env->GetPrimitiveArrayCritical(jy, 0); + + s_applicationManager->touchesBegin(size, id, x, y, actionIndex); + + env->ReleasePrimitiveArrayCritical(jid, id, 0); + env->ReleasePrimitiveArrayCritical(jx, x, 0); + env->ReleasePrimitiveArrayCritical(jy, y, 0); +} + +void Java_com_giderosmobile_android_player_GiderosApplication_nativeTouchesMove(JNIEnv* env, jobject thiz, jint size, jintArray jid, jintArray jx, jintArray jy) +{ + jint* id = (jint*)env->GetPrimitiveArrayCritical(jid, 0); + jint* x = (jint*)env->GetPrimitiveArrayCritical(jx, 0); + jint* y = (jint*)env->GetPrimitiveArrayCritical(jy, 0); + + s_applicationManager->touchesMove(size, id, x, y); + + env->ReleasePrimitiveArrayCritical(jid, id, 0); + env->ReleasePrimitiveArrayCritical(jx, x, 0); + env->ReleasePrimitiveArrayCritical(jy, y, 0); +} + +void Java_com_giderosmobile_android_player_GiderosApplication_nativeTouchesEnd(JNIEnv* env, jobject thiz, jint size, jintArray jid, jintArray jx, jintArray jy, jint actionIndex) +{ + jint* id = (jint*)env->GetPrimitiveArrayCritical(jid, 0); + jint* x = (jint*)env->GetPrimitiveArrayCritical(jx, 0); + jint* y = (jint*)env->GetPrimitiveArrayCritical(jy, 0); + + s_applicationManager->touchesEnd(size, id, x, y, actionIndex); + + env->ReleasePrimitiveArrayCritical(jid, id, 0); + env->ReleasePrimitiveArrayCritical(jx, x, 0); + env->ReleasePrimitiveArrayCritical(jy, y, 0); +} + +void Java_com_giderosmobile_android_player_GiderosApplication_nativeTouchesCancel(JNIEnv* env, jobject thiz, jint size, jintArray jid, jintArray jx, jintArray jy) +{ + jint* id = (jint*)env->GetPrimitiveArrayCritical(jid, 0); + jint* x = (jint*)env->GetPrimitiveArrayCritical(jx, 0); + jint* y = (jint*)env->GetPrimitiveArrayCritical(jy, 0); + + s_applicationManager->touchesCancel(size, id, x, y); + + env->ReleasePrimitiveArrayCritical(jid, id, 0); + env->ReleasePrimitiveArrayCritical(jx, x, 0); + env->ReleasePrimitiveArrayCritical(jy, y, 0); +} + +jboolean Java_com_giderosmobile_android_player_GiderosApplication_nativeKeyDown(JNIEnv* env, jclass cls, jint keyCode, jint repeatCount) +{ + return s_applicationManager->keyDown(keyCode, repeatCount); +} + +jboolean Java_com_giderosmobile_android_player_GiderosApplication_nativeKeyUp(JNIEnv* env, jclass cls, jint keyCode, jint repeatCount) +{ + return s_applicationManager->keyUp(keyCode, repeatCount); +} + +jboolean Java_com_giderosmobile_android_player_GiderosApplication_isRunning(JNIEnv* env, jclass cls) +{ + return s_applicationManager->isRunning(); +} + +void Java_com_giderosmobile_android_player_GiderosApplication_nativePause(JNIEnv* env, jclass cls) +{ + s_applicationManager->pause(); +} + +void Java_com_giderosmobile_android_player_GiderosApplication_nativeResume(JNIEnv* env, jclass cls) +{ + s_applicationManager->resume(); +} + +void Java_com_giderosmobile_android_player_GiderosApplication_nativeLowMemory(JNIEnv* env, jclass cls) +{ + if (s_applicationManager) + s_applicationManager->lowMemory(); +} + +void Java_com_giderosmobile_android_player_GiderosApplication_nativeStop(JNIEnv* env, jclass cls) +{ + s_applicationManager->background(); +} + +void Java_com_giderosmobile_android_player_GiderosApplication_nativeStart(JNIEnv* env, jclass cls) +{ + s_applicationManager->foreground(); +} + + +} + diff --git a/doc/automatic_image_resolution.html b/doc/automatic_image_resolution.html index f26711edf..3c174d4a6 100644 --- a/doc/automatic_image_resolution.html +++ b/doc/automatic_image_resolution.html @@ -1,208 +1,208 @@ - - - - - Gideros Documentation - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
- - -

Automatic Image Resolution

- - -
-
- -

With the introduction of iPad, iPhone 4 and variety of devices running Android, now there are multiple -resolutions that game developers should consider. To efficiently use texture memory and processing power -of GPUs, applications should use low-resolution images on devices with low-resolution screens -and high-resolution images on devices with high-resolution screens. With the help of automatic image resolution, -you can bundle both low and high resolution images together with your application and Gideros automatically selects -the best resolution according to your scaling.

- -

Automatic image resolution is directly related to automatic screen scaling. -For example, if your screen is automatically scaled by 2, then using the double-sized image -is the best choice in terms of quality and efficiency.

- -

Open the project “Hardware/Automatic Image Resolution” to see automatic image resolution -in action. Run this example multiple times by selecting different resolutions -on Gideros Player such as 320x480, 640x960 and 480x800. As you can see, for the different -resolutions, the original 200x200 image or high-resolution variants (300x300 and 400x400) are -selected and displayed automatically.

- -

Now right click on the project name and select “Properties…” to understand how we configure -automatic image resolution parameters:

- -

Project Properties

- -

In this example, our logical dimensions are 320x480 and scale mode is -Letterbox. So the scaling factor for a device with screen resolution 320x480 (older iPhones) is 1, -scaling factor for 480x960 (iPhone 4) is 2 and scaling factor for 480x800 (Samsung Galaxy S) is around 1.5.

- -

As you can see, we’ve configured image scales as:

- -

Images Scales

- -

So if you have a base image with resolution 200x200 with name “image.png”, you -provide these 3 images:

- -
    -
  • image.png (200x200)
  • -
  • image@1.5x.png (300x300)
  • -
  • image@2x.png (400x400)
  • -
- -

and let Gideros pick the appropriate one.

- -

Providing the alternative images (in our example, these are image@1.5x.png and image@2x.png) -is optional but you should always provide the base image (image.png). When Gideros -cannot find the alternative image to load, it loads the base image. Also size calculations -are done according to the size of the base image.

- -
- -
-

Design for High Resolution Devices

- -

In our example, we set the logical dimensions as 320x480 and provide higher-resolution -alternative images. On the other hand, it’s possible to set logical dimensions as 480x960 or 768x1024 -and provide lower-resolution images. In this case, we can configure the image scales like:

- -

Images Scales 2

- -

and provide alternative images with suffix “@half” as half-resolution of the original ones.

-
- -
-

Bitmap Fonts and Texture Packs

- -

Automatic image resolution works with bitmap fonts and texture packs also. Assume -you create a bitmap font with size 20 and export it as “font.txt” + “font.png”. -To obtain the double-resolution alternative, export the same font with size 40 as -“font@2x.txt” + “font@2x.png”.

- -

A texture pack is a large image which contains many smaller sub-images. There is -one thing to remember while creating multi-resolution texture packs: the names of -the sub-images must be same across the texture pack variants. A practical way to -achieve this is to store different resolution sub-image sets into their own -directories. You can check the sample “Hardware/Automatic Texture Pack Resolution” -about this.

-
-
-
-
- -
- - - - -
- -
- - - - - - - - - - - - - - - - + + + + + Gideros Documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ + +

Automatic Image Resolution

+ + +
+
+ +

With the introduction of iPad, iPhone 4 and variety of devices running Android, now there are multiple +resolutions that game developers should consider. To efficiently use texture memory and processing power +of GPUs, applications should use low-resolution images on devices with low-resolution screens +and high-resolution images on devices with high-resolution screens. With the help of automatic image resolution, +you can bundle both low and high resolution images together with your application and Gideros automatically selects +the best resolution according to your scaling.

+ +

Automatic image resolution is directly related to automatic screen scaling. +For example, if your screen is automatically scaled by 2, then using the double-sized image +is the best choice in terms of quality and efficiency.

+ +

Open the project “Hardware/Automatic Image Resolution” to see automatic image resolution +in action. Run this example multiple times by selecting different resolutions +on Gideros Player such as 320x480, 640x960 and 480x800. As you can see, for the different +resolutions, the original 200x200 image or high-resolution variants (300x300 and 400x400) are +selected and displayed automatically.

+ +

Now right click on the project name and select “Properties…” to understand how we configure +automatic image resolution parameters:

+ +

Project Properties

+ +

In this example, our logical dimensions are 320x480 and scale mode is +Letterbox. So the scaling factor for a device with screen resolution 320x480 (older iPhones) is 1, +scaling factor for 480x960 (iPhone 4) is 2 and scaling factor for 480x800 (Samsung Galaxy S) is around 1.5.

+ +

As you can see, we’ve configured image scales as:

+ +

Images Scales

+ +

So if you have a base image with resolution 200x200 with name “image.png”, you +provide these 3 images:

+ +
    +
  • image.png (200x200)
  • +
  • image@1.5x.png (300x300)
  • +
  • image@2x.png (400x400)
  • +
+ +

and let Gideros pick the appropriate one.

+ +

Providing the alternative images (in our example, these are image@1.5x.png and image@2x.png) +is optional but you should always provide the base image (image.png). When Gideros +cannot find the alternative image to load, it loads the base image. Also size calculations +are done according to the size of the base image.

+ +
+ +
+

Design for High Resolution Devices

+ +

In our example, we set the logical dimensions as 320x480 and provide higher-resolution +alternative images. On the other hand, it’s possible to set logical dimensions as 480x960 or 768x1024 +and provide lower-resolution images. In this case, we can configure the image scales like:

+ +

Images Scales 2

+ +

and provide alternative images with suffix “@half” as half-resolution of the original ones.

+
+ +
+

Bitmap Fonts and Texture Packs

+ +

Automatic image resolution works with bitmap fonts and texture packs also. Assume +you create a bitmap font with size 20 and export it as “font.txt” + “font.png”. +To obtain the double-resolution alternative, export the same font with size 40 as +“font@2x.txt” + “font@2x.png”.

+ +

A texture pack is a large image which contains many smaller sub-images. There is +one thing to remember while creating multi-resolution texture packs: the names of +the sub-images must be same across the texture pack variants. A practical way to +achieve this is to store different resolution sub-image sets into their own +directories. You can check the sample “Hardware/Automatic Texture Pack Resolution” +about this.

+
+
+
+
+ +
+ + + + +
+ +
+ + + + + + + + + + + + + + + + diff --git a/doc/automatic_screen_scaling.html b/doc/automatic_screen_scaling.html index 46661e99f..bdaf3737e 100644 --- a/doc/automatic_screen_scaling.html +++ b/doc/automatic_screen_scaling.html @@ -1,155 +1,155 @@ - - - - - Gideros Documentation - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
- -

Automatic Screen Scaling

- -

To handle a wide variety of resolutions, Gideros provides a functionaly called Automatic Screen Scaling.

- -

Before starting your project, you determine your logical resolution and position all your sprites -according to this. For example, if you determine your logical resolution as 320x480, your -upper left corner will be (0, 0), your lower right corner will be (319, 479) and the center coordinate -of your screen will be (160, 240). Then according to your scale mode, Gideros automaticly scales your -screen according to the real resolution of your hardware.

- -

There are 8 types of scaling modes:

- -
    -
  1. No scale: No scaling simply tells your application not to scale at all. In this mode, there’s no -scaling at all, and your stage sits on the upper left corner of the device screen.
  2. -
  3. No scale, center: This mode is similar to “no scale”, except one minor difference: Stage is centered -on the device screen.
  4. -
  5. Pixel perfect: This mode is similar to “No scale, center”, with a minor difference: Scale value is rounded -to values like 1/3, ½, 1, 2 or 3. This mode can be used in games which benefit from pixel art games - it guarantees -a crisp look and feel for screen sprites.
  6. -
  7. Letterbox: Preserving the aspect ratio, it scales the stage so it fits the content on the device screen. -There’s a possibility that blank areas may occur on the device. Mostly, developer keeps the background a bit “bigger” -in order to eliminate these blank areas and fill it with background.
  8. -
  9. Crop: This mode again does preserve the aspect ratio, and ensures that no blank areas are left on the screen. -Hence, some part of the background may be outside the visible area.
  10. -
  11. Stretch: The whole stage sits on the screen. Since x/y is not preserved, there’s a possibility that -aspect ratio might change.
  12. -
  13. Fit width: This mode fits the width of the stage, preserving the aspect ratio. It’s possible that -there might be blank areas at the top and bottom of the screen, or these areas may be outside the visible area. If -you have more than one screen in your application, and screen transition is from left to right (or vice versa), -then this mode is a perfect fit for you.
  14. -
  15. Fit height: Similar to fit width, this time guaranteeing to fit the height. Very suitable for shoot'em-up type games.
  16. -
- -
-
- -
- - - - -
- -
- - - - - - - - - - - - - - - - + + + + + Gideros Documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +

Automatic Screen Scaling

+ +

To handle a wide variety of resolutions, Gideros provides a functionaly called Automatic Screen Scaling.

+ +

Before starting your project, you determine your logical resolution and position all your sprites +according to this. For example, if you determine your logical resolution as 320x480, your +upper left corner will be (0, 0), your lower right corner will be (319, 479) and the center coordinate +of your screen will be (160, 240). Then according to your scale mode, Gideros automaticly scales your +screen according to the real resolution of your hardware.

+ +

There are 8 types of scaling modes:

+ +
    +
  1. No scale: No scaling simply tells your application not to scale at all. In this mode, there’s no +scaling at all, and your stage sits on the upper left corner of the device screen.
  2. +
  3. No scale, center: This mode is similar to “no scale”, except one minor difference: Stage is centered +on the device screen.
  4. +
  5. Pixel perfect: This mode is similar to “No scale, center”, with a minor difference: Scale value is rounded +to values like 1/3, ½, 1, 2 or 3. This mode can be used in games which benefit from pixel art games - it guarantees +a crisp look and feel for screen sprites.
  6. +
  7. Letterbox: Preserving the aspect ratio, it scales the stage so it fits the content on the device screen. +There’s a possibility that blank areas may occur on the device. Mostly, developer keeps the background a bit “bigger” +in order to eliminate these blank areas and fill it with background.
  8. +
  9. Crop: This mode again does preserve the aspect ratio, and ensures that no blank areas are left on the screen. +Hence, some part of the background may be outside the visible area.
  10. +
  11. Stretch: The whole stage sits on the screen. Since x/y is not preserved, there’s a possibility that +aspect ratio might change.
  12. +
  13. Fit width: This mode fits the width of the stage, preserving the aspect ratio. It’s possible that +there might be blank areas at the top and bottom of the screen, or these areas may be outside the visible area. If +you have more than one screen in your application, and screen transition is from left to right (or vice versa), +then this mode is a perfect fit for you.
  14. +
  15. Fit height: Similar to fit width, this time guaranteeing to fit the height. Very suitable for shoot'em-up type games.
  16. +
+ +
+
+ +
+ + + + +
+ +
+ + + + + + + + + + + + + + + + diff --git a/doc/classes_in_gideros.html b/doc/classes_in_gideros.html index 4f7d62612..e3d5904df 100644 --- a/doc/classes_in_gideros.html +++ b/doc/classes_in_gideros.html @@ -1,208 +1,208 @@ - - - - - Gideros Documentation - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-

Classes in Gideros

- - -
-
- -

Lua does not support classes the way that languages like C++, Java and -ActionScript do. But Lua is a multi-paradigm language and have roots from -prototype-based languages. In Lua, each object can define its own behaviour -through metatables. Therefore, it is possible to emulate OO programming and -classes in Lua.

- -

(For the detailed discussion of object oriented programming in Lua, please refer to http://www.lua.org/pil/16.html)

- -

Gideros follows the same paradigm in its API design. Each instance created by -Gideros API is a Lua table with a metatable attached.

- -
- -
- -

Creating Instances

- -

Instances in Gideros is created through new function. For example, to create -a Sprite, Texture, Bitmap and a Timer instance:

- -
local sprite = Sprite.new()
-local texture = Texture.new("image.png")
-local bitmap = Bitmap.new(texture)
-local timer = Timer.new(1000, 0)
-
- -
- -
-

Inheritance

- -

Core.class function is used to create your own classes through inheritance. You -can create your own classes like:

- -
MyClass = Core.class()
-
- -

or inherit from Gideros API’s own classes (EventDispatcher, Sprite, etc.). For example, you can create your EventDispatcher class as:

- -
MyEventDispatcher = Core.class(EventDispatcher)
-
- -

By using Inheritance, you can design and implement the visual elements of your game separately:

- -
StartButton = Core.class(Sprite)     -- create your own start button class
-Menu = Core.class(Sprite)            -- create your own menu class
-
-Player = Core.class(Sprite)          -- create your own player class
-
-function Player:walk()
-    -- walk logic
-end
-
-function Player:jump()
-    -- jump logic
-end
-
-stage:addChild(Player.new())            -- create and add a player instance to the stage
-
- -

When an instance is created, init function is called to do the initialization:

- -
Player = Core.class(Sprite)
-
-function Player:init()
-    -- do the initialization of Player instance
-    self.health = 100
-    self.speed = 3
-end
-
-local player = Player.new()     -- after Player instance is created, init function is called
-
- -

Whether to use inheritance or not is related to your programming taste. It’s possible to implement -a whole game without creating custom classes. You can refer to “Jumping Ball” and “Jumping Balls” examples -to see the difference between designing your code with classes or not.

-
-
-
-
- -
- - - - -
- -
- - - - - - - - - - - - - - - - + + + + + Gideros Documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+

Classes in Gideros

+ + +
+
+ +

Lua does not support classes the way that languages like C++, Java and +ActionScript do. But Lua is a multi-paradigm language and have roots from +prototype-based languages. In Lua, each object can define its own behaviour +through metatables. Therefore, it is possible to emulate OO programming and +classes in Lua.

+ +

(For the detailed discussion of object oriented programming in Lua, please refer to http://www.lua.org/pil/16.html)

+ +

Gideros follows the same paradigm in its API design. Each instance created by +Gideros API is a Lua table with a metatable attached.

+ +
+ +
+ +

Creating Instances

+ +

Instances in Gideros is created through new function. For example, to create +a Sprite, Texture, Bitmap and a Timer instance:

+ +
local sprite = Sprite.new()
+local texture = Texture.new("image.png")
+local bitmap = Bitmap.new(texture)
+local timer = Timer.new(1000, 0)
+
+ +
+ +
+

Inheritance

+ +

Core.class function is used to create your own classes through inheritance. You +can create your own classes like:

+ +
MyClass = Core.class()
+
+ +

or inherit from Gideros API’s own classes (EventDispatcher, Sprite, etc.). For example, you can create your EventDispatcher class as:

+ +
MyEventDispatcher = Core.class(EventDispatcher)
+
+ +

By using Inheritance, you can design and implement the visual elements of your game separately:

+ +
StartButton = Core.class(Sprite)     -- create your own start button class
+Menu = Core.class(Sprite)            -- create your own menu class
+
+Player = Core.class(Sprite)          -- create your own player class
+
+function Player:walk()
+    -- walk logic
+end
+
+function Player:jump()
+    -- jump logic
+end
+
+stage:addChild(Player.new())            -- create and add a player instance to the stage
+
+ +

When an instance is created, init function is called to do the initialization:

+ +
Player = Core.class(Sprite)
+
+function Player:init()
+    -- do the initialization of Player instance
+    self.health = 100
+    self.speed = 3
+end
+
+local player = Player.new()     -- after Player instance is created, init function is called
+
+ +

Whether to use inheritance or not is related to your programming taste. It’s possible to implement +a whole game without creating custom classes. You can refer to “Jumping Ball” and “Jumping Balls” examples +to see the difference between designing your code with classes or not.

+
+
+
+
+ +
+ + + + +
+ +
+ + + + + + + + + + + + + + + + diff --git a/doc/css/bootstrap.css b/doc/css/bootstrap.css index 6fe343896..a2fb462a0 100644 --- a/doc/css/bootstrap.css +++ b/doc/css/bootstrap.css @@ -1,5652 +1,5652 @@ -/*! - * Bootstrap v2.2.2 - * - * Copyright 2012 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 @twitter by @mdo and @fat. - */ -.clearfix { - *zoom: 1; -} -.clearfix:before, -.clearfix:after { - display: table; - content: ""; - line-height: 0; -} -.clearfix:after { - clear: both; -} -.hide-text { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} -.input-block-level { - display: block; - width: 100%; - min-height: 30px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -nav, -section { - display: block; -} -audio, -canvas, -video { - display: inline-block; - *display: inline; - *zoom: 1; -} -audio:not([controls]) { - display: none; -} -html { - font-size: 100%; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; -} -a:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -a:hover, -a:active { - outline: 0; -} -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} -sup { - top: -0.5em; -} -sub { - bottom: -0.25em; -} -img { - /* Responsive images (ensure images don't scale beyond their parents) */ - - max-width: 100%; - /* Part 1: Set a maxium relative to the parent */ - - width: auto\9; - /* IE7-8 need help adjusting responsive images */ - - height: auto; - /* Part 2: Scale the height according to the width, otherwise you get stretching */ - - vertical-align: middle; - border: 0; - -ms-interpolation-mode: bicubic; -} -#map_canvas img, -.google-maps img { - max-width: none; -} -button, -input, -select, -textarea { - margin: 0; - font-size: 100%; - vertical-align: middle; -} -button, -input { - *overflow: visible; - line-height: normal; -} -button::-moz-focus-inner, -input::-moz-focus-inner { - padding: 0; - border: 0; -} -button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; - cursor: pointer; -} -label, -select, -button, -input[type="button"], -input[type="reset"], -input[type="submit"], -input[type="radio"], -input[type="checkbox"] { - cursor: pointer; -} -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-decoration, -input[type="search"]::-webkit-search-cancel-button { - -webkit-appearance: none; -} -textarea { - overflow: auto; - vertical-align: top; -} -@media print { - * { - text-shadow: none !important; - color: #000 !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: 0.5cm; - } - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - h2, - h3 { - page-break-after: avoid; - } -} -body { - margin: 0; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - line-height: 20px; - color: #333333; - background-color: #ffffff; -} -a { - color: #0088cc; - text-decoration: none; -} -a:hover { - color: #005580; - text-decoration: underline; -} -.img-rounded { - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} -.img-polaroid { - padding: 4px; - background-color: #fff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); -} -.img-circle { - -webkit-border-radius: 500px; - -moz-border-radius: 500px; - border-radius: 500px; -} -.row { - margin-left: -20px; - *zoom: 1; -} -.row:before, -.row:after { - display: table; - content: ""; - line-height: 0; -} -.row:after { - clear: both; -} -[class*="span"] { - float: left; - min-height: 1px; - margin-left: 20px; -} -.container, -.navbar-static-top .container, -.navbar-fixed-top .container, -.navbar-fixed-bottom .container { - width: 940px; -} -.span12 { - width: 940px; -} -.span11 { - width: 860px; -} -.span10 { - width: 780px; -} -.span9 { - width: 700px; -} -.span8 { - width: 620px; -} -.span7 { - width: 540px; -} -.span6 { - width: 460px; -} -.span5 { - width: 380px; -} -.span4 { - width: 300px; -} -.span3 { - width: 220px; -} -.span2 { - width: 140px; -} -.span1 { - width: 60px; -} -.offset12 { - margin-left: 980px; -} -.offset11 { - margin-left: 900px; -} -.offset10 { - margin-left: 820px; -} -.offset9 { - margin-left: 740px; -} -.offset8 { - margin-left: 660px; -} -.offset7 { - margin-left: 580px; -} -.offset6 { - margin-left: 500px; -} -.offset5 { - margin-left: 420px; -} -.offset4 { - margin-left: 340px; -} -.offset3 { - margin-left: 260px; -} -.offset2 { - margin-left: 180px; -} -.offset1 { - margin-left: 100px; -} -.row-fluid { - width: 100%; - *zoom: 1; -} -.row-fluid:before, -.row-fluid:after { - display: table; - content: ""; - line-height: 0; -} -.row-fluid:after { - clear: both; -} -.row-fluid [class*="span"] { - display: block; - width: 100%; - min-height: 30px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - float: left; - margin-left: 2.127659574468085%; - *margin-left: 2.074468085106383%; -} -.row-fluid [class*="span"]:first-child { - margin-left: 0; -} -.row-fluid .controls-row [class*="span"] + [class*="span"] { - margin-left: 2.127659574468085%; -} -.row-fluid .span12 { - width: 100%; - *width: 99.94680851063829%; -} -.row-fluid .span11 { - width: 91.48936170212765%; - *width: 91.43617021276594%; -} -.row-fluid .span10 { - width: 82.97872340425532%; - *width: 82.92553191489361%; -} -.row-fluid .span9 { - width: 74.46808510638297%; - *width: 74.41489361702126%; -} -.row-fluid .span8 { - width: 65.95744680851064%; - *width: 65.90425531914893%; -} -.row-fluid .span7 { - width: 57.44680851063829%; - *width: 57.39361702127659%; -} -.row-fluid .span6 { - width: 48.93617021276595%; - *width: 48.88297872340425%; -} -.row-fluid .span5 { - width: 40.42553191489362%; - *width: 40.37234042553192%; -} -.row-fluid .span4 { - width: 31.914893617021278%; - *width: 31.861702127659576%; -} -.row-fluid .span3 { - width: 23.404255319148934%; - *width: 23.351063829787233%; -} -.row-fluid .span2 { - width: 14.893617021276595%; - *width: 14.840425531914894%; -} -.row-fluid .span1 { - width: 6.382978723404255%; - *width: 6.329787234042553%; -} -.row-fluid .offset12 { - margin-left: 104.25531914893617%; - *margin-left: 104.14893617021275%; -} -.row-fluid .offset12:first-child { - margin-left: 102.12765957446808%; - *margin-left: 102.02127659574467%; -} -.row-fluid .offset11 { - margin-left: 95.74468085106382%; - *margin-left: 95.6382978723404%; -} -.row-fluid .offset11:first-child { - margin-left: 93.61702127659574%; - *margin-left: 93.51063829787232%; -} -.row-fluid .offset10 { - margin-left: 87.23404255319149%; - *margin-left: 87.12765957446807%; -} -.row-fluid .offset10:first-child { - margin-left: 85.1063829787234%; - *margin-left: 84.99999999999999%; -} -.row-fluid .offset9 { - margin-left: 78.72340425531914%; - *margin-left: 78.61702127659572%; -} -.row-fluid .offset9:first-child { - margin-left: 76.59574468085106%; - *margin-left: 76.48936170212764%; -} -.row-fluid .offset8 { - margin-left: 70.2127659574468%; - *margin-left: 70.10638297872339%; -} -.row-fluid .offset8:first-child { - margin-left: 68.08510638297872%; - *margin-left: 67.9787234042553%; -} -.row-fluid .offset7 { - margin-left: 61.70212765957446%; - *margin-left: 61.59574468085106%; -} -.row-fluid .offset7:first-child { - margin-left: 59.574468085106375%; - *margin-left: 59.46808510638297%; -} -.row-fluid .offset6 { - margin-left: 53.191489361702125%; - *margin-left: 53.085106382978715%; -} -.row-fluid .offset6:first-child { - margin-left: 51.063829787234035%; - *margin-left: 50.95744680851063%; -} -.row-fluid .offset5 { - margin-left: 44.68085106382979%; - *margin-left: 44.57446808510638%; -} -.row-fluid .offset5:first-child { - margin-left: 42.5531914893617%; - *margin-left: 42.4468085106383%; -} -.row-fluid .offset4 { - margin-left: 36.170212765957444%; - *margin-left: 36.06382978723405%; -} -.row-fluid .offset4:first-child { - margin-left: 34.04255319148936%; - *margin-left: 33.93617021276596%; -} -.row-fluid .offset3 { - margin-left: 27.659574468085104%; - *margin-left: 27.5531914893617%; -} -.row-fluid .offset3:first-child { - margin-left: 25.53191489361702%; - *margin-left: 25.425531914893618%; -} -.row-fluid .offset2 { - margin-left: 19.148936170212764%; - *margin-left: 19.04255319148936%; -} -.row-fluid .offset2:first-child { - margin-left: 17.02127659574468%; - *margin-left: 16.914893617021278%; -} -.row-fluid .offset1 { - margin-left: 10.638297872340425%; - *margin-left: 10.53191489361702%; -} -.row-fluid .offset1:first-child { - margin-left: 8.51063829787234%; - *margin-left: 8.404255319148938%; -} -[class*="span"].hide, -.row-fluid [class*="span"].hide { - display: none; -} -[class*="span"].pull-right, -.row-fluid [class*="span"].pull-right { - float: right; -} -.container { - margin-right: auto; - margin-left: auto; - *zoom: 1; -} -.container:before, -.container:after { - display: table; - content: ""; - line-height: 0; -} -.container:after { - clear: both; -} -.container-fluid { - padding-right: 20px; - padding-left: 20px; - *zoom: 1; -} -.container-fluid:before, -.container-fluid:after { - display: table; - content: ""; - line-height: 0; -} -.container-fluid:after { - clear: both; -} -p { - margin: 0 0 10px; -} -.lead { - margin-bottom: 20px; - font-size: 21px; - font-weight: 200; - line-height: 30px; -} -small { - font-size: 85%; -} -strong { - font-weight: bold; -} -em { - font-style: italic; -} -cite { - font-style: normal; -} -.muted { - color: #999999; -} -a.muted:hover { - color: #808080; -} -.text-warning { - color: #c09853; -} -a.text-warning:hover { - color: #a47e3c; -} -.text-error { - color: #b94a48; -} -a.text-error:hover { - color: #953b39; -} -.text-info { - color: #3a87ad; -} -a.text-info:hover { - color: #2d6987; -} -.text-success { - color: #468847; -} -a.text-success:hover { - color: #356635; -} -h1, -h2, -h3, -h4, -h5, -h6 { - margin: 10px 0; - font-family: inherit; - font-weight: bold; - line-height: 20px; - color: inherit; - text-rendering: optimizelegibility; -} -h1 small, -h2 small, -h3 small, -h4 small, -h5 small, -h6 small { - font-weight: normal; - line-height: 1; - color: #999999; -} -h1, -h2, -h3 { - line-height: 40px; -} -h1 { - font-size: 38.5px; -} -h2 { - font-size: 31.5px; -} -h3 { - font-size: 24.5px; -} -h4 { - font-size: 17.5px; -} -h5 { - font-size: 14px; -} -h6 { - font-size: 11.9px; -} -h1 small { - font-size: 24.5px; -} -h2 small { - font-size: 17.5px; -} -h3 small { - font-size: 14px; -} -h4 small { - font-size: 14px; -} -.page-header { - padding-bottom: 9px; - margin: 20px 0 30px; - border-bottom: 1px solid #eeeeee; -} -ul, -ol { - padding: 0; - margin: 0 0 10px 25px; -} -ul ul, -ul ol, -ol ol, -ol ul { - margin-bottom: 0; -} -li { - line-height: 20px; -} -ul.unstyled, -ol.unstyled { - margin-left: 0; - list-style: none; -} -ul.inline, -ol.inline { - margin-left: 0; - list-style: none; -} -ul.inline > li, -ol.inline > li { - display: inline-block; - padding-left: 5px; - padding-right: 5px; -} -dl { - margin-bottom: 20px; -} -dt, -dd { - line-height: 20px; -} -dt { - font-weight: bold; -} -dd { - margin-left: 10px; -} -.dl-horizontal { - *zoom: 1; -} -.dl-horizontal:before, -.dl-horizontal:after { - display: table; - content: ""; - line-height: 0; -} -.dl-horizontal:after { - clear: both; -} -.dl-horizontal dt { - float: left; - width: 160px; - clear: left; - text-align: right; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -.dl-horizontal dd { - margin-left: 180px; -} -hr { - margin: 20px 0; - border: 0; - border-top: 1px solid #eeeeee; - border-bottom: 1px solid #ffffff; -} -abbr[title], -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted #999999; -} -abbr.initialism { - font-size: 90%; - text-transform: uppercase; -} -blockquote { - padding: 0 0 0 15px; - margin: 0 0 20px; - border-left: 5px solid #eeeeee; -} -blockquote p { - margin-bottom: 0; - font-size: 16px; - font-weight: 300; - line-height: 25px; -} -blockquote small { - display: block; - line-height: 20px; - color: #999999; -} -blockquote small:before { - content: '\2014 \00A0'; -} -blockquote.pull-right { - float: 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: 20px; -} -code, -pre { - padding: 0 3px 2px; - font-family: Monaco, Menlo, Consolas, "Courier New", monospace; - font-size: 12px; - color: #333333; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -code { - padding: 2px 4px; - color: #d14; - background-color: #f7f7f9; - border: 1px solid #e1e1e8; - white-space: nowrap; -} -pre { - display: block; - padding: 9.5px; - margin: 0 0 10px; - font-size: 13px; - line-height: 20px; - word-break: break-all; - word-wrap: break-word; - white-space: pre; - white-space: pre-wrap; - background-color: #f5f5f5; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.15); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -pre.prettyprint { - margin-bottom: 20px; -} -pre code { - padding: 0; - color: inherit; - white-space: pre; - white-space: pre-wrap; - background-color: transparent; - border: 0; -} -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} -.label, -.badge { - display: inline-block; - padding: 2px 4px; - font-size: 11.844px; - font-weight: bold; - line-height: 14px; - color: #ffffff; - vertical-align: baseline; - white-space: nowrap; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #999999; -} -.label { - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.badge { - padding-left: 9px; - padding-right: 9px; - -webkit-border-radius: 9px; - -moz-border-radius: 9px; - border-radius: 9px; -} -.label:empty, -.badge:empty { - display: none; -} -a.label:hover, -a.badge:hover { - color: #ffffff; - text-decoration: none; - cursor: pointer; -} -.label-important, -.badge-important { - background-color: #b94a48; -} -.label-important[href], -.badge-important[href] { - background-color: #953b39; -} -.label-warning, -.badge-warning { - background-color: #f89406; -} -.label-warning[href], -.badge-warning[href] { - background-color: #c67605; -} -.label-success, -.badge-success { - background-color: #468847; -} -.label-success[href], -.badge-success[href] { - background-color: #356635; -} -.label-info, -.badge-info { - background-color: #3a87ad; -} -.label-info[href], -.badge-info[href] { - background-color: #2d6987; -} -.label-inverse, -.badge-inverse { - background-color: #333333; -} -.label-inverse[href], -.badge-inverse[href] { - background-color: #1a1a1a; -} -.btn .label, -.btn .badge { - position: relative; - top: -1px; -} -.btn-mini .label, -.btn-mini .badge { - top: 0; -} -table { - max-width: 100%; - background-color: transparent; - border-collapse: collapse; - border-spacing: 0; -} -.table { - width: 100%; - margin-bottom: 20px; -} -.table th, -.table td { - padding: 8px; - line-height: 20px; - text-align: left; - vertical-align: top; - border-top: 1px solid #dddddd; -} -.table th { - font-weight: bold; -} -.table thead th { - vertical-align: bottom; -} -.table caption + thead tr:first-child th, -.table caption + thead tr:first-child td, -.table colgroup + thead tr:first-child th, -.table colgroup + thead tr:first-child td, -.table thead:first-child tr:first-child th, -.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 th, -.table-condensed td { - padding: 4px 5px; -} -.table-bordered { - border: 1px solid #dddddd; - border-collapse: separate; - *border-collapse: collapse; - border-left: 0; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.table-bordered th, -.table-bordered td { - border-left: 1px solid #dddddd; -} -.table-bordered caption + thead tr:first-child th, -.table-bordered caption + tbody tr:first-child th, -.table-bordered caption + tbody tr:first-child td, -.table-bordered colgroup + thead tr:first-child th, -.table-bordered colgroup + tbody tr:first-child th, -.table-bordered colgroup + tbody tr:first-child td, -.table-bordered thead:first-child tr:first-child th, -.table-bordered tbody:first-child tr:first-child th, -.table-bordered tbody:first-child tr:first-child td { - border-top: 0; -} -.table-bordered thead:first-child tr:first-child > th:first-child, -.table-bordered tbody:first-child tr:first-child > td:first-child { - -webkit-border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; - border-top-left-radius: 4px; -} -.table-bordered thead:first-child tr:first-child > th:last-child, -.table-bordered tbody:first-child tr:first-child > td:last-child { - -webkit-border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; - border-top-right-radius: 4px; -} -.table-bordered thead:last-child tr:last-child > th:first-child, -.table-bordered tbody:last-child tr:last-child > td:first-child, -.table-bordered tfoot:last-child tr:last-child > td:first-child { - -webkit-border-bottom-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - border-bottom-left-radius: 4px; -} -.table-bordered thead:last-child tr:last-child > th:last-child, -.table-bordered tbody:last-child tr:last-child > td:last-child, -.table-bordered tfoot:last-child tr:last-child > td:last-child { - -webkit-border-bottom-right-radius: 4px; - -moz-border-radius-bottomright: 4px; - border-bottom-right-radius: 4px; -} -.table-bordered tfoot + tbody:last-child tr:last-child td:first-child { - -webkit-border-bottom-left-radius: 0; - -moz-border-radius-bottomleft: 0; - border-bottom-left-radius: 0; -} -.table-bordered tfoot + tbody:last-child tr:last-child td:last-child { - -webkit-border-bottom-right-radius: 0; - -moz-border-radius-bottomright: 0; - border-bottom-right-radius: 0; -} -.table-bordered caption + thead tr:first-child th:first-child, -.table-bordered caption + tbody tr:first-child td:first-child, -.table-bordered colgroup + thead tr:first-child th:first-child, -.table-bordered colgroup + tbody tr:first-child td:first-child { - -webkit-border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; - border-top-left-radius: 4px; -} -.table-bordered caption + thead tr:first-child th:last-child, -.table-bordered caption + tbody tr:first-child td:last-child, -.table-bordered colgroup + thead tr:first-child th:last-child, -.table-bordered colgroup + tbody tr:first-child td:last-child { - -webkit-border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; - border-top-right-radius: 4px; -} -.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 td[class*="span"], -table th[class*="span"], -.row-fluid table td[class*="span"], -.row-fluid table th[class*="span"] { - display: table-cell; - float: none; - margin-left: 0; -} -.table td.span1, -.table th.span1 { - float: none; - width: 44px; - margin-left: 0; -} -.table td.span2, -.table th.span2 { - float: none; - width: 124px; - margin-left: 0; -} -.table td.span3, -.table th.span3 { - float: none; - width: 204px; - margin-left: 0; -} -.table td.span4, -.table th.span4 { - float: none; - width: 284px; - margin-left: 0; -} -.table td.span5, -.table th.span5 { - float: none; - width: 364px; - margin-left: 0; -} -.table td.span6, -.table th.span6 { - float: none; - width: 444px; - margin-left: 0; -} -.table td.span7, -.table th.span7 { - float: none; - width: 524px; - margin-left: 0; -} -.table td.span8, -.table th.span8 { - float: none; - width: 604px; - margin-left: 0; -} -.table td.span9, -.table th.span9 { - float: none; - width: 684px; - margin-left: 0; -} -.table td.span10, -.table th.span10 { - float: none; - width: 764px; - margin-left: 0; -} -.table td.span11, -.table th.span11 { - float: none; - width: 844px; - margin-left: 0; -} -.table td.span12, -.table th.span12 { - float: none; - width: 924px; - margin-left: 0; -} -.table tbody tr.success td { - background-color: #dff0d8; -} -.table tbody tr.error td { - background-color: #f2dede; -} -.table tbody tr.warning td { - background-color: #fcf8e3; -} -.table tbody tr.info td { - background-color: #d9edf7; -} -.table-hover tbody tr.success:hover td { - background-color: #d0e9c6; -} -.table-hover tbody tr.error:hover td { - background-color: #ebcccc; -} -.table-hover tbody tr.warning:hover td { - background-color: #faf2cc; -} -.table-hover tbody tr.info:hover td { - background-color: #c4e3f3; -} -form { - margin: 0 0 20px; -} -fieldset { - padding: 0; - margin: 0; - border: 0; -} -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 20px; - font-size: 21px; - line-height: 40px; - color: #333333; - border: 0; - border-bottom: 1px solid #e5e5e5; -} -legend small { - font-size: 15px; - color: #999999; -} -label, -input, -button, -select, -textarea { - font-size: 14px; - font-weight: normal; - line-height: 20px; -} -input, -button, -select, -textarea { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -} -label { - display: block; - margin-bottom: 5px; -} -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"], -.uneditable-input { - display: inline-block; - height: 20px; - padding: 4px 6px; - margin-bottom: 10px; - font-size: 14px; - line-height: 20px; - color: #555555; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - vertical-align: middle; -} -input, -textarea, -.uneditable-input { - width: 206px; -} -textarea { - height: auto; -} -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"], -.uneditable-input { - background-color: #ffffff; - border: 1px solid #cccccc; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -webkit-transition: border linear .2s, box-shadow linear .2s; - -moz-transition: border linear .2s, box-shadow linear .2s; - -o-transition: border linear .2s, box-shadow linear .2s; - transition: border linear .2s, box-shadow linear .2s; -} -textarea:focus, -input[type="text"]:focus, -input[type="password"]:focus, -input[type="datetime"]:focus, -input[type="datetime-local"]:focus, -input[type="date"]:focus, -input[type="month"]:focus, -input[type="time"]:focus, -input[type="week"]:focus, -input[type="number"]:focus, -input[type="email"]:focus, -input[type="url"]:focus, -input[type="search"]:focus, -input[type="tel"]:focus, -input[type="color"]:focus, -.uneditable-input:focus { - border-color: rgba(82, 168, 236, 0.8); - outline: 0; - outline: thin dotted \9; - /* IE6-9 */ - - -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6); - -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6); - box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6); -} -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - *margin-top: 0; - /* IE7 */ - - margin-top: 1px \9; - /* IE8-9 */ - - line-height: normal; -} -input[type="file"], -input[type="image"], -input[type="submit"], -input[type="reset"], -input[type="button"], -input[type="radio"], -input[type="checkbox"] { - width: auto; -} -select, -input[type="file"] { - height: 30px; - /* In IE7, the height of the select element cannot be changed by height, only font-size */ - - *margin-top: 4px; - /* For IE7, add top margin to align select with labels */ - - line-height: 30px; -} -select { - width: 220px; - border: 1px solid #cccccc; - background-color: #ffffff; -} -select[multiple], -select[size] { - height: auto; -} -select:focus, -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.uneditable-input, -.uneditable-textarea { - color: #999999; - background-color: #fcfcfc; - border-color: #cccccc; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - cursor: not-allowed; -} -.uneditable-input { - overflow: hidden; - white-space: nowrap; -} -.uneditable-textarea { - width: auto; - height: auto; -} -input:-moz-placeholder, -textarea:-moz-placeholder { - color: #999999; -} -input:-ms-input-placeholder, -textarea:-ms-input-placeholder { - color: #999999; -} -input::-webkit-input-placeholder, -textarea::-webkit-input-placeholder { - color: #999999; -} -.radio, -.checkbox { - min-height: 20px; - padding-left: 20px; -} -.radio input[type="radio"], -.checkbox input[type="checkbox"] { - float: left; - margin-left: -20px; -} -.controls > .radio:first-child, -.controls > .checkbox:first-child { - padding-top: 5px; -} -.radio.inline, -.checkbox.inline { - display: inline-block; - padding-top: 5px; - margin-bottom: 0; - vertical-align: middle; -} -.radio.inline + .radio.inline, -.checkbox.inline + .checkbox.inline { - margin-left: 10px; -} -.input-mini { - width: 60px; -} -.input-small { - width: 90px; -} -.input-medium { - width: 150px; -} -.input-large { - width: 210px; -} -.input-xlarge { - width: 270px; -} -.input-xxlarge { - width: 530px; -} -input[class*="span"], -select[class*="span"], -textarea[class*="span"], -.uneditable-input[class*="span"], -.row-fluid input[class*="span"], -.row-fluid select[class*="span"], -.row-fluid textarea[class*="span"], -.row-fluid .uneditable-input[class*="span"] { - float: none; - margin-left: 0; -} -.input-append input[class*="span"], -.input-append .uneditable-input[class*="span"], -.input-prepend input[class*="span"], -.input-prepend .uneditable-input[class*="span"], -.row-fluid input[class*="span"], -.row-fluid select[class*="span"], -.row-fluid textarea[class*="span"], -.row-fluid .uneditable-input[class*="span"], -.row-fluid .input-prepend [class*="span"], -.row-fluid .input-append [class*="span"] { - display: inline-block; -} -input, -textarea, -.uneditable-input { - margin-left: 0; -} -.controls-row [class*="span"] + [class*="span"] { - margin-left: 20px; -} -input.span12, textarea.span12, .uneditable-input.span12 { - width: 926px; -} -input.span11, textarea.span11, .uneditable-input.span11 { - width: 846px; -} -input.span10, textarea.span10, .uneditable-input.span10 { - width: 766px; -} -input.span9, textarea.span9, .uneditable-input.span9 { - width: 686px; -} -input.span8, textarea.span8, .uneditable-input.span8 { - width: 606px; -} -input.span7, textarea.span7, .uneditable-input.span7 { - width: 526px; -} -input.span6, textarea.span6, .uneditable-input.span6 { - width: 446px; -} -input.span5, textarea.span5, .uneditable-input.span5 { - width: 366px; -} -input.span4, textarea.span4, .uneditable-input.span4 { - width: 286px; -} -input.span3, textarea.span3, .uneditable-input.span3 { - width: 206px; -} -input.span2, textarea.span2, .uneditable-input.span2 { - width: 126px; -} -input.span1, textarea.span1, .uneditable-input.span1 { - width: 46px; -} -.controls-row { - *zoom: 1; -} -.controls-row:before, -.controls-row:after { - display: table; - content: ""; - line-height: 0; -} -.controls-row:after { - clear: both; -} -.controls-row [class*="span"], -.row-fluid .controls-row [class*="span"] { - float: left; -} -.controls-row .checkbox[class*="span"], -.controls-row .radio[class*="span"] { - padding-top: 5px; -} -input[disabled], -select[disabled], -textarea[disabled], -input[readonly], -select[readonly], -textarea[readonly] { - cursor: not-allowed; - background-color: #eeeeee; -} -input[type="radio"][disabled], -input[type="checkbox"][disabled], -input[type="radio"][readonly], -input[type="checkbox"][readonly] { - background-color: transparent; -} -.control-group.warning .control-label, -.control-group.warning .help-block, -.control-group.warning .help-inline { - color: #c09853; -} -.control-group.warning .checkbox, -.control-group.warning .radio, -.control-group.warning input, -.control-group.warning select, -.control-group.warning textarea { - color: #c09853; -} -.control-group.warning input, -.control-group.warning select, -.control-group.warning textarea { - border-color: #c09853; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.control-group.warning input:focus, -.control-group.warning select:focus, -.control-group.warning textarea:focus { - border-color: #a47e3c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; - -moz-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; -} -.control-group.warning .input-prepend .add-on, -.control-group.warning .input-append .add-on { - color: #c09853; - background-color: #fcf8e3; - border-color: #c09853; -} -.control-group.error .control-label, -.control-group.error .help-block, -.control-group.error .help-inline { - color: #b94a48; -} -.control-group.error .checkbox, -.control-group.error .radio, -.control-group.error input, -.control-group.error select, -.control-group.error textarea { - color: #b94a48; -} -.control-group.error input, -.control-group.error select, -.control-group.error textarea { - border-color: #b94a48; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.control-group.error input:focus, -.control-group.error select:focus, -.control-group.error textarea:focus { - border-color: #953b39; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; - -moz-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; -} -.control-group.error .input-prepend .add-on, -.control-group.error .input-append .add-on { - color: #b94a48; - background-color: #f2dede; - border-color: #b94a48; -} -.control-group.success .control-label, -.control-group.success .help-block, -.control-group.success .help-inline { - color: #468847; -} -.control-group.success .checkbox, -.control-group.success .radio, -.control-group.success input, -.control-group.success select, -.control-group.success textarea { - color: #468847; -} -.control-group.success input, -.control-group.success select, -.control-group.success textarea { - border-color: #468847; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.control-group.success input:focus, -.control-group.success select:focus, -.control-group.success textarea:focus { - border-color: #356635; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; - -moz-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; -} -.control-group.success .input-prepend .add-on, -.control-group.success .input-append .add-on { - color: #468847; - background-color: #dff0d8; - border-color: #468847; -} -.control-group.info .control-label, -.control-group.info .help-block, -.control-group.info .help-inline { - color: #3a87ad; -} -.control-group.info .checkbox, -.control-group.info .radio, -.control-group.info input, -.control-group.info select, -.control-group.info textarea { - color: #3a87ad; -} -.control-group.info input, -.control-group.info select, -.control-group.info textarea { - border-color: #3a87ad; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.control-group.info input:focus, -.control-group.info select:focus, -.control-group.info textarea:focus { - border-color: #2d6987; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; -} -.control-group.info .input-prepend .add-on, -.control-group.info .input-append .add-on { - color: #3a87ad; - background-color: #d9edf7; - border-color: #3a87ad; -} -input:focus:invalid, -textarea:focus:invalid, -select:focus:invalid { - color: #b94a48; - border-color: #ee5f5b; -} -input:focus:invalid:focus, -textarea:focus:invalid:focus, -select:focus:invalid:focus { - border-color: #e9322d; - -webkit-box-shadow: 0 0 6px #f8b9b7; - -moz-box-shadow: 0 0 6px #f8b9b7; - box-shadow: 0 0 6px #f8b9b7; -} -.form-actions { - padding: 19px 20px 20px; - margin-top: 20px; - margin-bottom: 20px; - background-color: #f5f5f5; - border-top: 1px solid #e5e5e5; - *zoom: 1; -} -.form-actions:before, -.form-actions:after { - display: table; - content: ""; - line-height: 0; -} -.form-actions:after { - clear: both; -} -.help-block, -.help-inline { - color: #595959; -} -.help-block { - display: block; - margin-bottom: 10px; -} -.help-inline { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - vertical-align: middle; - padding-left: 5px; -} -.input-append, -.input-prepend { - margin-bottom: 5px; - font-size: 0; - white-space: nowrap; -} -.input-append input, -.input-prepend input, -.input-append select, -.input-prepend select, -.input-append .uneditable-input, -.input-prepend .uneditable-input, -.input-append .dropdown-menu, -.input-prepend .dropdown-menu { - font-size: 14px; -} -.input-append input, -.input-prepend input, -.input-append select, -.input-prepend select, -.input-append .uneditable-input, -.input-prepend .uneditable-input { - position: relative; - margin-bottom: 0; - *margin-left: 0; - vertical-align: top; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} -.input-append input:focus, -.input-prepend input:focus, -.input-append select:focus, -.input-prepend select:focus, -.input-append .uneditable-input:focus, -.input-prepend .uneditable-input:focus { - z-index: 2; -} -.input-append .add-on, -.input-prepend .add-on { - display: inline-block; - width: auto; - height: 20px; - min-width: 16px; - padding: 4px 5px; - font-size: 14px; - font-weight: normal; - line-height: 20px; - text-align: center; - text-shadow: 0 1px 0 #ffffff; - background-color: #eeeeee; - border: 1px solid #ccc; -} -.input-append .add-on, -.input-prepend .add-on, -.input-append .btn, -.input-prepend .btn, -.input-append .btn-group > .dropdown-toggle, -.input-prepend .btn-group > .dropdown-toggle { - vertical-align: top; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.input-append .active, -.input-prepend .active { - background-color: #a9dba9; - border-color: #46a546; -} -.input-prepend .add-on, -.input-prepend .btn { - margin-right: -1px; -} -.input-prepend .add-on:first-child, -.input-prepend .btn:first-child { - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} -.input-append input, -.input-append select, -.input-append .uneditable-input { - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} -.input-append input + .btn-group .btn:last-child, -.input-append select + .btn-group .btn:last-child, -.input-append .uneditable-input + .btn-group .btn:last-child { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} -.input-append .add-on, -.input-append .btn, -.input-append .btn-group { - margin-left: -1px; -} -.input-append .add-on:last-child, -.input-append .btn:last-child, -.input-append .btn-group:last-child > .dropdown-toggle { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} -.input-prepend.input-append input, -.input-prepend.input-append select, -.input-prepend.input-append .uneditable-input { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.input-prepend.input-append input + .btn-group .btn, -.input-prepend.input-append select + .btn-group .btn, -.input-prepend.input-append .uneditable-input + .btn-group .btn { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} -.input-prepend.input-append .add-on:first-child, -.input-prepend.input-append .btn:first-child { - margin-right: -1px; - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} -.input-prepend.input-append .add-on:last-child, -.input-prepend.input-append .btn:last-child { - margin-left: -1px; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} -.input-prepend.input-append .btn-group:first-child { - margin-left: 0; -} -input.search-query { - padding-right: 14px; - padding-right: 4px \9; - padding-left: 14px; - padding-left: 4px \9; - /* IE7-8 doesn't have border-radius, so don't indent the padding */ - - margin-bottom: 0; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; -} -/* Allow for input prepend/append in search forms */ -.form-search .input-append .search-query, -.form-search .input-prepend .search-query { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.form-search .input-append .search-query { - -webkit-border-radius: 14px 0 0 14px; - -moz-border-radius: 14px 0 0 14px; - border-radius: 14px 0 0 14px; -} -.form-search .input-append .btn { - -webkit-border-radius: 0 14px 14px 0; - -moz-border-radius: 0 14px 14px 0; - border-radius: 0 14px 14px 0; -} -.form-search .input-prepend .search-query { - -webkit-border-radius: 0 14px 14px 0; - -moz-border-radius: 0 14px 14px 0; - border-radius: 0 14px 14px 0; -} -.form-search .input-prepend .btn { - -webkit-border-radius: 14px 0 0 14px; - -moz-border-radius: 14px 0 0 14px; - border-radius: 14px 0 0 14px; -} -.form-search input, -.form-inline input, -.form-horizontal input, -.form-search textarea, -.form-inline textarea, -.form-horizontal textarea, -.form-search select, -.form-inline select, -.form-horizontal select, -.form-search .help-inline, -.form-inline .help-inline, -.form-horizontal .help-inline, -.form-search .uneditable-input, -.form-inline .uneditable-input, -.form-horizontal .uneditable-input, -.form-search .input-prepend, -.form-inline .input-prepend, -.form-horizontal .input-prepend, -.form-search .input-append, -.form-inline .input-append, -.form-horizontal .input-append { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - margin-bottom: 0; - vertical-align: middle; -} -.form-search .hide, -.form-inline .hide, -.form-horizontal .hide { - display: none; -} -.form-search label, -.form-inline label, -.form-search .btn-group, -.form-inline .btn-group { - display: inline-block; -} -.form-search .input-append, -.form-inline .input-append, -.form-search .input-prepend, -.form-inline .input-prepend { - margin-bottom: 0; -} -.form-search .radio, -.form-search .checkbox, -.form-inline .radio, -.form-inline .checkbox { - padding-left: 0; - margin-bottom: 0; - vertical-align: middle; -} -.form-search .radio input[type="radio"], -.form-search .checkbox input[type="checkbox"], -.form-inline .radio input[type="radio"], -.form-inline .checkbox input[type="checkbox"] { - float: left; - margin-right: 3px; - margin-left: 0; -} -.control-group { - margin-bottom: 10px; -} -legend + .control-group { - margin-top: 20px; - -webkit-margin-top-collapse: separate; -} -.form-horizontal .control-group { - margin-bottom: 20px; - *zoom: 1; -} -.form-horizontal .control-group:before, -.form-horizontal .control-group:after { - display: table; - content: ""; - line-height: 0; -} -.form-horizontal .control-group:after { - clear: both; -} -.form-horizontal .control-label { - float: left; - width: 160px; - padding-top: 5px; - text-align: right; -} -.form-horizontal .controls { - *display: inline-block; - *padding-left: 20px; - margin-left: 180px; - *margin-left: 0; -} -.form-horizontal .controls:first-child { - *padding-left: 180px; -} -.form-horizontal .help-block { - margin-bottom: 0; -} -.form-horizontal input + .help-block, -.form-horizontal select + .help-block, -.form-horizontal textarea + .help-block, -.form-horizontal .uneditable-input + .help-block, -.form-horizontal .input-prepend + .help-block, -.form-horizontal .input-append + .help-block { - margin-top: 10px; -} -.form-horizontal .form-actions { - padding-left: 180px; -} -.btn { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - padding: 4px 12px; - margin-bottom: 0; - font-size: 14px; - line-height: 20px; - text-align: center; - vertical-align: middle; - cursor: pointer; - color: #333333; - text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); - background-color: #f5f5f5; - background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); - background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); - background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); - border-color: #e6e6e6 #e6e6e6 #bfbfbf; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #e6e6e6; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - border: 1px solid #bbbbbb; - *border: 0; - border-bottom-color: #a2a2a2; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - *margin-left: .3em; - -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); -} -.btn:hover, -.btn:active, -.btn.active, -.btn.disabled, -.btn[disabled] { - color: #333333; - background-color: #e6e6e6; - *background-color: #d9d9d9; -} -.btn:active, -.btn.active { - background-color: #cccccc \9; -} -.btn:first-child { - *margin-left: 0; -} -.btn:hover { - color: #333333; - text-decoration: none; - background-position: 0 -15px; - -webkit-transition: background-position 0.1s linear; - -moz-transition: background-position 0.1s linear; - -o-transition: background-position 0.1s linear; - transition: background-position 0.1s linear; -} -.btn:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.btn.active, -.btn:active { - background-image: none; - outline: 0; - -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); - -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); - box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); -} -.btn.disabled, -.btn[disabled] { - cursor: default; - background-image: none; - opacity: 0.65; - filter: alpha(opacity=65); - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} -.btn-large { - padding: 11px 19px; - font-size: 17.5px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} -.btn-large [class^="icon-"], -.btn-large [class*=" icon-"] { - margin-top: 4px; -} -.btn-small { - padding: 2px 10px; - font-size: 11.9px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.btn-small [class^="icon-"], -.btn-small [class*=" icon-"] { - margin-top: 0; -} -.btn-mini [class^="icon-"], -.btn-mini [class*=" icon-"] { - margin-top: -1px; -} -.btn-mini { - padding: 0 6px; - font-size: 10.5px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.btn-block { - display: block; - width: 100%; - padding-left: 0; - padding-right: 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.btn-block + .btn-block { - margin-top: 5px; -} -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { - width: 100%; -} -.btn-primary.active, -.btn-warning.active, -.btn-danger.active, -.btn-success.active, -.btn-info.active, -.btn-inverse.active { - color: rgba(255, 255, 255, 0.75); -} -.btn { - border-color: #c5c5c5; - border-color: rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.25); -} -.btn-primary { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #006dcc; - background-image: -moz-linear-gradient(top, #0088cc, #0044cc); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); - background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); - background-image: -o-linear-gradient(top, #0088cc, #0044cc); - background-image: linear-gradient(to bottom, #0088cc, #0044cc); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); - border-color: #0044cc #0044cc #002a80; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #0044cc; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-primary:hover, -.btn-primary:active, -.btn-primary.active, -.btn-primary.disabled, -.btn-primary[disabled] { - color: #ffffff; - background-color: #0044cc; - *background-color: #003bb3; -} -.btn-primary:active, -.btn-primary.active { - background-color: #003399 \9; -} -.btn-warning { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #faa732; - background-image: -moz-linear-gradient(top, #fbb450, #f89406); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); - background-image: -webkit-linear-gradient(top, #fbb450, #f89406); - background-image: -o-linear-gradient(top, #fbb450, #f89406); - background-image: linear-gradient(to bottom, #fbb450, #f89406); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); - border-color: #f89406 #f89406 #ad6704; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #f89406; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-warning:hover, -.btn-warning:active, -.btn-warning.active, -.btn-warning.disabled, -.btn-warning[disabled] { - color: #ffffff; - background-color: #f89406; - *background-color: #df8505; -} -.btn-warning:active, -.btn-warning.active { - background-color: #c67605 \9; -} -.btn-danger { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #da4f49; - background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); - background-image: linear-gradient(to bottom, #ee5f5b, #bd362f); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0); - border-color: #bd362f #bd362f #802420; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #bd362f; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-danger:hover, -.btn-danger:active, -.btn-danger.active, -.btn-danger.disabled, -.btn-danger[disabled] { - color: #ffffff; - background-color: #bd362f; - *background-color: #a9302a; -} -.btn-danger:active, -.btn-danger.active { - background-color: #942a25 \9; -} -.btn-success { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #5bb75b; - background-image: -moz-linear-gradient(top, #62c462, #51a351); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); - background-image: -webkit-linear-gradient(top, #62c462, #51a351); - background-image: -o-linear-gradient(top, #62c462, #51a351); - background-image: linear-gradient(to bottom, #62c462, #51a351); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0); - border-color: #51a351 #51a351 #387038; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #51a351; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-success:hover, -.btn-success:active, -.btn-success.active, -.btn-success.disabled, -.btn-success[disabled] { - color: #ffffff; - background-color: #51a351; - *background-color: #499249; -} -.btn-success:active, -.btn-success.active { - background-color: #408140 \9; -} -.btn-info { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #49afcd; - background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); - background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); - background-image: linear-gradient(to bottom, #5bc0de, #2f96b4); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0); - border-color: #2f96b4 #2f96b4 #1f6377; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #2f96b4; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-info:hover, -.btn-info:active, -.btn-info.active, -.btn-info.disabled, -.btn-info[disabled] { - color: #ffffff; - background-color: #2f96b4; - *background-color: #2a85a0; -} -.btn-info:active, -.btn-info.active { - background-color: #24748c \9; -} -.btn-inverse { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #363636; - background-image: -moz-linear-gradient(top, #444444, #222222); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222)); - background-image: -webkit-linear-gradient(top, #444444, #222222); - background-image: -o-linear-gradient(top, #444444, #222222); - background-image: linear-gradient(to bottom, #444444, #222222); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0); - border-color: #222222 #222222 #000000; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #222222; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-inverse:hover, -.btn-inverse:active, -.btn-inverse.active, -.btn-inverse.disabled, -.btn-inverse[disabled] { - color: #ffffff; - background-color: #222222; - *background-color: #151515; -} -.btn-inverse:active, -.btn-inverse.active { - background-color: #080808 \9; -} -button.btn, -input[type="submit"].btn { - *padding-top: 3px; - *padding-bottom: 3px; -} -button.btn::-moz-focus-inner, -input[type="submit"].btn::-moz-focus-inner { - padding: 0; - border: 0; -} -button.btn.btn-large, -input[type="submit"].btn.btn-large { - *padding-top: 7px; - *padding-bottom: 7px; -} -button.btn.btn-small, -input[type="submit"].btn.btn-small { - *padding-top: 3px; - *padding-bottom: 3px; -} -button.btn.btn-mini, -input[type="submit"].btn.btn-mini { - *padding-top: 1px; - *padding-bottom: 1px; -} -.btn-link, -.btn-link:active, -.btn-link[disabled] { - background-color: transparent; - background-image: none; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} -.btn-link { - border-color: transparent; - cursor: pointer; - color: #0088cc; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.btn-link:hover { - color: #005580; - text-decoration: underline; - background-color: transparent; -} -.btn-link[disabled]:hover { - color: #333333; - text-decoration: none; -} -.btn-group { - position: relative; - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - font-size: 0; - vertical-align: middle; - white-space: nowrap; - *margin-left: .3em; -} -.btn-group:first-child { - *margin-left: 0; -} -.btn-group + .btn-group { - margin-left: 5px; -} -.btn-toolbar { - font-size: 0; - margin-top: 10px; - margin-bottom: 10px; -} -.btn-toolbar > .btn + .btn, -.btn-toolbar > .btn-group + .btn, -.btn-toolbar > .btn + .btn-group { - margin-left: 5px; -} -.btn-group > .btn { - position: relative; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.btn-group > .btn + .btn { - margin-left: -1px; -} -.btn-group > .btn, -.btn-group > .dropdown-menu, -.btn-group > .popover { - font-size: 14px; -} -.btn-group > .btn-mini { - font-size: 10.5px; -} -.btn-group > .btn-small { - font-size: 11.9px; -} -.btn-group > .btn-large { - font-size: 17.5px; -} -.btn-group > .btn:first-child { - margin-left: 0; - -webkit-border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; - border-top-left-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - border-bottom-left-radius: 4px; -} -.btn-group > .btn:last-child, -.btn-group > .dropdown-toggle { - -webkit-border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; - border-top-right-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -moz-border-radius-bottomright: 4px; - border-bottom-right-radius: 4px; -} -.btn-group > .btn.large:first-child { - margin-left: 0; - -webkit-border-top-left-radius: 6px; - -moz-border-radius-topleft: 6px; - border-top-left-radius: 6px; - -webkit-border-bottom-left-radius: 6px; - -moz-border-radius-bottomleft: 6px; - border-bottom-left-radius: 6px; -} -.btn-group > .btn.large:last-child, -.btn-group > .large.dropdown-toggle { - -webkit-border-top-right-radius: 6px; - -moz-border-radius-topright: 6px; - border-top-right-radius: 6px; - -webkit-border-bottom-right-radius: 6px; - -moz-border-radius-bottomright: 6px; - border-bottom-right-radius: 6px; -} -.btn-group > .btn:hover, -.btn-group > .btn:focus, -.btn-group > .btn:active, -.btn-group > .btn.active { - z-index: 2; -} -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} -.btn-group > .btn + .dropdown-toggle { - padding-left: 8px; - padding-right: 8px; - -webkit-box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - -moz-box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - *padding-top: 5px; - *padding-bottom: 5px; -} -.btn-group > .btn-mini + .dropdown-toggle { - padding-left: 5px; - padding-right: 5px; - *padding-top: 2px; - *padding-bottom: 2px; -} -.btn-group > .btn-small + .dropdown-toggle { - *padding-top: 5px; - *padding-bottom: 4px; -} -.btn-group > .btn-large + .dropdown-toggle { - padding-left: 12px; - padding-right: 12px; - *padding-top: 7px; - *padding-bottom: 7px; -} -.btn-group.open .dropdown-toggle { - background-image: none; - -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); - -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); - box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); -} -.btn-group.open .btn.dropdown-toggle { - background-color: #e6e6e6; -} -.btn-group.open .btn-primary.dropdown-toggle { - background-color: #0044cc; -} -.btn-group.open .btn-warning.dropdown-toggle { - background-color: #f89406; -} -.btn-group.open .btn-danger.dropdown-toggle { - background-color: #bd362f; -} -.btn-group.open .btn-success.dropdown-toggle { - background-color: #51a351; -} -.btn-group.open .btn-info.dropdown-toggle { - background-color: #2f96b4; -} -.btn-group.open .btn-inverse.dropdown-toggle { - background-color: #222222; -} -.btn .caret { - margin-top: 8px; - margin-left: 0; -} -.btn-mini .caret, -.btn-small .caret, -.btn-large .caret { - margin-top: 6px; -} -.btn-large .caret { - border-left-width: 5px; - border-right-width: 5px; - border-top-width: 5px; -} -.dropup .btn-large .caret { - border-bottom-width: 5px; -} -.btn-primary .caret, -.btn-warning .caret, -.btn-danger .caret, -.btn-info .caret, -.btn-success .caret, -.btn-inverse .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} -.btn-group-vertical { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; -} -.btn-group-vertical > .btn { - display: block; - float: none; - max-width: 100%; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.btn-group-vertical > .btn + .btn { - margin-left: 0; - margin-top: -1px; -} -.btn-group-vertical > .btn:first-child { - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; -} -.btn-group-vertical > .btn:last-child { - -webkit-border-radius: 0 0 4px 4px; - -moz-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; -} -.btn-group-vertical > .btn-large:first-child { - -webkit-border-radius: 6px 6px 0 0; - -moz-border-radius: 6px 6px 0 0; - border-radius: 6px 6px 0 0; -} -.btn-group-vertical > .btn-large:last-child { - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; -} -.nav { - margin-left: 0; - margin-bottom: 20px; - list-style: none; -} -.nav > li > a { - display: block; -} -.nav > li > a:hover { - text-decoration: none; - background-color: #eeeeee; -} -.nav > li > a > img { - max-width: none; -} -.nav > .pull-right { - float: right; -} -.nav-header { - display: block; - padding: 3px 15px; - font-size: 11px; - font-weight: bold; - line-height: 20px; - color: #999999; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - text-transform: uppercase; -} -.nav li + .nav-header { - margin-top: 9px; -} -.nav-list { - padding-left: 15px; - padding-right: 15px; - margin-bottom: 0; -} -.nav-list > li > a, -.nav-list .nav-header { - margin-left: -15px; - margin-right: -15px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); -} -.nav-list > li > a { - padding: 3px 15px; -} -.nav-list > .active > a, -.nav-list > .active > a:hover { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); - background-color: #0088cc; -} -.nav-list [class^="icon-"], -.nav-list [class*=" icon-"] { - margin-right: 2px; -} -.nav-list .divider { - *width: 100%; - height: 1px; - margin: 9px 1px; - *margin: -5px 0 5px; - overflow: hidden; - background-color: #e5e5e5; - border-bottom: 1px solid #ffffff; -} -.nav-tabs, -.nav-pills { - *zoom: 1; -} -.nav-tabs:before, -.nav-pills:before, -.nav-tabs:after, -.nav-pills:after { - display: table; - content: ""; - line-height: 0; -} -.nav-tabs:after, -.nav-pills:after { - clear: both; -} -.nav-tabs > li, -.nav-pills > li { - float: left; -} -.nav-tabs > li > a, -.nav-pills > li > a { - padding-right: 12px; - padding-left: 12px; - margin-right: 2px; - line-height: 14px; -} -.nav-tabs { - border-bottom: 1px solid #ddd; -} -.nav-tabs > li { - margin-bottom: -1px; -} -.nav-tabs > li > a { - padding-top: 8px; - padding-bottom: 8px; - line-height: 20px; - border: 1px solid transparent; - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; -} -.nav-tabs > li > a:hover { - border-color: #eeeeee #eeeeee #dddddd; -} -.nav-tabs > .active > a, -.nav-tabs > .active > a:hover { - color: #555555; - background-color: #ffffff; - border: 1px solid #ddd; - border-bottom-color: transparent; - cursor: default; -} -.nav-pills > li > a { - padding-top: 8px; - padding-bottom: 8px; - margin-top: 2px; - margin-bottom: 2px; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; -} -.nav-pills > .active > a, -.nav-pills > .active > a:hover { - color: #ffffff; - background-color: #0088cc; -} -.nav-stacked > li { - float: none; -} -.nav-stacked > li > a { - margin-right: 0; -} -.nav-tabs.nav-stacked { - border-bottom: 0; -} -.nav-tabs.nav-stacked > li > a { - border: 1px solid #ddd; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.nav-tabs.nav-stacked > li:first-child > a { - -webkit-border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; - border-top-right-radius: 4px; - -webkit-border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; - border-top-left-radius: 4px; -} -.nav-tabs.nav-stacked > li:last-child > a { - -webkit-border-bottom-right-radius: 4px; - -moz-border-radius-bottomright: 4px; - border-bottom-right-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - border-bottom-left-radius: 4px; -} -.nav-tabs.nav-stacked > li > a:hover { - border-color: #ddd; - z-index: 2; -} -.nav-pills.nav-stacked > li > a { - margin-bottom: 3px; -} -.nav-pills.nav-stacked > li:last-child > a { - margin-bottom: 1px; -} -.nav-tabs .dropdown-menu { - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; -} -.nav-pills .dropdown-menu { - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} -.nav .dropdown-toggle .caret { - border-top-color: #0088cc; - border-bottom-color: #0088cc; - margin-top: 6px; -} -.nav .dropdown-toggle:hover .caret { - border-top-color: #005580; - border-bottom-color: #005580; -} -/* move down carets for tabs */ -.nav-tabs .dropdown-toggle .caret { - margin-top: 8px; -} -.nav .active .dropdown-toggle .caret { - border-top-color: #fff; - border-bottom-color: #fff; -} -.nav-tabs .active .dropdown-toggle .caret { - border-top-color: #555555; - border-bottom-color: #555555; -} -.nav > .dropdown.active > a:hover { - cursor: pointer; -} -.nav-tabs .open .dropdown-toggle, -.nav-pills .open .dropdown-toggle, -.nav > li.dropdown.open.active > a:hover { - color: #ffffff; - background-color: #999999; - border-color: #999999; -} -.nav li.dropdown.open .caret, -.nav li.dropdown.open.active .caret, -.nav li.dropdown.open a:hover .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; - opacity: 1; - filter: alpha(opacity=100); -} -.tabs-stacked .open > a:hover { - border-color: #999999; -} -.tabbable { - *zoom: 1; -} -.tabbable:before, -.tabbable:after { - display: table; - content: ""; - line-height: 0; -} -.tabbable:after { - clear: both; -} -.tab-content { - overflow: auto; -} -.tabs-below > .nav-tabs, -.tabs-right > .nav-tabs, -.tabs-left > .nav-tabs { - border-bottom: 0; -} -.tab-content > .tab-pane, -.pill-content > .pill-pane { - display: none; -} -.tab-content > .active, -.pill-content > .active { - display: block; -} -.tabs-below > .nav-tabs { - border-top: 1px solid #ddd; -} -.tabs-below > .nav-tabs > li { - margin-top: -1px; - margin-bottom: 0; -} -.tabs-below > .nav-tabs > li > a { - -webkit-border-radius: 0 0 4px 4px; - -moz-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; -} -.tabs-below > .nav-tabs > li > a:hover { - border-bottom-color: transparent; - border-top-color: #ddd; -} -.tabs-below > .nav-tabs > .active > a, -.tabs-below > .nav-tabs > .active > a:hover { - border-color: transparent #ddd #ddd #ddd; -} -.tabs-left > .nav-tabs > li, -.tabs-right > .nav-tabs > li { - float: none; -} -.tabs-left > .nav-tabs > li > a, -.tabs-right > .nav-tabs > li > a { - min-width: 74px; - margin-right: 0; - margin-bottom: 3px; -} -.tabs-left > .nav-tabs { - float: left; - margin-right: 19px; - border-right: 1px solid #ddd; -} -.tabs-left > .nav-tabs > li > a { - margin-right: -1px; - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} -.tabs-left > .nav-tabs > li > a:hover { - border-color: #eeeeee #dddddd #eeeeee #eeeeee; -} -.tabs-left > .nav-tabs .active > a, -.tabs-left > .nav-tabs .active > a:hover { - border-color: #ddd transparent #ddd #ddd; - *border-right-color: #ffffff; -} -.tabs-right > .nav-tabs { - float: right; - margin-left: 19px; - border-left: 1px solid #ddd; -} -.tabs-right > .nav-tabs > li > a { - margin-left: -1px; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} -.tabs-right > .nav-tabs > li > a:hover { - border-color: #eeeeee #eeeeee #eeeeee #dddddd; -} -.tabs-right > .nav-tabs .active > a, -.tabs-right > .nav-tabs .active > a:hover { - border-color: #ddd #ddd #ddd transparent; - *border-left-color: #ffffff; -} -.nav > .disabled > a { - color: #999999; -} -.nav > .disabled > a:hover { - text-decoration: none; - background-color: transparent; - cursor: default; -} -.navbar { - overflow: visible; - margin-bottom: 20px; - *position: relative; - *z-index: 2; -} -.navbar-inner { - min-height: 40px; - padding-left: 20px; - padding-right: 20px; - background-color: #fafafa; - background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2)); - background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2); - background-image: -o-linear-gradient(top, #ffffff, #f2f2f2); - background-image: linear-gradient(to bottom, #ffffff, #f2f2f2); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0); - border: 1px solid #d4d4d4; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); - -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); - *zoom: 1; -} -.navbar-inner:before, -.navbar-inner:after { - display: table; - content: ""; - line-height: 0; -} -.navbar-inner:after { - clear: both; -} -.navbar .container { - width: auto; -} -.nav-collapse.collapse { - height: auto; - overflow: visible; -} -.navbar .brand { - float: left; - display: block; - padding: 10px 20px 10px; - margin-left: -20px; - font-size: 20px; - font-weight: 200; - color: #777777; - text-shadow: 0 1px 0 #ffffff; -} -.navbar .brand:hover { - text-decoration: none; -} -.navbar-text { - margin-bottom: 0; - line-height: 40px; - color: #777777; -} -.navbar-link { - color: #777777; -} -.navbar-link:hover { - color: #333333; -} -.navbar .divider-vertical { - height: 40px; - margin: 0 9px; - border-left: 1px solid #f2f2f2; - border-right: 1px solid #ffffff; -} -.navbar .btn, -.navbar .btn-group { - margin-top: 5px; -} -.navbar .btn-group .btn, -.navbar .input-prepend .btn, -.navbar .input-append .btn { - margin-top: 0; -} -.navbar-form { - margin-bottom: 0; - *zoom: 1; -} -.navbar-form:before, -.navbar-form:after { - display: table; - content: ""; - line-height: 0; -} -.navbar-form:after { - clear: both; -} -.navbar-form input, -.navbar-form select, -.navbar-form .radio, -.navbar-form .checkbox { - margin-top: 5px; -} -.navbar-form input, -.navbar-form select, -.navbar-form .btn { - display: inline-block; - margin-bottom: 0; -} -.navbar-form input[type="image"], -.navbar-form input[type="checkbox"], -.navbar-form input[type="radio"] { - margin-top: 3px; -} -.navbar-form .input-append, -.navbar-form .input-prepend { - margin-top: 5px; - white-space: nowrap; -} -.navbar-form .input-append input, -.navbar-form .input-prepend input { - margin-top: 0; -} -.navbar-search { - position: relative; - float: left; - margin-top: 5px; - margin-bottom: 0; -} -.navbar-search .search-query { - margin-bottom: 0; - padding: 4px 14px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 13px; - font-weight: normal; - line-height: 1; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; -} -.navbar-static-top { - position: static; - margin-bottom: 0; -} -.navbar-static-top .navbar-inner { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: 1030; - margin-bottom: 0; -} -.navbar-fixed-top .navbar-inner, -.navbar-static-top .navbar-inner { - border-width: 0 0 1px; -} -.navbar-fixed-bottom .navbar-inner { - border-width: 1px 0 0; -} -.navbar-fixed-top .navbar-inner, -.navbar-fixed-bottom .navbar-inner { - padding-left: 0; - padding-right: 0; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.navbar-static-top .container, -.navbar-fixed-top .container, -.navbar-fixed-bottom .container { - width: 940px; -} -.navbar-fixed-top { - top: 0; -} -.navbar-fixed-top .navbar-inner, -.navbar-static-top .navbar-inner { - -webkit-box-shadow: 0 1px 10px rgba(0,0,0,.1); - -moz-box-shadow: 0 1px 10px rgba(0,0,0,.1); - box-shadow: 0 1px 10px rgba(0,0,0,.1); -} -.navbar-fixed-bottom { - bottom: 0; -} -.navbar-fixed-bottom .navbar-inner { - -webkit-box-shadow: 0 -1px 10px rgba(0,0,0,.1); - -moz-box-shadow: 0 -1px 10px rgba(0,0,0,.1); - box-shadow: 0 -1px 10px rgba(0,0,0,.1); -} -.navbar .nav { - position: relative; - left: 0; - display: block; - float: left; - margin: 0 10px 0 0; -} -.navbar .nav.pull-right { - float: right; - margin-right: 0; -} -.navbar .nav > li { - float: left; -} -.navbar .nav > li > a { - float: none; - padding: 10px 15px 10px; - color: #777777; - text-decoration: none; - text-shadow: 0 1px 0 #ffffff; -} -.navbar .nav .dropdown-toggle .caret { - margin-top: 8px; -} -.navbar .nav > li > a:focus, -.navbar .nav > li > a:hover { - background-color: transparent; - color: #333333; - text-decoration: none; -} -.navbar .nav > .active > a, -.navbar .nav > .active > a:hover, -.navbar .nav > .active > a:focus { - color: #555555; - text-decoration: none; - background-color: #e5e5e5; - -webkit-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); - -moz-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); -} -.navbar .btn-navbar { - display: none; - float: right; - padding: 7px 10px; - margin-left: 5px; - margin-right: 5px; - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #ededed; - background-image: -moz-linear-gradient(top, #f2f2f2, #e5e5e5); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5)); - background-image: -webkit-linear-gradient(top, #f2f2f2, #e5e5e5); - background-image: -o-linear-gradient(top, #f2f2f2, #e5e5e5); - background-image: linear-gradient(to bottom, #f2f2f2, #e5e5e5); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0); - border-color: #e5e5e5 #e5e5e5 #bfbfbf; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #e5e5e5; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075); - -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075); - box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075); -} -.navbar .btn-navbar:hover, -.navbar .btn-navbar:active, -.navbar .btn-navbar.active, -.navbar .btn-navbar.disabled, -.navbar .btn-navbar[disabled] { - color: #ffffff; - background-color: #e5e5e5; - *background-color: #d9d9d9; -} -.navbar .btn-navbar:active, -.navbar .btn-navbar.active { - background-color: #cccccc \9; -} -.navbar .btn-navbar .icon-bar { - display: block; - width: 18px; - height: 2px; - background-color: #f5f5f5; - -webkit-border-radius: 1px; - -moz-border-radius: 1px; - border-radius: 1px; - -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); - -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); - box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); -} -.btn-navbar .icon-bar + .icon-bar { - margin-top: 3px; -} -.navbar .nav > li > .dropdown-menu:before { - content: ''; - display: inline-block; - border-left: 7px solid transparent; - border-right: 7px solid transparent; - border-bottom: 7px solid #ccc; - border-bottom-color: rgba(0, 0, 0, 0.2); - position: absolute; - top: -7px; - left: 9px; -} -.navbar .nav > li > .dropdown-menu:after { - content: ''; - display: inline-block; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid #ffffff; - position: absolute; - top: -6px; - left: 10px; -} -.navbar-fixed-bottom .nav > li > .dropdown-menu:before { - border-top: 7px solid #ccc; - border-top-color: rgba(0, 0, 0, 0.2); - border-bottom: 0; - bottom: -7px; - top: auto; -} -.navbar-fixed-bottom .nav > li > .dropdown-menu:after { - border-top: 6px solid #ffffff; - border-bottom: 0; - bottom: -6px; - top: auto; -} -.navbar .nav li.dropdown > a:hover .caret { - border-top-color: #555555; - border-bottom-color: #555555; -} -.navbar .nav li.dropdown.open > .dropdown-toggle, -.navbar .nav li.dropdown.active > .dropdown-toggle, -.navbar .nav li.dropdown.open.active > .dropdown-toggle { - background-color: #e5e5e5; - color: #555555; -} -.navbar .nav li.dropdown > .dropdown-toggle .caret { - border-top-color: #777777; - border-bottom-color: #777777; -} -.navbar .nav li.dropdown.open > .dropdown-toggle .caret, -.navbar .nav li.dropdown.active > .dropdown-toggle .caret, -.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret { - border-top-color: #555555; - border-bottom-color: #555555; -} -.navbar .pull-right > li > .dropdown-menu, -.navbar .nav > li > .dropdown-menu.pull-right { - left: auto; - right: 0; -} -.navbar .pull-right > li > .dropdown-menu:before, -.navbar .nav > li > .dropdown-menu.pull-right:before { - left: auto; - right: 12px; -} -.navbar .pull-right > li > .dropdown-menu:after, -.navbar .nav > li > .dropdown-menu.pull-right:after { - left: auto; - right: 13px; -} -.navbar .pull-right > li > .dropdown-menu .dropdown-menu, -.navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu { - left: auto; - right: 100%; - margin-left: 0; - margin-right: -1px; - -webkit-border-radius: 6px 0 6px 6px; - -moz-border-radius: 6px 0 6px 6px; - border-radius: 6px 0 6px 6px; -} -.navbar-inverse .navbar-inner { - background-color: #1b1b1b; - background-image: -moz-linear-gradient(top, #222222, #111111); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111)); - background-image: -webkit-linear-gradient(top, #222222, #111111); - background-image: -o-linear-gradient(top, #222222, #111111); - background-image: linear-gradient(to bottom, #222222, #111111); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0); - border-color: #252525; -} -.navbar-inverse .brand, -.navbar-inverse .nav > li > a { - color: #999999; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); -} -.navbar-inverse .brand:hover, -.navbar-inverse .nav > li > a:hover { - color: #ffffff; -} -.navbar-inverse .brand { - color: #999999; -} -.navbar-inverse .navbar-text { - color: #999999; -} -.navbar-inverse .nav > li > a:focus, -.navbar-inverse .nav > li > a:hover { - background-color: transparent; - color: #ffffff; -} -.navbar-inverse .nav .active > a, -.navbar-inverse .nav .active > a:hover, -.navbar-inverse .nav .active > a:focus { - color: #ffffff; - background-color: #111111; -} -.navbar-inverse .navbar-link { - color: #999999; -} -.navbar-inverse .navbar-link:hover { - color: #ffffff; -} -.navbar-inverse .divider-vertical { - border-left-color: #111111; - border-right-color: #222222; -} -.navbar-inverse .nav li.dropdown.open > .dropdown-toggle, -.navbar-inverse .nav li.dropdown.active > .dropdown-toggle, -.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { - background-color: #111111; - color: #ffffff; -} -.navbar-inverse .nav li.dropdown > a:hover .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} -.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret { - border-top-color: #999999; - border-bottom-color: #999999; -} -.navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret, -.navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret, -.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} -.navbar-inverse .navbar-search .search-query { - color: #ffffff; - background-color: #515151; - border-color: #111111; - -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15); - -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15); - box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15); - -webkit-transition: none; - -moz-transition: none; - -o-transition: none; - transition: none; -} -.navbar-inverse .navbar-search .search-query:-moz-placeholder { - color: #cccccc; -} -.navbar-inverse .navbar-search .search-query:-ms-input-placeholder { - color: #cccccc; -} -.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder { - color: #cccccc; -} -.navbar-inverse .navbar-search .search-query:focus, -.navbar-inverse .navbar-search .search-query.focused { - padding: 5px 15px; - color: #333333; - text-shadow: 0 1px 0 #ffffff; - background-color: #ffffff; - border: 0; - -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - outline: 0; -} -.navbar-inverse .btn-navbar { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #0e0e0e; - background-image: -moz-linear-gradient(top, #151515, #040404); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404)); - background-image: -webkit-linear-gradient(top, #151515, #040404); - background-image: -o-linear-gradient(top, #151515, #040404); - background-image: linear-gradient(to bottom, #151515, #040404); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0); - border-color: #040404 #040404 #000000; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #040404; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.navbar-inverse .btn-navbar:hover, -.navbar-inverse .btn-navbar:active, -.navbar-inverse .btn-navbar.active, -.navbar-inverse .btn-navbar.disabled, -.navbar-inverse .btn-navbar[disabled] { - color: #ffffff; - background-color: #040404; - *background-color: #000000; -} -.navbar-inverse .btn-navbar:active, -.navbar-inverse .btn-navbar.active { - background-color: #000000 \9; -} -.breadcrumb { - padding: 8px 15px; - margin: 0 0 20px; - list-style: none; - background-color: #f5f5f5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.breadcrumb > li { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - text-shadow: 0 1px 0 #ffffff; -} -.breadcrumb > li > .divider { - padding: 0 5px; - color: #ccc; -} -.breadcrumb > .active { - color: #999999; -} -.pagination { - margin: 20px 0; -} -.pagination ul { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - margin-left: 0; - margin-bottom: 0; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); -} -.pagination ul > li { - display: inline; -} -.pagination ul > li > a, -.pagination ul > li > span { - float: left; - padding: 4px 12px; - line-height: 20px; - text-decoration: none; - background-color: #ffffff; - border: 1px solid #dddddd; - border-left-width: 0; -} -.pagination ul > li > a:hover, -.pagination ul > .active > a, -.pagination ul > .active > span { - background-color: #f5f5f5; -} -.pagination ul > .active > a, -.pagination ul > .active > span { - color: #999999; - cursor: default; -} -.pagination ul > .disabled > span, -.pagination ul > .disabled > a, -.pagination ul > .disabled > a:hover { - color: #999999; - background-color: transparent; - cursor: default; -} -.pagination ul > li:first-child > a, -.pagination ul > li:first-child > span { - border-left-width: 1px; - -webkit-border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; - border-top-left-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - border-bottom-left-radius: 4px; -} -.pagination ul > li:last-child > a, -.pagination ul > li:last-child > span { - -webkit-border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; - border-top-right-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -moz-border-radius-bottomright: 4px; - border-bottom-right-radius: 4px; -} -.pagination-centered { - text-align: center; -} -.pagination-right { - text-align: right; -} -.pagination-large ul > li > a, -.pagination-large ul > li > span { - padding: 11px 19px; - font-size: 17.5px; -} -.pagination-large ul > li:first-child > a, -.pagination-large ul > li:first-child > span { - -webkit-border-top-left-radius: 6px; - -moz-border-radius-topleft: 6px; - border-top-left-radius: 6px; - -webkit-border-bottom-left-radius: 6px; - -moz-border-radius-bottomleft: 6px; - border-bottom-left-radius: 6px; -} -.pagination-large ul > li:last-child > a, -.pagination-large ul > li:last-child > span { - -webkit-border-top-right-radius: 6px; - -moz-border-radius-topright: 6px; - border-top-right-radius: 6px; - -webkit-border-bottom-right-radius: 6px; - -moz-border-radius-bottomright: 6px; - border-bottom-right-radius: 6px; -} -.pagination-mini ul > li:first-child > a, -.pagination-small ul > li:first-child > a, -.pagination-mini ul > li:first-child > span, -.pagination-small ul > li:first-child > span { - -webkit-border-top-left-radius: 3px; - -moz-border-radius-topleft: 3px; - border-top-left-radius: 3px; - -webkit-border-bottom-left-radius: 3px; - -moz-border-radius-bottomleft: 3px; - border-bottom-left-radius: 3px; -} -.pagination-mini ul > li:last-child > a, -.pagination-small ul > li:last-child > a, -.pagination-mini ul > li:last-child > span, -.pagination-small ul > li:last-child > span { - -webkit-border-top-right-radius: 3px; - -moz-border-radius-topright: 3px; - border-top-right-radius: 3px; - -webkit-border-bottom-right-radius: 3px; - -moz-border-radius-bottomright: 3px; - border-bottom-right-radius: 3px; -} -.pagination-small ul > li > a, -.pagination-small ul > li > span { - padding: 2px 10px; - font-size: 11.9px; -} -.pagination-mini ul > li > a, -.pagination-mini ul > li > span { - padding: 0 6px; - font-size: 10.5px; -} -.pager { - margin: 20px 0; - list-style: none; - text-align: center; - *zoom: 1; -} -.pager:before, -.pager:after { - display: table; - content: ""; - line-height: 0; -} -.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; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; -} -.pager li > a:hover { - text-decoration: none; - background-color: #f5f5f5; -} -.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 > span { - color: #999999; - background-color: #fff; - cursor: default; -} -.thumbnails { - margin-left: -20px; - list-style: none; - *zoom: 1; -} -.thumbnails:before, -.thumbnails:after { - display: table; - content: ""; - line-height: 0; -} -.thumbnails:after { - clear: both; -} -.row-fluid .thumbnails { - margin-left: 0; -} -.thumbnails > li { - float: left; - margin-bottom: 20px; - margin-left: 20px; -} -.thumbnail { - display: block; - padding: 4px; - line-height: 20px; - border: 1px solid #ddd; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); - -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); - -webkit-transition: all 0.2s ease-in-out; - -moz-transition: all 0.2s ease-in-out; - -o-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; -} -a.thumbnail:hover { - border-color: #0088cc; - -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); - -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); - box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); -} -.thumbnail > img { - display: block; - max-width: 100%; - margin-left: auto; - margin-right: auto; -} -.thumbnail .caption { - padding: 9px; - color: #555555; -} -.alert { - padding: 8px 35px 8px 14px; - margin-bottom: 20px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - background-color: #fcf8e3; - border: 1px solid #fbeed5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.alert, -.alert h4 { - color: #c09853; -} -.alert h4 { - margin: 0; -} -.alert .close { - position: relative; - top: -2px; - right: -21px; - line-height: 20px; -} -.alert-success { - background-color: #dff0d8; - border-color: #d6e9c6; - color: #468847; -} -.alert-success h4 { - color: #468847; -} -.alert-danger, -.alert-error { - background-color: #f2dede; - border-color: #eed3d7; - color: #b94a48; -} -.alert-danger h4, -.alert-error h4 { - color: #b94a48; -} -.alert-info { - background-color: #d9edf7; - border-color: #bce8f1; - color: #3a87ad; -} -.alert-info h4 { - color: #3a87ad; -} -.alert-block { - padding-top: 14px; - padding-bottom: 14px; -} -.alert-block > p, -.alert-block > ul { - margin-bottom: 0; -} -.alert-block p + p { - margin-top: 5px; -} -@-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; - } -} -@-ms-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 { - overflow: hidden; - height: 20px; - margin-bottom: 20px; - background-color: #f7f7f7; - background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); - background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0); - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.progress .bar { - width: 0%; - height: 100%; - color: #ffffff; - float: left; - font-size: 12px; - text-align: center; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #0e90d2; - background-image: -moz-linear-gradient(top, #149bdf, #0480be); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); - background-image: -webkit-linear-gradient(top, #149bdf, #0480be); - background-image: -o-linear-gradient(top, #149bdf, #0480be); - background-image: linear-gradient(to bottom, #149bdf, #0480be); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0); - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -moz-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-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-transition: width 0.6s ease; - -moz-transition: width 0.6s ease; - -o-transition: width 0.6s ease; - transition: width 0.6s ease; -} -.progress .bar + .bar { - -webkit-box-shadow: inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15); - -moz-box-shadow: inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15); - box-shadow: inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15); -} -.progress-striped .bar { - background-color: #149bdf; - 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: -o-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); - -webkit-background-size: 40px 40px; - -moz-background-size: 40px 40px; - -o-background-size: 40px 40px; - background-size: 40px 40px; -} -.progress.active .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-danger .bar, -.progress .bar-danger { - background-color: #dd514c; - background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); - background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0); -} -.progress-danger.progress-striped .bar, -.progress-striped .bar-danger { - background-color: #ee5f5b; - 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: -o-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-success .bar, -.progress .bar-success { - background-color: #5eb95e; - background-image: -moz-linear-gradient(top, #62c462, #57a957); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); - background-image: -webkit-linear-gradient(top, #62c462, #57a957); - background-image: -o-linear-gradient(top, #62c462, #57a957); - background-image: linear-gradient(to bottom, #62c462, #57a957); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0); -} -.progress-success.progress-striped .bar, -.progress-striped .bar-success { - background-color: #62c462; - 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: -o-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-info .bar, -.progress .bar-info { - background-color: #4bb1cf; - background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); - background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); - background-image: -o-linear-gradient(top, #5bc0de, #339bb9); - background-image: linear-gradient(to bottom, #5bc0de, #339bb9); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0); -} -.progress-info.progress-striped .bar, -.progress-striped .bar-info { - background-color: #5bc0de; - 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: -o-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-warning .bar, -.progress .bar-warning { - background-color: #faa732; - background-image: -moz-linear-gradient(top, #fbb450, #f89406); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); - background-image: -webkit-linear-gradient(top, #fbb450, #f89406); - background-image: -o-linear-gradient(top, #fbb450, #f89406); - background-image: linear-gradient(to bottom, #fbb450, #f89406); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); -} -.progress-warning.progress-striped .bar, -.progress-striped .bar-warning { - background-color: #fbb450; - 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: -o-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); -} -.hero-unit { - padding: 60px; - margin-bottom: 30px; - font-size: 18px; - font-weight: 200; - line-height: 30px; - color: inherit; - background-color: #eeeeee; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} -.hero-unit h1 { - margin-bottom: 0; - font-size: 60px; - line-height: 1; - color: inherit; - letter-spacing: -1px; -} -.hero-unit li { - line-height: 30px; -} -.media, -.media-body { - overflow: hidden; - *overflow: visible; - 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 { - margin-left: 0; - list-style: none; -} -.tooltip { - position: absolute; - z-index: 1030; - display: block; - visibility: visible; - padding: 5px; - font-size: 11px; - opacity: 0; - filter: alpha(opacity=0); -} -.tooltip.in { - opacity: 0.8; - filter: alpha(opacity=80); -} -.tooltip.top { - margin-top: -3px; -} -.tooltip.right { - margin-left: 3px; -} -.tooltip.bottom { - margin-top: 3px; -} -.tooltip.left { - margin-left: -3px; -} -.tooltip-inner { - max-width: 200px; - padding: 3px 8px; - color: #ffffff; - text-align: center; - text-decoration: none; - background-color: #000000; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - 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-width: 5px 5px 0; - border-top-color: #000000; -} -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-width: 5px 5px 5px 0; - border-right-color: #000000; -} -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-width: 5px 0 5px 5px; - border-left-color: #000000; -} -.tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000000; -} -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1010; - display: none; - width: 236px; - padding: 1px; - text-align: left; - background-color: #ffffff; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - white-space: normal; -} -.popover.top { - margin-top: -10px; -} -.popover.right { - margin-left: 10px; -} -.popover.bottom { - margin-top: 10px; -} -.popover.left { - margin-left: -10px; -} -.popover-title { - margin: 0; - padding: 8px 14px; - font-size: 14px; - font-weight: normal; - line-height: 18px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - -webkit-border-radius: 5px 5px 0 0; - -moz-border-radius: 5px 5px 0 0; - 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 { - left: 50%; - margin-left: -11px; - border-bottom-width: 0; - border-top-color: #999; - border-top-color: rgba(0, 0, 0, 0.25); - bottom: -11px; -} -.popover.top .arrow:after { - bottom: 1px; - margin-left: -10px; - border-bottom-width: 0; - border-top-color: #ffffff; -} -.popover.right .arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-left-width: 0; - border-right-color: #999; - border-right-color: rgba(0, 0, 0, 0.25); -} -.popover.right .arrow:after { - left: 1px; - bottom: -10px; - border-left-width: 0; - border-right-color: #ffffff; -} -.popover.bottom .arrow { - left: 50%; - margin-left: -11px; - border-top-width: 0; - border-bottom-color: #999; - border-bottom-color: rgba(0, 0, 0, 0.25); - top: -11px; -} -.popover.bottom .arrow:after { - top: 1px; - margin-left: -10px; - border-top-width: 0; - border-bottom-color: #ffffff; -} -.popover.left .arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-right-width: 0; - border-left-color: #999; - border-left-color: rgba(0, 0, 0, 0.25); -} -.popover.left .arrow:after { - right: 1px; - border-right-width: 0; - border-left-color: #ffffff; - bottom: -10px; -} -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: #000000; -} -.modal-backdrop.fade { - opacity: 0; -} -.modal-backdrop, -.modal-backdrop.fade.in { - opacity: 0.8; - filter: alpha(opacity=80); -} -.modal { - position: fixed; - top: 10%; - left: 50%; - z-index: 1050; - width: 560px; - margin-left: -280px; - background-color: #ffffff; - border: 1px solid #999; - border: 1px solid rgba(0, 0, 0, 0.3); - *border: 1px solid #999; - /* IE6-7 */ - - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -webkit-background-clip: padding-box; - -moz-background-clip: padding-box; - background-clip: padding-box; - outline: none; -} -.modal.fade { - -webkit-transition: opacity .3s linear, top .3s ease-out; - -moz-transition: opacity .3s linear, top .3s ease-out; - -o-transition: opacity .3s linear, top .3s ease-out; - transition: opacity .3s linear, top .3s ease-out; - top: -25%; -} -.modal.fade.in { - top: 10%; -} -.modal-header { - padding: 9px 15px; - border-bottom: 1px solid #eee; -} -.modal-header .close { - margin-top: 2px; -} -.modal-header h3 { - margin: 0; - line-height: 30px; -} -.modal-body { - position: relative; - overflow-y: auto; - max-height: 400px; - padding: 15px; -} -.modal-form { - margin-bottom: 0; -} -.modal-footer { - padding: 14px 15px 15px; - margin-bottom: 0; - text-align: right; - background-color: #f5f5f5; - border-top: 1px solid #ddd; - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; - -webkit-box-shadow: inset 0 1px 0 #ffffff; - -moz-box-shadow: inset 0 1px 0 #ffffff; - box-shadow: inset 0 1px 0 #ffffff; - *zoom: 1; -} -.modal-footer:before, -.modal-footer:after { - display: table; - content: ""; - line-height: 0; -} -.modal-footer:after { - clear: both; -} -.modal-footer .btn + .btn { - margin-left: 5px; - margin-bottom: 0; -} -.modal-footer .btn-group .btn + .btn { - margin-left: -1px; -} -.modal-footer .btn-block + .btn-block { - margin-left: 0; -} -.dropup, -.dropdown { - position: relative; -} -.dropdown-toggle { - *margin-bottom: -3px; -} -.dropdown-toggle:active, -.open .dropdown-toggle { - outline: 0; -} -.caret { - display: inline-block; - width: 0; - height: 0; - vertical-align: top; - border-top: 4px solid #000000; - border-right: 4px solid transparent; - border-left: 4px solid transparent; - content: ""; -} -.dropdown .caret { - margin-top: 8px; - margin-left: 2px; -} -.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; - list-style: none; - background-color: #ffffff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - *border-right-width: 2px; - *border-bottom-width: 2px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.dropdown-menu.pull-right { - right: 0; - left: auto; -} -.dropdown-menu .divider { - *width: 100%; - height: 1px; - margin: 9px 1px; - *margin: -5px 0 5px; - overflow: hidden; - background-color: #e5e5e5; - border-bottom: 1px solid #ffffff; -} -.dropdown-menu li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: 20px; - color: #333333; - white-space: nowrap; -} -.dropdown-menu li > a:hover, -.dropdown-menu li > a:focus, -.dropdown-submenu:hover > a { - text-decoration: none; - color: #ffffff; - background-color: #0081c2; - background-image: -moz-linear-gradient(top, #0088cc, #0077b3); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); - background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); - background-image: -o-linear-gradient(top, #0088cc, #0077b3); - background-image: linear-gradient(to bottom, #0088cc, #0077b3); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); -} -.dropdown-menu .active > a, -.dropdown-menu .active > a:hover { - color: #ffffff; - text-decoration: none; - outline: 0; - background-color: #0081c2; - background-image: -moz-linear-gradient(top, #0088cc, #0077b3); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); - background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); - background-image: -o-linear-gradient(top, #0088cc, #0077b3); - background-image: linear-gradient(to bottom, #0088cc, #0077b3); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); -} -.dropdown-menu .disabled > a, -.dropdown-menu .disabled > a:hover { - color: #999999; -} -.dropdown-menu .disabled > a:hover { - text-decoration: none; - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - cursor: default; -} -.open { - *z-index: 1000; -} -.open > .dropdown-menu { - display: block; -} -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - border-top: 0; - border-bottom: 4px solid #000000; - content: ""; -} -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 1px; -} -.dropdown-submenu { - position: relative; -} -.dropdown-submenu > .dropdown-menu { - top: 0; - left: 100%; - margin-top: -6px; - margin-left: -1px; - -webkit-border-radius: 0 6px 6px 6px; - -moz-border-radius: 0 6px 6px 6px; - border-radius: 0 6px 6px 6px; -} -.dropdown-submenu:hover > .dropdown-menu { - display: block; -} -.dropup .dropdown-submenu > .dropdown-menu { - top: auto; - bottom: 0; - margin-top: 0; - margin-bottom: -2px; - -webkit-border-radius: 5px 5px 5px 0; - -moz-border-radius: 5px 5px 5px 0; - border-radius: 5px 5px 5px 0; -} -.dropdown-submenu > a:after { - display: block; - content: " "; - float: right; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; - border-width: 5px 0 5px 5px; - border-left-color: #cccccc; - margin-top: 5px; - margin-right: -10px; -} -.dropdown-submenu:hover > a:after { - border-left-color: #ffffff; -} -.dropdown-submenu.pull-left { - float: none; -} -.dropdown-submenu.pull-left > .dropdown-menu { - left: -100%; - margin-left: 10px; - -webkit-border-radius: 6px 0 6px 6px; - -moz-border-radius: 6px 0 6px 6px; - border-radius: 6px 0 6px 6px; -} -.dropdown .dropdown-menu .nav-header { - padding-left: 20px; - padding-right: 20px; -} -.typeahead { - z-index: 1051; - margin-top: 2px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.accordion { - margin-bottom: 20px; -} -.accordion-group { - margin-bottom: 2px; - border: 1px solid #e5e5e5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.accordion-heading { - border-bottom: 0; -} -.accordion-heading .accordion-toggle { - display: block; - padding: 8px 15px; -} -.accordion-toggle { - cursor: pointer; -} -.accordion-inner { - padding: 9px 15px; - border-top: 1px solid #e5e5e5; -} -.carousel { - position: relative; - margin-bottom: 20px; - line-height: 1; -} -.carousel-inner { - overflow: hidden; - width: 100%; - position: relative; -} -.carousel-inner > .item { - display: none; - position: relative; - -webkit-transition: 0.6s ease-in-out left; - -moz-transition: 0.6s ease-in-out left; - -o-transition: 0.6s ease-in-out left; - transition: 0.6s ease-in-out left; -} -.carousel-inner > .item > img { - display: block; - 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: 40%; - left: 15px; - width: 40px; - height: 40px; - margin-top: -20px; - font-size: 60px; - font-weight: 100; - line-height: 30px; - color: #ffffff; - text-align: center; - background: #222222; - border: 3px solid #ffffff; - -webkit-border-radius: 23px; - -moz-border-radius: 23px; - border-radius: 23px; - opacity: 0.5; - filter: alpha(opacity=50); -} -.carousel-control.right { - left: auto; - right: 15px; -} -.carousel-control:hover { - color: #ffffff; - text-decoration: none; - opacity: 0.9; - filter: alpha(opacity=90); -} -.carousel-caption { - position: absolute; - left: 0; - right: 0; - bottom: 0; - padding: 15px; - background: #333333; - background: rgba(0, 0, 0, 0.75); -} -.carousel-caption h4, -.carousel-caption p { - color: #ffffff; - line-height: 20px; -} -.carousel-caption h4 { - margin: 0 0 5px; -} -.carousel-caption p { - margin-bottom: 0; -} -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e3e3e3; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - -moz-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-large { - padding: 24px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} -.well-small { - padding: 9px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.close { - float: right; - font-size: 20px; - font-weight: bold; - line-height: 20px; - color: #000000; - text-shadow: 0 1px 0 #ffffff; - opacity: 0.2; - filter: alpha(opacity=20); -} -.close:hover { - color: #000000; - text-decoration: none; - cursor: pointer; - opacity: 0.4; - filter: alpha(opacity=40); -} -button.close { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; -} -.pull-right { - float: right; -} -.pull-left { - float: left; -} -.hide { - display: none; -} -.show { - display: block; -} -.invisible { - visibility: hidden; -} -.affix { - position: fixed; -} -.fade { - opacity: 0; - -webkit-transition: opacity 0.15s linear; - -moz-transition: opacity 0.15s linear; - -o-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; -} -.fade.in { - opacity: 1; -} -.collapse { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition: height 0.35s ease; - -moz-transition: height 0.35s ease; - -o-transition: height 0.35s ease; - transition: height 0.35s ease; -} -.collapse.in { - height: auto; -} -.hidden { - display: none; - visibility: hidden; -} -.visible-phone { - display: none !important; -} -.visible-tablet { - display: none !important; -} -.hidden-desktop { - display: none !important; -} -.visible-desktop { - display: inherit !important; -} -@media (min-width: 768px) and (max-width: 979px) { - .hidden-desktop { - display: inherit !important; - } - .visible-desktop { - display: none !important ; - } - .visible-tablet { - display: inherit !important; - } - .hidden-tablet { - display: none !important; - } -} -@media (max-width: 767px) { - .hidden-desktop { - display: inherit !important; - } - .visible-desktop { - display: none !important; - } - .visible-phone { - display: inherit !important; - } - .hidden-phone { - display: none !important; - } -} -@media (max-width: 767px) { - body { - padding-left: 20px; - padding-right: 20px; - } - .navbar-fixed-top, - .navbar-fixed-bottom, - .navbar-static-top { - margin-left: -20px; - margin-right: -20px; - } - .container-fluid { - padding: 0; - } - .dl-horizontal dt { - float: none; - clear: none; - width: auto; - text-align: left; - } - .dl-horizontal dd { - margin-left: 0; - } - .container { - width: auto; - } - .row-fluid { - width: 100%; - } - .row, - .thumbnails { - margin-left: 0; - } - .thumbnails > li { - float: none; - margin-left: 0; - } - [class*="span"], - .uneditable-input[class*="span"], - .row-fluid [class*="span"] { - float: none; - display: block; - width: 100%; - margin-left: 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - .span12, - .row-fluid .span12 { - width: 100%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - .row-fluid [class*="offset"]:first-child { - margin-left: 0; - } - .input-large, - .input-xlarge, - .input-xxlarge, - input[class*="span"], - select[class*="span"], - textarea[class*="span"], - .uneditable-input { - display: block; - width: 100%; - min-height: 30px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - .input-prepend input, - .input-append input, - .input-prepend input[class*="span"], - .input-append input[class*="span"] { - display: inline-block; - width: auto; - } - .controls-row [class*="span"] + [class*="span"] { - margin-left: 0; - } - .modal { - position: fixed; - top: 20px; - left: 20px; - right: 20px; - width: auto; - margin: 0; - } - .modal.fade { - top: -100px; - } - .modal.fade.in { - top: 20px; - } -} -@media (max-width: 480px) { - .nav-collapse { - -webkit-transform: translate3d(0, 0, 0); - } - .page-header h1 small { - display: block; - line-height: 20px; - } - input[type="checkbox"], - input[type="radio"] { - border: 1px solid #ccc; - } - .form-horizontal .control-label { - float: none; - width: auto; - padding-top: 0; - text-align: left; - } - .form-horizontal .controls { - margin-left: 0; - } - .form-horizontal .control-list { - padding-top: 0; - } - .form-horizontal .form-actions { - padding-left: 10px; - padding-right: 10px; - } - .media .pull-left, - .media .pull-right { - float: none; - display: block; - margin-bottom: 10px; - } - .media-object { - margin-right: 0; - margin-left: 0; - } - .modal { - top: 10px; - left: 10px; - right: 10px; - } - .modal-header .close { - padding: 10px; - margin: -10px; - } - .carousel-caption { - position: static; - } -} -@media (min-width: 768px) and (max-width: 979px) { - .row { - margin-left: -20px; - *zoom: 1; - } - .row:before, - .row:after { - display: table; - content: ""; - line-height: 0; - } - .row:after { - clear: both; - } - [class*="span"] { - float: left; - min-height: 1px; - margin-left: 20px; - } - .container, - .navbar-static-top .container, - .navbar-fixed-top .container, - .navbar-fixed-bottom .container { - width: 724px; - } - .span12 { - width: 724px; - } - .span11 { - width: 662px; - } - .span10 { - width: 600px; - } - .span9 { - width: 538px; - } - .span8 { - width: 476px; - } - .span7 { - width: 414px; - } - .span6 { - width: 352px; - } - .span5 { - width: 290px; - } - .span4 { - width: 228px; - } - .span3 { - width: 166px; - } - .span2 { - width: 104px; - } - .span1 { - width: 42px; - } - .offset12 { - margin-left: 764px; - } - .offset11 { - margin-left: 702px; - } - .offset10 { - margin-left: 640px; - } - .offset9 { - margin-left: 578px; - } - .offset8 { - margin-left: 516px; - } - .offset7 { - margin-left: 454px; - } - .offset6 { - margin-left: 392px; - } - .offset5 { - margin-left: 330px; - } - .offset4 { - margin-left: 268px; - } - .offset3 { - margin-left: 206px; - } - .offset2 { - margin-left: 144px; - } - .offset1 { - margin-left: 82px; - } - .row-fluid { - width: 100%; - *zoom: 1; - } - .row-fluid:before, - .row-fluid:after { - display: table; - content: ""; - line-height: 0; - } - .row-fluid:after { - clear: both; - } - .row-fluid [class*="span"] { - display: block; - width: 100%; - min-height: 30px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - float: left; - margin-left: 2.7624309392265194%; - *margin-left: 2.709239449864817%; - } - .row-fluid [class*="span"]:first-child { - margin-left: 0; - } - .row-fluid .controls-row [class*="span"] + [class*="span"] { - margin-left: 2.7624309392265194%; - } - .row-fluid .span12 { - width: 100%; - *width: 99.94680851063829%; - } - .row-fluid .span11 { - width: 91.43646408839778%; - *width: 91.38327259903608%; - } - .row-fluid .span10 { - width: 82.87292817679558%; - *width: 82.81973668743387%; - } - .row-fluid .span9 { - width: 74.30939226519337%; - *width: 74.25620077583166%; - } - .row-fluid .span8 { - width: 65.74585635359117%; - *width: 65.69266486422946%; - } - .row-fluid .span7 { - width: 57.18232044198895%; - *width: 57.12912895262725%; - } - .row-fluid .span6 { - width: 48.61878453038674%; - *width: 48.56559304102504%; - } - .row-fluid .span5 { - width: 40.05524861878453%; - *width: 40.00205712942283%; - } - .row-fluid .span4 { - width: 31.491712707182323%; - *width: 31.43852121782062%; - } - .row-fluid .span3 { - width: 22.92817679558011%; - *width: 22.87498530621841%; - } - .row-fluid .span2 { - width: 14.3646408839779%; - *width: 14.311449394616199%; - } - .row-fluid .span1 { - width: 5.801104972375691%; - *width: 5.747913483013988%; - } - .row-fluid .offset12 { - margin-left: 105.52486187845304%; - *margin-left: 105.41847889972962%; - } - .row-fluid .offset12:first-child { - margin-left: 102.76243093922652%; - *margin-left: 102.6560479605031%; - } - .row-fluid .offset11 { - margin-left: 96.96132596685082%; - *margin-left: 96.8549429881274%; - } - .row-fluid .offset11:first-child { - margin-left: 94.1988950276243%; - *margin-left: 94.09251204890089%; - } - .row-fluid .offset10 { - margin-left: 88.39779005524862%; - *margin-left: 88.2914070765252%; - } - .row-fluid .offset10:first-child { - margin-left: 85.6353591160221%; - *margin-left: 85.52897613729868%; - } - .row-fluid .offset9 { - margin-left: 79.8342541436464%; - *margin-left: 79.72787116492299%; - } - .row-fluid .offset9:first-child { - margin-left: 77.07182320441989%; - *margin-left: 76.96544022569647%; - } - .row-fluid .offset8 { - margin-left: 71.2707182320442%; - *margin-left: 71.16433525332079%; - } - .row-fluid .offset8:first-child { - margin-left: 68.50828729281768%; - *margin-left: 68.40190431409427%; - } - .row-fluid .offset7 { - margin-left: 62.70718232044199%; - *margin-left: 62.600799341718584%; - } - .row-fluid .offset7:first-child { - margin-left: 59.94475138121547%; - *margin-left: 59.838368402492065%; - } - .row-fluid .offset6 { - margin-left: 54.14364640883978%; - *margin-left: 54.037263430116376%; - } - .row-fluid .offset6:first-child { - margin-left: 51.38121546961326%; - *margin-left: 51.27483249088986%; - } - .row-fluid .offset5 { - margin-left: 45.58011049723757%; - *margin-left: 45.47372751851417%; - } - .row-fluid .offset5:first-child { - margin-left: 42.81767955801105%; - *margin-left: 42.71129657928765%; - } - .row-fluid .offset4 { - margin-left: 37.01657458563536%; - *margin-left: 36.91019160691196%; - } - .row-fluid .offset4:first-child { - margin-left: 34.25414364640884%; - *margin-left: 34.14776066768544%; - } - .row-fluid .offset3 { - margin-left: 28.45303867403315%; - *margin-left: 28.346655695309746%; - } - .row-fluid .offset3:first-child { - margin-left: 25.69060773480663%; - *margin-left: 25.584224756083227%; - } - .row-fluid .offset2 { - margin-left: 19.88950276243094%; - *margin-left: 19.783119783707537%; - } - .row-fluid .offset2:first-child { - margin-left: 17.12707182320442%; - *margin-left: 17.02068884448102%; - } - .row-fluid .offset1 { - margin-left: 11.32596685082873%; - *margin-left: 11.219583872105325%; - } - .row-fluid .offset1:first-child { - margin-left: 8.56353591160221%; - *margin-left: 8.457152932878806%; - } - input, - textarea, - .uneditable-input { - margin-left: 0; - } - .controls-row [class*="span"] + [class*="span"] { - margin-left: 20px; - } - input.span12, textarea.span12, .uneditable-input.span12 { - width: 710px; - } - input.span11, textarea.span11, .uneditable-input.span11 { - width: 648px; - } - input.span10, textarea.span10, .uneditable-input.span10 { - width: 586px; - } - input.span9, textarea.span9, .uneditable-input.span9 { - width: 524px; - } - input.span8, textarea.span8, .uneditable-input.span8 { - width: 462px; - } - input.span7, textarea.span7, .uneditable-input.span7 { - width: 400px; - } - input.span6, textarea.span6, .uneditable-input.span6 { - width: 338px; - } - input.span5, textarea.span5, .uneditable-input.span5 { - width: 276px; - } - input.span4, textarea.span4, .uneditable-input.span4 { - width: 214px; - } - input.span3, textarea.span3, .uneditable-input.span3 { - width: 152px; - } - input.span2, textarea.span2, .uneditable-input.span2 { - width: 90px; - } - input.span1, textarea.span1, .uneditable-input.span1 { - width: 28px; - } -} -@media (min-width: 1200px) { - .row { - margin-left: -30px; - *zoom: 1; - } - .row:before, - .row:after { - display: table; - content: ""; - line-height: 0; - } - .row:after { - clear: both; - } - [class*="span"] { - float: left; - min-height: 1px; - margin-left: 30px; - } - .container, - .navbar-static-top .container, - .navbar-fixed-top .container, - .navbar-fixed-bottom .container { - width: 1170px; - } - .span12 { - width: 1170px; - } - .span11 { - width: 1070px; - } - .span10 { - width: 970px; - } - .span9 { - width: 870px; - } - .span8 { - width: 770px; - } - .span7 { - width: 670px; - } - .span6 { - width: 570px; - } - .span5 { - width: 470px; - } - .span4 { - width: 370px; - } - .span3 { - width: 270px; - } - .span2 { - width: 170px; - } - .span1 { - width: 70px; - } - .offset12 { - margin-left: 1230px; - } - .offset11 { - margin-left: 1130px; - } - .offset10 { - margin-left: 1030px; - } - .offset9 { - margin-left: 930px; - } - .offset8 { - margin-left: 830px; - } - .offset7 { - margin-left: 730px; - } - .offset6 { - margin-left: 630px; - } - .offset5 { - margin-left: 530px; - } - .offset4 { - margin-left: 430px; - } - .offset3 { - margin-left: 330px; - } - .offset2 { - margin-left: 230px; - } - .offset1 { - margin-left: 130px; - } - .row-fluid { - width: 100%; - *zoom: 1; - } - .row-fluid:before, - .row-fluid:after { - display: table; - content: ""; - line-height: 0; - } - .row-fluid:after { - clear: both; - } - .row-fluid [class*="span"] { - display: block; - width: 100%; - min-height: 30px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - float: left; - margin-left: 2.564102564102564%; - *margin-left: 2.5109110747408616%; - } - .row-fluid [class*="span"]:first-child { - margin-left: 0; - } - .row-fluid .controls-row [class*="span"] + [class*="span"] { - margin-left: 2.564102564102564%; - } - .row-fluid .span12 { - width: 100%; - *width: 99.94680851063829%; - } - .row-fluid .span11 { - width: 91.45299145299145%; - *width: 91.39979996362975%; - } - .row-fluid .span10 { - width: 82.90598290598291%; - *width: 82.8527914166212%; - } - .row-fluid .span9 { - width: 74.35897435897436%; - *width: 74.30578286961266%; - } - .row-fluid .span8 { - width: 65.81196581196582%; - *width: 65.75877432260411%; - } - .row-fluid .span7 { - width: 57.26495726495726%; - *width: 57.21176577559556%; - } - .row-fluid .span6 { - width: 48.717948717948715%; - *width: 48.664757228587014%; - } - .row-fluid .span5 { - width: 40.17094017094017%; - *width: 40.11774868157847%; - } - .row-fluid .span4 { - width: 31.623931623931625%; - *width: 31.570740134569924%; - } - .row-fluid .span3 { - width: 23.076923076923077%; - *width: 23.023731587561375%; - } - .row-fluid .span2 { - width: 14.52991452991453%; - *width: 14.476723040552828%; - } - .row-fluid .span1 { - width: 5.982905982905983%; - *width: 5.929714493544281%; - } - .row-fluid .offset12 { - margin-left: 105.12820512820512%; - *margin-left: 105.02182214948171%; - } - .row-fluid .offset12:first-child { - margin-left: 102.56410256410257%; - *margin-left: 102.45771958537915%; - } - .row-fluid .offset11 { - margin-left: 96.58119658119658%; - *margin-left: 96.47481360247316%; - } - .row-fluid .offset11:first-child { - margin-left: 94.01709401709402%; - *margin-left: 93.91071103837061%; - } - .row-fluid .offset10 { - margin-left: 88.03418803418803%; - *margin-left: 87.92780505546462%; - } - .row-fluid .offset10:first-child { - margin-left: 85.47008547008548%; - *margin-left: 85.36370249136206%; - } - .row-fluid .offset9 { - margin-left: 79.48717948717949%; - *margin-left: 79.38079650845607%; - } - .row-fluid .offset9:first-child { - margin-left: 76.92307692307693%; - *margin-left: 76.81669394435352%; - } - .row-fluid .offset8 { - margin-left: 70.94017094017094%; - *margin-left: 70.83378796144753%; - } - .row-fluid .offset8:first-child { - margin-left: 68.37606837606839%; - *margin-left: 68.26968539734497%; - } - .row-fluid .offset7 { - margin-left: 62.393162393162385%; - *margin-left: 62.28677941443899%; - } - .row-fluid .offset7:first-child { - margin-left: 59.82905982905982%; - *margin-left: 59.72267685033642%; - } - .row-fluid .offset6 { - margin-left: 53.84615384615384%; - *margin-left: 53.739770867430444%; - } - .row-fluid .offset6:first-child { - margin-left: 51.28205128205128%; - *margin-left: 51.175668303327875%; - } - .row-fluid .offset5 { - margin-left: 45.299145299145295%; - *margin-left: 45.1927623204219%; - } - .row-fluid .offset5:first-child { - margin-left: 42.73504273504273%; - *margin-left: 42.62865975631933%; - } - .row-fluid .offset4 { - margin-left: 36.75213675213675%; - *margin-left: 36.645753773413354%; - } - .row-fluid .offset4:first-child { - margin-left: 34.18803418803419%; - *margin-left: 34.081651209310785%; - } - .row-fluid .offset3 { - margin-left: 28.205128205128204%; - *margin-left: 28.0987452264048%; - } - .row-fluid .offset3:first-child { - margin-left: 25.641025641025642%; - *margin-left: 25.53464266230224%; - } - .row-fluid .offset2 { - margin-left: 19.65811965811966%; - *margin-left: 19.551736679396257%; - } - .row-fluid .offset2:first-child { - margin-left: 17.094017094017094%; - *margin-left: 16.98763411529369%; - } - .row-fluid .offset1 { - margin-left: 11.11111111111111%; - *margin-left: 11.004728132387708%; - } - .row-fluid .offset1:first-child { - margin-left: 8.547008547008547%; - *margin-left: 8.440625568285142%; - } - input, - textarea, - .uneditable-input { - margin-left: 0; - } - .controls-row [class*="span"] + [class*="span"] { - margin-left: 30px; - } - input.span12, textarea.span12, .uneditable-input.span12 { - width: 1156px; - } - input.span11, textarea.span11, .uneditable-input.span11 { - width: 1056px; - } - input.span10, textarea.span10, .uneditable-input.span10 { - width: 956px; - } - input.span9, textarea.span9, .uneditable-input.span9 { - width: 856px; - } - input.span8, textarea.span8, .uneditable-input.span8 { - width: 756px; - } - input.span7, textarea.span7, .uneditable-input.span7 { - width: 656px; - } - input.span6, textarea.span6, .uneditable-input.span6 { - width: 556px; - } - input.span5, textarea.span5, .uneditable-input.span5 { - width: 456px; - } - input.span4, textarea.span4, .uneditable-input.span4 { - width: 356px; - } - input.span3, textarea.span3, .uneditable-input.span3 { - width: 256px; - } - input.span2, textarea.span2, .uneditable-input.span2 { - width: 156px; - } - input.span1, textarea.span1, .uneditable-input.span1 { - width: 56px; - } - .thumbnails { - margin-left: -30px; - } - .thumbnails > li { - margin-left: 30px; - } - .row-fluid .thumbnails { - margin-left: 0; - } -} -@media (max-width: 979px) { - body { - padding-top: 0; - } - .navbar-fixed-top, - .navbar-fixed-bottom { - position: static; - } - .navbar-fixed-top { - margin-bottom: 20px; - } - .navbar-fixed-bottom { - margin-top: 20px; - } - .navbar-fixed-top .navbar-inner, - .navbar-fixed-bottom .navbar-inner { - padding: 5px; - } - .navbar .container { - width: auto; - padding: 0; - } - .navbar .brand { - padding-left: 10px; - padding-right: 10px; - margin: 0 0 0 -5px; - } - .nav-collapse { - clear: both; - } - .nav-collapse .nav { - float: none; - margin: 0 0 10px; - } - .nav-collapse .nav > li { - float: none; - } - .nav-collapse .nav > li > a { - margin-bottom: 2px; - } - .nav-collapse .nav > .divider-vertical { - display: none; - } - .nav-collapse .nav .nav-header { - color: #777777; - text-shadow: none; - } - .nav-collapse .nav > li > a, - .nav-collapse .dropdown-menu a { - padding: 9px 15px; - font-weight: bold; - color: #777777; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - } - .nav-collapse .btn { - padding: 4px 10px 4px; - font-weight: normal; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - } - .nav-collapse .dropdown-menu li + li a { - margin-bottom: 2px; - } - .nav-collapse .nav > li > a:hover, - .nav-collapse .dropdown-menu a:hover { - background-color: #f2f2f2; - } - .navbar-inverse .nav-collapse .nav > li > a, - .navbar-inverse .nav-collapse .dropdown-menu a { - color: #999999; - } - .navbar-inverse .nav-collapse .nav > li > a:hover, - .navbar-inverse .nav-collapse .dropdown-menu a:hover { - background-color: #111111; - } - .nav-collapse.in .btn-group { - margin-top: 5px; - padding: 0; - } - .nav-collapse .dropdown-menu { - position: static; - top: auto; - left: auto; - float: none; - display: none; - max-width: none; - margin: 0 15px; - padding: 0; - background-color: transparent; - border: none; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; - } - .nav-collapse .open > .dropdown-menu { - display: block; - } - .nav-collapse .dropdown-menu:before, - .nav-collapse .dropdown-menu:after { - display: none; - } - .nav-collapse .dropdown-menu .divider { - display: none; - } - .nav-collapse .nav > li > .dropdown-menu:before, - .nav-collapse .nav > li > .dropdown-menu:after { - display: none; - } - .nav-collapse .navbar-form, - .nav-collapse .navbar-search { - float: none; - padding: 10px 15px; - margin: 10px 0; - border-top: 1px solid #f2f2f2; - border-bottom: 1px solid #f2f2f2; - -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1); - -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1); - box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1); - } - .navbar-inverse .nav-collapse .navbar-form, - .navbar-inverse .nav-collapse .navbar-search { - border-top-color: #111111; - border-bottom-color: #111111; - } - .navbar .nav-collapse .nav.pull-right { - float: none; - margin-left: 0; - } - .nav-collapse, - .nav-collapse.collapse { - overflow: hidden; - height: 0; - } - .navbar .btn-navbar { - display: block; - } - .navbar-static .navbar-inner { - padding-left: 10px; - padding-right: 10px; - } -} -@media (min-width: 980px) { - .nav-collapse.collapse { - height: auto !important; - overflow: visible !important; - } -} +/*! + * Bootstrap v2.2.2 + * + * Copyright 2012 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 @twitter by @mdo and @fat. + */ +.clearfix { + *zoom: 1; +} +.clearfix:before, +.clearfix:after { + display: table; + content: ""; + line-height: 0; +} +.clearfix:after { + clear: both; +} +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +.input-block-level { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +nav, +section { + display: block; +} +audio, +canvas, +video { + display: inline-block; + *display: inline; + *zoom: 1; +} +audio:not([controls]) { + display: none; +} +html { + font-size: 100%; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} +a:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +a:hover, +a:active { + outline: 0; +} +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} +sup { + top: -0.5em; +} +sub { + bottom: -0.25em; +} +img { + /* Responsive images (ensure images don't scale beyond their parents) */ + + max-width: 100%; + /* Part 1: Set a maxium relative to the parent */ + + width: auto\9; + /* IE7-8 need help adjusting responsive images */ + + height: auto; + /* Part 2: Scale the height according to the width, otherwise you get stretching */ + + vertical-align: middle; + border: 0; + -ms-interpolation-mode: bicubic; +} +#map_canvas img, +.google-maps img { + max-width: none; +} +button, +input, +select, +textarea { + margin: 0; + font-size: 100%; + vertical-align: middle; +} +button, +input { + *overflow: visible; + line-height: normal; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} +label, +select, +button, +input[type="button"], +input[type="reset"], +input[type="submit"], +input[type="radio"], +input[type="checkbox"] { + cursor: pointer; +} +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-decoration, +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} +textarea { + overflow: auto; + vertical-align: top; +} +@media print { + * { + text-shadow: none !important; + color: #000 !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: 0.5cm; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } +} +body { + margin: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 20px; + color: #333333; + background-color: #ffffff; +} +a { + color: #0088cc; + text-decoration: none; +} +a:hover { + color: #005580; + text-decoration: underline; +} +.img-rounded { + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} +.img-polaroid { + padding: 4px; + background-color: #fff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +.img-circle { + -webkit-border-radius: 500px; + -moz-border-radius: 500px; + border-radius: 500px; +} +.row { + margin-left: -20px; + *zoom: 1; +} +.row:before, +.row:after { + display: table; + content: ""; + line-height: 0; +} +.row:after { + clear: both; +} +[class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; +} +.container, +.navbar-static-top .container, +.navbar-fixed-top .container, +.navbar-fixed-bottom .container { + width: 940px; +} +.span12 { + width: 940px; +} +.span11 { + width: 860px; +} +.span10 { + width: 780px; +} +.span9 { + width: 700px; +} +.span8 { + width: 620px; +} +.span7 { + width: 540px; +} +.span6 { + width: 460px; +} +.span5 { + width: 380px; +} +.span4 { + width: 300px; +} +.span3 { + width: 220px; +} +.span2 { + width: 140px; +} +.span1 { + width: 60px; +} +.offset12 { + margin-left: 980px; +} +.offset11 { + margin-left: 900px; +} +.offset10 { + margin-left: 820px; +} +.offset9 { + margin-left: 740px; +} +.offset8 { + margin-left: 660px; +} +.offset7 { + margin-left: 580px; +} +.offset6 { + margin-left: 500px; +} +.offset5 { + margin-left: 420px; +} +.offset4 { + margin-left: 340px; +} +.offset3 { + margin-left: 260px; +} +.offset2 { + margin-left: 180px; +} +.offset1 { + margin-left: 100px; +} +.row-fluid { + width: 100%; + *zoom: 1; +} +.row-fluid:before, +.row-fluid:after { + display: table; + content: ""; + line-height: 0; +} +.row-fluid:after { + clear: both; +} +.row-fluid [class*="span"] { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + float: left; + margin-left: 2.127659574468085%; + *margin-left: 2.074468085106383%; +} +.row-fluid [class*="span"]:first-child { + margin-left: 0; +} +.row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.127659574468085%; +} +.row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; +} +.row-fluid .span11 { + width: 91.48936170212765%; + *width: 91.43617021276594%; +} +.row-fluid .span10 { + width: 82.97872340425532%; + *width: 82.92553191489361%; +} +.row-fluid .span9 { + width: 74.46808510638297%; + *width: 74.41489361702126%; +} +.row-fluid .span8 { + width: 65.95744680851064%; + *width: 65.90425531914893%; +} +.row-fluid .span7 { + width: 57.44680851063829%; + *width: 57.39361702127659%; +} +.row-fluid .span6 { + width: 48.93617021276595%; + *width: 48.88297872340425%; +} +.row-fluid .span5 { + width: 40.42553191489362%; + *width: 40.37234042553192%; +} +.row-fluid .span4 { + width: 31.914893617021278%; + *width: 31.861702127659576%; +} +.row-fluid .span3 { + width: 23.404255319148934%; + *width: 23.351063829787233%; +} +.row-fluid .span2 { + width: 14.893617021276595%; + *width: 14.840425531914894%; +} +.row-fluid .span1 { + width: 6.382978723404255%; + *width: 6.329787234042553%; +} +.row-fluid .offset12 { + margin-left: 104.25531914893617%; + *margin-left: 104.14893617021275%; +} +.row-fluid .offset12:first-child { + margin-left: 102.12765957446808%; + *margin-left: 102.02127659574467%; +} +.row-fluid .offset11 { + margin-left: 95.74468085106382%; + *margin-left: 95.6382978723404%; +} +.row-fluid .offset11:first-child { + margin-left: 93.61702127659574%; + *margin-left: 93.51063829787232%; +} +.row-fluid .offset10 { + margin-left: 87.23404255319149%; + *margin-left: 87.12765957446807%; +} +.row-fluid .offset10:first-child { + margin-left: 85.1063829787234%; + *margin-left: 84.99999999999999%; +} +.row-fluid .offset9 { + margin-left: 78.72340425531914%; + *margin-left: 78.61702127659572%; +} +.row-fluid .offset9:first-child { + margin-left: 76.59574468085106%; + *margin-left: 76.48936170212764%; +} +.row-fluid .offset8 { + margin-left: 70.2127659574468%; + *margin-left: 70.10638297872339%; +} +.row-fluid .offset8:first-child { + margin-left: 68.08510638297872%; + *margin-left: 67.9787234042553%; +} +.row-fluid .offset7 { + margin-left: 61.70212765957446%; + *margin-left: 61.59574468085106%; +} +.row-fluid .offset7:first-child { + margin-left: 59.574468085106375%; + *margin-left: 59.46808510638297%; +} +.row-fluid .offset6 { + margin-left: 53.191489361702125%; + *margin-left: 53.085106382978715%; +} +.row-fluid .offset6:first-child { + margin-left: 51.063829787234035%; + *margin-left: 50.95744680851063%; +} +.row-fluid .offset5 { + margin-left: 44.68085106382979%; + *margin-left: 44.57446808510638%; +} +.row-fluid .offset5:first-child { + margin-left: 42.5531914893617%; + *margin-left: 42.4468085106383%; +} +.row-fluid .offset4 { + margin-left: 36.170212765957444%; + *margin-left: 36.06382978723405%; +} +.row-fluid .offset4:first-child { + margin-left: 34.04255319148936%; + *margin-left: 33.93617021276596%; +} +.row-fluid .offset3 { + margin-left: 27.659574468085104%; + *margin-left: 27.5531914893617%; +} +.row-fluid .offset3:first-child { + margin-left: 25.53191489361702%; + *margin-left: 25.425531914893618%; +} +.row-fluid .offset2 { + margin-left: 19.148936170212764%; + *margin-left: 19.04255319148936%; +} +.row-fluid .offset2:first-child { + margin-left: 17.02127659574468%; + *margin-left: 16.914893617021278%; +} +.row-fluid .offset1 { + margin-left: 10.638297872340425%; + *margin-left: 10.53191489361702%; +} +.row-fluid .offset1:first-child { + margin-left: 8.51063829787234%; + *margin-left: 8.404255319148938%; +} +[class*="span"].hide, +.row-fluid [class*="span"].hide { + display: none; +} +[class*="span"].pull-right, +.row-fluid [class*="span"].pull-right { + float: right; +} +.container { + margin-right: auto; + margin-left: auto; + *zoom: 1; +} +.container:before, +.container:after { + display: table; + content: ""; + line-height: 0; +} +.container:after { + clear: both; +} +.container-fluid { + padding-right: 20px; + padding-left: 20px; + *zoom: 1; +} +.container-fluid:before, +.container-fluid:after { + display: table; + content: ""; + line-height: 0; +} +.container-fluid:after { + clear: both; +} +p { + margin: 0 0 10px; +} +.lead { + margin-bottom: 20px; + font-size: 21px; + font-weight: 200; + line-height: 30px; +} +small { + font-size: 85%; +} +strong { + font-weight: bold; +} +em { + font-style: italic; +} +cite { + font-style: normal; +} +.muted { + color: #999999; +} +a.muted:hover { + color: #808080; +} +.text-warning { + color: #c09853; +} +a.text-warning:hover { + color: #a47e3c; +} +.text-error { + color: #b94a48; +} +a.text-error:hover { + color: #953b39; +} +.text-info { + color: #3a87ad; +} +a.text-info:hover { + color: #2d6987; +} +.text-success { + color: #468847; +} +a.text-success:hover { + color: #356635; +} +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 10px 0; + font-family: inherit; + font-weight: bold; + line-height: 20px; + color: inherit; + text-rendering: optimizelegibility; +} +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small { + font-weight: normal; + line-height: 1; + color: #999999; +} +h1, +h2, +h3 { + line-height: 40px; +} +h1 { + font-size: 38.5px; +} +h2 { + font-size: 31.5px; +} +h3 { + font-size: 24.5px; +} +h4 { + font-size: 17.5px; +} +h5 { + font-size: 14px; +} +h6 { + font-size: 11.9px; +} +h1 small { + font-size: 24.5px; +} +h2 small { + font-size: 17.5px; +} +h3 small { + font-size: 14px; +} +h4 small { + font-size: 14px; +} +.page-header { + padding-bottom: 9px; + margin: 20px 0 30px; + border-bottom: 1px solid #eeeeee; +} +ul, +ol { + padding: 0; + margin: 0 0 10px 25px; +} +ul ul, +ul ol, +ol ol, +ol ul { + margin-bottom: 0; +} +li { + line-height: 20px; +} +ul.unstyled, +ol.unstyled { + margin-left: 0; + list-style: none; +} +ul.inline, +ol.inline { + margin-left: 0; + list-style: none; +} +ul.inline > li, +ol.inline > li { + display: inline-block; + padding-left: 5px; + padding-right: 5px; +} +dl { + margin-bottom: 20px; +} +dt, +dd { + line-height: 20px; +} +dt { + font-weight: bold; +} +dd { + margin-left: 10px; +} +.dl-horizontal { + *zoom: 1; +} +.dl-horizontal:before, +.dl-horizontal:after { + display: table; + content: ""; + line-height: 0; +} +.dl-horizontal:after { + clear: both; +} +.dl-horizontal dt { + float: left; + width: 160px; + clear: left; + text-align: right; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.dl-horizontal dd { + margin-left: 180px; +} +hr { + margin: 20px 0; + border: 0; + border-top: 1px solid #eeeeee; + border-bottom: 1px solid #ffffff; +} +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #999999; +} +abbr.initialism { + font-size: 90%; + text-transform: uppercase; +} +blockquote { + padding: 0 0 0 15px; + margin: 0 0 20px; + border-left: 5px solid #eeeeee; +} +blockquote p { + margin-bottom: 0; + font-size: 16px; + font-weight: 300; + line-height: 25px; +} +blockquote small { + display: block; + line-height: 20px; + color: #999999; +} +blockquote small:before { + content: '\2014 \00A0'; +} +blockquote.pull-right { + float: 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: 20px; +} +code, +pre { + padding: 0 3px 2px; + font-family: Monaco, Menlo, Consolas, "Courier New", monospace; + font-size: 12px; + color: #333333; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +code { + padding: 2px 4px; + color: #d14; + background-color: #f7f7f9; + border: 1px solid #e1e1e8; + white-space: nowrap; +} +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 20px; + word-break: break-all; + word-wrap: break-word; + white-space: pre; + white-space: pre-wrap; + background-color: #f5f5f5; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.15); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +pre.prettyprint { + margin-bottom: 20px; +} +pre code { + padding: 0; + color: inherit; + white-space: pre; + white-space: pre-wrap; + background-color: transparent; + border: 0; +} +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} +.label, +.badge { + display: inline-block; + padding: 2px 4px; + font-size: 11.844px; + font-weight: bold; + line-height: 14px; + color: #ffffff; + vertical-align: baseline; + white-space: nowrap; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #999999; +} +.label { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.badge { + padding-left: 9px; + padding-right: 9px; + -webkit-border-radius: 9px; + -moz-border-radius: 9px; + border-radius: 9px; +} +.label:empty, +.badge:empty { + display: none; +} +a.label:hover, +a.badge:hover { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} +.label-important, +.badge-important { + background-color: #b94a48; +} +.label-important[href], +.badge-important[href] { + background-color: #953b39; +} +.label-warning, +.badge-warning { + background-color: #f89406; +} +.label-warning[href], +.badge-warning[href] { + background-color: #c67605; +} +.label-success, +.badge-success { + background-color: #468847; +} +.label-success[href], +.badge-success[href] { + background-color: #356635; +} +.label-info, +.badge-info { + background-color: #3a87ad; +} +.label-info[href], +.badge-info[href] { + background-color: #2d6987; +} +.label-inverse, +.badge-inverse { + background-color: #333333; +} +.label-inverse[href], +.badge-inverse[href] { + background-color: #1a1a1a; +} +.btn .label, +.btn .badge { + position: relative; + top: -1px; +} +.btn-mini .label, +.btn-mini .badge { + top: 0; +} +table { + max-width: 100%; + background-color: transparent; + border-collapse: collapse; + border-spacing: 0; +} +.table { + width: 100%; + margin-bottom: 20px; +} +.table th, +.table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #dddddd; +} +.table th { + font-weight: bold; +} +.table thead th { + vertical-align: bottom; +} +.table caption + thead tr:first-child th, +.table caption + thead tr:first-child td, +.table colgroup + thead tr:first-child th, +.table colgroup + thead tr:first-child td, +.table thead:first-child tr:first-child th, +.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 th, +.table-condensed td { + padding: 4px 5px; +} +.table-bordered { + border: 1px solid #dddddd; + border-collapse: separate; + *border-collapse: collapse; + border-left: 0; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.table-bordered th, +.table-bordered td { + border-left: 1px solid #dddddd; +} +.table-bordered caption + thead tr:first-child th, +.table-bordered caption + tbody tr:first-child th, +.table-bordered caption + tbody tr:first-child td, +.table-bordered colgroup + thead tr:first-child th, +.table-bordered colgroup + tbody tr:first-child th, +.table-bordered colgroup + tbody tr:first-child td, +.table-bordered thead:first-child tr:first-child th, +.table-bordered tbody:first-child tr:first-child th, +.table-bordered tbody:first-child tr:first-child td { + border-top: 0; +} +.table-bordered thead:first-child tr:first-child > th:first-child, +.table-bordered tbody:first-child tr:first-child > td:first-child { + -webkit-border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; + border-top-left-radius: 4px; +} +.table-bordered thead:first-child tr:first-child > th:last-child, +.table-bordered tbody:first-child tr:first-child > td:last-child { + -webkit-border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; + border-top-right-radius: 4px; +} +.table-bordered thead:last-child tr:last-child > th:first-child, +.table-bordered tbody:last-child tr:last-child > td:first-child, +.table-bordered tfoot:last-child tr:last-child > td:first-child { + -webkit-border-bottom-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + border-bottom-left-radius: 4px; +} +.table-bordered thead:last-child tr:last-child > th:last-child, +.table-bordered tbody:last-child tr:last-child > td:last-child, +.table-bordered tfoot:last-child tr:last-child > td:last-child { + -webkit-border-bottom-right-radius: 4px; + -moz-border-radius-bottomright: 4px; + border-bottom-right-radius: 4px; +} +.table-bordered tfoot + tbody:last-child tr:last-child td:first-child { + -webkit-border-bottom-left-radius: 0; + -moz-border-radius-bottomleft: 0; + border-bottom-left-radius: 0; +} +.table-bordered tfoot + tbody:last-child tr:last-child td:last-child { + -webkit-border-bottom-right-radius: 0; + -moz-border-radius-bottomright: 0; + border-bottom-right-radius: 0; +} +.table-bordered caption + thead tr:first-child th:first-child, +.table-bordered caption + tbody tr:first-child td:first-child, +.table-bordered colgroup + thead tr:first-child th:first-child, +.table-bordered colgroup + tbody tr:first-child td:first-child { + -webkit-border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; + border-top-left-radius: 4px; +} +.table-bordered caption + thead tr:first-child th:last-child, +.table-bordered caption + tbody tr:first-child td:last-child, +.table-bordered colgroup + thead tr:first-child th:last-child, +.table-bordered colgroup + tbody tr:first-child td:last-child { + -webkit-border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; + border-top-right-radius: 4px; +} +.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 td[class*="span"], +table th[class*="span"], +.row-fluid table td[class*="span"], +.row-fluid table th[class*="span"] { + display: table-cell; + float: none; + margin-left: 0; +} +.table td.span1, +.table th.span1 { + float: none; + width: 44px; + margin-left: 0; +} +.table td.span2, +.table th.span2 { + float: none; + width: 124px; + margin-left: 0; +} +.table td.span3, +.table th.span3 { + float: none; + width: 204px; + margin-left: 0; +} +.table td.span4, +.table th.span4 { + float: none; + width: 284px; + margin-left: 0; +} +.table td.span5, +.table th.span5 { + float: none; + width: 364px; + margin-left: 0; +} +.table td.span6, +.table th.span6 { + float: none; + width: 444px; + margin-left: 0; +} +.table td.span7, +.table th.span7 { + float: none; + width: 524px; + margin-left: 0; +} +.table td.span8, +.table th.span8 { + float: none; + width: 604px; + margin-left: 0; +} +.table td.span9, +.table th.span9 { + float: none; + width: 684px; + margin-left: 0; +} +.table td.span10, +.table th.span10 { + float: none; + width: 764px; + margin-left: 0; +} +.table td.span11, +.table th.span11 { + float: none; + width: 844px; + margin-left: 0; +} +.table td.span12, +.table th.span12 { + float: none; + width: 924px; + margin-left: 0; +} +.table tbody tr.success td { + background-color: #dff0d8; +} +.table tbody tr.error td { + background-color: #f2dede; +} +.table tbody tr.warning td { + background-color: #fcf8e3; +} +.table tbody tr.info td { + background-color: #d9edf7; +} +.table-hover tbody tr.success:hover td { + background-color: #d0e9c6; +} +.table-hover tbody tr.error:hover td { + background-color: #ebcccc; +} +.table-hover tbody tr.warning:hover td { + background-color: #faf2cc; +} +.table-hover tbody tr.info:hover td { + background-color: #c4e3f3; +} +form { + margin: 0 0 20px; +} +fieldset { + padding: 0; + margin: 0; + border: 0; +} +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: 40px; + color: #333333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} +legend small { + font-size: 15px; + color: #999999; +} +label, +input, +button, +select, +textarea { + font-size: 14px; + font-weight: normal; + line-height: 20px; +} +input, +button, +select, +textarea { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +} +label { + display: block; + margin-bottom: 5px; +} +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"], +.uneditable-input { + display: inline-block; + height: 20px; + padding: 4px 6px; + margin-bottom: 10px; + font-size: 14px; + line-height: 20px; + color: #555555; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + vertical-align: middle; +} +input, +textarea, +.uneditable-input { + width: 206px; +} +textarea { + height: auto; +} +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"], +.uneditable-input { + background-color: #ffffff; + border: 1px solid #cccccc; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border linear .2s, box-shadow linear .2s; + -moz-transition: border linear .2s, box-shadow linear .2s; + -o-transition: border linear .2s, box-shadow linear .2s; + transition: border linear .2s, box-shadow linear .2s; +} +textarea:focus, +input[type="text"]:focus, +input[type="password"]:focus, +input[type="datetime"]:focus, +input[type="datetime-local"]:focus, +input[type="date"]:focus, +input[type="month"]:focus, +input[type="time"]:focus, +input[type="week"]:focus, +input[type="number"]:focus, +input[type="email"]:focus, +input[type="url"]:focus, +input[type="search"]:focus, +input[type="tel"]:focus, +input[type="color"]:focus, +.uneditable-input:focus { + border-color: rgba(82, 168, 236, 0.8); + outline: 0; + outline: thin dotted \9; + /* IE6-9 */ + + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6); + -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6); +} +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + *margin-top: 0; + /* IE7 */ + + margin-top: 1px \9; + /* IE8-9 */ + + line-height: normal; +} +input[type="file"], +input[type="image"], +input[type="submit"], +input[type="reset"], +input[type="button"], +input[type="radio"], +input[type="checkbox"] { + width: auto; +} +select, +input[type="file"] { + height: 30px; + /* In IE7, the height of the select element cannot be changed by height, only font-size */ + + *margin-top: 4px; + /* For IE7, add top margin to align select with labels */ + + line-height: 30px; +} +select { + width: 220px; + border: 1px solid #cccccc; + background-color: #ffffff; +} +select[multiple], +select[size] { + height: auto; +} +select:focus, +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.uneditable-input, +.uneditable-textarea { + color: #999999; + background-color: #fcfcfc; + border-color: #cccccc; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + cursor: not-allowed; +} +.uneditable-input { + overflow: hidden; + white-space: nowrap; +} +.uneditable-textarea { + width: auto; + height: auto; +} +input:-moz-placeholder, +textarea:-moz-placeholder { + color: #999999; +} +input:-ms-input-placeholder, +textarea:-ms-input-placeholder { + color: #999999; +} +input::-webkit-input-placeholder, +textarea::-webkit-input-placeholder { + color: #999999; +} +.radio, +.checkbox { + min-height: 20px; + padding-left: 20px; +} +.radio input[type="radio"], +.checkbox input[type="checkbox"] { + float: left; + margin-left: -20px; +} +.controls > .radio:first-child, +.controls > .checkbox:first-child { + padding-top: 5px; +} +.radio.inline, +.checkbox.inline { + display: inline-block; + padding-top: 5px; + margin-bottom: 0; + vertical-align: middle; +} +.radio.inline + .radio.inline, +.checkbox.inline + .checkbox.inline { + margin-left: 10px; +} +.input-mini { + width: 60px; +} +.input-small { + width: 90px; +} +.input-medium { + width: 150px; +} +.input-large { + width: 210px; +} +.input-xlarge { + width: 270px; +} +.input-xxlarge { + width: 530px; +} +input[class*="span"], +select[class*="span"], +textarea[class*="span"], +.uneditable-input[class*="span"], +.row-fluid input[class*="span"], +.row-fluid select[class*="span"], +.row-fluid textarea[class*="span"], +.row-fluid .uneditable-input[class*="span"] { + float: none; + margin-left: 0; +} +.input-append input[class*="span"], +.input-append .uneditable-input[class*="span"], +.input-prepend input[class*="span"], +.input-prepend .uneditable-input[class*="span"], +.row-fluid input[class*="span"], +.row-fluid select[class*="span"], +.row-fluid textarea[class*="span"], +.row-fluid .uneditable-input[class*="span"], +.row-fluid .input-prepend [class*="span"], +.row-fluid .input-append [class*="span"] { + display: inline-block; +} +input, +textarea, +.uneditable-input { + margin-left: 0; +} +.controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; +} +input.span12, textarea.span12, .uneditable-input.span12 { + width: 926px; +} +input.span11, textarea.span11, .uneditable-input.span11 { + width: 846px; +} +input.span10, textarea.span10, .uneditable-input.span10 { + width: 766px; +} +input.span9, textarea.span9, .uneditable-input.span9 { + width: 686px; +} +input.span8, textarea.span8, .uneditable-input.span8 { + width: 606px; +} +input.span7, textarea.span7, .uneditable-input.span7 { + width: 526px; +} +input.span6, textarea.span6, .uneditable-input.span6 { + width: 446px; +} +input.span5, textarea.span5, .uneditable-input.span5 { + width: 366px; +} +input.span4, textarea.span4, .uneditable-input.span4 { + width: 286px; +} +input.span3, textarea.span3, .uneditable-input.span3 { + width: 206px; +} +input.span2, textarea.span2, .uneditable-input.span2 { + width: 126px; +} +input.span1, textarea.span1, .uneditable-input.span1 { + width: 46px; +} +.controls-row { + *zoom: 1; +} +.controls-row:before, +.controls-row:after { + display: table; + content: ""; + line-height: 0; +} +.controls-row:after { + clear: both; +} +.controls-row [class*="span"], +.row-fluid .controls-row [class*="span"] { + float: left; +} +.controls-row .checkbox[class*="span"], +.controls-row .radio[class*="span"] { + padding-top: 5px; +} +input[disabled], +select[disabled], +textarea[disabled], +input[readonly], +select[readonly], +textarea[readonly] { + cursor: not-allowed; + background-color: #eeeeee; +} +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"][readonly], +input[type="checkbox"][readonly] { + background-color: transparent; +} +.control-group.warning .control-label, +.control-group.warning .help-block, +.control-group.warning .help-inline { + color: #c09853; +} +.control-group.warning .checkbox, +.control-group.warning .radio, +.control-group.warning input, +.control-group.warning select, +.control-group.warning textarea { + color: #c09853; +} +.control-group.warning input, +.control-group.warning select, +.control-group.warning textarea { + border-color: #c09853; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.control-group.warning input:focus, +.control-group.warning select:focus, +.control-group.warning textarea:focus { + border-color: #a47e3c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; + -moz-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; +} +.control-group.warning .input-prepend .add-on, +.control-group.warning .input-append .add-on { + color: #c09853; + background-color: #fcf8e3; + border-color: #c09853; +} +.control-group.error .control-label, +.control-group.error .help-block, +.control-group.error .help-inline { + color: #b94a48; +} +.control-group.error .checkbox, +.control-group.error .radio, +.control-group.error input, +.control-group.error select, +.control-group.error textarea { + color: #b94a48; +} +.control-group.error input, +.control-group.error select, +.control-group.error textarea { + border-color: #b94a48; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.control-group.error input:focus, +.control-group.error select:focus, +.control-group.error textarea:focus { + border-color: #953b39; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; + -moz-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; +} +.control-group.error .input-prepend .add-on, +.control-group.error .input-append .add-on { + color: #b94a48; + background-color: #f2dede; + border-color: #b94a48; +} +.control-group.success .control-label, +.control-group.success .help-block, +.control-group.success .help-inline { + color: #468847; +} +.control-group.success .checkbox, +.control-group.success .radio, +.control-group.success input, +.control-group.success select, +.control-group.success textarea { + color: #468847; +} +.control-group.success input, +.control-group.success select, +.control-group.success textarea { + border-color: #468847; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.control-group.success input:focus, +.control-group.success select:focus, +.control-group.success textarea:focus { + border-color: #356635; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; + -moz-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; +} +.control-group.success .input-prepend .add-on, +.control-group.success .input-append .add-on { + color: #468847; + background-color: #dff0d8; + border-color: #468847; +} +.control-group.info .control-label, +.control-group.info .help-block, +.control-group.info .help-inline { + color: #3a87ad; +} +.control-group.info .checkbox, +.control-group.info .radio, +.control-group.info input, +.control-group.info select, +.control-group.info textarea { + color: #3a87ad; +} +.control-group.info input, +.control-group.info select, +.control-group.info textarea { + border-color: #3a87ad; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.control-group.info input:focus, +.control-group.info select:focus, +.control-group.info textarea:focus { + border-color: #2d6987; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; +} +.control-group.info .input-prepend .add-on, +.control-group.info .input-append .add-on { + color: #3a87ad; + background-color: #d9edf7; + border-color: #3a87ad; +} +input:focus:invalid, +textarea:focus:invalid, +select:focus:invalid { + color: #b94a48; + border-color: #ee5f5b; +} +input:focus:invalid:focus, +textarea:focus:invalid:focus, +select:focus:invalid:focus { + border-color: #e9322d; + -webkit-box-shadow: 0 0 6px #f8b9b7; + -moz-box-shadow: 0 0 6px #f8b9b7; + box-shadow: 0 0 6px #f8b9b7; +} +.form-actions { + padding: 19px 20px 20px; + margin-top: 20px; + margin-bottom: 20px; + background-color: #f5f5f5; + border-top: 1px solid #e5e5e5; + *zoom: 1; +} +.form-actions:before, +.form-actions:after { + display: table; + content: ""; + line-height: 0; +} +.form-actions:after { + clear: both; +} +.help-block, +.help-inline { + color: #595959; +} +.help-block { + display: block; + margin-bottom: 10px; +} +.help-inline { + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; + vertical-align: middle; + padding-left: 5px; +} +.input-append, +.input-prepend { + margin-bottom: 5px; + font-size: 0; + white-space: nowrap; +} +.input-append input, +.input-prepend input, +.input-append select, +.input-prepend select, +.input-append .uneditable-input, +.input-prepend .uneditable-input, +.input-append .dropdown-menu, +.input-prepend .dropdown-menu { + font-size: 14px; +} +.input-append input, +.input-prepend input, +.input-append select, +.input-prepend select, +.input-append .uneditable-input, +.input-prepend .uneditable-input { + position: relative; + margin-bottom: 0; + *margin-left: 0; + vertical-align: top; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} +.input-append input:focus, +.input-prepend input:focus, +.input-append select:focus, +.input-prepend select:focus, +.input-append .uneditable-input:focus, +.input-prepend .uneditable-input:focus { + z-index: 2; +} +.input-append .add-on, +.input-prepend .add-on { + display: inline-block; + width: auto; + height: 20px; + min-width: 16px; + padding: 4px 5px; + font-size: 14px; + font-weight: normal; + line-height: 20px; + text-align: center; + text-shadow: 0 1px 0 #ffffff; + background-color: #eeeeee; + border: 1px solid #ccc; +} +.input-append .add-on, +.input-prepend .add-on, +.input-append .btn, +.input-prepend .btn, +.input-append .btn-group > .dropdown-toggle, +.input-prepend .btn-group > .dropdown-toggle { + vertical-align: top; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +.input-append .active, +.input-prepend .active { + background-color: #a9dba9; + border-color: #46a546; +} +.input-prepend .add-on, +.input-prepend .btn { + margin-right: -1px; +} +.input-prepend .add-on:first-child, +.input-prepend .btn:first-child { + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} +.input-append input, +.input-append select, +.input-append .uneditable-input { + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} +.input-append input + .btn-group .btn:last-child, +.input-append select + .btn-group .btn:last-child, +.input-append .uneditable-input + .btn-group .btn:last-child { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} +.input-append .add-on, +.input-append .btn, +.input-append .btn-group { + margin-left: -1px; +} +.input-append .add-on:last-child, +.input-append .btn:last-child, +.input-append .btn-group:last-child > .dropdown-toggle { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} +.input-prepend.input-append input, +.input-prepend.input-append select, +.input-prepend.input-append .uneditable-input { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +.input-prepend.input-append input + .btn-group .btn, +.input-prepend.input-append select + .btn-group .btn, +.input-prepend.input-append .uneditable-input + .btn-group .btn { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} +.input-prepend.input-append .add-on:first-child, +.input-prepend.input-append .btn:first-child { + margin-right: -1px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} +.input-prepend.input-append .add-on:last-child, +.input-prepend.input-append .btn:last-child { + margin-left: -1px; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} +.input-prepend.input-append .btn-group:first-child { + margin-left: 0; +} +input.search-query { + padding-right: 14px; + padding-right: 4px \9; + padding-left: 14px; + padding-left: 4px \9; + /* IE7-8 doesn't have border-radius, so don't indent the padding */ + + margin-bottom: 0; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} +/* Allow for input prepend/append in search forms */ +.form-search .input-append .search-query, +.form-search .input-prepend .search-query { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +.form-search .input-append .search-query { + -webkit-border-radius: 14px 0 0 14px; + -moz-border-radius: 14px 0 0 14px; + border-radius: 14px 0 0 14px; +} +.form-search .input-append .btn { + -webkit-border-radius: 0 14px 14px 0; + -moz-border-radius: 0 14px 14px 0; + border-radius: 0 14px 14px 0; +} +.form-search .input-prepend .search-query { + -webkit-border-radius: 0 14px 14px 0; + -moz-border-radius: 0 14px 14px 0; + border-radius: 0 14px 14px 0; +} +.form-search .input-prepend .btn { + -webkit-border-radius: 14px 0 0 14px; + -moz-border-radius: 14px 0 0 14px; + border-radius: 14px 0 0 14px; +} +.form-search input, +.form-inline input, +.form-horizontal input, +.form-search textarea, +.form-inline textarea, +.form-horizontal textarea, +.form-search select, +.form-inline select, +.form-horizontal select, +.form-search .help-inline, +.form-inline .help-inline, +.form-horizontal .help-inline, +.form-search .uneditable-input, +.form-inline .uneditable-input, +.form-horizontal .uneditable-input, +.form-search .input-prepend, +.form-inline .input-prepend, +.form-horizontal .input-prepend, +.form-search .input-append, +.form-inline .input-append, +.form-horizontal .input-append { + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; + margin-bottom: 0; + vertical-align: middle; +} +.form-search .hide, +.form-inline .hide, +.form-horizontal .hide { + display: none; +} +.form-search label, +.form-inline label, +.form-search .btn-group, +.form-inline .btn-group { + display: inline-block; +} +.form-search .input-append, +.form-inline .input-append, +.form-search .input-prepend, +.form-inline .input-prepend { + margin-bottom: 0; +} +.form-search .radio, +.form-search .checkbox, +.form-inline .radio, +.form-inline .checkbox { + padding-left: 0; + margin-bottom: 0; + vertical-align: middle; +} +.form-search .radio input[type="radio"], +.form-search .checkbox input[type="checkbox"], +.form-inline .radio input[type="radio"], +.form-inline .checkbox input[type="checkbox"] { + float: left; + margin-right: 3px; + margin-left: 0; +} +.control-group { + margin-bottom: 10px; +} +legend + .control-group { + margin-top: 20px; + -webkit-margin-top-collapse: separate; +} +.form-horizontal .control-group { + margin-bottom: 20px; + *zoom: 1; +} +.form-horizontal .control-group:before, +.form-horizontal .control-group:after { + display: table; + content: ""; + line-height: 0; +} +.form-horizontal .control-group:after { + clear: both; +} +.form-horizontal .control-label { + float: left; + width: 160px; + padding-top: 5px; + text-align: right; +} +.form-horizontal .controls { + *display: inline-block; + *padding-left: 20px; + margin-left: 180px; + *margin-left: 0; +} +.form-horizontal .controls:first-child { + *padding-left: 180px; +} +.form-horizontal .help-block { + margin-bottom: 0; +} +.form-horizontal input + .help-block, +.form-horizontal select + .help-block, +.form-horizontal textarea + .help-block, +.form-horizontal .uneditable-input + .help-block, +.form-horizontal .input-prepend + .help-block, +.form-horizontal .input-append + .help-block { + margin-top: 10px; +} +.form-horizontal .form-actions { + padding-left: 180px; +} +.btn { + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; + padding: 4px 12px; + margin-bottom: 0; + font-size: 14px; + line-height: 20px; + text-align: center; + vertical-align: middle; + cursor: pointer; + color: #333333; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + background-color: #f5f5f5; + background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); + background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); + background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); + border-color: #e6e6e6 #e6e6e6 #bfbfbf; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #e6e6e6; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + border: 1px solid #bbbbbb; + *border: 0; + border-bottom-color: #a2a2a2; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + *margin-left: .3em; + -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); + -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); + box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); +} +.btn:hover, +.btn:active, +.btn.active, +.btn.disabled, +.btn[disabled] { + color: #333333; + background-color: #e6e6e6; + *background-color: #d9d9d9; +} +.btn:active, +.btn.active { + background-color: #cccccc \9; +} +.btn:first-child { + *margin-left: 0; +} +.btn:hover { + color: #333333; + text-decoration: none; + background-position: 0 -15px; + -webkit-transition: background-position 0.1s linear; + -moz-transition: background-position 0.1s linear; + -o-transition: background-position 0.1s linear; + transition: background-position 0.1s linear; +} +.btn:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn.active, +.btn:active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); + -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); + box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); +} +.btn.disabled, +.btn[disabled] { + cursor: default; + background-image: none; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} +.btn-large { + padding: 11px 19px; + font-size: 17.5px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} +.btn-large [class^="icon-"], +.btn-large [class*=" icon-"] { + margin-top: 4px; +} +.btn-small { + padding: 2px 10px; + font-size: 11.9px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.btn-small [class^="icon-"], +.btn-small [class*=" icon-"] { + margin-top: 0; +} +.btn-mini [class^="icon-"], +.btn-mini [class*=" icon-"] { + margin-top: -1px; +} +.btn-mini { + padding: 0 6px; + font-size: 10.5px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.btn-block { + display: block; + width: 100%; + padding-left: 0; + padding-right: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.btn-block + .btn-block { + margin-top: 5px; +} +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} +.btn-primary.active, +.btn-warning.active, +.btn-danger.active, +.btn-success.active, +.btn-info.active, +.btn-inverse.active { + color: rgba(255, 255, 255, 0.75); +} +.btn { + border-color: #c5c5c5; + border-color: rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.25); +} +.btn-primary { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #006dcc; + background-image: -moz-linear-gradient(top, #0088cc, #0044cc); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); + background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); + background-image: -o-linear-gradient(top, #0088cc, #0044cc); + background-image: linear-gradient(to bottom, #0088cc, #0044cc); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); + border-color: #0044cc #0044cc #002a80; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #0044cc; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.btn-primary:hover, +.btn-primary:active, +.btn-primary.active, +.btn-primary.disabled, +.btn-primary[disabled] { + color: #ffffff; + background-color: #0044cc; + *background-color: #003bb3; +} +.btn-primary:active, +.btn-primary.active { + background-color: #003399 \9; +} +.btn-warning { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #faa732; + background-image: -moz-linear-gradient(top, #fbb450, #f89406); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); + background-image: -webkit-linear-gradient(top, #fbb450, #f89406); + background-image: -o-linear-gradient(top, #fbb450, #f89406); + background-image: linear-gradient(to bottom, #fbb450, #f89406); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); + border-color: #f89406 #f89406 #ad6704; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #f89406; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.btn-warning:hover, +.btn-warning:active, +.btn-warning.active, +.btn-warning.disabled, +.btn-warning[disabled] { + color: #ffffff; + background-color: #f89406; + *background-color: #df8505; +} +.btn-warning:active, +.btn-warning.active { + background-color: #c67605 \9; +} +.btn-danger { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #da4f49; + background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); + background-image: linear-gradient(to bottom, #ee5f5b, #bd362f); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0); + border-color: #bd362f #bd362f #802420; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #bd362f; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.btn-danger:hover, +.btn-danger:active, +.btn-danger.active, +.btn-danger.disabled, +.btn-danger[disabled] { + color: #ffffff; + background-color: #bd362f; + *background-color: #a9302a; +} +.btn-danger:active, +.btn-danger.active { + background-color: #942a25 \9; +} +.btn-success { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #5bb75b; + background-image: -moz-linear-gradient(top, #62c462, #51a351); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); + background-image: -webkit-linear-gradient(top, #62c462, #51a351); + background-image: -o-linear-gradient(top, #62c462, #51a351); + background-image: linear-gradient(to bottom, #62c462, #51a351); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0); + border-color: #51a351 #51a351 #387038; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #51a351; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.btn-success:hover, +.btn-success:active, +.btn-success.active, +.btn-success.disabled, +.btn-success[disabled] { + color: #ffffff; + background-color: #51a351; + *background-color: #499249; +} +.btn-success:active, +.btn-success.active { + background-color: #408140 \9; +} +.btn-info { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #49afcd; + background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); + background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); + background-image: linear-gradient(to bottom, #5bc0de, #2f96b4); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0); + border-color: #2f96b4 #2f96b4 #1f6377; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #2f96b4; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.btn-info:hover, +.btn-info:active, +.btn-info.active, +.btn-info.disabled, +.btn-info[disabled] { + color: #ffffff; + background-color: #2f96b4; + *background-color: #2a85a0; +} +.btn-info:active, +.btn-info.active { + background-color: #24748c \9; +} +.btn-inverse { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #363636; + background-image: -moz-linear-gradient(top, #444444, #222222); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222)); + background-image: -webkit-linear-gradient(top, #444444, #222222); + background-image: -o-linear-gradient(top, #444444, #222222); + background-image: linear-gradient(to bottom, #444444, #222222); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0); + border-color: #222222 #222222 #000000; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #222222; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.btn-inverse:hover, +.btn-inverse:active, +.btn-inverse.active, +.btn-inverse.disabled, +.btn-inverse[disabled] { + color: #ffffff; + background-color: #222222; + *background-color: #151515; +} +.btn-inverse:active, +.btn-inverse.active { + background-color: #080808 \9; +} +button.btn, +input[type="submit"].btn { + *padding-top: 3px; + *padding-bottom: 3px; +} +button.btn::-moz-focus-inner, +input[type="submit"].btn::-moz-focus-inner { + padding: 0; + border: 0; +} +button.btn.btn-large, +input[type="submit"].btn.btn-large { + *padding-top: 7px; + *padding-bottom: 7px; +} +button.btn.btn-small, +input[type="submit"].btn.btn-small { + *padding-top: 3px; + *padding-bottom: 3px; +} +button.btn.btn-mini, +input[type="submit"].btn.btn-mini { + *padding-top: 1px; + *padding-bottom: 1px; +} +.btn-link, +.btn-link:active, +.btn-link[disabled] { + background-color: transparent; + background-image: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} +.btn-link { + border-color: transparent; + cursor: pointer; + color: #0088cc; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +.btn-link:hover { + color: #005580; + text-decoration: underline; + background-color: transparent; +} +.btn-link[disabled]:hover { + color: #333333; + text-decoration: none; +} +.btn-group { + position: relative; + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; + font-size: 0; + vertical-align: middle; + white-space: nowrap; + *margin-left: .3em; +} +.btn-group:first-child { + *margin-left: 0; +} +.btn-group + .btn-group { + margin-left: 5px; +} +.btn-toolbar { + font-size: 0; + margin-top: 10px; + margin-bottom: 10px; +} +.btn-toolbar > .btn + .btn, +.btn-toolbar > .btn-group + .btn, +.btn-toolbar > .btn + .btn-group { + margin-left: 5px; +} +.btn-group > .btn { + position: relative; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +.btn-group > .btn + .btn { + margin-left: -1px; +} +.btn-group > .btn, +.btn-group > .dropdown-menu, +.btn-group > .popover { + font-size: 14px; +} +.btn-group > .btn-mini { + font-size: 10.5px; +} +.btn-group > .btn-small { + font-size: 11.9px; +} +.btn-group > .btn-large { + font-size: 17.5px; +} +.btn-group > .btn:first-child { + margin-left: 0; + -webkit-border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; + border-top-left-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + border-bottom-left-radius: 4px; +} +.btn-group > .btn:last-child, +.btn-group > .dropdown-toggle { + -webkit-border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; + border-top-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -moz-border-radius-bottomright: 4px; + border-bottom-right-radius: 4px; +} +.btn-group > .btn.large:first-child { + margin-left: 0; + -webkit-border-top-left-radius: 6px; + -moz-border-radius-topleft: 6px; + border-top-left-radius: 6px; + -webkit-border-bottom-left-radius: 6px; + -moz-border-radius-bottomleft: 6px; + border-bottom-left-radius: 6px; +} +.btn-group > .btn.large:last-child, +.btn-group > .large.dropdown-toggle { + -webkit-border-top-right-radius: 6px; + -moz-border-radius-topright: 6px; + border-top-right-radius: 6px; + -webkit-border-bottom-right-radius: 6px; + -moz-border-radius-bottomright: 6px; + border-bottom-right-radius: 6px; +} +.btn-group > .btn:hover, +.btn-group > .btn:focus, +.btn-group > .btn:active, +.btn-group > .btn.active { + z-index: 2; +} +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} +.btn-group > .btn + .dropdown-toggle { + padding-left: 8px; + padding-right: 8px; + -webkit-box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); + -moz-box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); + box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); + *padding-top: 5px; + *padding-bottom: 5px; +} +.btn-group > .btn-mini + .dropdown-toggle { + padding-left: 5px; + padding-right: 5px; + *padding-top: 2px; + *padding-bottom: 2px; +} +.btn-group > .btn-small + .dropdown-toggle { + *padding-top: 5px; + *padding-bottom: 4px; +} +.btn-group > .btn-large + .dropdown-toggle { + padding-left: 12px; + padding-right: 12px; + *padding-top: 7px; + *padding-bottom: 7px; +} +.btn-group.open .dropdown-toggle { + background-image: none; + -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); + -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); + box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); +} +.btn-group.open .btn.dropdown-toggle { + background-color: #e6e6e6; +} +.btn-group.open .btn-primary.dropdown-toggle { + background-color: #0044cc; +} +.btn-group.open .btn-warning.dropdown-toggle { + background-color: #f89406; +} +.btn-group.open .btn-danger.dropdown-toggle { + background-color: #bd362f; +} +.btn-group.open .btn-success.dropdown-toggle { + background-color: #51a351; +} +.btn-group.open .btn-info.dropdown-toggle { + background-color: #2f96b4; +} +.btn-group.open .btn-inverse.dropdown-toggle { + background-color: #222222; +} +.btn .caret { + margin-top: 8px; + margin-left: 0; +} +.btn-mini .caret, +.btn-small .caret, +.btn-large .caret { + margin-top: 6px; +} +.btn-large .caret { + border-left-width: 5px; + border-right-width: 5px; + border-top-width: 5px; +} +.dropup .btn-large .caret { + border-bottom-width: 5px; +} +.btn-primary .caret, +.btn-warning .caret, +.btn-danger .caret, +.btn-info .caret, +.btn-success .caret, +.btn-inverse .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} +.btn-group-vertical { + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; +} +.btn-group-vertical > .btn { + display: block; + float: none; + max-width: 100%; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +.btn-group-vertical > .btn + .btn { + margin-left: 0; + margin-top: -1px; +} +.btn-group-vertical > .btn:first-child { + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} +.btn-group-vertical > .btn:last-child { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} +.btn-group-vertical > .btn-large:first-child { + -webkit-border-radius: 6px 6px 0 0; + -moz-border-radius: 6px 6px 0 0; + border-radius: 6px 6px 0 0; +} +.btn-group-vertical > .btn-large:last-child { + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; +} +.nav { + margin-left: 0; + margin-bottom: 20px; + list-style: none; +} +.nav > li > a { + display: block; +} +.nav > li > a:hover { + text-decoration: none; + background-color: #eeeeee; +} +.nav > li > a > img { + max-width: none; +} +.nav > .pull-right { + float: right; +} +.nav-header { + display: block; + padding: 3px 15px; + font-size: 11px; + font-weight: bold; + line-height: 20px; + color: #999999; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + text-transform: uppercase; +} +.nav li + .nav-header { + margin-top: 9px; +} +.nav-list { + padding-left: 15px; + padding-right: 15px; + margin-bottom: 0; +} +.nav-list > li > a, +.nav-list .nav-header { + margin-left: -15px; + margin-right: -15px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); +} +.nav-list > li > a { + padding: 3px 15px; +} +.nav-list > .active > a, +.nav-list > .active > a:hover { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); + background-color: #0088cc; +} +.nav-list [class^="icon-"], +.nav-list [class*=" icon-"] { + margin-right: 2px; +} +.nav-list .divider { + *width: 100%; + height: 1px; + margin: 9px 1px; + *margin: -5px 0 5px; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; +} +.nav-tabs, +.nav-pills { + *zoom: 1; +} +.nav-tabs:before, +.nav-pills:before, +.nav-tabs:after, +.nav-pills:after { + display: table; + content: ""; + line-height: 0; +} +.nav-tabs:after, +.nav-pills:after { + clear: both; +} +.nav-tabs > li, +.nav-pills > li { + float: left; +} +.nav-tabs > li > a, +.nav-pills > li > a { + padding-right: 12px; + padding-left: 12px; + margin-right: 2px; + line-height: 14px; +} +.nav-tabs { + border-bottom: 1px solid #ddd; +} +.nav-tabs > li { + margin-bottom: -1px; +} +.nav-tabs > li > a { + padding-top: 8px; + padding-bottom: 8px; + line-height: 20px; + border: 1px solid transparent; + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} +.nav-tabs > li > a:hover { + border-color: #eeeeee #eeeeee #dddddd; +} +.nav-tabs > .active > a, +.nav-tabs > .active > a:hover { + color: #555555; + background-color: #ffffff; + border: 1px solid #ddd; + border-bottom-color: transparent; + cursor: default; +} +.nav-pills > li > a { + padding-top: 8px; + padding-bottom: 8px; + margin-top: 2px; + margin-bottom: 2px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} +.nav-pills > .active > a, +.nav-pills > .active > a:hover { + color: #ffffff; + background-color: #0088cc; +} +.nav-stacked > li { + float: none; +} +.nav-stacked > li > a { + margin-right: 0; +} +.nav-tabs.nav-stacked { + border-bottom: 0; +} +.nav-tabs.nav-stacked > li > a { + border: 1px solid #ddd; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +.nav-tabs.nav-stacked > li:first-child > a { + -webkit-border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; + border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; + border-top-left-radius: 4px; +} +.nav-tabs.nav-stacked > li:last-child > a { + -webkit-border-bottom-right-radius: 4px; + -moz-border-radius-bottomright: 4px; + border-bottom-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + border-bottom-left-radius: 4px; +} +.nav-tabs.nav-stacked > li > a:hover { + border-color: #ddd; + z-index: 2; +} +.nav-pills.nav-stacked > li > a { + margin-bottom: 3px; +} +.nav-pills.nav-stacked > li:last-child > a { + margin-bottom: 1px; +} +.nav-tabs .dropdown-menu { + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; +} +.nav-pills .dropdown-menu { + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} +.nav .dropdown-toggle .caret { + border-top-color: #0088cc; + border-bottom-color: #0088cc; + margin-top: 6px; +} +.nav .dropdown-toggle:hover .caret { + border-top-color: #005580; + border-bottom-color: #005580; +} +/* move down carets for tabs */ +.nav-tabs .dropdown-toggle .caret { + margin-top: 8px; +} +.nav .active .dropdown-toggle .caret { + border-top-color: #fff; + border-bottom-color: #fff; +} +.nav-tabs .active .dropdown-toggle .caret { + border-top-color: #555555; + border-bottom-color: #555555; +} +.nav > .dropdown.active > a:hover { + cursor: pointer; +} +.nav-tabs .open .dropdown-toggle, +.nav-pills .open .dropdown-toggle, +.nav > li.dropdown.open.active > a:hover { + color: #ffffff; + background-color: #999999; + border-color: #999999; +} +.nav li.dropdown.open .caret, +.nav li.dropdown.open.active .caret, +.nav li.dropdown.open a:hover .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; + opacity: 1; + filter: alpha(opacity=100); +} +.tabs-stacked .open > a:hover { + border-color: #999999; +} +.tabbable { + *zoom: 1; +} +.tabbable:before, +.tabbable:after { + display: table; + content: ""; + line-height: 0; +} +.tabbable:after { + clear: both; +} +.tab-content { + overflow: auto; +} +.tabs-below > .nav-tabs, +.tabs-right > .nav-tabs, +.tabs-left > .nav-tabs { + border-bottom: 0; +} +.tab-content > .tab-pane, +.pill-content > .pill-pane { + display: none; +} +.tab-content > .active, +.pill-content > .active { + display: block; +} +.tabs-below > .nav-tabs { + border-top: 1px solid #ddd; +} +.tabs-below > .nav-tabs > li { + margin-top: -1px; + margin-bottom: 0; +} +.tabs-below > .nav-tabs > li > a { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} +.tabs-below > .nav-tabs > li > a:hover { + border-bottom-color: transparent; + border-top-color: #ddd; +} +.tabs-below > .nav-tabs > .active > a, +.tabs-below > .nav-tabs > .active > a:hover { + border-color: transparent #ddd #ddd #ddd; +} +.tabs-left > .nav-tabs > li, +.tabs-right > .nav-tabs > li { + float: none; +} +.tabs-left > .nav-tabs > li > a, +.tabs-right > .nav-tabs > li > a { + min-width: 74px; + margin-right: 0; + margin-bottom: 3px; +} +.tabs-left > .nav-tabs { + float: left; + margin-right: 19px; + border-right: 1px solid #ddd; +} +.tabs-left > .nav-tabs > li > a { + margin-right: -1px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} +.tabs-left > .nav-tabs > li > a:hover { + border-color: #eeeeee #dddddd #eeeeee #eeeeee; +} +.tabs-left > .nav-tabs .active > a, +.tabs-left > .nav-tabs .active > a:hover { + border-color: #ddd transparent #ddd #ddd; + *border-right-color: #ffffff; +} +.tabs-right > .nav-tabs { + float: right; + margin-left: 19px; + border-left: 1px solid #ddd; +} +.tabs-right > .nav-tabs > li > a { + margin-left: -1px; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} +.tabs-right > .nav-tabs > li > a:hover { + border-color: #eeeeee #eeeeee #eeeeee #dddddd; +} +.tabs-right > .nav-tabs .active > a, +.tabs-right > .nav-tabs .active > a:hover { + border-color: #ddd #ddd #ddd transparent; + *border-left-color: #ffffff; +} +.nav > .disabled > a { + color: #999999; +} +.nav > .disabled > a:hover { + text-decoration: none; + background-color: transparent; + cursor: default; +} +.navbar { + overflow: visible; + margin-bottom: 20px; + *position: relative; + *z-index: 2; +} +.navbar-inner { + min-height: 40px; + padding-left: 20px; + padding-right: 20px; + background-color: #fafafa; + background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2)); + background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2); + background-image: -o-linear-gradient(top, #ffffff, #f2f2f2); + background-image: linear-gradient(to bottom, #ffffff, #f2f2f2); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0); + border: 1px solid #d4d4d4; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + *zoom: 1; +} +.navbar-inner:before, +.navbar-inner:after { + display: table; + content: ""; + line-height: 0; +} +.navbar-inner:after { + clear: both; +} +.navbar .container { + width: auto; +} +.nav-collapse.collapse { + height: auto; + overflow: visible; +} +.navbar .brand { + float: left; + display: block; + padding: 10px 20px 10px; + margin-left: -20px; + font-size: 20px; + font-weight: 200; + color: #777777; + text-shadow: 0 1px 0 #ffffff; +} +.navbar .brand:hover { + text-decoration: none; +} +.navbar-text { + margin-bottom: 0; + line-height: 40px; + color: #777777; +} +.navbar-link { + color: #777777; +} +.navbar-link:hover { + color: #333333; +} +.navbar .divider-vertical { + height: 40px; + margin: 0 9px; + border-left: 1px solid #f2f2f2; + border-right: 1px solid #ffffff; +} +.navbar .btn, +.navbar .btn-group { + margin-top: 5px; +} +.navbar .btn-group .btn, +.navbar .input-prepend .btn, +.navbar .input-append .btn { + margin-top: 0; +} +.navbar-form { + margin-bottom: 0; + *zoom: 1; +} +.navbar-form:before, +.navbar-form:after { + display: table; + content: ""; + line-height: 0; +} +.navbar-form:after { + clear: both; +} +.navbar-form input, +.navbar-form select, +.navbar-form .radio, +.navbar-form .checkbox { + margin-top: 5px; +} +.navbar-form input, +.navbar-form select, +.navbar-form .btn { + display: inline-block; + margin-bottom: 0; +} +.navbar-form input[type="image"], +.navbar-form input[type="checkbox"], +.navbar-form input[type="radio"] { + margin-top: 3px; +} +.navbar-form .input-append, +.navbar-form .input-prepend { + margin-top: 5px; + white-space: nowrap; +} +.navbar-form .input-append input, +.navbar-form .input-prepend input { + margin-top: 0; +} +.navbar-search { + position: relative; + float: left; + margin-top: 5px; + margin-bottom: 0; +} +.navbar-search .search-query { + margin-bottom: 0; + padding: 4px 14px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + font-weight: normal; + line-height: 1; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} +.navbar-static-top { + position: static; + margin-bottom: 0; +} +.navbar-static-top .navbar-inner { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; + margin-bottom: 0; +} +.navbar-fixed-top .navbar-inner, +.navbar-static-top .navbar-inner { + border-width: 0 0 1px; +} +.navbar-fixed-bottom .navbar-inner { + border-width: 1px 0 0; +} +.navbar-fixed-top .navbar-inner, +.navbar-fixed-bottom .navbar-inner { + padding-left: 0; + padding-right: 0; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +.navbar-static-top .container, +.navbar-fixed-top .container, +.navbar-fixed-bottom .container { + width: 940px; +} +.navbar-fixed-top { + top: 0; +} +.navbar-fixed-top .navbar-inner, +.navbar-static-top .navbar-inner { + -webkit-box-shadow: 0 1px 10px rgba(0,0,0,.1); + -moz-box-shadow: 0 1px 10px rgba(0,0,0,.1); + box-shadow: 0 1px 10px rgba(0,0,0,.1); +} +.navbar-fixed-bottom { + bottom: 0; +} +.navbar-fixed-bottom .navbar-inner { + -webkit-box-shadow: 0 -1px 10px rgba(0,0,0,.1); + -moz-box-shadow: 0 -1px 10px rgba(0,0,0,.1); + box-shadow: 0 -1px 10px rgba(0,0,0,.1); +} +.navbar .nav { + position: relative; + left: 0; + display: block; + float: left; + margin: 0 10px 0 0; +} +.navbar .nav.pull-right { + float: right; + margin-right: 0; +} +.navbar .nav > li { + float: left; +} +.navbar .nav > li > a { + float: none; + padding: 10px 15px 10px; + color: #777777; + text-decoration: none; + text-shadow: 0 1px 0 #ffffff; +} +.navbar .nav .dropdown-toggle .caret { + margin-top: 8px; +} +.navbar .nav > li > a:focus, +.navbar .nav > li > a:hover { + background-color: transparent; + color: #333333; + text-decoration: none; +} +.navbar .nav > .active > a, +.navbar .nav > .active > a:hover, +.navbar .nav > .active > a:focus { + color: #555555; + text-decoration: none; + background-color: #e5e5e5; + -webkit-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); + -moz-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); +} +.navbar .btn-navbar { + display: none; + float: right; + padding: 7px 10px; + margin-left: 5px; + margin-right: 5px; + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #ededed; + background-image: -moz-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5)); + background-image: -webkit-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: -o-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: linear-gradient(to bottom, #f2f2f2, #e5e5e5); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0); + border-color: #e5e5e5 #e5e5e5 #bfbfbf; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #e5e5e5; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075); + -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075); + box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075); +} +.navbar .btn-navbar:hover, +.navbar .btn-navbar:active, +.navbar .btn-navbar.active, +.navbar .btn-navbar.disabled, +.navbar .btn-navbar[disabled] { + color: #ffffff; + background-color: #e5e5e5; + *background-color: #d9d9d9; +} +.navbar .btn-navbar:active, +.navbar .btn-navbar.active { + background-color: #cccccc \9; +} +.navbar .btn-navbar .icon-bar { + display: block; + width: 18px; + height: 2px; + background-color: #f5f5f5; + -webkit-border-radius: 1px; + -moz-border-radius: 1px; + border-radius: 1px; + -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); + -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); +} +.btn-navbar .icon-bar + .icon-bar { + margin-top: 3px; +} +.navbar .nav > li > .dropdown-menu:before { + content: ''; + display: inline-block; + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-bottom: 7px solid #ccc; + border-bottom-color: rgba(0, 0, 0, 0.2); + position: absolute; + top: -7px; + left: 9px; +} +.navbar .nav > li > .dropdown-menu:after { + content: ''; + display: inline-block; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-bottom: 6px solid #ffffff; + position: absolute; + top: -6px; + left: 10px; +} +.navbar-fixed-bottom .nav > li > .dropdown-menu:before { + border-top: 7px solid #ccc; + border-top-color: rgba(0, 0, 0, 0.2); + border-bottom: 0; + bottom: -7px; + top: auto; +} +.navbar-fixed-bottom .nav > li > .dropdown-menu:after { + border-top: 6px solid #ffffff; + border-bottom: 0; + bottom: -6px; + top: auto; +} +.navbar .nav li.dropdown > a:hover .caret { + border-top-color: #555555; + border-bottom-color: #555555; +} +.navbar .nav li.dropdown.open > .dropdown-toggle, +.navbar .nav li.dropdown.active > .dropdown-toggle, +.navbar .nav li.dropdown.open.active > .dropdown-toggle { + background-color: #e5e5e5; + color: #555555; +} +.navbar .nav li.dropdown > .dropdown-toggle .caret { + border-top-color: #777777; + border-bottom-color: #777777; +} +.navbar .nav li.dropdown.open > .dropdown-toggle .caret, +.navbar .nav li.dropdown.active > .dropdown-toggle .caret, +.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret { + border-top-color: #555555; + border-bottom-color: #555555; +} +.navbar .pull-right > li > .dropdown-menu, +.navbar .nav > li > .dropdown-menu.pull-right { + left: auto; + right: 0; +} +.navbar .pull-right > li > .dropdown-menu:before, +.navbar .nav > li > .dropdown-menu.pull-right:before { + left: auto; + right: 12px; +} +.navbar .pull-right > li > .dropdown-menu:after, +.navbar .nav > li > .dropdown-menu.pull-right:after { + left: auto; + right: 13px; +} +.navbar .pull-right > li > .dropdown-menu .dropdown-menu, +.navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu { + left: auto; + right: 100%; + margin-left: 0; + margin-right: -1px; + -webkit-border-radius: 6px 0 6px 6px; + -moz-border-radius: 6px 0 6px 6px; + border-radius: 6px 0 6px 6px; +} +.navbar-inverse .navbar-inner { + background-color: #1b1b1b; + background-image: -moz-linear-gradient(top, #222222, #111111); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111)); + background-image: -webkit-linear-gradient(top, #222222, #111111); + background-image: -o-linear-gradient(top, #222222, #111111); + background-image: linear-gradient(to bottom, #222222, #111111); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0); + border-color: #252525; +} +.navbar-inverse .brand, +.navbar-inverse .nav > li > a { + color: #999999; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} +.navbar-inverse .brand:hover, +.navbar-inverse .nav > li > a:hover { + color: #ffffff; +} +.navbar-inverse .brand { + color: #999999; +} +.navbar-inverse .navbar-text { + color: #999999; +} +.navbar-inverse .nav > li > a:focus, +.navbar-inverse .nav > li > a:hover { + background-color: transparent; + color: #ffffff; +} +.navbar-inverse .nav .active > a, +.navbar-inverse .nav .active > a:hover, +.navbar-inverse .nav .active > a:focus { + color: #ffffff; + background-color: #111111; +} +.navbar-inverse .navbar-link { + color: #999999; +} +.navbar-inverse .navbar-link:hover { + color: #ffffff; +} +.navbar-inverse .divider-vertical { + border-left-color: #111111; + border-right-color: #222222; +} +.navbar-inverse .nav li.dropdown.open > .dropdown-toggle, +.navbar-inverse .nav li.dropdown.active > .dropdown-toggle, +.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { + background-color: #111111; + color: #ffffff; +} +.navbar-inverse .nav li.dropdown > a:hover .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} +.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret { + border-top-color: #999999; + border-bottom-color: #999999; +} +.navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret, +.navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret, +.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} +.navbar-inverse .navbar-search .search-query { + color: #ffffff; + background-color: #515151; + border-color: #111111; + -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15); + -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15); + box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15); + -webkit-transition: none; + -moz-transition: none; + -o-transition: none; + transition: none; +} +.navbar-inverse .navbar-search .search-query:-moz-placeholder { + color: #cccccc; +} +.navbar-inverse .navbar-search .search-query:-ms-input-placeholder { + color: #cccccc; +} +.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder { + color: #cccccc; +} +.navbar-inverse .navbar-search .search-query:focus, +.navbar-inverse .navbar-search .search-query.focused { + padding: 5px 15px; + color: #333333; + text-shadow: 0 1px 0 #ffffff; + background-color: #ffffff; + border: 0; + -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + outline: 0; +} +.navbar-inverse .btn-navbar { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #0e0e0e; + background-image: -moz-linear-gradient(top, #151515, #040404); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404)); + background-image: -webkit-linear-gradient(top, #151515, #040404); + background-image: -o-linear-gradient(top, #151515, #040404); + background-image: linear-gradient(to bottom, #151515, #040404); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0); + border-color: #040404 #040404 #000000; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #040404; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.navbar-inverse .btn-navbar:hover, +.navbar-inverse .btn-navbar:active, +.navbar-inverse .btn-navbar.active, +.navbar-inverse .btn-navbar.disabled, +.navbar-inverse .btn-navbar[disabled] { + color: #ffffff; + background-color: #040404; + *background-color: #000000; +} +.navbar-inverse .btn-navbar:active, +.navbar-inverse .btn-navbar.active { + background-color: #000000 \9; +} +.breadcrumb { + padding: 8px 15px; + margin: 0 0 20px; + list-style: none; + background-color: #f5f5f5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.breadcrumb > li { + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; + text-shadow: 0 1px 0 #ffffff; +} +.breadcrumb > li > .divider { + padding: 0 5px; + color: #ccc; +} +.breadcrumb > .active { + color: #999999; +} +.pagination { + margin: 20px 0; +} +.pagination ul { + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; + margin-left: 0; + margin-bottom: 0; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); +} +.pagination ul > li { + display: inline; +} +.pagination ul > li > a, +.pagination ul > li > span { + float: left; + padding: 4px 12px; + line-height: 20px; + text-decoration: none; + background-color: #ffffff; + border: 1px solid #dddddd; + border-left-width: 0; +} +.pagination ul > li > a:hover, +.pagination ul > .active > a, +.pagination ul > .active > span { + background-color: #f5f5f5; +} +.pagination ul > .active > a, +.pagination ul > .active > span { + color: #999999; + cursor: default; +} +.pagination ul > .disabled > span, +.pagination ul > .disabled > a, +.pagination ul > .disabled > a:hover { + color: #999999; + background-color: transparent; + cursor: default; +} +.pagination ul > li:first-child > a, +.pagination ul > li:first-child > span { + border-left-width: 1px; + -webkit-border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; + border-top-left-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + border-bottom-left-radius: 4px; +} +.pagination ul > li:last-child > a, +.pagination ul > li:last-child > span { + -webkit-border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; + border-top-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -moz-border-radius-bottomright: 4px; + border-bottom-right-radius: 4px; +} +.pagination-centered { + text-align: center; +} +.pagination-right { + text-align: right; +} +.pagination-large ul > li > a, +.pagination-large ul > li > span { + padding: 11px 19px; + font-size: 17.5px; +} +.pagination-large ul > li:first-child > a, +.pagination-large ul > li:first-child > span { + -webkit-border-top-left-radius: 6px; + -moz-border-radius-topleft: 6px; + border-top-left-radius: 6px; + -webkit-border-bottom-left-radius: 6px; + -moz-border-radius-bottomleft: 6px; + border-bottom-left-radius: 6px; +} +.pagination-large ul > li:last-child > a, +.pagination-large ul > li:last-child > span { + -webkit-border-top-right-radius: 6px; + -moz-border-radius-topright: 6px; + border-top-right-radius: 6px; + -webkit-border-bottom-right-radius: 6px; + -moz-border-radius-bottomright: 6px; + border-bottom-right-radius: 6px; +} +.pagination-mini ul > li:first-child > a, +.pagination-small ul > li:first-child > a, +.pagination-mini ul > li:first-child > span, +.pagination-small ul > li:first-child > span { + -webkit-border-top-left-radius: 3px; + -moz-border-radius-topleft: 3px; + border-top-left-radius: 3px; + -webkit-border-bottom-left-radius: 3px; + -moz-border-radius-bottomleft: 3px; + border-bottom-left-radius: 3px; +} +.pagination-mini ul > li:last-child > a, +.pagination-small ul > li:last-child > a, +.pagination-mini ul > li:last-child > span, +.pagination-small ul > li:last-child > span { + -webkit-border-top-right-radius: 3px; + -moz-border-radius-topright: 3px; + border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + -moz-border-radius-bottomright: 3px; + border-bottom-right-radius: 3px; +} +.pagination-small ul > li > a, +.pagination-small ul > li > span { + padding: 2px 10px; + font-size: 11.9px; +} +.pagination-mini ul > li > a, +.pagination-mini ul > li > span { + padding: 0 6px; + font-size: 10.5px; +} +.pager { + margin: 20px 0; + list-style: none; + text-align: center; + *zoom: 1; +} +.pager:before, +.pager:after { + display: table; + content: ""; + line-height: 0; +} +.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; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} +.pager li > a:hover { + text-decoration: none; + background-color: #f5f5f5; +} +.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 > span { + color: #999999; + background-color: #fff; + cursor: default; +} +.thumbnails { + margin-left: -20px; + list-style: none; + *zoom: 1; +} +.thumbnails:before, +.thumbnails:after { + display: table; + content: ""; + line-height: 0; +} +.thumbnails:after { + clear: both; +} +.row-fluid .thumbnails { + margin-left: 0; +} +.thumbnails > li { + float: left; + margin-bottom: 20px; + margin-left: 20px; +} +.thumbnail { + display: block; + padding: 4px; + line-height: 20px; + border: 1px solid #ddd; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +a.thumbnail:hover { + border-color: #0088cc; + -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); +} +.thumbnail > img { + display: block; + max-width: 100%; + margin-left: auto; + margin-right: auto; +} +.thumbnail .caption { + padding: 9px; + color: #555555; +} +.alert { + padding: 8px 35px 8px 14px; + margin-bottom: 20px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + background-color: #fcf8e3; + border: 1px solid #fbeed5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.alert, +.alert h4 { + color: #c09853; +} +.alert h4 { + margin: 0; +} +.alert .close { + position: relative; + top: -2px; + right: -21px; + line-height: 20px; +} +.alert-success { + background-color: #dff0d8; + border-color: #d6e9c6; + color: #468847; +} +.alert-success h4 { + color: #468847; +} +.alert-danger, +.alert-error { + background-color: #f2dede; + border-color: #eed3d7; + color: #b94a48; +} +.alert-danger h4, +.alert-error h4 { + color: #b94a48; +} +.alert-info { + background-color: #d9edf7; + border-color: #bce8f1; + color: #3a87ad; +} +.alert-info h4 { + color: #3a87ad; +} +.alert-block { + padding-top: 14px; + padding-bottom: 14px; +} +.alert-block > p, +.alert-block > ul { + margin-bottom: 0; +} +.alert-block p + p { + margin-top: 5px; +} +@-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; + } +} +@-ms-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 { + overflow: hidden; + height: 20px; + margin-bottom: 20px; + background-color: #f7f7f7; + background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); + background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0); + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.progress .bar { + width: 0%; + height: 100%; + color: #ffffff; + float: left; + font-size: 12px; + text-align: center; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #0e90d2; + background-image: -moz-linear-gradient(top, #149bdf, #0480be); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); + background-image: -webkit-linear-gradient(top, #149bdf, #0480be); + background-image: -o-linear-gradient(top, #149bdf, #0480be); + background-image: linear-gradient(to bottom, #149bdf, #0480be); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0); + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -moz-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-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-transition: width 0.6s ease; + -moz-transition: width 0.6s ease; + -o-transition: width 0.6s ease; + transition: width 0.6s ease; +} +.progress .bar + .bar { + -webkit-box-shadow: inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15); + -moz-box-shadow: inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15); + box-shadow: inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15); +} +.progress-striped .bar { + background-color: #149bdf; + 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: -o-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); + -webkit-background-size: 40px 40px; + -moz-background-size: 40px 40px; + -o-background-size: 40px 40px; + background-size: 40px 40px; +} +.progress.active .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-danger .bar, +.progress .bar-danger { + background-color: #dd514c; + background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); + background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0); +} +.progress-danger.progress-striped .bar, +.progress-striped .bar-danger { + background-color: #ee5f5b; + 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: -o-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-success .bar, +.progress .bar-success { + background-color: #5eb95e; + background-image: -moz-linear-gradient(top, #62c462, #57a957); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); + background-image: -webkit-linear-gradient(top, #62c462, #57a957); + background-image: -o-linear-gradient(top, #62c462, #57a957); + background-image: linear-gradient(to bottom, #62c462, #57a957); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0); +} +.progress-success.progress-striped .bar, +.progress-striped .bar-success { + background-color: #62c462; + 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: -o-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-info .bar, +.progress .bar-info { + background-color: #4bb1cf; + background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); + background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); + background-image: -o-linear-gradient(top, #5bc0de, #339bb9); + background-image: linear-gradient(to bottom, #5bc0de, #339bb9); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0); +} +.progress-info.progress-striped .bar, +.progress-striped .bar-info { + background-color: #5bc0de; + 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: -o-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-warning .bar, +.progress .bar-warning { + background-color: #faa732; + background-image: -moz-linear-gradient(top, #fbb450, #f89406); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); + background-image: -webkit-linear-gradient(top, #fbb450, #f89406); + background-image: -o-linear-gradient(top, #fbb450, #f89406); + background-image: linear-gradient(to bottom, #fbb450, #f89406); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); +} +.progress-warning.progress-striped .bar, +.progress-striped .bar-warning { + background-color: #fbb450; + 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: -o-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); +} +.hero-unit { + padding: 60px; + margin-bottom: 30px; + font-size: 18px; + font-weight: 200; + line-height: 30px; + color: inherit; + background-color: #eeeeee; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} +.hero-unit h1 { + margin-bottom: 0; + font-size: 60px; + line-height: 1; + color: inherit; + letter-spacing: -1px; +} +.hero-unit li { + line-height: 30px; +} +.media, +.media-body { + overflow: hidden; + *overflow: visible; + 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 { + margin-left: 0; + list-style: none; +} +.tooltip { + position: absolute; + z-index: 1030; + display: block; + visibility: visible; + padding: 5px; + font-size: 11px; + opacity: 0; + filter: alpha(opacity=0); +} +.tooltip.in { + opacity: 0.8; + filter: alpha(opacity=80); +} +.tooltip.top { + margin-top: -3px; +} +.tooltip.right { + margin-left: 3px; +} +.tooltip.bottom { + margin-top: 3px; +} +.tooltip.left { + margin-left: -3px; +} +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #ffffff; + text-align: center; + text-decoration: none; + background-color: #000000; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + 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-width: 5px 5px 0; + border-top-color: #000000; +} +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000000; +} +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000000; +} +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000000; +} +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1010; + display: none; + width: 236px; + padding: 1px; + text-align: left; + background-color: #ffffff; + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + white-space: normal; +} +.popover.top { + margin-top: -10px; +} +.popover.right { + margin-left: 10px; +} +.popover.bottom { + margin-top: 10px; +} +.popover.left { + margin-left: -10px; +} +.popover-title { + margin: 0; + padding: 8px 14px; + font-size: 14px; + font-weight: normal; + line-height: 18px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + -webkit-border-radius: 5px 5px 0 0; + -moz-border-radius: 5px 5px 0 0; + 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 { + left: 50%; + margin-left: -11px; + border-bottom-width: 0; + border-top-color: #999; + border-top-color: rgba(0, 0, 0, 0.25); + bottom: -11px; +} +.popover.top .arrow:after { + bottom: 1px; + margin-left: -10px; + border-bottom-width: 0; + border-top-color: #ffffff; +} +.popover.right .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-left-width: 0; + border-right-color: #999; + border-right-color: rgba(0, 0, 0, 0.25); +} +.popover.right .arrow:after { + left: 1px; + bottom: -10px; + border-left-width: 0; + border-right-color: #ffffff; +} +.popover.bottom .arrow { + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, 0.25); + top: -11px; +} +.popover.bottom .arrow:after { + top: 1px; + margin-left: -10px; + border-top-width: 0; + border-bottom-color: #ffffff; +} +.popover.left .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999; + border-left-color: rgba(0, 0, 0, 0.25); +} +.popover.left .arrow:after { + right: 1px; + border-right-width: 0; + border-left-color: #ffffff; + bottom: -10px; +} +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000000; +} +.modal-backdrop.fade { + opacity: 0; +} +.modal-backdrop, +.modal-backdrop.fade.in { + opacity: 0.8; + filter: alpha(opacity=80); +} +.modal { + position: fixed; + top: 10%; + left: 50%; + z-index: 1050; + width: 560px; + margin-left: -280px; + background-color: #ffffff; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, 0.3); + *border: 1px solid #999; + /* IE6-7 */ + + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; + outline: none; +} +.modal.fade { + -webkit-transition: opacity .3s linear, top .3s ease-out; + -moz-transition: opacity .3s linear, top .3s ease-out; + -o-transition: opacity .3s linear, top .3s ease-out; + transition: opacity .3s linear, top .3s ease-out; + top: -25%; +} +.modal.fade.in { + top: 10%; +} +.modal-header { + padding: 9px 15px; + border-bottom: 1px solid #eee; +} +.modal-header .close { + margin-top: 2px; +} +.modal-header h3 { + margin: 0; + line-height: 30px; +} +.modal-body { + position: relative; + overflow-y: auto; + max-height: 400px; + padding: 15px; +} +.modal-form { + margin-bottom: 0; +} +.modal-footer { + padding: 14px 15px 15px; + margin-bottom: 0; + text-align: right; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; + -webkit-box-shadow: inset 0 1px 0 #ffffff; + -moz-box-shadow: inset 0 1px 0 #ffffff; + box-shadow: inset 0 1px 0 #ffffff; + *zoom: 1; +} +.modal-footer:before, +.modal-footer:after { + display: table; + content: ""; + line-height: 0; +} +.modal-footer:after { + clear: both; +} +.modal-footer .btn + .btn { + margin-left: 5px; + margin-bottom: 0; +} +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} +.dropup, +.dropdown { + position: relative; +} +.dropdown-toggle { + *margin-bottom: -3px; +} +.dropdown-toggle:active, +.open .dropdown-toggle { + outline: 0; +} +.caret { + display: inline-block; + width: 0; + height: 0; + vertical-align: top; + border-top: 4px solid #000000; + border-right: 4px solid transparent; + border-left: 4px solid transparent; + content: ""; +} +.dropdown .caret { + margin-top: 8px; + margin-left: 2px; +} +.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; + list-style: none; + background-color: #ffffff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + *border-right-width: 2px; + *border-bottom-width: 2px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} +.dropdown-menu.pull-right { + right: 0; + left: auto; +} +.dropdown-menu .divider { + *width: 100%; + height: 1px; + margin: 9px 1px; + *margin: -5px 0 5px; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; +} +.dropdown-menu li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 20px; + color: #333333; + white-space: nowrap; +} +.dropdown-menu li > a:hover, +.dropdown-menu li > a:focus, +.dropdown-submenu:hover > a { + text-decoration: none; + color: #ffffff; + background-color: #0081c2; + background-image: -moz-linear-gradient(top, #0088cc, #0077b3); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); + background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); + background-image: -o-linear-gradient(top, #0088cc, #0077b3); + background-image: linear-gradient(to bottom, #0088cc, #0077b3); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); +} +.dropdown-menu .active > a, +.dropdown-menu .active > a:hover { + color: #ffffff; + text-decoration: none; + outline: 0; + background-color: #0081c2; + background-image: -moz-linear-gradient(top, #0088cc, #0077b3); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); + background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); + background-image: -o-linear-gradient(top, #0088cc, #0077b3); + background-image: linear-gradient(to bottom, #0088cc, #0077b3); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); +} +.dropdown-menu .disabled > a, +.dropdown-menu .disabled > a:hover { + color: #999999; +} +.dropdown-menu .disabled > a:hover { + text-decoration: none; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + cursor: default; +} +.open { + *z-index: 1000; +} +.open > .dropdown-menu { + display: block; +} +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + border-top: 0; + border-bottom: 4px solid #000000; + content: ""; +} +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; +} +.dropdown-submenu { + position: relative; +} +.dropdown-submenu > .dropdown-menu { + top: 0; + left: 100%; + margin-top: -6px; + margin-left: -1px; + -webkit-border-radius: 0 6px 6px 6px; + -moz-border-radius: 0 6px 6px 6px; + border-radius: 0 6px 6px 6px; +} +.dropdown-submenu:hover > .dropdown-menu { + display: block; +} +.dropup .dropdown-submenu > .dropdown-menu { + top: auto; + bottom: 0; + margin-top: 0; + margin-bottom: -2px; + -webkit-border-radius: 5px 5px 5px 0; + -moz-border-radius: 5px 5px 5px 0; + border-radius: 5px 5px 5px 0; +} +.dropdown-submenu > a:after { + display: block; + content: " "; + float: right; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; + border-width: 5px 0 5px 5px; + border-left-color: #cccccc; + margin-top: 5px; + margin-right: -10px; +} +.dropdown-submenu:hover > a:after { + border-left-color: #ffffff; +} +.dropdown-submenu.pull-left { + float: none; +} +.dropdown-submenu.pull-left > .dropdown-menu { + left: -100%; + margin-left: 10px; + -webkit-border-radius: 6px 0 6px 6px; + -moz-border-radius: 6px 0 6px 6px; + border-radius: 6px 0 6px 6px; +} +.dropdown .dropdown-menu .nav-header { + padding-left: 20px; + padding-right: 20px; +} +.typeahead { + z-index: 1051; + margin-top: 2px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.accordion { + margin-bottom: 20px; +} +.accordion-group { + margin-bottom: 2px; + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.accordion-heading { + border-bottom: 0; +} +.accordion-heading .accordion-toggle { + display: block; + padding: 8px 15px; +} +.accordion-toggle { + cursor: pointer; +} +.accordion-inner { + padding: 9px 15px; + border-top: 1px solid #e5e5e5; +} +.carousel { + position: relative; + margin-bottom: 20px; + line-height: 1; +} +.carousel-inner { + overflow: hidden; + width: 100%; + position: relative; +} +.carousel-inner > .item { + display: none; + position: relative; + -webkit-transition: 0.6s ease-in-out left; + -moz-transition: 0.6s ease-in-out left; + -o-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; +} +.carousel-inner > .item > img { + display: block; + 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: 40%; + left: 15px; + width: 40px; + height: 40px; + margin-top: -20px; + font-size: 60px; + font-weight: 100; + line-height: 30px; + color: #ffffff; + text-align: center; + background: #222222; + border: 3px solid #ffffff; + -webkit-border-radius: 23px; + -moz-border-radius: 23px; + border-radius: 23px; + opacity: 0.5; + filter: alpha(opacity=50); +} +.carousel-control.right { + left: auto; + right: 15px; +} +.carousel-control:hover { + color: #ffffff; + text-decoration: none; + opacity: 0.9; + filter: alpha(opacity=90); +} +.carousel-caption { + position: absolute; + left: 0; + right: 0; + bottom: 0; + padding: 15px; + background: #333333; + background: rgba(0, 0, 0, 0.75); +} +.carousel-caption h4, +.carousel-caption p { + color: #ffffff; + line-height: 20px; +} +.carousel-caption h4 { + margin: 0 0 5px; +} +.carousel-caption p { + margin-bottom: 0; +} +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + -moz-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-large { + padding: 24px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} +.well-small { + padding: 9px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.close { + float: right; + font-size: 20px; + font-weight: bold; + line-height: 20px; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); +} +.close:hover { + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.4; + filter: alpha(opacity=40); +} +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} +.pull-right { + float: right; +} +.pull-left { + float: left; +} +.hide { + display: none; +} +.show { + display: block; +} +.invisible { + visibility: hidden; +} +.affix { + position: fixed; +} +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + -moz-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} +.fade.in { + opacity: 1; +} +.collapse { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height 0.35s ease; + -moz-transition: height 0.35s ease; + -o-transition: height 0.35s ease; + transition: height 0.35s ease; +} +.collapse.in { + height: auto; +} +.hidden { + display: none; + visibility: hidden; +} +.visible-phone { + display: none !important; +} +.visible-tablet { + display: none !important; +} +.hidden-desktop { + display: none !important; +} +.visible-desktop { + display: inherit !important; +} +@media (min-width: 768px) and (max-width: 979px) { + .hidden-desktop { + display: inherit !important; + } + .visible-desktop { + display: none !important ; + } + .visible-tablet { + display: inherit !important; + } + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + .hidden-desktop { + display: inherit !important; + } + .visible-desktop { + display: none !important; + } + .visible-phone { + display: inherit !important; + } + .hidden-phone { + display: none !important; + } +} +@media (max-width: 767px) { + body { + padding-left: 20px; + padding-right: 20px; + } + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-left: -20px; + margin-right: -20px; + } + .container-fluid { + padding: 0; + } + .dl-horizontal dt { + float: none; + clear: none; + width: auto; + text-align: left; + } + .dl-horizontal dd { + margin-left: 0; + } + .container { + width: auto; + } + .row-fluid { + width: 100%; + } + .row, + .thumbnails { + margin-left: 0; + } + .thumbnails > li { + float: none; + margin-left: 0; + } + [class*="span"], + .uneditable-input[class*="span"], + .row-fluid [class*="span"] { + float: none; + display: block; + width: 100%; + margin-left: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + .input-large, + .input-xlarge, + .input-xxlarge, + input[class*="span"], + select[class*="span"], + textarea[class*="span"], + .uneditable-input { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + .modal { + position: fixed; + top: 20px; + left: 20px; + right: 20px; + width: auto; + margin: 0; + } + .modal.fade { + top: -100px; + } + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + .page-header h1 small { + display: block; + line-height: 20px; + } + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + .form-horizontal .controls { + margin-left: 0; + } + .form-horizontal .control-list { + padding-top: 0; + } + .form-horizontal .form-actions { + padding-left: 10px; + padding-right: 10px; + } + .media .pull-left, + .media .pull-right { + float: none; + display: block; + margin-bottom: 10px; + } + .media-object { + margin-right: 0; + margin-left: 0; + } + .modal { + top: 10px; + left: 10px; + right: 10px; + } + .modal-header .close { + padding: 10px; + margin: -10px; + } + .carousel-caption { + position: static; + } +} +@media (min-width: 768px) and (max-width: 979px) { + .row { + margin-left: -20px; + *zoom: 1; + } + .row:before, + .row:after { + display: table; + content: ""; + line-height: 0; + } + .row:after { + clear: both; + } + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + .span12 { + width: 724px; + } + .span11 { + width: 662px; + } + .span10 { + width: 600px; + } + .span9 { + width: 538px; + } + .span8 { + width: 476px; + } + .span7 { + width: 414px; + } + .span6 { + width: 352px; + } + .span5 { + width: 290px; + } + .span4 { + width: 228px; + } + .span3 { + width: 166px; + } + .span2 { + width: 104px; + } + .span1 { + width: 42px; + } + .offset12 { + margin-left: 764px; + } + .offset11 { + margin-left: 702px; + } + .offset10 { + margin-left: 640px; + } + .offset9 { + margin-left: 578px; + } + .offset8 { + margin-left: 516px; + } + .offset7 { + margin-left: 454px; + } + .offset6 { + margin-left: 392px; + } + .offset5 { + margin-left: 330px; + } + .offset4 { + margin-left: 268px; + } + .offset3 { + margin-left: 206px; + } + .offset2 { + margin-left: 144px; + } + .offset1 { + margin-left: 82px; + } + .row-fluid { + width: 100%; + *zoom: 1; + } + .row-fluid:before, + .row-fluid:after { + display: table; + content: ""; + line-height: 0; + } + .row-fluid:after { + clear: both; + } + .row-fluid [class*="span"] { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + float: left; + margin-left: 2.7624309392265194%; + *margin-left: 2.709239449864817%; + } + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + input, + textarea, + .uneditable-input { + margin-left: 0; + } + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + input.span12, textarea.span12, .uneditable-input.span12 { + width: 710px; + } + input.span11, textarea.span11, .uneditable-input.span11 { + width: 648px; + } + input.span10, textarea.span10, .uneditable-input.span10 { + width: 586px; + } + input.span9, textarea.span9, .uneditable-input.span9 { + width: 524px; + } + input.span8, textarea.span8, .uneditable-input.span8 { + width: 462px; + } + input.span7, textarea.span7, .uneditable-input.span7 { + width: 400px; + } + input.span6, textarea.span6, .uneditable-input.span6 { + width: 338px; + } + input.span5, textarea.span5, .uneditable-input.span5 { + width: 276px; + } + input.span4, textarea.span4, .uneditable-input.span4 { + width: 214px; + } + input.span3, textarea.span3, .uneditable-input.span3 { + width: 152px; + } + input.span2, textarea.span2, .uneditable-input.span2 { + width: 90px; + } + input.span1, textarea.span1, .uneditable-input.span1 { + width: 28px; + } +} +@media (min-width: 1200px) { + .row { + margin-left: -30px; + *zoom: 1; + } + .row:before, + .row:after { + display: table; + content: ""; + line-height: 0; + } + .row:after { + clear: both; + } + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 30px; + } + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 1170px; + } + .span12 { + width: 1170px; + } + .span11 { + width: 1070px; + } + .span10 { + width: 970px; + } + .span9 { + width: 870px; + } + .span8 { + width: 770px; + } + .span7 { + width: 670px; + } + .span6 { + width: 570px; + } + .span5 { + width: 470px; + } + .span4 { + width: 370px; + } + .span3 { + width: 270px; + } + .span2 { + width: 170px; + } + .span1 { + width: 70px; + } + .offset12 { + margin-left: 1230px; + } + .offset11 { + margin-left: 1130px; + } + .offset10 { + margin-left: 1030px; + } + .offset9 { + margin-left: 930px; + } + .offset8 { + margin-left: 830px; + } + .offset7 { + margin-left: 730px; + } + .offset6 { + margin-left: 630px; + } + .offset5 { + margin-left: 530px; + } + .offset4 { + margin-left: 430px; + } + .offset3 { + margin-left: 330px; + } + .offset2 { + margin-left: 230px; + } + .offset1 { + margin-left: 130px; + } + .row-fluid { + width: 100%; + *zoom: 1; + } + .row-fluid:before, + .row-fluid:after { + display: table; + content: ""; + line-height: 0; + } + .row-fluid:after { + clear: both; + } + .row-fluid [class*="span"] { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + float: left; + margin-left: 2.564102564102564%; + *margin-left: 2.5109110747408616%; + } + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.564102564102564%; + } + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + .row-fluid .span11 { + width: 91.45299145299145%; + *width: 91.39979996362975%; + } + .row-fluid .span10 { + width: 82.90598290598291%; + *width: 82.8527914166212%; + } + .row-fluid .span9 { + width: 74.35897435897436%; + *width: 74.30578286961266%; + } + .row-fluid .span8 { + width: 65.81196581196582%; + *width: 65.75877432260411%; + } + .row-fluid .span7 { + width: 57.26495726495726%; + *width: 57.21176577559556%; + } + .row-fluid .span6 { + width: 48.717948717948715%; + *width: 48.664757228587014%; + } + .row-fluid .span5 { + width: 40.17094017094017%; + *width: 40.11774868157847%; + } + .row-fluid .span4 { + width: 31.623931623931625%; + *width: 31.570740134569924%; + } + .row-fluid .span3 { + width: 23.076923076923077%; + *width: 23.023731587561375%; + } + .row-fluid .span2 { + width: 14.52991452991453%; + *width: 14.476723040552828%; + } + .row-fluid .span1 { + width: 5.982905982905983%; + *width: 5.929714493544281%; + } + .row-fluid .offset12 { + margin-left: 105.12820512820512%; + *margin-left: 105.02182214948171%; + } + .row-fluid .offset12:first-child { + margin-left: 102.56410256410257%; + *margin-left: 102.45771958537915%; + } + .row-fluid .offset11 { + margin-left: 96.58119658119658%; + *margin-left: 96.47481360247316%; + } + .row-fluid .offset11:first-child { + margin-left: 94.01709401709402%; + *margin-left: 93.91071103837061%; + } + .row-fluid .offset10 { + margin-left: 88.03418803418803%; + *margin-left: 87.92780505546462%; + } + .row-fluid .offset10:first-child { + margin-left: 85.47008547008548%; + *margin-left: 85.36370249136206%; + } + .row-fluid .offset9 { + margin-left: 79.48717948717949%; + *margin-left: 79.38079650845607%; + } + .row-fluid .offset9:first-child { + margin-left: 76.92307692307693%; + *margin-left: 76.81669394435352%; + } + .row-fluid .offset8 { + margin-left: 70.94017094017094%; + *margin-left: 70.83378796144753%; + } + .row-fluid .offset8:first-child { + margin-left: 68.37606837606839%; + *margin-left: 68.26968539734497%; + } + .row-fluid .offset7 { + margin-left: 62.393162393162385%; + *margin-left: 62.28677941443899%; + } + .row-fluid .offset7:first-child { + margin-left: 59.82905982905982%; + *margin-left: 59.72267685033642%; + } + .row-fluid .offset6 { + margin-left: 53.84615384615384%; + *margin-left: 53.739770867430444%; + } + .row-fluid .offset6:first-child { + margin-left: 51.28205128205128%; + *margin-left: 51.175668303327875%; + } + .row-fluid .offset5 { + margin-left: 45.299145299145295%; + *margin-left: 45.1927623204219%; + } + .row-fluid .offset5:first-child { + margin-left: 42.73504273504273%; + *margin-left: 42.62865975631933%; + } + .row-fluid .offset4 { + margin-left: 36.75213675213675%; + *margin-left: 36.645753773413354%; + } + .row-fluid .offset4:first-child { + margin-left: 34.18803418803419%; + *margin-left: 34.081651209310785%; + } + .row-fluid .offset3 { + margin-left: 28.205128205128204%; + *margin-left: 28.0987452264048%; + } + .row-fluid .offset3:first-child { + margin-left: 25.641025641025642%; + *margin-left: 25.53464266230224%; + } + .row-fluid .offset2 { + margin-left: 19.65811965811966%; + *margin-left: 19.551736679396257%; + } + .row-fluid .offset2:first-child { + margin-left: 17.094017094017094%; + *margin-left: 16.98763411529369%; + } + .row-fluid .offset1 { + margin-left: 11.11111111111111%; + *margin-left: 11.004728132387708%; + } + .row-fluid .offset1:first-child { + margin-left: 8.547008547008547%; + *margin-left: 8.440625568285142%; + } + input, + textarea, + .uneditable-input { + margin-left: 0; + } + .controls-row [class*="span"] + [class*="span"] { + margin-left: 30px; + } + input.span12, textarea.span12, .uneditable-input.span12 { + width: 1156px; + } + input.span11, textarea.span11, .uneditable-input.span11 { + width: 1056px; + } + input.span10, textarea.span10, .uneditable-input.span10 { + width: 956px; + } + input.span9, textarea.span9, .uneditable-input.span9 { + width: 856px; + } + input.span8, textarea.span8, .uneditable-input.span8 { + width: 756px; + } + input.span7, textarea.span7, .uneditable-input.span7 { + width: 656px; + } + input.span6, textarea.span6, .uneditable-input.span6 { + width: 556px; + } + input.span5, textarea.span5, .uneditable-input.span5 { + width: 456px; + } + input.span4, textarea.span4, .uneditable-input.span4 { + width: 356px; + } + input.span3, textarea.span3, .uneditable-input.span3 { + width: 256px; + } + input.span2, textarea.span2, .uneditable-input.span2 { + width: 156px; + } + input.span1, textarea.span1, .uneditable-input.span1 { + width: 56px; + } + .thumbnails { + margin-left: -30px; + } + .thumbnails > li { + margin-left: 30px; + } + .row-fluid .thumbnails { + margin-left: 0; + } +} +@media (max-width: 979px) { + body { + padding-top: 0; + } + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + .navbar-fixed-top { + margin-bottom: 20px; + } + .navbar-fixed-bottom { + margin-top: 20px; + } + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + .navbar .container { + width: auto; + padding: 0; + } + .navbar .brand { + padding-left: 10px; + padding-right: 10px; + margin: 0 0 0 -5px; + } + .nav-collapse { + clear: both; + } + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + .nav-collapse .nav > li { + float: none; + } + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + .nav-collapse .nav > .divider-vertical { + display: none; + } + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + .nav-collapse .nav > li > a, + .nav-collapse .dropdown-menu a { + padding: 9px 15px; + font-weight: bold; + color: #777777; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + } + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + .nav-collapse .nav > li > a:hover, + .nav-collapse .dropdown-menu a:hover { + background-color: #f2f2f2; + } + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + .navbar-inverse .nav-collapse .nav > li > a:hover, + .navbar-inverse .nav-collapse .dropdown-menu a:hover { + background-color: #111111; + } + .nav-collapse.in .btn-group { + margin-top: 5px; + padding: 0; + } + .nav-collapse .dropdown-menu { + position: static; + top: auto; + left: auto; + float: none; + display: none; + max-width: none; + margin: 0 15px; + padding: 0; + background-color: transparent; + border: none; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + } + .nav-collapse .open > .dropdown-menu { + display: block; + } + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + .nav-collapse .dropdown-menu .divider { + display: none; + } + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + .nav-collapse .navbar-form, + .nav-collapse .navbar-search { + float: none; + padding: 10px 15px; + margin: 10px 0; + border-top: 1px solid #f2f2f2; + border-bottom: 1px solid #f2f2f2; + -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1); + -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1); + box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1); + } + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + .nav-collapse, + .nav-collapse.collapse { + overflow: hidden; + height: 0; + } + .navbar .btn-navbar { + display: block; + } + .navbar-static .navbar-inner { + padding-left: 10px; + padding-right: 10px; + } +} +@media (min-width: 980px) { + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} diff --git a/doc/css/bootstrap.min.css b/doc/css/bootstrap.min.css index 296f03b02..012aa875b 100644 --- a/doc/css/bootstrap.min.css +++ b/doc/css/bootstrap.min.css @@ -1,724 +1,724 @@ -/*! - * Bootstrap v2.2.2 - * - * Copyright 2012 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 @twitter by @mdo and @fat. - */ -.clearfix{*zoom:1;}.clearfix:before,.clearfix:after{display:table;content:"";line-height:0;} -.clearfix:after{clear:both;} -.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0;} -.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} -article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block;} -audio,canvas,video{display:inline-block;*display:inline;*zoom:1;} -audio:not([controls]){display:none;} -html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;} -a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} -a:hover,a:active{outline:0;} -sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline;} -sup{top:-0.5em;} -sub{bottom:-0.25em;} -img{max-width:100%;width:auto\9;height:auto;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic;} -#map_canvas img,.google-maps img{max-width:none;} -button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle;} -button,input{*overflow:visible;line-height:normal;} -button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0;} -button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer;} -label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer;} -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-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none;} -textarea{overflow:auto;vertical-align:top;} -@media print{*{text-shadow:none !important;color:#000 !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:0.5cm;}p,h2,h3{orphans:3;widows:3;} h2,h3{page-break-after:avoid;}}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333333;background-color:#ffffff;} -a{color:#0088cc;text-decoration:none;} -a:hover{color:#005580;text-decoration:underline;} -.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} -.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.2);-webkit-box-shadow:0 1px 3px rgba(0, 0, 0, 0.1);-moz-box-shadow:0 1px 3px rgba(0, 0, 0, 0.1);box-shadow:0 1px 3px rgba(0, 0, 0, 0.1);} -.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px;} -.row{margin-left:-20px;*zoom:1;}.row:before,.row:after{display:table;content:"";line-height:0;} -.row:after{clear:both;} -[class*="span"]{float:left;min-height:1px;margin-left:20px;} -.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px;} -.span12{width:940px;} -.span11{width:860px;} -.span10{width:780px;} -.span9{width:700px;} -.span8{width:620px;} -.span7{width:540px;} -.span6{width:460px;} -.span5{width:380px;} -.span4{width:300px;} -.span3{width:220px;} -.span2{width:140px;} -.span1{width:60px;} -.offset12{margin-left:980px;} -.offset11{margin-left:900px;} -.offset10{margin-left:820px;} -.offset9{margin-left:740px;} -.offset8{margin-left:660px;} -.offset7{margin-left:580px;} -.offset6{margin-left:500px;} -.offset5{margin-left:420px;} -.offset4{margin-left:340px;} -.offset3{margin-left:260px;} -.offset2{margin-left:180px;} -.offset1{margin-left:100px;} -.row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";line-height:0;} -.row-fluid:after{clear:both;} -.row-fluid [class*="span"]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;} -.row-fluid [class*="span"]:first-child{margin-left:0;} -.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%;} -.row-fluid .span12{width:100%;*width:99.94680851063829%;} -.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%;} -.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%;} -.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%;} -.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%;} -.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%;} -.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%;} -.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%;} -.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%;} -.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%;} -.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%;} -.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%;} -.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%;} -.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%;} -.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%;} -.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%;} -.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%;} -.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%;} -.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%;} -.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%;} -.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%;} -.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%;} -.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%;} -.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%;} -.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%;} -.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%;} -.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%;} -.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%;} -.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%;} -.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%;} -.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%;} -.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%;} -.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%;} -.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%;} -.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%;} -.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%;} -[class*="span"].hide,.row-fluid [class*="span"].hide{display:none;} -[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right;} -.container{margin-right:auto;margin-left:auto;*zoom:1;}.container:before,.container:after{display:table;content:"";line-height:0;} -.container:after{clear:both;} -.container-fluid{padding-right:20px;padding-left:20px;*zoom:1;}.container-fluid:before,.container-fluid:after{display:table;content:"";line-height:0;} -.container-fluid:after{clear:both;} -p{margin:0 0 10px;} -.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px;} -small{font-size:85%;} -strong{font-weight:bold;} -em{font-style:italic;} -cite{font-style:normal;} -.muted{color:#999999;} -a.muted:hover{color:#808080;} -.text-warning{color:#c09853;} -a.text-warning:hover{color:#a47e3c;} -.text-error{color:#b94a48;} -a.text-error:hover{color:#953b39;} -.text-info{color:#3a87ad;} -a.text-info:hover{color:#2d6987;} -.text-success{color:#468847;} -a.text-success:hover{color:#356635;} -h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:inherit;text-rendering:optimizelegibility;}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999999;} -h1,h2,h3{line-height:40px;} -h1{font-size:38.5px;} -h2{font-size:31.5px;} -h3{font-size:24.5px;} -h4{font-size:17.5px;} -h5{font-size:14px;} -h6{font-size:11.9px;} -h1 small{font-size:24.5px;} -h2 small{font-size:17.5px;} -h3 small{font-size:14px;} -h4 small{font-size:14px;} -.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eeeeee;} -ul,ol{padding:0;margin:0 0 10px 25px;} -ul ul,ul ol,ol ol,ol ul{margin-bottom:0;} -li{line-height:20px;} -ul.unstyled,ol.unstyled{margin-left:0;list-style:none;} -ul.inline,ol.inline{margin-left:0;list-style:none;}ul.inline >li,ol.inline >li{display:inline-block;padding-left:5px;padding-right:5px;} -dl{margin-bottom:20px;} -dt,dd{line-height:20px;} -dt{font-weight:bold;} -dd{margin-left:10px;} -.dl-horizontal{*zoom:1;}.dl-horizontal:before,.dl-horizontal:after{display:table;content:"";line-height:0;} -.dl-horizontal:after{clear:both;} -.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;} -.dl-horizontal dd{margin-left:180px;} -hr{margin:20px 0;border:0;border-top:1px solid #eeeeee;border-bottom:1px solid #ffffff;} -abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999999;} -abbr.initialism{font-size:90%;text-transform:uppercase;} -blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eeeeee;}blockquote p{margin-bottom:0;font-size:16px;font-weight:300;line-height:25px;} -blockquote small{display:block;line-height:20px;color:#999999;}blockquote small:before{content:'\2014 \00A0';} -blockquote.pull-right{float: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:20px;} -code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#333333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} -code{padding:2px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8;white-space:nowrap;} -pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}pre.prettyprint{margin-bottom:20px;} -pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0;} -.pre-scrollable{max-height:340px;overflow-y:scroll;} -.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#ffffff;vertical-align:baseline;white-space:nowrap;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#999999;} -.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} -.badge{padding-left:9px;padding-right:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px;} -.label:empty,.badge:empty{display:none;} -a.label:hover,a.badge:hover{color:#ffffff;text-decoration:none;cursor:pointer;} -.label-important,.badge-important{background-color:#b94a48;} -.label-important[href],.badge-important[href]{background-color:#953b39;} -.label-warning,.badge-warning{background-color:#f89406;} -.label-warning[href],.badge-warning[href]{background-color:#c67605;} -.label-success,.badge-success{background-color:#468847;} -.label-success[href],.badge-success[href]{background-color:#356635;} -.label-info,.badge-info{background-color:#3a87ad;} -.label-info[href],.badge-info[href]{background-color:#2d6987;} -.label-inverse,.badge-inverse{background-color:#333333;} -.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a;} -.btn .label,.btn .badge{position:relative;top:-1px;} -.btn-mini .label,.btn-mini .badge{top:0;} -table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0;} -.table{width:100%;margin-bottom:20px;}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #dddddd;} -.table th{font-weight:bold;} -.table thead th{vertical-align:bottom;} -.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.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 th,.table-condensed td{padding:4px 5px;} -.table-bordered{border:1px solid #dddddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.table-bordered th,.table-bordered td{border-left:1px solid #dddddd;} -.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0;} -.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child{-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;} -.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;} -.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child{-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;} -.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child{-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;} -.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0;} -.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;-moz-border-radius-bottomright:0;border-bottom-right-radius:0;} -.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;} -.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;} -.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 td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0;} -.table td.span1,.table th.span1{float:none;width:44px;margin-left:0;} -.table td.span2,.table th.span2{float:none;width:124px;margin-left:0;} -.table td.span3,.table th.span3{float:none;width:204px;margin-left:0;} -.table td.span4,.table th.span4{float:none;width:284px;margin-left:0;} -.table td.span5,.table th.span5{float:none;width:364px;margin-left:0;} -.table td.span6,.table th.span6{float:none;width:444px;margin-left:0;} -.table td.span7,.table th.span7{float:none;width:524px;margin-left:0;} -.table td.span8,.table th.span8{float:none;width:604px;margin-left:0;} -.table td.span9,.table th.span9{float:none;width:684px;margin-left:0;} -.table td.span10,.table th.span10{float:none;width:764px;margin-left:0;} -.table td.span11,.table th.span11{float:none;width:844px;margin-left:0;} -.table td.span12,.table th.span12{float:none;width:924px;margin-left:0;} -.table tbody tr.success td{background-color:#dff0d8;} -.table tbody tr.error td{background-color:#f2dede;} -.table tbody tr.warning td{background-color:#fcf8e3;} -.table tbody tr.info td{background-color:#d9edf7;} -.table-hover tbody tr.success:hover td{background-color:#d0e9c6;} -.table-hover tbody tr.error:hover td{background-color:#ebcccc;} -.table-hover tbody tr.warning:hover td{background-color:#faf2cc;} -.table-hover tbody tr.info:hover td{background-color:#c4e3f3;} -form{margin:0 0 20px;} -fieldset{padding:0;margin:0;border:0;} -legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333333;border:0;border-bottom:1px solid #e5e5e5;}legend small{font-size:15px;color:#999999;} -label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px;} -input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;} -label{display:block;margin-bottom:5px;} -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"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#555555;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;vertical-align:middle;} -input,textarea,.uneditable-input{width:206px;} -textarea{height:auto;} -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"],.uneditable-input{background-color:#ffffff;border:1px solid #cccccc;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-webkit-transition:border linear .2s, box-shadow linear .2s;-moz-transition:border linear .2s, box-shadow linear .2s;-o-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82, 168, 236, 0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);} -input[type="radio"],input[type="checkbox"]{margin:4px 0 0;*margin-top:0;margin-top:1px \9;line-height:normal;} -input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto;} -select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px;} -select{width:220px;border:1px solid #cccccc;background-color:#ffffff;} -select[multiple],select[size]{height:auto;} -select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} -.uneditable-input,.uneditable-textarea{color:#999999;background-color:#fcfcfc;border-color:#cccccc;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);cursor:not-allowed;} -.uneditable-input{overflow:hidden;white-space:nowrap;} -.uneditable-textarea{width:auto;height:auto;} -input:-moz-placeholder,textarea:-moz-placeholder{color:#999999;} -input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999999;} -input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999999;} -.radio,.checkbox{min-height:20px;padding-left:20px;} -.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px;} -.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px;} -.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle;} -.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px;} -.input-mini{width:60px;} -.input-small{width:90px;} -.input-medium{width:150px;} -.input-large{width:210px;} -.input-xlarge{width:270px;} -.input-xxlarge{width:530px;} -input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0;} -.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block;} -input,textarea,.uneditable-input{margin-left:0;} -.controls-row [class*="span"]+[class*="span"]{margin-left:20px;} -input.span12, textarea.span12, .uneditable-input.span12{width:926px;} -input.span11, textarea.span11, .uneditable-input.span11{width:846px;} -input.span10, textarea.span10, .uneditable-input.span10{width:766px;} -input.span9, textarea.span9, .uneditable-input.span9{width:686px;} -input.span8, textarea.span8, .uneditable-input.span8{width:606px;} -input.span7, textarea.span7, .uneditable-input.span7{width:526px;} -input.span6, textarea.span6, .uneditable-input.span6{width:446px;} -input.span5, textarea.span5, .uneditable-input.span5{width:366px;} -input.span4, textarea.span4, .uneditable-input.span4{width:286px;} -input.span3, textarea.span3, .uneditable-input.span3{width:206px;} -input.span2, textarea.span2, .uneditable-input.span2{width:126px;} -input.span1, textarea.span1, .uneditable-input.span1{width:46px;} -.controls-row{*zoom:1;}.controls-row:before,.controls-row:after{display:table;content:"";line-height:0;} -.controls-row:after{clear:both;} -.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left;} -.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px;} -input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eeeeee;} -input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent;} -.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853;} -.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853;} -.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #dbc59e;-moz-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;} -.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853;} -.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48;} -.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48;} -.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #d59392;-moz-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;} -.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48;} -.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847;} -.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847;} -.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7aba7b;-moz-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;} -.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847;} -.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad;} -.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad;} -.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7ab5d3;} -.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad;} -input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b;}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7;} -.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1;}.form-actions:before,.form-actions:after{display:table;content:"";line-height:0;} -.form-actions:after{clear:both;} -.help-block,.help-inline{color:#595959;} -.help-block{display:block;margin-bottom:10px;} -.help-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding-left:5px;} -.input-append,.input-prepend{margin-bottom:5px;font-size:0;white-space:nowrap;}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu{font-size:14px;} -.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2;} -.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #ffffff;background-color:#eeeeee;border:1px solid #ccc;} -.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} -.input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546;} -.input-prepend .add-on,.input-prepend .btn{margin-right:-1px;} -.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;} -.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} -.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px;} -.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} -.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} -.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;} -.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} -.input-prepend.input-append .btn-group:first-child{margin-left:0;} -input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;} -.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} -.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px;} -.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0;} -.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0;} -.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px;} -.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;*zoom:1;margin-bottom:0;vertical-align:middle;} -.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none;} -.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block;} -.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0;} -.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle;} -.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0;} -.control-group{margin-bottom:10px;} -legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate;} -.form-horizontal .control-group{margin-bottom:20px;*zoom:1;}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;content:"";line-height:0;} -.form-horizontal .control-group:after{clear:both;} -.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right;} -.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0;}.form-horizontal .controls:first-child{*padding-left:180px;} -.form-horizontal .help-block{margin-bottom:0;} -.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px;} -.form-horizontal .form-actions{padding-left:180px;} -.btn{display:inline-block;*display:inline;*zoom:1;padding:4px 12px;margin-bottom:0;font-size:14px;line-height:20px;text-align:center;vertical-align:middle;cursor:pointer;color:#333333;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(to bottom, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#e6e6e6;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border:1px solid #bbbbbb;*border:0;border-bottom-color:#a2a2a2;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);}.btn:hover,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333333;background-color:#e6e6e6;*background-color:#d9d9d9;} -.btn:active,.btn.active{background-color:#cccccc \9;} -.btn:first-child{*margin-left:0;} -.btn:hover{color:#333333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position 0.1s linear;-moz-transition:background-position 0.1s linear;-o-transition:background-position 0.1s linear;transition:background-position 0.1s linear;} -.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} -.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);} -.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} -.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} -.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px;} -.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} -.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0;} -.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px;} -.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} -.btn-block{display:block;width:100%;padding-left:0;padding-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} -.btn-block+.btn-block{margin-top:5px;} -input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%;} -.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255, 255, 255, 0.75);} -.btn{border-color:#c5c5c5;border-color:rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.25);} -.btn-primary{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#006dcc;background-image:-moz-linear-gradient(top, #0088cc, #0044cc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));background-image:-webkit-linear-gradient(top, #0088cc, #0044cc);background-image:-o-linear-gradient(top, #0088cc, #0044cc);background-image:linear-gradient(to bottom, #0088cc, #0044cc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);border-color:#0044cc #0044cc #002a80;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#0044cc;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#ffffff;background-color:#0044cc;*background-color:#003bb3;} -.btn-primary:active,.btn-primary.active{background-color:#003399 \9;} -.btn-warning{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(to bottom, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);border-color:#f89406 #f89406 #ad6704;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#f89406;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-warning:hover,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#ffffff;background-color:#f89406;*background-color:#df8505;} -.btn-warning:active,.btn-warning.active{background-color:#c67605 \9;} -.btn-danger{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(to bottom, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#bd362f;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-danger:hover,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#ffffff;background-color:#bd362f;*background-color:#a9302a;} -.btn-danger:active,.btn-danger.active{background-color:#942a25 \9;} -.btn-success{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(to bottom, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0);border-color:#51a351 #51a351 #387038;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#51a351;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-success:hover,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#ffffff;background-color:#51a351;*background-color:#499249;} -.btn-success:active,.btn-success.active{background-color:#408140 \9;} -.btn-info{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(to bottom, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0);border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#2f96b4;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-info:hover,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#ffffff;background-color:#2f96b4;*background-color:#2a85a0;} -.btn-info:active,.btn-info.active{background-color:#24748c \9;} -.btn-inverse{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#363636;background-image:-moz-linear-gradient(top, #444444, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222));background-image:-webkit-linear-gradient(top, #444444, #222222);background-image:-o-linear-gradient(top, #444444, #222222);background-image:linear-gradient(to bottom, #444444, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0);border-color:#222222 #222222 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#222222;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-inverse:hover,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#ffffff;background-color:#222222;*background-color:#151515;} -.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9;} -button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px;}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0;} -button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px;} -button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px;} -button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px;} -.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} -.btn-link{border-color:transparent;cursor:pointer;color:#0088cc;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} -.btn-link:hover{color:#005580;text-decoration:underline;background-color:transparent;} -.btn-link[disabled]:hover{color:#333333;text-decoration:none;} -.btn-group{position:relative;display:inline-block;*display:inline;*zoom:1;font-size:0;vertical-align:middle;white-space:nowrap;*margin-left:.3em;}.btn-group:first-child{*margin-left:0;} -.btn-group+.btn-group{margin-left:5px;} -.btn-toolbar{font-size:0;margin-top:10px;margin-bottom:10px;}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px;} -.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} -.btn-group>.btn+.btn{margin-left:-1px;} -.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px;} -.btn-group>.btn-mini{font-size:10.5px;} -.btn-group>.btn-small{font-size:11.9px;} -.btn-group>.btn-large{font-size:17.5px;} -.btn-group>.btn:first-child{margin-left:0;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;} -.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;} -.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;} -.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius:6px;} -.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2;} -.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0;} -.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);*padding-top:5px;*padding-bottom:5px;} -.btn-group>.btn-mini+.dropdown-toggle{padding-left:5px;padding-right:5px;*padding-top:2px;*padding-bottom:2px;} -.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px;} -.btn-group>.btn-large+.dropdown-toggle{padding-left:12px;padding-right:12px;*padding-top:7px;*padding-bottom:7px;} -.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);} -.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6;} -.btn-group.open .btn-primary.dropdown-toggle{background-color:#0044cc;} -.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406;} -.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f;} -.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351;} -.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4;} -.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222222;} -.btn .caret{margin-top:8px;margin-left:0;} -.btn-mini .caret,.btn-small .caret,.btn-large .caret{margin-top:6px;} -.btn-large .caret{border-left-width:5px;border-right-width:5px;border-top-width:5px;} -.dropup .btn-large .caret{border-bottom-width:5px;} -.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;} -.btn-group-vertical{display:inline-block;*display:inline;*zoom:1;} -.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} -.btn-group-vertical>.btn+.btn{margin-left:0;margin-top:-1px;} -.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;} -.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;} -.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0;} -.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;} -.nav{margin-left:0;margin-bottom:20px;list-style:none;} -.nav>li>a{display:block;} -.nav>li>a:hover{text-decoration:none;background-color:#eeeeee;} -.nav>li>a>img{max-width:none;} -.nav>.pull-right{float:right;} -.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999999;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);text-transform:uppercase;} -.nav li+.nav-header{margin-top:9px;} -.nav-list{padding-left:15px;padding-right:15px;margin-bottom:0;} -.nav-list>li>a,.nav-list .nav-header{margin-left:-15px;margin-right:-15px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);} -.nav-list>li>a{padding:3px 15px;} -.nav-list>.active>a,.nav-list>.active>a:hover{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.2);background-color:#0088cc;} -.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px;} -.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;} -.nav-tabs,.nav-pills{*zoom:1;}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;content:"";line-height:0;} -.nav-tabs:after,.nav-pills:after{clear:both;} -.nav-tabs>li,.nav-pills>li{float:left;} -.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px;} -.nav-tabs{border-bottom:1px solid #ddd;} -.nav-tabs>li{margin-bottom:-1px;} -.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}.nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #dddddd;} -.nav-tabs>.active>a,.nav-tabs>.active>a:hover{color:#555555;background-color:#ffffff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default;} -.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;} -.nav-pills>.active>a,.nav-pills>.active>a:hover{color:#ffffff;background-color:#0088cc;} -.nav-stacked>li{float:none;} -.nav-stacked>li>a{margin-right:0;} -.nav-tabs.nav-stacked{border-bottom:0;} -.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} -.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;} -.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;} -.nav-tabs.nav-stacked>li>a:hover{border-color:#ddd;z-index:2;} -.nav-pills.nav-stacked>li>a{margin-bottom:3px;} -.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px;} -.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;} -.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} -.nav .dropdown-toggle .caret{border-top-color:#0088cc;border-bottom-color:#0088cc;margin-top:6px;} -.nav .dropdown-toggle:hover .caret{border-top-color:#005580;border-bottom-color:#005580;} -.nav-tabs .dropdown-toggle .caret{margin-top:8px;} -.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff;} -.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555555;border-bottom-color:#555555;} -.nav>.dropdown.active>a:hover{cursor:pointer;} -.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover{color:#ffffff;background-color:#999999;border-color:#999999;} -.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;opacity:1;filter:alpha(opacity=100);} -.tabs-stacked .open>a:hover{border-color:#999999;} -.tabbable{*zoom:1;}.tabbable:before,.tabbable:after{display:table;content:"";line-height:0;} -.tabbable:after{clear:both;} -.tab-content{overflow:auto;} -.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0;} -.tab-content>.tab-pane,.pill-content>.pill-pane{display:none;} -.tab-content>.active,.pill-content>.active{display:block;} -.tabs-below>.nav-tabs{border-top:1px solid #ddd;} -.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0;} -.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;}.tabs-below>.nav-tabs>li>a:hover{border-bottom-color:transparent;border-top-color:#ddd;} -.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover{border-color:transparent #ddd #ddd #ddd;} -.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none;} -.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px;} -.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd;} -.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;} -.tabs-left>.nav-tabs>li>a:hover{border-color:#eeeeee #dddddd #eeeeee #eeeeee;} -.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover{border-color:#ddd transparent #ddd #ddd;*border-right-color:#ffffff;} -.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd;} -.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} -.tabs-right>.nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #eeeeee #dddddd;} -.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover{border-color:#ddd #ddd #ddd transparent;*border-left-color:#ffffff;} -.nav>.disabled>a{color:#999999;} -.nav>.disabled>a:hover{text-decoration:none;background-color:transparent;cursor:default;} -.navbar{overflow:visible;margin-bottom:20px;*position:relative;*z-index:2;} -.navbar-inner{min-height:40px;padding-left:20px;padding-right:20px;background-color:#fafafa;background-image:-moz-linear-gradient(top, #ffffff, #f2f2f2);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2));background-image:-webkit-linear-gradient(top, #ffffff, #f2f2f2);background-image:-o-linear-gradient(top, #ffffff, #f2f2f2);background-image:linear-gradient(to bottom, #ffffff, #f2f2f2);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0);border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 4px rgba(0, 0, 0, 0.065);-moz-box-shadow:0 1px 4px rgba(0, 0, 0, 0.065);box-shadow:0 1px 4px rgba(0, 0, 0, 0.065);*zoom:1;}.navbar-inner:before,.navbar-inner:after{display:table;content:"";line-height:0;} -.navbar-inner:after{clear:both;} -.navbar .container{width:auto;} -.nav-collapse.collapse{height:auto;overflow:visible;} -.navbar .brand{float:left;display:block;padding:10px 20px 10px;margin-left:-20px;font-size:20px;font-weight:200;color:#777777;text-shadow:0 1px 0 #ffffff;}.navbar .brand:hover{text-decoration:none;} -.navbar-text{margin-bottom:0;line-height:40px;color:#777777;} -.navbar-link{color:#777777;}.navbar-link:hover{color:#333333;} -.navbar .divider-vertical{height:40px;margin:0 9px;border-left:1px solid #f2f2f2;border-right:1px solid #ffffff;} -.navbar .btn,.navbar .btn-group{margin-top:5px;} -.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn{margin-top:0;} -.navbar-form{margin-bottom:0;*zoom:1;}.navbar-form:before,.navbar-form:after{display:table;content:"";line-height:0;} -.navbar-form:after{clear:both;} -.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px;} -.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0;} -.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px;} -.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap;}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0;} -.navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0;}.navbar-search .search-query{margin-bottom:0;padding:4px 14px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;} -.navbar-static-top{position:static;margin-bottom:0;}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} -.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0;} -.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px;} -.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0;} -.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-left:0;padding-right:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} -.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px;} -.navbar-fixed-top{top:0;} -.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,.1);box-shadow:0 1px 10px rgba(0,0,0,.1);} -.navbar-fixed-bottom{bottom:0;}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,.1);box-shadow:0 -1px 10px rgba(0,0,0,.1);} -.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0;} -.navbar .nav.pull-right{float:right;margin-right:0;} -.navbar .nav>li{float:left;} -.navbar .nav>li>a{float:none;padding:10px 15px 10px;color:#777777;text-decoration:none;text-shadow:0 1px 0 #ffffff;} -.navbar .nav .dropdown-toggle .caret{margin-top:8px;} -.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{background-color:transparent;color:#333333;text-decoration:none;} -.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555555;text-decoration:none;background-color:#e5e5e5;-webkit-box-shadow:inset 0 3px 8px rgba(0, 0, 0, 0.125);-moz-box-shadow:inset 0 3px 8px rgba(0, 0, 0, 0.125);box-shadow:inset 0 3px 8px rgba(0, 0, 0, 0.125);} -.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-left:5px;margin-right:5px;color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#ededed;background-image:-moz-linear-gradient(top, #f2f2f2, #e5e5e5);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5));background-image:-webkit-linear-gradient(top, #f2f2f2, #e5e5e5);background-image:-o-linear-gradient(top, #f2f2f2, #e5e5e5);background-image:linear-gradient(to bottom, #f2f2f2, #e5e5e5);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0);border-color:#e5e5e5 #e5e5e5 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#e5e5e5;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);}.navbar .btn-navbar:hover,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#ffffff;background-color:#e5e5e5;*background-color:#d9d9d9;} -.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#cccccc \9;} -.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);-moz-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);} -.btn-navbar .icon-bar+.icon-bar{margin-top:3px;} -.navbar .nav>li>.dropdown-menu:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0, 0, 0, 0.2);position:absolute;top:-7px;left:9px;} -.navbar .nav>li>.dropdown-menu:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #ffffff;position:absolute;top:-6px;left:10px;} -.navbar-fixed-bottom .nav>li>.dropdown-menu:before{border-top:7px solid #ccc;border-top-color:rgba(0, 0, 0, 0.2);border-bottom:0;bottom:-7px;top:auto;} -.navbar-fixed-bottom .nav>li>.dropdown-menu:after{border-top:6px solid #ffffff;border-bottom:0;bottom:-6px;top:auto;} -.navbar .nav li.dropdown>a:hover .caret{border-top-color:#555555;border-bottom-color:#555555;} -.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{background-color:#e5e5e5;color:#555555;} -.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#777777;border-bottom-color:#777777;} -.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555555;border-bottom-color:#555555;} -.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{left:auto;right:0;}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{left:auto;right:12px;} -.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{left:auto;right:13px;} -.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{left:auto;right:100%;margin-left:0;margin-right:-1px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px;} -.navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top, #222222, #111111);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111));background-image:-webkit-linear-gradient(top, #222222, #111111);background-image:-o-linear-gradient(top, #222222, #111111);background-image:linear-gradient(to bottom, #222222, #111111);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0);border-color:#252525;} -.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999999;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover{color:#ffffff;} -.navbar-inverse .brand{color:#999999;} -.navbar-inverse .navbar-text{color:#999999;} -.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{background-color:transparent;color:#ffffff;} -.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#ffffff;background-color:#111111;} -.navbar-inverse .navbar-link{color:#999999;}.navbar-inverse .navbar-link:hover{color:#ffffff;} -.navbar-inverse .divider-vertical{border-left-color:#111111;border-right-color:#222222;} -.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{background-color:#111111;color:#ffffff;} -.navbar-inverse .nav li.dropdown>a:hover .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;} -.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999999;border-bottom-color:#999999;} -.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;} -.navbar-inverse .navbar-search .search-query{color:#ffffff;background-color:#515151;border-color:#111111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none;}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#cccccc;} -.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#cccccc;} -.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#cccccc;} -.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333333;text-shadow:0 1px 0 #ffffff;background-color:#ffffff;border:0;-webkit-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);-moz-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);box-shadow:0 0 3px rgba(0, 0, 0, 0.15);outline:0;} -.navbar-inverse .btn-navbar{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#0e0e0e;background-image:-moz-linear-gradient(top, #151515, #040404);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404));background-image:-webkit-linear-gradient(top, #151515, #040404);background-image:-o-linear-gradient(top, #151515, #040404);background-image:linear-gradient(to bottom, #151515, #040404);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0);border-color:#040404 #040404 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#040404;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#ffffff;background-color:#040404;*background-color:#000000;} -.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000000 \9;} -.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.breadcrumb>li{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 0 #ffffff;}.breadcrumb>li>.divider{padding:0 5px;color:#ccc;} -.breadcrumb>.active{color:#999999;} -.pagination{margin:20px 0;} -.pagination ul{display:inline-block;*display:inline;*zoom:1;margin-left:0;margin-bottom:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);} -.pagination ul>li{display:inline;} -.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#ffffff;border:1px solid #dddddd;border-left-width:0;} -.pagination ul>li>a:hover,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5;} -.pagination ul>.active>a,.pagination ul>.active>span{color:#999999;cursor:default;} -.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover{color:#999999;background-color:transparent;cursor:default;} -.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;} -.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;} -.pagination-centered{text-align:center;} -.pagination-right{text-align:right;} -.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px;} -.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;} -.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius:6px;} -.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-top-left-radius:3px;-moz-border-radius-topleft:3px;border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-bottomleft:3px;border-bottom-left-radius:3px;} -.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;-moz-border-radius-topright:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;-moz-border-radius-bottomright:3px;border-bottom-right-radius:3px;} -.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px;} -.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px;} -.pager{margin:20px 0;list-style:none;text-align:center;*zoom:1;}.pager:before,.pager:after{display:table;content:"";line-height:0;} -.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;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;} -.pager li>a:hover{text-decoration:none;background-color:#f5f5f5;} -.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>span{color:#999999;background-color:#fff;cursor:default;} -.thumbnails{margin-left:-20px;list-style:none;*zoom:1;}.thumbnails:before,.thumbnails:after{display:table;content:"";line-height:0;} -.thumbnails:after{clear:both;} -.row-fluid .thumbnails{margin-left:0;} -.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px;} -.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0, 0, 0, 0.055);-moz-box-shadow:0 1px 3px rgba(0, 0, 0, 0.055);box-shadow:0 1px 3px rgba(0, 0, 0, 0.055);-webkit-transition:all 0.2s ease-in-out;-moz-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;} -a.thumbnail:hover{border-color:#0088cc;-webkit-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);-moz-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);} -.thumbnail>img{display:block;max-width:100%;margin-left:auto;margin-right:auto;} -.thumbnail .caption{padding:9px;color:#555555;} -.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.alert,.alert h4{color:#c09853;} -.alert h4{margin:0;} -.alert .close{position:relative;top:-2px;right:-21px;line-height:20px;} -.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#468847;} -.alert-success h4{color:#468847;} -.alert-danger,.alert-error{background-color:#f2dede;border-color:#eed3d7;color:#b94a48;} -.alert-danger h4,.alert-error h4{color:#b94a48;} -.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#3a87ad;} -.alert-info h4{color:#3a87ad;} -.alert-block{padding-top:14px;padding-bottom:14px;} -.alert-block>p,.alert-block>ul{margin-bottom:0;} -.alert-block p+p{margin-top:5px;} -@-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;}}@-ms-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{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f7f7f7;background-image:-moz-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));background-image:-webkit-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-o-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:linear-gradient(to bottom, #f5f5f5, #f9f9f9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.progress .bar{width:0%;height:100%;color:#ffffff;float:left;font-size:12px;text-align:center;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top, #149bdf, #0480be);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));background-image:-webkit-linear-gradient(top, #149bdf, #0480be);background-image:-o-linear-gradient(top, #149bdf, #0480be);background-image:linear-gradient(to bottom, #149bdf, #0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-moz-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-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width 0.6s ease;-moz-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease;} -.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15);} -.progress-striped .bar{background-color:#149bdf;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:-o-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);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px;} -.progress.active .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-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top, #ee5f5b, #c43c35);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));background-image:-webkit-linear-gradient(top, #ee5f5b, #c43c35);background-image:-o-linear-gradient(top, #ee5f5b, #c43c35);background-image:linear-gradient(to bottom, #ee5f5b, #c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0);} -.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;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:-o-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-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top, #62c462, #57a957);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));background-image:-webkit-linear-gradient(top, #62c462, #57a957);background-image:-o-linear-gradient(top, #62c462, #57a957);background-image:linear-gradient(to bottom, #62c462, #57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0);} -.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;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:-o-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-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top, #5bc0de, #339bb9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));background-image:-webkit-linear-gradient(top, #5bc0de, #339bb9);background-image:-o-linear-gradient(top, #5bc0de, #339bb9);background-image:linear-gradient(to bottom, #5bc0de, #339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0);} -.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;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:-o-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-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(to bottom, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);} -.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;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:-o-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);} -.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eeeeee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;color:inherit;letter-spacing:-1px;} -.hero-unit li{line-height:30px;} -.media,.media-body{overflow:hidden;*overflow:visible;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{margin-left:0;list-style:none;} -.tooltip{position:absolute;z-index:1030;display:block;visibility:visible;padding:5px;font-size:11px;opacity:0;filter:alpha(opacity=0);}.tooltip.in{opacity:0.8;filter:alpha(opacity=80);} -.tooltip.top{margin-top:-3px;} -.tooltip.right{margin-left:3px;} -.tooltip.bottom{margin-top:3px;} -.tooltip.left{margin-left:-3px;} -.tooltip-inner{max-width:200px;padding:3px 8px;color:#ffffff;text-align:center;text-decoration:none;background-color:#000000;-webkit-border-radius:4px;-moz-border-radius:4px;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-width:5px 5px 0;border-top-color:#000000;} -.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000000;} -.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000000;} -.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000000;} -.popover{position:absolute;top:0;left:0;z-index:1010;display:none;width:236px;padding:1px;text-align:left;background-color:#ffffff;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);white-space:normal;}.popover.top{margin-top:-10px;} -.popover.right{margin-left:10px;} -.popover.bottom{margin-top:10px;} -.popover.left{margin-left:-10px;} -.popover-title{margin:0;padding:8px 14px;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;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{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0, 0, 0, 0.25);bottom:-11px;}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#ffffff;} -.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0, 0, 0, 0.25);}.popover.right .arrow:after{left:1px;bottom:-10px;border-left-width:0;border-right-color:#ffffff;} -.popover.bottom .arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0, 0, 0, 0.25);top:-11px;}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#ffffff;} -.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0, 0, 0, 0.25);}.popover.left .arrow:after{right:1px;border-right-width:0;border-left-color:#ffffff;bottom:-10px;} -.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000000;}.modal-backdrop.fade{opacity:0;} -.modal-backdrop,.modal-backdrop.fade.in{opacity:0.8;filter:alpha(opacity=80);} -.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#ffffff;border:1px solid #999;border:1px solid rgba(0, 0, 0, 0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;outline:none;}.modal.fade{-webkit-transition:opacity .3s linear, top .3s ease-out;-moz-transition:opacity .3s linear, top .3s ease-out;-o-transition:opacity .3s linear, top .3s ease-out;transition:opacity .3s linear, top .3s ease-out;top:-25%;} -.modal.fade.in{top:10%;} -.modal-header{padding:9px 15px;border-bottom:1px solid #eee;}.modal-header .close{margin-top:2px;} -.modal-header h3{margin:0;line-height:30px;} -.modal-body{position:relative;overflow-y:auto;max-height:400px;padding:15px;} -.modal-form{margin-bottom:0;} -.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;*zoom:1;}.modal-footer:before,.modal-footer:after{display:table;content:"";line-height:0;} -.modal-footer:after{clear:both;} -.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0;} -.modal-footer .btn-group .btn+.btn{margin-left:-1px;} -.modal-footer .btn-block+.btn-block{margin-left:0;} -.dropup,.dropdown{position:relative;} -.dropdown-toggle{*margin-bottom:-3px;} -.dropdown-toggle:active,.open .dropdown-toggle{outline:0;} -.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000000;border-right:4px solid transparent;border-left:4px solid transparent;content:"";} -.dropdown .caret{margin-top:8px;margin-left:2px;} -.dropdown-menu1{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#ffffff;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;}.dropdown-menu.pull-right{right:0;left:auto;} -.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;} -.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#ffffff;text-decoration:none;outline:0;background-color:#0081c2;background-image:-moz-linear-gradient(top, #0088cc, #0077b3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3));background-image:-webkit-linear-gradient(top, #0088cc, #0077b3);background-image:-o-linear-gradient(top, #0088cc, #0077b3);background-image:linear-gradient(to bottom, #0088cc, #0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);} -.dropdown-menu .disabled>a,.dropdown-menu .disabled>a:hover{color:#999999;} -.dropdown-menu .disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:default;} -.open{*z-index:1000;}.open >.dropdown-menu{display:block;} -.pull-right>.dropdown-menu{right:0;left:auto;} -.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000000;content:"";} -.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px;} -.dropdown-submenu{position:relative;} -.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px;} -.dropdown-submenu:hover>.dropdown-menu{display:block;} -.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0;} -.dropdown-submenu>a:after{display:block;content:" ";float:right;width:0;height:0;border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#cccccc;margin-top:5px;margin-right:-10px;} -.dropdown-submenu:hover>a:after{border-left-color:#ffffff;} -.dropdown-submenu.pull-left{float:none;}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px;} -.dropdown .dropdown-menu .nav-header{padding-left:20px;padding-right:20px;} -.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.accordion{margin-bottom:20px;} -.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.accordion-heading{border-bottom:0;} -.accordion-heading .accordion-toggle{display:block;padding:8px 15px;} -.accordion-toggle{cursor:pointer;} -.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5;} -.carousel{position:relative;margin-bottom:20px;line-height:1;} -.carousel-inner{overflow:hidden;width:100%;position:relative;} -.carousel-inner>.item{display:none;position:relative;-webkit-transition:0.6s ease-in-out left;-moz-transition:0.6s ease-in-out left;-o-transition:0.6s ease-in-out left;transition:0.6s ease-in-out left;} -.carousel-inner>.item>img{display:block;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:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#ffffff;text-align:center;background:#222222;border:3px solid #ffffff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:0.5;filter:alpha(opacity=50);}.carousel-control.right{left:auto;right:15px;} -.carousel-control:hover{color:#ffffff;text-decoration:none;opacity:0.9;filter:alpha(opacity=90);} -.carousel-caption{position:absolute;left:0;right:0;bottom:0;padding:15px;background:#333333;background:rgba(0, 0, 0, 0.75);} -.carousel-caption h4,.carousel-caption p{color:#ffffff;line-height:20px;} -.carousel-caption h4{margin:0 0 5px;} -.carousel-caption p{margin-bottom:0;} -.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);-moz-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-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} -.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} -.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000000;text-shadow:0 1px 0 #ffffff;opacity:0.2;filter:alpha(opacity=20);}.close:hover{color:#000000;text-decoration:none;cursor:pointer;opacity:0.4;filter:alpha(opacity=40);} -button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none;} -.pull-right{float:right;} -.pull-left{float:left;} -.hide{display:none;} -.show{display:block;} -.invisible{visibility:hidden;} -.affix{position:fixed;} -.fade{opacity:0;-webkit-transition:opacity 0.15s linear;-moz-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear;}.fade.in{opacity:1;} -.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height 0.35s ease;-moz-transition:height 0.35s ease;-o-transition:height 0.35s ease;transition:height 0.35s ease;}.collapse.in{height:auto;} -.hidden{display:none;visibility:hidden;} -.visible-phone{display:none !important;} -.visible-tablet{display:none !important;} -.hidden-desktop{display:none !important;} -.visible-desktop{display:inherit !important;} -@media (min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit !important;} .visible-desktop{display:none !important ;} .visible-tablet{display:inherit !important;} .hidden-tablet{display:none !important;}}@media (max-width:767px){.hidden-desktop{display:inherit !important;} .visible-desktop{display:none !important;} .visible-phone{display:inherit !important;} .hidden-phone{display:none !important;}}@media (max-width:767px){body{padding-left:20px;padding-right:20px;} .navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-left:-20px;margin-right:-20px;} .container-fluid{padding:0;} .dl-horizontal dt{float:none;clear:none;width:auto;text-align:left;} .dl-horizontal dd{margin-left:0;} .container{width:auto;} .row-fluid{width:100%;} .row,.thumbnails{margin-left:0;} .thumbnails>li{float:none;margin-left:0;} [class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{float:none;display:block;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} .span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} .row-fluid [class*="offset"]:first-child{margin-left:0;} .input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} .input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto;} .controls-row [class*="span"]+[class*="span"]{margin-left:0;} .modal{position:fixed;top:20px;left:20px;right:20px;width:auto;margin:0;}.modal.fade{top:-100px;} .modal.fade.in{top:20px;}}@media (max-width:480px){.nav-collapse{-webkit-transform:translate3d(0, 0, 0);} .page-header h1 small{display:block;line-height:20px;} input[type="checkbox"],input[type="radio"]{border:1px solid #ccc;} .form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left;} .form-horizontal .controls{margin-left:0;} .form-horizontal .control-list{padding-top:0;} .form-horizontal .form-actions{padding-left:10px;padding-right:10px;} .media .pull-left,.media .pull-right{float:none;display:block;margin-bottom:10px;} .media-object{margin-right:0;margin-left:0;} .modal{top:10px;left:10px;right:10px;} .modal-header .close{padding:10px;margin:-10px;} .carousel-caption{position:static;}}@media (min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1;}.row:before,.row:after{display:table;content:"";line-height:0;} .row:after{clear:both;} [class*="span"]{float:left;min-height:1px;margin-left:20px;} .container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px;} .span12{width:724px;} .span11{width:662px;} .span10{width:600px;} .span9{width:538px;} .span8{width:476px;} .span7{width:414px;} .span6{width:352px;} .span5{width:290px;} .span4{width:228px;} .span3{width:166px;} .span2{width:104px;} .span1{width:42px;} .offset12{margin-left:764px;} .offset11{margin-left:702px;} .offset10{margin-left:640px;} .offset9{margin-left:578px;} .offset8{margin-left:516px;} .offset7{margin-left:454px;} .offset6{margin-left:392px;} .offset5{margin-left:330px;} .offset4{margin-left:268px;} .offset3{margin-left:206px;} .offset2{margin-left:144px;} .offset1{margin-left:82px;} .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";line-height:0;} .row-fluid:after{clear:both;} .row-fluid [class*="span"]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;} .row-fluid [class*="span"]:first-child{margin-left:0;} .row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.7624309392265194%;} .row-fluid .span12{width:100%;*width:99.94680851063829%;} .row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%;} .row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%;} .row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%;} .row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%;} .row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%;} .row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%;} .row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%;} .row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%;} .row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%;} .row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%;} .row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%;} .row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%;} .row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%;} .row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%;} .row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%;} .row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%;} .row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%;} .row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%;} .row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%;} .row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%;} .row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%;} .row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%;} .row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%;} .row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%;} .row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%;} .row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%;} .row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%;} .row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%;} .row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%;} .row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%;} .row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%;} .row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%;} .row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%;} .row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%;} .row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%;} input,textarea,.uneditable-input{margin-left:0;} .controls-row [class*="span"]+[class*="span"]{margin-left:20px;} input.span12, textarea.span12, .uneditable-input.span12{width:710px;} input.span11, textarea.span11, .uneditable-input.span11{width:648px;} input.span10, textarea.span10, .uneditable-input.span10{width:586px;} input.span9, textarea.span9, .uneditable-input.span9{width:524px;} input.span8, textarea.span8, .uneditable-input.span8{width:462px;} input.span7, textarea.span7, .uneditable-input.span7{width:400px;} input.span6, textarea.span6, .uneditable-input.span6{width:338px;} input.span5, textarea.span5, .uneditable-input.span5{width:276px;} input.span4, textarea.span4, .uneditable-input.span4{width:214px;} input.span3, textarea.span3, .uneditable-input.span3{width:152px;} input.span2, textarea.span2, .uneditable-input.span2{width:90px;} input.span1, textarea.span1, .uneditable-input.span1{width:28px;}}@media (min-width:1200px){.row{margin-left:-30px;*zoom:1;}.row:before,.row:after{display:table;content:"";line-height:0;} .row:after{clear:both;} [class*="span"]{float:left;min-height:1px;margin-left:30px;} .container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px;} .span12{width:1170px;} .span11{width:1070px;} .span10{width:970px;} .span9{width:870px;} .span8{width:770px;} .span7{width:670px;} .span6{width:570px;} .span5{width:470px;} .span4{width:370px;} .span3{width:270px;} .span2{width:170px;} .span1{width:70px;} .offset12{margin-left:1230px;} .offset11{margin-left:1130px;} .offset10{margin-left:1030px;} .offset9{margin-left:930px;} .offset8{margin-left:830px;} .offset7{margin-left:730px;} .offset6{margin-left:630px;} .offset5{margin-left:530px;} .offset4{margin-left:430px;} .offset3{margin-left:330px;} .offset2{margin-left:230px;} .offset1{margin-left:130px;} .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";line-height:0;} .row-fluid:after{clear:both;} .row-fluid [class*="span"]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;} .row-fluid [class*="span"]:first-child{margin-left:0;} .row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.564102564102564%;} .row-fluid .span12{width:100%;*width:99.94680851063829%;} .row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%;} .row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%;} .row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%;} .row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%;} .row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%;} .row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%;} .row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%;} .row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%;} .row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%;} .row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%;} .row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%;} .row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%;} .row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%;} .row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%;} .row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%;} .row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%;} .row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%;} .row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%;} .row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%;} .row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%;} .row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%;} .row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%;} .row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%;} .row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%;} .row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%;} .row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%;} .row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%;} .row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%;} .row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%;} .row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%;} .row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%;} .row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%;} .row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%;} .row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%;} .row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%;} input,textarea,.uneditable-input{margin-left:0;} .controls-row [class*="span"]+[class*="span"]{margin-left:30px;} input.span12, textarea.span12, .uneditable-input.span12{width:1156px;} input.span11, textarea.span11, .uneditable-input.span11{width:1056px;} input.span10, textarea.span10, .uneditable-input.span10{width:956px;} input.span9, textarea.span9, .uneditable-input.span9{width:856px;} input.span8, textarea.span8, .uneditable-input.span8{width:756px;} input.span7, textarea.span7, .uneditable-input.span7{width:656px;} input.span6, textarea.span6, .uneditable-input.span6{width:556px;} input.span5, textarea.span5, .uneditable-input.span5{width:456px;} input.span4, textarea.span4, .uneditable-input.span4{width:356px;} input.span3, textarea.span3, .uneditable-input.span3{width:256px;} input.span2, textarea.span2, .uneditable-input.span2{width:156px;} input.span1, textarea.span1, .uneditable-input.span1{width:56px;} .thumbnails{margin-left:-30px;} .thumbnails>li{margin-left:30px;} .row-fluid .thumbnails{margin-left:0;}}@media (max-width:979px){body{padding-top:0;} .navbar-fixed-top,.navbar-fixed-bottom{position:static;} .navbar-fixed-top{margin-bottom:20px;} .navbar-fixed-bottom{margin-top:20px;} .navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px;} .navbar .container{width:auto;padding:0;} .navbar .brand{padding-left:10px;padding-right:10px;margin:0 0 0 -5px;} .nav-collapse{clear:both;} .nav-collapse .nav{float:none;margin:0 0 10px;} .nav-collapse .nav>li{float:none;} .nav-collapse .nav>li>a{margin-bottom:2px;} .nav-collapse .nav>.divider-vertical{display:none;} .nav-collapse .nav .nav-header{color:#777777;text-shadow:none;} .nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} .nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} .nav-collapse .dropdown-menu li+li a{margin-bottom:2px;} .nav-collapse .nav>li>a:hover,.nav-collapse .dropdown-menu a:hover{background-color:#f2f2f2;} .navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999999;} .navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:hover{background-color:#111111;} .nav-collapse.in .btn-group{margin-top:5px;padding:0;} .nav-collapse .dropdown-menu{position:static;top:auto;left:auto;float:none;display:none;max-width:none;margin:0 15px;padding:0;background-color:transparent;border:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} .nav-collapse .open>.dropdown-menu{display:block;} .nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none;} .nav-collapse .dropdown-menu .divider{display:none;} .nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none;} .nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);} .navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111111;border-bottom-color:#111111;} .navbar .nav-collapse .nav.pull-right{float:none;margin-left:0;} .nav-collapse,.nav-collapse.collapse{overflow:hidden;height:0;} .navbar .btn-navbar{display:block;} .navbar-static .navbar-inner{padding-left:10px;padding-right:10px;}}@media (min-width:980px){.nav-collapse.collapse{height:auto !important;overflow:visible !important;}} +/*! + * Bootstrap v2.2.2 + * + * Copyright 2012 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 @twitter by @mdo and @fat. + */ +.clearfix{*zoom:1;}.clearfix:before,.clearfix:after{display:table;content:"";line-height:0;} +.clearfix:after{clear:both;} +.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0;} +.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} +article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block;} +audio,canvas,video{display:inline-block;*display:inline;*zoom:1;} +audio:not([controls]){display:none;} +html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;} +a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} +a:hover,a:active{outline:0;} +sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline;} +sup{top:-0.5em;} +sub{bottom:-0.25em;} +img{max-width:100%;width:auto\9;height:auto;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic;} +#map_canvas img,.google-maps img{max-width:none;} +button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle;} +button,input{*overflow:visible;line-height:normal;} +button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0;} +button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer;} +label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer;} +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-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none;} +textarea{overflow:auto;vertical-align:top;} +@media print{*{text-shadow:none !important;color:#000 !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:0.5cm;}p,h2,h3{orphans:3;widows:3;} h2,h3{page-break-after:avoid;}}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333333;background-color:#ffffff;} +a{color:#0088cc;text-decoration:none;} +a:hover{color:#005580;text-decoration:underline;} +.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} +.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.2);-webkit-box-shadow:0 1px 3px rgba(0, 0, 0, 0.1);-moz-box-shadow:0 1px 3px rgba(0, 0, 0, 0.1);box-shadow:0 1px 3px rgba(0, 0, 0, 0.1);} +.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px;} +.row{margin-left:-20px;*zoom:1;}.row:before,.row:after{display:table;content:"";line-height:0;} +.row:after{clear:both;} +[class*="span"]{float:left;min-height:1px;margin-left:20px;} +.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px;} +.span12{width:940px;} +.span11{width:860px;} +.span10{width:780px;} +.span9{width:700px;} +.span8{width:620px;} +.span7{width:540px;} +.span6{width:460px;} +.span5{width:380px;} +.span4{width:300px;} +.span3{width:220px;} +.span2{width:140px;} +.span1{width:60px;} +.offset12{margin-left:980px;} +.offset11{margin-left:900px;} +.offset10{margin-left:820px;} +.offset9{margin-left:740px;} +.offset8{margin-left:660px;} +.offset7{margin-left:580px;} +.offset6{margin-left:500px;} +.offset5{margin-left:420px;} +.offset4{margin-left:340px;} +.offset3{margin-left:260px;} +.offset2{margin-left:180px;} +.offset1{margin-left:100px;} +.row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";line-height:0;} +.row-fluid:after{clear:both;} +.row-fluid [class*="span"]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;} +.row-fluid [class*="span"]:first-child{margin-left:0;} +.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%;} +.row-fluid .span12{width:100%;*width:99.94680851063829%;} +.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%;} +.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%;} +.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%;} +.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%;} +.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%;} +.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%;} +.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%;} +.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%;} +.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%;} +.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%;} +.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%;} +.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%;} +.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%;} +.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%;} +.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%;} +.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%;} +.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%;} +.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%;} +.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%;} +.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%;} +.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%;} +.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%;} +.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%;} +.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%;} +.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%;} +.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%;} +.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%;} +.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%;} +.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%;} +.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%;} +.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%;} +.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%;} +.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%;} +.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%;} +.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%;} +[class*="span"].hide,.row-fluid [class*="span"].hide{display:none;} +[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right;} +.container{margin-right:auto;margin-left:auto;*zoom:1;}.container:before,.container:after{display:table;content:"";line-height:0;} +.container:after{clear:both;} +.container-fluid{padding-right:20px;padding-left:20px;*zoom:1;}.container-fluid:before,.container-fluid:after{display:table;content:"";line-height:0;} +.container-fluid:after{clear:both;} +p{margin:0 0 10px;} +.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px;} +small{font-size:85%;} +strong{font-weight:bold;} +em{font-style:italic;} +cite{font-style:normal;} +.muted{color:#999999;} +a.muted:hover{color:#808080;} +.text-warning{color:#c09853;} +a.text-warning:hover{color:#a47e3c;} +.text-error{color:#b94a48;} +a.text-error:hover{color:#953b39;} +.text-info{color:#3a87ad;} +a.text-info:hover{color:#2d6987;} +.text-success{color:#468847;} +a.text-success:hover{color:#356635;} +h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:inherit;text-rendering:optimizelegibility;}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999999;} +h1,h2,h3{line-height:40px;} +h1{font-size:38.5px;} +h2{font-size:31.5px;} +h3{font-size:24.5px;} +h4{font-size:17.5px;} +h5{font-size:14px;} +h6{font-size:11.9px;} +h1 small{font-size:24.5px;} +h2 small{font-size:17.5px;} +h3 small{font-size:14px;} +h4 small{font-size:14px;} +.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eeeeee;} +ul,ol{padding:0;margin:0 0 10px 25px;} +ul ul,ul ol,ol ol,ol ul{margin-bottom:0;} +li{line-height:20px;} +ul.unstyled,ol.unstyled{margin-left:0;list-style:none;} +ul.inline,ol.inline{margin-left:0;list-style:none;}ul.inline >li,ol.inline >li{display:inline-block;padding-left:5px;padding-right:5px;} +dl{margin-bottom:20px;} +dt,dd{line-height:20px;} +dt{font-weight:bold;} +dd{margin-left:10px;} +.dl-horizontal{*zoom:1;}.dl-horizontal:before,.dl-horizontal:after{display:table;content:"";line-height:0;} +.dl-horizontal:after{clear:both;} +.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;} +.dl-horizontal dd{margin-left:180px;} +hr{margin:20px 0;border:0;border-top:1px solid #eeeeee;border-bottom:1px solid #ffffff;} +abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999999;} +abbr.initialism{font-size:90%;text-transform:uppercase;} +blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eeeeee;}blockquote p{margin-bottom:0;font-size:16px;font-weight:300;line-height:25px;} +blockquote small{display:block;line-height:20px;color:#999999;}blockquote small:before{content:'\2014 \00A0';} +blockquote.pull-right{float: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:20px;} +code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#333333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} +code{padding:2px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8;white-space:nowrap;} +pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}pre.prettyprint{margin-bottom:20px;} +pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0;} +.pre-scrollable{max-height:340px;overflow-y:scroll;} +.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#ffffff;vertical-align:baseline;white-space:nowrap;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#999999;} +.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} +.badge{padding-left:9px;padding-right:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px;} +.label:empty,.badge:empty{display:none;} +a.label:hover,a.badge:hover{color:#ffffff;text-decoration:none;cursor:pointer;} +.label-important,.badge-important{background-color:#b94a48;} +.label-important[href],.badge-important[href]{background-color:#953b39;} +.label-warning,.badge-warning{background-color:#f89406;} +.label-warning[href],.badge-warning[href]{background-color:#c67605;} +.label-success,.badge-success{background-color:#468847;} +.label-success[href],.badge-success[href]{background-color:#356635;} +.label-info,.badge-info{background-color:#3a87ad;} +.label-info[href],.badge-info[href]{background-color:#2d6987;} +.label-inverse,.badge-inverse{background-color:#333333;} +.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a;} +.btn .label,.btn .badge{position:relative;top:-1px;} +.btn-mini .label,.btn-mini .badge{top:0;} +table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0;} +.table{width:100%;margin-bottom:20px;}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #dddddd;} +.table th{font-weight:bold;} +.table thead th{vertical-align:bottom;} +.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.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 th,.table-condensed td{padding:4px 5px;} +.table-bordered{border:1px solid #dddddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.table-bordered th,.table-bordered td{border-left:1px solid #dddddd;} +.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0;} +.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child{-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;} +.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;} +.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child{-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;} +.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child{-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;} +.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0;} +.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;-moz-border-radius-bottomright:0;border-bottom-right-radius:0;} +.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;} +.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;} +.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 td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0;} +.table td.span1,.table th.span1{float:none;width:44px;margin-left:0;} +.table td.span2,.table th.span2{float:none;width:124px;margin-left:0;} +.table td.span3,.table th.span3{float:none;width:204px;margin-left:0;} +.table td.span4,.table th.span4{float:none;width:284px;margin-left:0;} +.table td.span5,.table th.span5{float:none;width:364px;margin-left:0;} +.table td.span6,.table th.span6{float:none;width:444px;margin-left:0;} +.table td.span7,.table th.span7{float:none;width:524px;margin-left:0;} +.table td.span8,.table th.span8{float:none;width:604px;margin-left:0;} +.table td.span9,.table th.span9{float:none;width:684px;margin-left:0;} +.table td.span10,.table th.span10{float:none;width:764px;margin-left:0;} +.table td.span11,.table th.span11{float:none;width:844px;margin-left:0;} +.table td.span12,.table th.span12{float:none;width:924px;margin-left:0;} +.table tbody tr.success td{background-color:#dff0d8;} +.table tbody tr.error td{background-color:#f2dede;} +.table tbody tr.warning td{background-color:#fcf8e3;} +.table tbody tr.info td{background-color:#d9edf7;} +.table-hover tbody tr.success:hover td{background-color:#d0e9c6;} +.table-hover tbody tr.error:hover td{background-color:#ebcccc;} +.table-hover tbody tr.warning:hover td{background-color:#faf2cc;} +.table-hover tbody tr.info:hover td{background-color:#c4e3f3;} +form{margin:0 0 20px;} +fieldset{padding:0;margin:0;border:0;} +legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333333;border:0;border-bottom:1px solid #e5e5e5;}legend small{font-size:15px;color:#999999;} +label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px;} +input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;} +label{display:block;margin-bottom:5px;} +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"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#555555;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;vertical-align:middle;} +input,textarea,.uneditable-input{width:206px;} +textarea{height:auto;} +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"],.uneditable-input{background-color:#ffffff;border:1px solid #cccccc;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-webkit-transition:border linear .2s, box-shadow linear .2s;-moz-transition:border linear .2s, box-shadow linear .2s;-o-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82, 168, 236, 0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);} +input[type="radio"],input[type="checkbox"]{margin:4px 0 0;*margin-top:0;margin-top:1px \9;line-height:normal;} +input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto;} +select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px;} +select{width:220px;border:1px solid #cccccc;background-color:#ffffff;} +select[multiple],select[size]{height:auto;} +select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} +.uneditable-input,.uneditable-textarea{color:#999999;background-color:#fcfcfc;border-color:#cccccc;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);cursor:not-allowed;} +.uneditable-input{overflow:hidden;white-space:nowrap;} +.uneditable-textarea{width:auto;height:auto;} +input:-moz-placeholder,textarea:-moz-placeholder{color:#999999;} +input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999999;} +input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999999;} +.radio,.checkbox{min-height:20px;padding-left:20px;} +.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px;} +.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px;} +.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle;} +.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px;} +.input-mini{width:60px;} +.input-small{width:90px;} +.input-medium{width:150px;} +.input-large{width:210px;} +.input-xlarge{width:270px;} +.input-xxlarge{width:530px;} +input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0;} +.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block;} +input,textarea,.uneditable-input{margin-left:0;} +.controls-row [class*="span"]+[class*="span"]{margin-left:20px;} +input.span12, textarea.span12, .uneditable-input.span12{width:926px;} +input.span11, textarea.span11, .uneditable-input.span11{width:846px;} +input.span10, textarea.span10, .uneditable-input.span10{width:766px;} +input.span9, textarea.span9, .uneditable-input.span9{width:686px;} +input.span8, textarea.span8, .uneditable-input.span8{width:606px;} +input.span7, textarea.span7, .uneditable-input.span7{width:526px;} +input.span6, textarea.span6, .uneditable-input.span6{width:446px;} +input.span5, textarea.span5, .uneditable-input.span5{width:366px;} +input.span4, textarea.span4, .uneditable-input.span4{width:286px;} +input.span3, textarea.span3, .uneditable-input.span3{width:206px;} +input.span2, textarea.span2, .uneditable-input.span2{width:126px;} +input.span1, textarea.span1, .uneditable-input.span1{width:46px;} +.controls-row{*zoom:1;}.controls-row:before,.controls-row:after{display:table;content:"";line-height:0;} +.controls-row:after{clear:both;} +.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left;} +.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px;} +input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eeeeee;} +input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent;} +.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853;} +.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853;} +.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #dbc59e;-moz-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;} +.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853;} +.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48;} +.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48;} +.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #d59392;-moz-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;} +.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48;} +.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847;} +.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847;} +.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7aba7b;-moz-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;} +.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847;} +.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad;} +.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad;} +.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7ab5d3;} +.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad;} +input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b;}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7;} +.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1;}.form-actions:before,.form-actions:after{display:table;content:"";line-height:0;} +.form-actions:after{clear:both;} +.help-block,.help-inline{color:#595959;} +.help-block{display:block;margin-bottom:10px;} +.help-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding-left:5px;} +.input-append,.input-prepend{margin-bottom:5px;font-size:0;white-space:nowrap;}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu{font-size:14px;} +.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2;} +.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #ffffff;background-color:#eeeeee;border:1px solid #ccc;} +.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} +.input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546;} +.input-prepend .add-on,.input-prepend .btn{margin-right:-1px;} +.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;} +.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} +.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px;} +.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} +.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} +.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;} +.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} +.input-prepend.input-append .btn-group:first-child{margin-left:0;} +input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;} +.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} +.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px;} +.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0;} +.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0;} +.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px;} +.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;*zoom:1;margin-bottom:0;vertical-align:middle;} +.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none;} +.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block;} +.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0;} +.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle;} +.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0;} +.control-group{margin-bottom:10px;} +legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate;} +.form-horizontal .control-group{margin-bottom:20px;*zoom:1;}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;content:"";line-height:0;} +.form-horizontal .control-group:after{clear:both;} +.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right;} +.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0;}.form-horizontal .controls:first-child{*padding-left:180px;} +.form-horizontal .help-block{margin-bottom:0;} +.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px;} +.form-horizontal .form-actions{padding-left:180px;} +.btn{display:inline-block;*display:inline;*zoom:1;padding:4px 12px;margin-bottom:0;font-size:14px;line-height:20px;text-align:center;vertical-align:middle;cursor:pointer;color:#333333;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(to bottom, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#e6e6e6;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border:1px solid #bbbbbb;*border:0;border-bottom-color:#a2a2a2;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);}.btn:hover,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333333;background-color:#e6e6e6;*background-color:#d9d9d9;} +.btn:active,.btn.active{background-color:#cccccc \9;} +.btn:first-child{*margin-left:0;} +.btn:hover{color:#333333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position 0.1s linear;-moz-transition:background-position 0.1s linear;-o-transition:background-position 0.1s linear;transition:background-position 0.1s linear;} +.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} +.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);} +.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} +.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} +.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px;} +.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} +.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0;} +.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px;} +.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} +.btn-block{display:block;width:100%;padding-left:0;padding-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} +.btn-block+.btn-block{margin-top:5px;} +input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%;} +.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255, 255, 255, 0.75);} +.btn{border-color:#c5c5c5;border-color:rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.25);} +.btn-primary{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#006dcc;background-image:-moz-linear-gradient(top, #0088cc, #0044cc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));background-image:-webkit-linear-gradient(top, #0088cc, #0044cc);background-image:-o-linear-gradient(top, #0088cc, #0044cc);background-image:linear-gradient(to bottom, #0088cc, #0044cc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);border-color:#0044cc #0044cc #002a80;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#0044cc;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#ffffff;background-color:#0044cc;*background-color:#003bb3;} +.btn-primary:active,.btn-primary.active{background-color:#003399 \9;} +.btn-warning{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(to bottom, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);border-color:#f89406 #f89406 #ad6704;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#f89406;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-warning:hover,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#ffffff;background-color:#f89406;*background-color:#df8505;} +.btn-warning:active,.btn-warning.active{background-color:#c67605 \9;} +.btn-danger{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(to bottom, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#bd362f;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-danger:hover,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#ffffff;background-color:#bd362f;*background-color:#a9302a;} +.btn-danger:active,.btn-danger.active{background-color:#942a25 \9;} +.btn-success{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(to bottom, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0);border-color:#51a351 #51a351 #387038;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#51a351;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-success:hover,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#ffffff;background-color:#51a351;*background-color:#499249;} +.btn-success:active,.btn-success.active{background-color:#408140 \9;} +.btn-info{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(to bottom, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0);border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#2f96b4;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-info:hover,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#ffffff;background-color:#2f96b4;*background-color:#2a85a0;} +.btn-info:active,.btn-info.active{background-color:#24748c \9;} +.btn-inverse{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#363636;background-image:-moz-linear-gradient(top, #444444, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222));background-image:-webkit-linear-gradient(top, #444444, #222222);background-image:-o-linear-gradient(top, #444444, #222222);background-image:linear-gradient(to bottom, #444444, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0);border-color:#222222 #222222 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#222222;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-inverse:hover,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#ffffff;background-color:#222222;*background-color:#151515;} +.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9;} +button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px;}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0;} +button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px;} +button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px;} +button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px;} +.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} +.btn-link{border-color:transparent;cursor:pointer;color:#0088cc;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} +.btn-link:hover{color:#005580;text-decoration:underline;background-color:transparent;} +.btn-link[disabled]:hover{color:#333333;text-decoration:none;} +.btn-group{position:relative;display:inline-block;*display:inline;*zoom:1;font-size:0;vertical-align:middle;white-space:nowrap;*margin-left:.3em;}.btn-group:first-child{*margin-left:0;} +.btn-group+.btn-group{margin-left:5px;} +.btn-toolbar{font-size:0;margin-top:10px;margin-bottom:10px;}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px;} +.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} +.btn-group>.btn+.btn{margin-left:-1px;} +.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px;} +.btn-group>.btn-mini{font-size:10.5px;} +.btn-group>.btn-small{font-size:11.9px;} +.btn-group>.btn-large{font-size:17.5px;} +.btn-group>.btn:first-child{margin-left:0;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;} +.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;} +.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;} +.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius:6px;} +.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2;} +.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0;} +.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);*padding-top:5px;*padding-bottom:5px;} +.btn-group>.btn-mini+.dropdown-toggle{padding-left:5px;padding-right:5px;*padding-top:2px;*padding-bottom:2px;} +.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px;} +.btn-group>.btn-large+.dropdown-toggle{padding-left:12px;padding-right:12px;*padding-top:7px;*padding-bottom:7px;} +.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);} +.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6;} +.btn-group.open .btn-primary.dropdown-toggle{background-color:#0044cc;} +.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406;} +.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f;} +.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351;} +.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4;} +.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222222;} +.btn .caret{margin-top:8px;margin-left:0;} +.btn-mini .caret,.btn-small .caret,.btn-large .caret{margin-top:6px;} +.btn-large .caret{border-left-width:5px;border-right-width:5px;border-top-width:5px;} +.dropup .btn-large .caret{border-bottom-width:5px;} +.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;} +.btn-group-vertical{display:inline-block;*display:inline;*zoom:1;} +.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} +.btn-group-vertical>.btn+.btn{margin-left:0;margin-top:-1px;} +.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;} +.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;} +.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0;} +.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;} +.nav{margin-left:0;margin-bottom:20px;list-style:none;} +.nav>li>a{display:block;} +.nav>li>a:hover{text-decoration:none;background-color:#eeeeee;} +.nav>li>a>img{max-width:none;} +.nav>.pull-right{float:right;} +.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999999;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);text-transform:uppercase;} +.nav li+.nav-header{margin-top:9px;} +.nav-list{padding-left:15px;padding-right:15px;margin-bottom:0;} +.nav-list>li>a,.nav-list .nav-header{margin-left:-15px;margin-right:-15px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);} +.nav-list>li>a{padding:3px 15px;} +.nav-list>.active>a,.nav-list>.active>a:hover{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.2);background-color:#0088cc;} +.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px;} +.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;} +.nav-tabs,.nav-pills{*zoom:1;}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;content:"";line-height:0;} +.nav-tabs:after,.nav-pills:after{clear:both;} +.nav-tabs>li,.nav-pills>li{float:left;} +.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px;} +.nav-tabs{border-bottom:1px solid #ddd;} +.nav-tabs>li{margin-bottom:-1px;} +.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}.nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #dddddd;} +.nav-tabs>.active>a,.nav-tabs>.active>a:hover{color:#555555;background-color:#ffffff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default;} +.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;} +.nav-pills>.active>a,.nav-pills>.active>a:hover{color:#ffffff;background-color:#0088cc;} +.nav-stacked>li{float:none;} +.nav-stacked>li>a{margin-right:0;} +.nav-tabs.nav-stacked{border-bottom:0;} +.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} +.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;} +.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;} +.nav-tabs.nav-stacked>li>a:hover{border-color:#ddd;z-index:2;} +.nav-pills.nav-stacked>li>a{margin-bottom:3px;} +.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px;} +.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;} +.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} +.nav .dropdown-toggle .caret{border-top-color:#0088cc;border-bottom-color:#0088cc;margin-top:6px;} +.nav .dropdown-toggle:hover .caret{border-top-color:#005580;border-bottom-color:#005580;} +.nav-tabs .dropdown-toggle .caret{margin-top:8px;} +.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff;} +.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555555;border-bottom-color:#555555;} +.nav>.dropdown.active>a:hover{cursor:pointer;} +.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover{color:#ffffff;background-color:#999999;border-color:#999999;} +.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;opacity:1;filter:alpha(opacity=100);} +.tabs-stacked .open>a:hover{border-color:#999999;} +.tabbable{*zoom:1;}.tabbable:before,.tabbable:after{display:table;content:"";line-height:0;} +.tabbable:after{clear:both;} +.tab-content{overflow:auto;} +.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0;} +.tab-content>.tab-pane,.pill-content>.pill-pane{display:none;} +.tab-content>.active,.pill-content>.active{display:block;} +.tabs-below>.nav-tabs{border-top:1px solid #ddd;} +.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0;} +.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;}.tabs-below>.nav-tabs>li>a:hover{border-bottom-color:transparent;border-top-color:#ddd;} +.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover{border-color:transparent #ddd #ddd #ddd;} +.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none;} +.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px;} +.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd;} +.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;} +.tabs-left>.nav-tabs>li>a:hover{border-color:#eeeeee #dddddd #eeeeee #eeeeee;} +.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover{border-color:#ddd transparent #ddd #ddd;*border-right-color:#ffffff;} +.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd;} +.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} +.tabs-right>.nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #eeeeee #dddddd;} +.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover{border-color:#ddd #ddd #ddd transparent;*border-left-color:#ffffff;} +.nav>.disabled>a{color:#999999;} +.nav>.disabled>a:hover{text-decoration:none;background-color:transparent;cursor:default;} +.navbar{overflow:visible;margin-bottom:20px;*position:relative;*z-index:2;} +.navbar-inner{min-height:40px;padding-left:20px;padding-right:20px;background-color:#fafafa;background-image:-moz-linear-gradient(top, #ffffff, #f2f2f2);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2));background-image:-webkit-linear-gradient(top, #ffffff, #f2f2f2);background-image:-o-linear-gradient(top, #ffffff, #f2f2f2);background-image:linear-gradient(to bottom, #ffffff, #f2f2f2);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0);border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 4px rgba(0, 0, 0, 0.065);-moz-box-shadow:0 1px 4px rgba(0, 0, 0, 0.065);box-shadow:0 1px 4px rgba(0, 0, 0, 0.065);*zoom:1;}.navbar-inner:before,.navbar-inner:after{display:table;content:"";line-height:0;} +.navbar-inner:after{clear:both;} +.navbar .container{width:auto;} +.nav-collapse.collapse{height:auto;overflow:visible;} +.navbar .brand{float:left;display:block;padding:10px 20px 10px;margin-left:-20px;font-size:20px;font-weight:200;color:#777777;text-shadow:0 1px 0 #ffffff;}.navbar .brand:hover{text-decoration:none;} +.navbar-text{margin-bottom:0;line-height:40px;color:#777777;} +.navbar-link{color:#777777;}.navbar-link:hover{color:#333333;} +.navbar .divider-vertical{height:40px;margin:0 9px;border-left:1px solid #f2f2f2;border-right:1px solid #ffffff;} +.navbar .btn,.navbar .btn-group{margin-top:5px;} +.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn{margin-top:0;} +.navbar-form{margin-bottom:0;*zoom:1;}.navbar-form:before,.navbar-form:after{display:table;content:"";line-height:0;} +.navbar-form:after{clear:both;} +.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px;} +.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0;} +.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px;} +.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap;}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0;} +.navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0;}.navbar-search .search-query{margin-bottom:0;padding:4px 14px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;} +.navbar-static-top{position:static;margin-bottom:0;}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} +.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0;} +.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px;} +.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0;} +.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-left:0;padding-right:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} +.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px;} +.navbar-fixed-top{top:0;} +.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,.1);box-shadow:0 1px 10px rgba(0,0,0,.1);} +.navbar-fixed-bottom{bottom:0;}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,.1);box-shadow:0 -1px 10px rgba(0,0,0,.1);} +.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0;} +.navbar .nav.pull-right{float:right;margin-right:0;} +.navbar .nav>li{float:left;} +.navbar .nav>li>a{float:none;padding:10px 15px 10px;color:#777777;text-decoration:none;text-shadow:0 1px 0 #ffffff;} +.navbar .nav .dropdown-toggle .caret{margin-top:8px;} +.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{background-color:transparent;color:#333333;text-decoration:none;} +.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555555;text-decoration:none;background-color:#e5e5e5;-webkit-box-shadow:inset 0 3px 8px rgba(0, 0, 0, 0.125);-moz-box-shadow:inset 0 3px 8px rgba(0, 0, 0, 0.125);box-shadow:inset 0 3px 8px rgba(0, 0, 0, 0.125);} +.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-left:5px;margin-right:5px;color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#ededed;background-image:-moz-linear-gradient(top, #f2f2f2, #e5e5e5);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5));background-image:-webkit-linear-gradient(top, #f2f2f2, #e5e5e5);background-image:-o-linear-gradient(top, #f2f2f2, #e5e5e5);background-image:linear-gradient(to bottom, #f2f2f2, #e5e5e5);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0);border-color:#e5e5e5 #e5e5e5 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#e5e5e5;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);}.navbar .btn-navbar:hover,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#ffffff;background-color:#e5e5e5;*background-color:#d9d9d9;} +.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#cccccc \9;} +.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);-moz-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);} +.btn-navbar .icon-bar+.icon-bar{margin-top:3px;} +.navbar .nav>li>.dropdown-menu:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0, 0, 0, 0.2);position:absolute;top:-7px;left:9px;} +.navbar .nav>li>.dropdown-menu:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #ffffff;position:absolute;top:-6px;left:10px;} +.navbar-fixed-bottom .nav>li>.dropdown-menu:before{border-top:7px solid #ccc;border-top-color:rgba(0, 0, 0, 0.2);border-bottom:0;bottom:-7px;top:auto;} +.navbar-fixed-bottom .nav>li>.dropdown-menu:after{border-top:6px solid #ffffff;border-bottom:0;bottom:-6px;top:auto;} +.navbar .nav li.dropdown>a:hover .caret{border-top-color:#555555;border-bottom-color:#555555;} +.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{background-color:#e5e5e5;color:#555555;} +.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#777777;border-bottom-color:#777777;} +.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555555;border-bottom-color:#555555;} +.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{left:auto;right:0;}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{left:auto;right:12px;} +.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{left:auto;right:13px;} +.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{left:auto;right:100%;margin-left:0;margin-right:-1px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px;} +.navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top, #222222, #111111);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111));background-image:-webkit-linear-gradient(top, #222222, #111111);background-image:-o-linear-gradient(top, #222222, #111111);background-image:linear-gradient(to bottom, #222222, #111111);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0);border-color:#252525;} +.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999999;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover{color:#ffffff;} +.navbar-inverse .brand{color:#999999;} +.navbar-inverse .navbar-text{color:#999999;} +.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{background-color:transparent;color:#ffffff;} +.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#ffffff;background-color:#111111;} +.navbar-inverse .navbar-link{color:#999999;}.navbar-inverse .navbar-link:hover{color:#ffffff;} +.navbar-inverse .divider-vertical{border-left-color:#111111;border-right-color:#222222;} +.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{background-color:#111111;color:#ffffff;} +.navbar-inverse .nav li.dropdown>a:hover .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;} +.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999999;border-bottom-color:#999999;} +.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;} +.navbar-inverse .navbar-search .search-query{color:#ffffff;background-color:#515151;border-color:#111111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none;}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#cccccc;} +.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#cccccc;} +.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#cccccc;} +.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333333;text-shadow:0 1px 0 #ffffff;background-color:#ffffff;border:0;-webkit-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);-moz-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);box-shadow:0 0 3px rgba(0, 0, 0, 0.15);outline:0;} +.navbar-inverse .btn-navbar{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#0e0e0e;background-image:-moz-linear-gradient(top, #151515, #040404);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404));background-image:-webkit-linear-gradient(top, #151515, #040404);background-image:-o-linear-gradient(top, #151515, #040404);background-image:linear-gradient(to bottom, #151515, #040404);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0);border-color:#040404 #040404 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#040404;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#ffffff;background-color:#040404;*background-color:#000000;} +.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000000 \9;} +.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.breadcrumb>li{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 0 #ffffff;}.breadcrumb>li>.divider{padding:0 5px;color:#ccc;} +.breadcrumb>.active{color:#999999;} +.pagination{margin:20px 0;} +.pagination ul{display:inline-block;*display:inline;*zoom:1;margin-left:0;margin-bottom:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);} +.pagination ul>li{display:inline;} +.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#ffffff;border:1px solid #dddddd;border-left-width:0;} +.pagination ul>li>a:hover,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5;} +.pagination ul>.active>a,.pagination ul>.active>span{color:#999999;cursor:default;} +.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover{color:#999999;background-color:transparent;cursor:default;} +.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;} +.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;} +.pagination-centered{text-align:center;} +.pagination-right{text-align:right;} +.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px;} +.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;} +.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius:6px;} +.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-top-left-radius:3px;-moz-border-radius-topleft:3px;border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-bottomleft:3px;border-bottom-left-radius:3px;} +.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;-moz-border-radius-topright:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;-moz-border-radius-bottomright:3px;border-bottom-right-radius:3px;} +.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px;} +.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px;} +.pager{margin:20px 0;list-style:none;text-align:center;*zoom:1;}.pager:before,.pager:after{display:table;content:"";line-height:0;} +.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;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;} +.pager li>a:hover{text-decoration:none;background-color:#f5f5f5;} +.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>span{color:#999999;background-color:#fff;cursor:default;} +.thumbnails{margin-left:-20px;list-style:none;*zoom:1;}.thumbnails:before,.thumbnails:after{display:table;content:"";line-height:0;} +.thumbnails:after{clear:both;} +.row-fluid .thumbnails{margin-left:0;} +.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px;} +.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0, 0, 0, 0.055);-moz-box-shadow:0 1px 3px rgba(0, 0, 0, 0.055);box-shadow:0 1px 3px rgba(0, 0, 0, 0.055);-webkit-transition:all 0.2s ease-in-out;-moz-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;} +a.thumbnail:hover{border-color:#0088cc;-webkit-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);-moz-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);} +.thumbnail>img{display:block;max-width:100%;margin-left:auto;margin-right:auto;} +.thumbnail .caption{padding:9px;color:#555555;} +.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} +.alert,.alert h4{color:#c09853;} +.alert h4{margin:0;} +.alert .close{position:relative;top:-2px;right:-21px;line-height:20px;} +.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#468847;} +.alert-success h4{color:#468847;} +.alert-danger,.alert-error{background-color:#f2dede;border-color:#eed3d7;color:#b94a48;} +.alert-danger h4,.alert-error h4{color:#b94a48;} +.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#3a87ad;} +.alert-info h4{color:#3a87ad;} +.alert-block{padding-top:14px;padding-bottom:14px;} +.alert-block>p,.alert-block>ul{margin-bottom:0;} +.alert-block p+p{margin-top:5px;} +@-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;}}@-ms-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{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f7f7f7;background-image:-moz-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));background-image:-webkit-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-o-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:linear-gradient(to bottom, #f5f5f5, #f9f9f9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} +.progress .bar{width:0%;height:100%;color:#ffffff;float:left;font-size:12px;text-align:center;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top, #149bdf, #0480be);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));background-image:-webkit-linear-gradient(top, #149bdf, #0480be);background-image:-o-linear-gradient(top, #149bdf, #0480be);background-image:linear-gradient(to bottom, #149bdf, #0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-moz-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-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width 0.6s ease;-moz-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease;} +.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15);} +.progress-striped .bar{background-color:#149bdf;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:-o-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);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px;} +.progress.active .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-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top, #ee5f5b, #c43c35);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));background-image:-webkit-linear-gradient(top, #ee5f5b, #c43c35);background-image:-o-linear-gradient(top, #ee5f5b, #c43c35);background-image:linear-gradient(to bottom, #ee5f5b, #c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0);} +.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;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:-o-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-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top, #62c462, #57a957);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));background-image:-webkit-linear-gradient(top, #62c462, #57a957);background-image:-o-linear-gradient(top, #62c462, #57a957);background-image:linear-gradient(to bottom, #62c462, #57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0);} +.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;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:-o-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-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top, #5bc0de, #339bb9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));background-image:-webkit-linear-gradient(top, #5bc0de, #339bb9);background-image:-o-linear-gradient(top, #5bc0de, #339bb9);background-image:linear-gradient(to bottom, #5bc0de, #339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0);} +.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;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:-o-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-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(to bottom, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);} +.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;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:-o-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);} +.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eeeeee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;color:inherit;letter-spacing:-1px;} +.hero-unit li{line-height:30px;} +.media,.media-body{overflow:hidden;*overflow:visible;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{margin-left:0;list-style:none;} +.tooltip{position:absolute;z-index:1030;display:block;visibility:visible;padding:5px;font-size:11px;opacity:0;filter:alpha(opacity=0);}.tooltip.in{opacity:0.8;filter:alpha(opacity=80);} +.tooltip.top{margin-top:-3px;} +.tooltip.right{margin-left:3px;} +.tooltip.bottom{margin-top:3px;} +.tooltip.left{margin-left:-3px;} +.tooltip-inner{max-width:200px;padding:3px 8px;color:#ffffff;text-align:center;text-decoration:none;background-color:#000000;-webkit-border-radius:4px;-moz-border-radius:4px;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-width:5px 5px 0;border-top-color:#000000;} +.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000000;} +.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000000;} +.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000000;} +.popover{position:absolute;top:0;left:0;z-index:1010;display:none;width:236px;padding:1px;text-align:left;background-color:#ffffff;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);white-space:normal;}.popover.top{margin-top:-10px;} +.popover.right{margin-left:10px;} +.popover.bottom{margin-top:10px;} +.popover.left{margin-left:-10px;} +.popover-title{margin:0;padding:8px 14px;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;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{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0, 0, 0, 0.25);bottom:-11px;}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#ffffff;} +.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0, 0, 0, 0.25);}.popover.right .arrow:after{left:1px;bottom:-10px;border-left-width:0;border-right-color:#ffffff;} +.popover.bottom .arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0, 0, 0, 0.25);top:-11px;}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#ffffff;} +.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0, 0, 0, 0.25);}.popover.left .arrow:after{right:1px;border-right-width:0;border-left-color:#ffffff;bottom:-10px;} +.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000000;}.modal-backdrop.fade{opacity:0;} +.modal-backdrop,.modal-backdrop.fade.in{opacity:0.8;filter:alpha(opacity=80);} +.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#ffffff;border:1px solid #999;border:1px solid rgba(0, 0, 0, 0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;outline:none;}.modal.fade{-webkit-transition:opacity .3s linear, top .3s ease-out;-moz-transition:opacity .3s linear, top .3s ease-out;-o-transition:opacity .3s linear, top .3s ease-out;transition:opacity .3s linear, top .3s ease-out;top:-25%;} +.modal.fade.in{top:10%;} +.modal-header{padding:9px 15px;border-bottom:1px solid #eee;}.modal-header .close{margin-top:2px;} +.modal-header h3{margin:0;line-height:30px;} +.modal-body{position:relative;overflow-y:auto;max-height:400px;padding:15px;} +.modal-form{margin-bottom:0;} +.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;*zoom:1;}.modal-footer:before,.modal-footer:after{display:table;content:"";line-height:0;} +.modal-footer:after{clear:both;} +.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0;} +.modal-footer .btn-group .btn+.btn{margin-left:-1px;} +.modal-footer .btn-block+.btn-block{margin-left:0;} +.dropup,.dropdown{position:relative;} +.dropdown-toggle{*margin-bottom:-3px;} +.dropdown-toggle:active,.open .dropdown-toggle{outline:0;} +.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000000;border-right:4px solid transparent;border-left:4px solid transparent;content:"";} +.dropdown .caret{margin-top:8px;margin-left:2px;} +.dropdown-menu1{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#ffffff;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;}.dropdown-menu.pull-right{right:0;left:auto;} +.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;} +.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#ffffff;text-decoration:none;outline:0;background-color:#0081c2;background-image:-moz-linear-gradient(top, #0088cc, #0077b3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3));background-image:-webkit-linear-gradient(top, #0088cc, #0077b3);background-image:-o-linear-gradient(top, #0088cc, #0077b3);background-image:linear-gradient(to bottom, #0088cc, #0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);} +.dropdown-menu .disabled>a,.dropdown-menu .disabled>a:hover{color:#999999;} +.dropdown-menu .disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:default;} +.open{*z-index:1000;}.open >.dropdown-menu{display:block;} +.pull-right>.dropdown-menu{right:0;left:auto;} +.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000000;content:"";} +.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px;} +.dropdown-submenu{position:relative;} +.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px;} +.dropdown-submenu:hover>.dropdown-menu{display:block;} +.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0;} +.dropdown-submenu>a:after{display:block;content:" ";float:right;width:0;height:0;border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#cccccc;margin-top:5px;margin-right:-10px;} +.dropdown-submenu:hover>a:after{border-left-color:#ffffff;} +.dropdown-submenu.pull-left{float:none;}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px;} +.dropdown .dropdown-menu .nav-header{padding-left:20px;padding-right:20px;} +.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} +.accordion{margin-bottom:20px;} +.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} +.accordion-heading{border-bottom:0;} +.accordion-heading .accordion-toggle{display:block;padding:8px 15px;} +.accordion-toggle{cursor:pointer;} +.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5;} +.carousel{position:relative;margin-bottom:20px;line-height:1;} +.carousel-inner{overflow:hidden;width:100%;position:relative;} +.carousel-inner>.item{display:none;position:relative;-webkit-transition:0.6s ease-in-out left;-moz-transition:0.6s ease-in-out left;-o-transition:0.6s ease-in-out left;transition:0.6s ease-in-out left;} +.carousel-inner>.item>img{display:block;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:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#ffffff;text-align:center;background:#222222;border:3px solid #ffffff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:0.5;filter:alpha(opacity=50);}.carousel-control.right{left:auto;right:15px;} +.carousel-control:hover{color:#ffffff;text-decoration:none;opacity:0.9;filter:alpha(opacity=90);} +.carousel-caption{position:absolute;left:0;right:0;bottom:0;padding:15px;background:#333333;background:rgba(0, 0, 0, 0.75);} +.carousel-caption h4,.carousel-caption p{color:#ffffff;line-height:20px;} +.carousel-caption h4{margin:0 0 5px;} +.carousel-caption p{margin-bottom:0;} +.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);-moz-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-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} +.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} +.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000000;text-shadow:0 1px 0 #ffffff;opacity:0.2;filter:alpha(opacity=20);}.close:hover{color:#000000;text-decoration:none;cursor:pointer;opacity:0.4;filter:alpha(opacity=40);} +button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none;} +.pull-right{float:right;} +.pull-left{float:left;} +.hide{display:none;} +.show{display:block;} +.invisible{visibility:hidden;} +.affix{position:fixed;} +.fade{opacity:0;-webkit-transition:opacity 0.15s linear;-moz-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear;}.fade.in{opacity:1;} +.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height 0.35s ease;-moz-transition:height 0.35s ease;-o-transition:height 0.35s ease;transition:height 0.35s ease;}.collapse.in{height:auto;} +.hidden{display:none;visibility:hidden;} +.visible-phone{display:none !important;} +.visible-tablet{display:none !important;} +.hidden-desktop{display:none !important;} +.visible-desktop{display:inherit !important;} +@media (min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit !important;} .visible-desktop{display:none !important ;} .visible-tablet{display:inherit !important;} .hidden-tablet{display:none !important;}}@media (max-width:767px){.hidden-desktop{display:inherit !important;} .visible-desktop{display:none !important;} .visible-phone{display:inherit !important;} .hidden-phone{display:none !important;}}@media (max-width:767px){body{padding-left:20px;padding-right:20px;} .navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-left:-20px;margin-right:-20px;} .container-fluid{padding:0;} .dl-horizontal dt{float:none;clear:none;width:auto;text-align:left;} .dl-horizontal dd{margin-left:0;} .container{width:auto;} .row-fluid{width:100%;} .row,.thumbnails{margin-left:0;} .thumbnails>li{float:none;margin-left:0;} [class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{float:none;display:block;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} .span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} .row-fluid [class*="offset"]:first-child{margin-left:0;} .input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} .input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto;} .controls-row [class*="span"]+[class*="span"]{margin-left:0;} .modal{position:fixed;top:20px;left:20px;right:20px;width:auto;margin:0;}.modal.fade{top:-100px;} .modal.fade.in{top:20px;}}@media (max-width:480px){.nav-collapse{-webkit-transform:translate3d(0, 0, 0);} .page-header h1 small{display:block;line-height:20px;} input[type="checkbox"],input[type="radio"]{border:1px solid #ccc;} .form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left;} .form-horizontal .controls{margin-left:0;} .form-horizontal .control-list{padding-top:0;} .form-horizontal .form-actions{padding-left:10px;padding-right:10px;} .media .pull-left,.media .pull-right{float:none;display:block;margin-bottom:10px;} .media-object{margin-right:0;margin-left:0;} .modal{top:10px;left:10px;right:10px;} .modal-header .close{padding:10px;margin:-10px;} .carousel-caption{position:static;}}@media (min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1;}.row:before,.row:after{display:table;content:"";line-height:0;} .row:after{clear:both;} [class*="span"]{float:left;min-height:1px;margin-left:20px;} .container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px;} .span12{width:724px;} .span11{width:662px;} .span10{width:600px;} .span9{width:538px;} .span8{width:476px;} .span7{width:414px;} .span6{width:352px;} .span5{width:290px;} .span4{width:228px;} .span3{width:166px;} .span2{width:104px;} .span1{width:42px;} .offset12{margin-left:764px;} .offset11{margin-left:702px;} .offset10{margin-left:640px;} .offset9{margin-left:578px;} .offset8{margin-left:516px;} .offset7{margin-left:454px;} .offset6{margin-left:392px;} .offset5{margin-left:330px;} .offset4{margin-left:268px;} .offset3{margin-left:206px;} .offset2{margin-left:144px;} .offset1{margin-left:82px;} .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";line-height:0;} .row-fluid:after{clear:both;} .row-fluid [class*="span"]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;} .row-fluid [class*="span"]:first-child{margin-left:0;} .row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.7624309392265194%;} .row-fluid .span12{width:100%;*width:99.94680851063829%;} .row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%;} .row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%;} .row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%;} .row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%;} .row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%;} .row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%;} .row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%;} .row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%;} .row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%;} .row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%;} .row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%;} .row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%;} .row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%;} .row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%;} .row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%;} .row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%;} .row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%;} .row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%;} .row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%;} .row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%;} .row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%;} .row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%;} .row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%;} .row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%;} .row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%;} .row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%;} .row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%;} .row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%;} .row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%;} .row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%;} .row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%;} .row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%;} .row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%;} .row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%;} .row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%;} input,textarea,.uneditable-input{margin-left:0;} .controls-row [class*="span"]+[class*="span"]{margin-left:20px;} input.span12, textarea.span12, .uneditable-input.span12{width:710px;} input.span11, textarea.span11, .uneditable-input.span11{width:648px;} input.span10, textarea.span10, .uneditable-input.span10{width:586px;} input.span9, textarea.span9, .uneditable-input.span9{width:524px;} input.span8, textarea.span8, .uneditable-input.span8{width:462px;} input.span7, textarea.span7, .uneditable-input.span7{width:400px;} input.span6, textarea.span6, .uneditable-input.span6{width:338px;} input.span5, textarea.span5, .uneditable-input.span5{width:276px;} input.span4, textarea.span4, .uneditable-input.span4{width:214px;} input.span3, textarea.span3, .uneditable-input.span3{width:152px;} input.span2, textarea.span2, .uneditable-input.span2{width:90px;} input.span1, textarea.span1, .uneditable-input.span1{width:28px;}}@media (min-width:1200px){.row{margin-left:-30px;*zoom:1;}.row:before,.row:after{display:table;content:"";line-height:0;} .row:after{clear:both;} [class*="span"]{float:left;min-height:1px;margin-left:30px;} .container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px;} .span12{width:1170px;} .span11{width:1070px;} .span10{width:970px;} .span9{width:870px;} .span8{width:770px;} .span7{width:670px;} .span6{width:570px;} .span5{width:470px;} .span4{width:370px;} .span3{width:270px;} .span2{width:170px;} .span1{width:70px;} .offset12{margin-left:1230px;} .offset11{margin-left:1130px;} .offset10{margin-left:1030px;} .offset9{margin-left:930px;} .offset8{margin-left:830px;} .offset7{margin-left:730px;} .offset6{margin-left:630px;} .offset5{margin-left:530px;} .offset4{margin-left:430px;} .offset3{margin-left:330px;} .offset2{margin-left:230px;} .offset1{margin-left:130px;} .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";line-height:0;} .row-fluid:after{clear:both;} .row-fluid [class*="span"]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;} .row-fluid [class*="span"]:first-child{margin-left:0;} .row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.564102564102564%;} .row-fluid .span12{width:100%;*width:99.94680851063829%;} .row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%;} .row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%;} .row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%;} .row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%;} .row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%;} .row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%;} .row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%;} .row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%;} .row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%;} .row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%;} .row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%;} .row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%;} .row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%;} .row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%;} .row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%;} .row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%;} .row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%;} .row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%;} .row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%;} .row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%;} .row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%;} .row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%;} .row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%;} .row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%;} .row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%;} .row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%;} .row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%;} .row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%;} .row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%;} .row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%;} .row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%;} .row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%;} .row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%;} .row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%;} .row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%;} input,textarea,.uneditable-input{margin-left:0;} .controls-row [class*="span"]+[class*="span"]{margin-left:30px;} input.span12, textarea.span12, .uneditable-input.span12{width:1156px;} input.span11, textarea.span11, .uneditable-input.span11{width:1056px;} input.span10, textarea.span10, .uneditable-input.span10{width:956px;} input.span9, textarea.span9, .uneditable-input.span9{width:856px;} input.span8, textarea.span8, .uneditable-input.span8{width:756px;} input.span7, textarea.span7, .uneditable-input.span7{width:656px;} input.span6, textarea.span6, .uneditable-input.span6{width:556px;} input.span5, textarea.span5, .uneditable-input.span5{width:456px;} input.span4, textarea.span4, .uneditable-input.span4{width:356px;} input.span3, textarea.span3, .uneditable-input.span3{width:256px;} input.span2, textarea.span2, .uneditable-input.span2{width:156px;} input.span1, textarea.span1, .uneditable-input.span1{width:56px;} .thumbnails{margin-left:-30px;} .thumbnails>li{margin-left:30px;} .row-fluid .thumbnails{margin-left:0;}}@media (max-width:979px){body{padding-top:0;} .navbar-fixed-top,.navbar-fixed-bottom{position:static;} .navbar-fixed-top{margin-bottom:20px;} .navbar-fixed-bottom{margin-top:20px;} .navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px;} .navbar .container{width:auto;padding:0;} .navbar .brand{padding-left:10px;padding-right:10px;margin:0 0 0 -5px;} .nav-collapse{clear:both;} .nav-collapse .nav{float:none;margin:0 0 10px;} .nav-collapse .nav>li{float:none;} .nav-collapse .nav>li>a{margin-bottom:2px;} .nav-collapse .nav>.divider-vertical{display:none;} .nav-collapse .nav .nav-header{color:#777777;text-shadow:none;} .nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} .nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} .nav-collapse .dropdown-menu li+li a{margin-bottom:2px;} .nav-collapse .nav>li>a:hover,.nav-collapse .dropdown-menu a:hover{background-color:#f2f2f2;} .navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999999;} .navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:hover{background-color:#111111;} .nav-collapse.in .btn-group{margin-top:5px;padding:0;} .nav-collapse .dropdown-menu{position:static;top:auto;left:auto;float:none;display:none;max-width:none;margin:0 15px;padding:0;background-color:transparent;border:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} .nav-collapse .open>.dropdown-menu{display:block;} .nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none;} .nav-collapse .dropdown-menu .divider{display:none;} .nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none;} .nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);} .navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111111;border-bottom-color:#111111;} .navbar .nav-collapse .nav.pull-right{float:none;margin-left:0;} .nav-collapse,.nav-collapse.collapse{overflow:hidden;height:0;} .navbar .btn-navbar{display:block;} .navbar-static .navbar-inner{padding-left:10px;padding-right:10px;}}@media (min-width:980px){.nav-collapse.collapse{height:auto !important;overflow:visible !important;}} diff --git a/doc/css/font-awesome-ie7.min.css b/doc/css/font-awesome-ie7.min.css index 504350e6c..8fd29724d 100644 --- a/doc/css/font-awesome-ie7.min.css +++ b/doc/css/font-awesome-ie7.min.css @@ -1,23 +1,23 @@ -/* Font Awesome 3.0 - the iconic font designed for use with Twitter Bootstrap - ------------------------------------------------------- - The full suite of pictographic icons, examples, and documentation - can be found at: http://fortawesome.github.com/Font-Awesome/ - - License - ------------------------------------------------------- - • The Font Awesome font is licensed under the SIL Open Font License - http://scripts.sil.org/OFL - • Font Awesome CSS, LESS, and SASS files are licensed under the MIT License - - http://opensource.org/licenses/mit-license.html - • The Font Awesome pictograms are licensed under the CC BY 3.0 License - http://creativecommons.org/licenses/by/3.0/ - • Attribution is no longer required in Font Awesome 3.0, but much appreciated: - "Font Awesome by Dave Gandy - http://fortawesome.github.com/Font-Awesome" - - Contact - ------------------------------------------------------- - Email: dave@davegandy.com - Twitter: http://twitter.com/fortaweso_me - Work: Lead Product Designer @ http://kyruus.com - - */ +/* Font Awesome 3.0 + the iconic font designed for use with Twitter Bootstrap + ------------------------------------------------------- + The full suite of pictographic icons, examples, and documentation + can be found at: http://fortawesome.github.com/Font-Awesome/ + + License + ------------------------------------------------------- + • The Font Awesome font is licensed under the SIL Open Font License - http://scripts.sil.org/OFL + • Font Awesome CSS, LESS, and SASS files are licensed under the MIT License - + http://opensource.org/licenses/mit-license.html + • The Font Awesome pictograms are licensed under the CC BY 3.0 License - http://creativecommons.org/licenses/by/3.0/ + • Attribution is no longer required in Font Awesome 3.0, but much appreciated: + "Font Awesome by Dave Gandy - http://fortawesome.github.com/Font-Awesome" + + Contact + ------------------------------------------------------- + Email: dave@davegandy.com + Twitter: http://twitter.com/fortaweso_me + Work: Lead Product Designer @ http://kyruus.com + + */ [class^="icon-"],[class*=" icon-"]{padding-right:.3em}.icon-large{font-size:1.3333333333333333em;margin-top:-4px;padding-top:3px;margin-bottom:-4px;padding-bottom:3px;vertical-align:-20%}.btn [class^="icon-"],.nav [class^="icon-"],.btn [class*=" icon-"],.nav [class*=" icon-"]{vertical-align:inherit;margin-top:-4px;padding-top:3px;margin-bottom:-4px;padding-bottom:3px;line-height:.9em}a [class^="icon-"],a [class*=" icon-"]{cursor:pointer}ul.icons{text-indent:-1.5em;margin-left:3em}.icon-glass{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-music{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-search{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-envelope{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-heart{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-star{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-star-empty{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-user{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-film{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-th-large{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-th{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-th-list{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-ok{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-remove{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-zoom-in{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-zoom-out{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-off{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-signal{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-cog{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-trash{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-home{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-file{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-time{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-road{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-download-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-download{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-upload{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-inbox{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-play-circle{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-repeat{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-refresh{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-list-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-lock{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-flag{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-headphones{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-volume-off{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-volume-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-volume-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-qrcode{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-barcode{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-tag{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-tags{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-book{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-bookmark{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-print{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-camera{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-font{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-bold{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-italic{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-text-height{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-text-width{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-align-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-align-center{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-align-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-align-justify{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-list{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-indent-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-indent-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-facetime-video{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-picture{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-pencil{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-map-marker{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-adjust{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-tint{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-edit{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-share{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-check{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-move{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-step-backward{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-fast-backward{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-backward{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-play{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-pause{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-stop{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-forward{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-fast-forward{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-step-forward{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-eject{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-chevron-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-chevron-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-plus-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-minus-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-remove-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-ok-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-question-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-info-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-screenshot{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-remove-circle{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-ok-circle{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-ban-circle{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-arrow-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-arrow-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-arrow-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-arrow-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-share-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-resize-full{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-resize-small{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-plus{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-minus{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-asterisk{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-exclamation-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-gift{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-leaf{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-fire{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-eye-open{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-eye-close{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-warning-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-plane{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-calendar{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-random{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-comment{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-magnet{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-chevron-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-chevron-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-retweet{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-shopping-cart{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-folder-close{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-folder-open{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-resize-vertical{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-resize-horizontal{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-bar-chart{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-twitter-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-facebook-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-camera-retro{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-key{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-cogs{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-comments{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-thumbs-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-thumbs-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-star-half{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-heart-empty{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-signout{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-linkedin-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-pushpin{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-external-link{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-signin{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-trophy{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-github-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-upload-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-lemon{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-phone{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-check-empty{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-bookmark-empty{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-phone-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-twitter{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-facebook{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-github{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-unlock{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-credit-card{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-rss{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-hdd{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-bullhorn{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-bell{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-certificate{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-hand-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-hand-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-hand-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-hand-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-circle-arrow-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-circle-arrow-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-circle-arrow-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-circle-arrow-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-globe{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-wrench{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-tasks{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-filter{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-briefcase{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-fullscreen{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-group{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-link{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-cloud{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-beaker{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-cut{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-copy{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-paper-clip{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-save{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-sign-blank{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-reorder{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-list-ul{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-list-ol{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-strikethrough{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-underline{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-table{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-magic{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-truck{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-pinterest{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-pinterest-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-google-plus-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-google-plus{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-money{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-caret-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-caret-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-caret-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-caret-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-columns{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-sort{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-sort-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-sort-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-envelope-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-linkedin{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-undo{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-legal{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-dashboard{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-comment-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-comments-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-bolt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-sitemap{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-umbrella{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-paste{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-lightbulb{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-exchange{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-cloud-download{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-cloud-upload{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-user-md{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-stethoscope{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-suitcase{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-bell-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-coffee{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-food{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-file-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-building{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-hospital{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-ambulance{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-medkit{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-fighter-jet{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-beer{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-h-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-plus-sign-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-double-angle-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-double-angle-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-double-angle-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-double-angle-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-angle-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-angle-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-angle-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-angle-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-desktop{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-laptop{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-tablet{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-mobile-phone{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-circle-blank{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-quote-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-quote-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-spinner{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-circle{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-reply{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-github-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-folder-close-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-folder-open-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')} \ No newline at end of file diff --git a/doc/css/font-awesome.css b/doc/css/font-awesome.css index 1c8d725df..549728b8e 100644 --- a/doc/css/font-awesome.css +++ b/doc/css/font-awesome.css @@ -1,469 +1,469 @@ -/* Font Awesome 3.0 - the iconic font designed for use with Twitter Bootstrap - ------------------------------------------------------- - The full suite of pictographic icons, examples, and documentation - can be found at: http://fortawesome.github.com/Font-Awesome/ - - License - ------------------------------------------------------- - • The Font Awesome font is licensed under the SIL Open Font License - http://scripts.sil.org/OFL - • Font Awesome CSS, LESS, and SASS files are licensed under the MIT License - - http://opensource.org/licenses/mit-license.html - • The Font Awesome pictograms are licensed under the CC BY 3.0 License - http://creativecommons.org/licenses/by/3.0/ - • Attribution is no longer required in Font Awesome 3.0, but much appreciated: - "Font Awesome by Dave Gandy - http://fortawesome.github.com/Font-Awesome" - - Contact - ------------------------------------------------------- - Email: dave@davegandy.com - Twitter: http://twitter.com/fortaweso_me - Work: Lead Product Designer @ http://kyruus.com - - */ -@font-face { - font-family: 'FontAwesome'; - src: url('../font/fontawesome-webfont.eot'); - src: url('../font/fontawesome-webfont.eot?#iefix') format('embedded-opentype'), - url('../font/fontawesome-webfont.woff') format('woff'), - url('../font/fontawesome-webfont.ttf') format('truetype'); - font-weight: normal; - font-style: normal; -} -/* Font Awesome styles - ------------------------------------------------------- */ -/* includes sprites.less reset */ -[class^="icon-"], -[class*=" icon-"] { - font-family: FontAwesome; - font-weight: normal; - font-style: normal; - text-decoration: inherit; - display: inline; - width: auto; - height: auto; - line-height: normal; - vertical-align: baseline; - background-image: none !important; - background-position: 0% 0%; - background-repeat: repeat; -} -[class^="icon-"]:before, -[class*=" icon-"]:before { - text-decoration: inherit; - display: inline-block; - speak: none; -} -/* makes sure icons active on rollover in links */ -a [class^="icon-"], -a [class*=" icon-"] { - display: inline-block; -} -/* makes the font 33% larger relative to the icon container */ -.icon-large:before { - vertical-align: -10%; - font-size: 1.3333333333333333em; -} -.btn [class^="icon-"], -.nav [class^="icon-"], -.btn [class*=" icon-"], -.nav [class*=" icon-"] { - display: inline; - /* keeps button heights with and without icons the same */ - - line-height: .6em; -} -.btn [class^="icon-"].icon-spin, -.nav [class^="icon-"].icon-spin, -.btn [class*=" icon-"].icon-spin, -.nav [class*=" icon-"].icon-spin { - display: inline-block; -} -li [class^="icon-"], -li [class*=" icon-"] { - display: inline-block; - width: 1.25em; - text-align: center; -} -li [class^="icon-"].icon-large, -li [class*=" icon-"].icon-large { - /* increased font size for icon-large */ - - width: 1.5625em; -} -ul.icons { - list-style-type: none; - text-indent: -0.75em; -} -ul.icons li [class^="icon-"], -ul.icons li [class*=" icon-"] { - width: .75em; -} -.icon-muted { - color: #eeeeee; -} -.icon-border { - border: solid 1px #eeeeee; - padding: .2em .25em .15em; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.icon-2x { - font-size: 2em; -} -.icon-2x.icon-border { - border-width: 2px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.icon-3x { - font-size: 3em; -} -.icon-3x.icon-border { - border-width: 3px; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; -} -.icon-4x { - font-size: 4em; -} -.icon-4x.icon-border { - border-width: 4px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} -.pull-right { - float: right; -} -.pull-left { - float: left; -} -[class^="icon-"].pull-left, -[class*=" icon-"].pull-left { - margin-right: .35em; -} -[class^="icon-"].pull-right, -[class*=" icon-"].pull-right { - margin-left: .35em; -} -.btn [class^="icon-"].pull-left.icon-2x, -.btn [class*=" icon-"].pull-left.icon-2x, -.btn [class^="icon-"].pull-right.icon-2x, -.btn [class*=" icon-"].pull-right.icon-2x { - margin-top: .35em; -} -.btn [class^="icon-"].icon-spin.icon-large, -.btn [class*=" icon-"].icon-spin.icon-large { - height: .75em; -} -.btn.btn-small [class^="icon-"].pull-left.icon-2x, -.btn.btn-small [class*=" icon-"].pull-left.icon-2x, -.btn.btn-small [class^="icon-"].pull-right.icon-2x, -.btn.btn-small [class*=" icon-"].pull-right.icon-2x { - margin-top: .45em; -} -.btn.btn-large [class^="icon-"].pull-left.icon-2x, -.btn.btn-large [class*=" icon-"].pull-left.icon-2x, -.btn.btn-large [class^="icon-"].pull-right.icon-2x, -.btn.btn-large [class*=" icon-"].pull-right.icon-2x { - margin-top: .2em; -} -.icon-spin { - display: inline-block; - -moz-animation: spin 2s infinite linear; - -o-animation: spin 2s infinite linear; - -webkit-animation: spin 2s infinite linear; - animation: spin 2s infinite linear; -} -@-moz-keyframes spin { - 0% { -moz-transform: rotate(0deg); } - 100% { -moz-transform: rotate(359deg); } -} -@-webkit-keyframes spin { - 0% { -webkit-transform: rotate(0deg); } - 100% { -webkit-transform: rotate(359deg); } -} -@-o-keyframes spin { - 0% { -o-transform: rotate(0deg); } - 100% { -o-transform: rotate(359deg); } -} -@-ms-keyframes spin { - 0% { -ms-transform: rotate(0deg); } - 100% { -ms-transform: rotate(359deg); } -} -@keyframes spin { - 0% { transform: rotate(0deg); } - 100% { transform: rotate(359deg); } -} -/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen - readers do not read off random characters that represent icons */ -.icon-glass:before { content: "\f000"; } -.icon-music:before { content: "\f001"; } -.icon-search:before { content: "\f002"; } -.icon-envelope:before { content: "\f003"; } -.icon-heart:before { content: "\f004"; } -.icon-star:before { content: "\f005"; } -.icon-star-empty:before { content: "\f006"; } -.icon-user:before { content: "\f007"; } -.icon-film:before { content: "\f008"; } -.icon-th-large:before { content: "\f009"; } -.icon-th:before { content: "\f00a"; } -.icon-th-list:before { content: "\f00b"; } -.icon-ok:before { content: "\f00c"; } -.icon-remove:before { content: "\f00d"; } -.icon-zoom-in:before { content: "\f00e"; } - -.icon-zoom-out:before { content: "\f010"; } -.icon-off:before { content: "\f011"; } -.icon-signal:before { content: "\f012"; } -.icon-cog:before { content: "\f013"; } -.icon-trash:before { content: "\f014"; } -.icon-home:before { content: "\f015"; } -.icon-file:before { content: "\f016"; } -.icon-time:before { content: "\f017"; } -.icon-road:before { content: "\f018"; } -.icon-download-alt:before { content: "\f019"; } -.icon-download:before { content: "\f01a"; } -.icon-upload:before { content: "\f01b"; } -.icon-inbox:before { content: "\f01c"; } -.icon-play-circle:before { content: "\f01d"; } -.icon-repeat:before { content: "\f01e"; } - -/* \f020 doesn't work in Safari. all shifted one down */ -.icon-refresh:before { content: "\f021"; } -.icon-list-alt:before { content: "\f022"; } -.icon-lock:before { content: "\f023"; } -.icon-flag:before { content: "\f024"; } -.icon-headphones:before { content: "\f025"; } -.icon-volume-off:before { content: "\f026"; } -.icon-volume-down:before { content: "\f027"; } -.icon-volume-up:before { content: "\f028"; } -.icon-qrcode:before { content: "\f029"; } -.icon-barcode:before { content: "\f02a"; } -.icon-tag:before { content: "\f02b"; } -.icon-tags:before { content: "\f02c"; } -.icon-book:before { content: "\f02d"; } -.icon-bookmark:before { content: "\f02e"; } -.icon-print:before { content: "\f02f"; } - -.icon-camera:before { content: "\f030"; } -.icon-font:before { content: "\f031"; } -.icon-bold:before { content: "\f032"; } -.icon-italic:before { content: "\f033"; } -.icon-text-height:before { content: "\f034"; } -.icon-text-width:before { content: "\f035"; } -.icon-align-left:before { content: "\f036"; } -.icon-align-center:before { content: "\f037"; } -.icon-align-right:before { content: "\f038"; } -.icon-align-justify:before { content: "\f039"; } -.icon-list:before { content: "\f03a"; } -.icon-indent-left:before { content: "\f03b"; } -.icon-indent-right:before { content: "\f03c"; } -.icon-facetime-video:before { content: "\f03d"; } -.icon-picture:before { content: "\f03e"; } - -.icon-pencil:before { content: "\f040"; } -.icon-map-marker:before { content: "\f041"; } -.icon-adjust:before { content: "\f042"; } -.icon-tint:before { content: "\f043"; } -.icon-edit:before { content: "\f044"; } -.icon-share:before { content: "\f045"; } -.icon-check:before { content: "\f046"; } -.icon-move:before { content: "\f047"; } -.icon-step-backward:before { content: "\f048"; } -.icon-fast-backward:before { content: "\f049"; } -.icon-backward:before { content: "\f04a"; } -.icon-play:before { content: "\f04b"; } -.icon-pause:before { content: "\f04c"; } -.icon-stop:before { content: "\f04d"; } -.icon-forward:before { content: "\f04e"; } - -.icon-fast-forward:before { content: "\f050"; } -.icon-step-forward:before { content: "\f051"; } -.icon-eject:before { content: "\f052"; } -.icon-chevron-left:before { content: "\f053"; } -.icon-chevron-right:before { content: "\f054"; } -.icon-plus-sign:before { content: "\f055"; } -.icon-minus-sign:before { content: "\f056"; } -.icon-remove-sign:before { content: "\f057"; } -.icon-ok-sign:before { content: "\f058"; } -.icon-question-sign:before { content: "\f059"; } -.icon-info-sign:before { content: "\f05a"; } -.icon-screenshot:before { content: "\f05b"; } -.icon-remove-circle:before { content: "\f05c"; } -.icon-ok-circle:before { content: "\f05d"; } -.icon-ban-circle:before { content: "\f05e"; } - -.icon-arrow-left:before { content: "\f060"; } -.icon-arrow-right:before { content: "\f061"; } -.icon-arrow-up:before { content: "\f062"; } -.icon-arrow-down:before { content: "\f063"; } -.icon-share-alt:before { content: "\f064"; } -.icon-resize-full:before { content: "\f065"; } -.icon-resize-small:before { content: "\f066"; } -.icon-plus:before { content: "\f067"; } -.icon-minus:before { content: "\f068"; } -.icon-asterisk:before { content: "\f069"; } -.icon-exclamation-sign:before { content: "\f06a"; } -.icon-gift:before { content: "\f06b"; } -.icon-leaf:before { content: "\f06c"; } -.icon-fire:before { content: "\f06d"; } -.icon-eye-open:before { content: "\f06e"; } - -.icon-eye-close:before { content: "\f070"; } -.icon-warning-sign:before { content: "\f071"; } -.icon-plane:before { content: "\f072"; } -.icon-calendar:before { content: "\f073"; } -.icon-random:before { content: "\f074"; } -.icon-comment:before { content: "\f075"; } -.icon-magnet:before { content: "\f076"; } -.icon-chevron-up:before { content: "\f077"; } -.icon-chevron-down:before { content: "\f078"; } -.icon-retweet:before { content: "\f079"; } -.icon-shopping-cart:before { content: "\f07a"; } -.icon-folder-close:before { content: "\f07b"; } -.icon-folder-open:before { content: "\f07c"; } -.icon-resize-vertical:before { content: "\f07d"; } -.icon-resize-horizontal:before { content: "\f07e"; } - -.icon-bar-chart:before { content: "\f080"; } -.icon-twitter-sign:before { content: "\f081"; } -.icon-facebook-sign:before { content: "\f082"; } -.icon-camera-retro:before { content: "\f083"; } -.icon-key:before { content: "\f084"; } -.icon-cogs:before { content: "\f085"; } -.icon-comments:before { content: "\f086"; } -.icon-thumbs-up:before { content: "\f087"; } -.icon-thumbs-down:before { content: "\f088"; } -.icon-star-half:before { content: "\f089"; } -.icon-heart-empty:before { content: "\f08a"; } -.icon-signout:before { content: "\f08b"; } -.icon-linkedin-sign:before { content: "\f08c"; } -.icon-pushpin:before { content: "\f08d"; } -.icon-external-link:before { content: "\f08e"; } - -.icon-signin:before { content: "\f090"; } -.icon-trophy:before { content: "\f091"; } -.icon-github-sign:before { content: "\f092"; } -.icon-upload-alt:before { content: "\f093"; } -.icon-lemon:before { content: "\f094"; } -.icon-phone:before { content: "\f095"; } -.icon-check-empty:before { content: "\f096"; } -.icon-bookmark-empty:before { content: "\f097"; } -.icon-phone-sign:before { content: "\f098"; } -.icon-twitter:before { content: "\f099"; } -.icon-facebook:before { content: "\f09a"; } -.icon-github:before { content: "\f09b"; } -.icon-unlock:before { content: "\f09c"; } -.icon-credit-card:before { content: "\f09d"; } -.icon-rss:before { content: "\f09e"; } - -.icon-hdd:before { content: "\f0a0"; } -.icon-bullhorn:before { content: "\f0a1"; } -.icon-bell:before { content: "\f0a2"; } -.icon-certificate:before { content: "\f0a3"; } -.icon-hand-right:before { content: "\f0a4"; } -.icon-hand-left:before { content: "\f0a5"; } -.icon-hand-up:before { content: "\f0a6"; } -.icon-hand-down:before { content: "\f0a7"; } -.icon-circle-arrow-left:before { content: "\f0a8"; } -.icon-circle-arrow-right:before { content: "\f0a9"; } -.icon-circle-arrow-up:before { content: "\f0aa"; } -.icon-circle-arrow-down:before { content: "\f0ab"; } -.icon-globe:before { content: "\f0ac"; } -.icon-wrench:before { content: "\f0ad"; } -.icon-tasks:before { content: "\f0ae"; } - -.icon-filter:before { content: "\f0b0"; } -.icon-briefcase:before { content: "\f0b1"; } -.icon-fullscreen:before { content: "\f0b2"; } - -.icon-group:before { content: "\f0c0"; } -.icon-link:before { content: "\f0c1"; } -.icon-cloud:before { content: "\f0c2"; } -.icon-beaker:before { content: "\f0c3"; } -.icon-cut:before { content: "\f0c4"; } -.icon-copy:before { content: "\f0c5"; } -.icon-paper-clip:before { content: "\f0c6"; } -.icon-save:before { content: "\f0c7"; } -.icon-sign-blank:before { content: "\f0c8"; } -.icon-reorder:before { content: "\f0c9"; } -.icon-list-ul:before { content: "\f0ca"; } -.icon-list-ol:before { content: "\f0cb"; } -.icon-strikethrough:before { content: "\f0cc"; } -.icon-underline:before { content: "\f0cd"; } -.icon-table:before { content: "\f0ce"; } - -.icon-magic:before { content: "\f0d0"; } -.icon-truck:before { content: "\f0d1"; } -.icon-pinterest:before { content: "\f0d2"; } -.icon-pinterest-sign:before { content: "\f0d3"; } -.icon-google-plus-sign:before { content: "\f0d4"; } -.icon-google-plus:before { content: "\f0d5"; } -.icon-money:before { content: "\f0d6"; } -.icon-caret-down:before { content: "\f0d7"; } -.icon-caret-up:before { content: "\f0d8"; } -.icon-caret-left:before { content: "\f0d9"; } -.icon-caret-right:before { content: "\f0da"; } -.icon-columns:before { content: "\f0db"; } -.icon-sort:before { content: "\f0dc"; } -.icon-sort-down:before { content: "\f0dd"; } -.icon-sort-up:before { content: "\f0de"; } - -.icon-envelope-alt:before { content: "\f0e0"; } -.icon-linkedin:before { content: "\f0e1"; } -.icon-undo:before { content: "\f0e2"; } -.icon-legal:before { content: "\f0e3"; } -.icon-dashboard:before { content: "\f0e4"; } -.icon-comment-alt:before { content: "\f0e5"; } -.icon-comments-alt:before { content: "\f0e6"; } -.icon-bolt:before { content: "\f0e7"; } -.icon-sitemap:before { content: "\f0e8"; } -.icon-umbrella:before { content: "\f0e9"; } -.icon-paste:before { content: "\f0ea"; } -.icon-lightbulb:before { content: "\f0eb"; } -.icon-exchange:before { content: "\f0ec"; } -.icon-cloud-download:before { content: "\f0ed"; } -.icon-cloud-upload:before { content: "\f0ee"; } - -.icon-user-md:before { content: "\f0f0"; } -.icon-stethoscope:before { content: "\f0f1"; } -.icon-suitcase:before { content: "\f0f2"; } -.icon-bell-alt:before { content: "\f0f3"; } -.icon-coffee:before { content: "\f0f4"; } -.icon-food:before { content: "\f0f5"; } -.icon-file-alt:before { content: "\f0f6"; } -.icon-building:before { content: "\f0f7"; } -.icon-hospital:before { content: "\f0f8"; } -.icon-ambulance:before { content: "\f0f9"; } -.icon-medkit:before { content: "\f0fa"; } -.icon-fighter-jet:before { content: "\f0fb"; } -.icon-beer:before { content: "\f0fc"; } -.icon-h-sign:before { content: "\f0fd"; } -.icon-plus-sign-alt:before { content: "\f0fe"; } - -.icon-double-angle-left:before { content: "\f100"; } -.icon-double-angle-right:before { content: "\f101"; } -.icon-double-angle-up:before { content: "\f102"; } -.icon-double-angle-down:before { content: "\f103"; } -.icon-angle-left:before { content: "\f104"; } -.icon-angle-right:before { content: "\f105"; } -.icon-angle-up:before { content: "\f106"; } -.icon-angle-down:before { content: "\f107"; } -.icon-desktop:before { content: "\f108"; } -.icon-laptop:before { content: "\f109"; } -.icon-tablet:before { content: "\f10a"; } -.icon-mobile-phone:before { content: "\f10b"; } -.icon-circle-blank:before { content: "\f10c"; } -.icon-quote-left:before { content: "\f10d"; } -.icon-quote-right:before { content: "\f10e"; } - -.icon-spinner:before { content: "\f110"; } -.icon-circle:before { content: "\f111"; } -.icon-reply:before { content: "\f112"; } -.icon-github-alt:before { content: "\f113"; } -.icon-folder-close-alt:before { content: "\f114"; } -.icon-folder-open-alt:before { content: "\f115"; } +/* Font Awesome 3.0 + the iconic font designed for use with Twitter Bootstrap + ------------------------------------------------------- + The full suite of pictographic icons, examples, and documentation + can be found at: http://fortawesome.github.com/Font-Awesome/ + + License + ------------------------------------------------------- + • The Font Awesome font is licensed under the SIL Open Font License - http://scripts.sil.org/OFL + • Font Awesome CSS, LESS, and SASS files are licensed under the MIT License - + http://opensource.org/licenses/mit-license.html + • The Font Awesome pictograms are licensed under the CC BY 3.0 License - http://creativecommons.org/licenses/by/3.0/ + • Attribution is no longer required in Font Awesome 3.0, but much appreciated: + "Font Awesome by Dave Gandy - http://fortawesome.github.com/Font-Awesome" + + Contact + ------------------------------------------------------- + Email: dave@davegandy.com + Twitter: http://twitter.com/fortaweso_me + Work: Lead Product Designer @ http://kyruus.com + + */ +@font-face { + font-family: 'FontAwesome'; + src: url('../font/fontawesome-webfont.eot'); + src: url('../font/fontawesome-webfont.eot?#iefix') format('embedded-opentype'), + url('../font/fontawesome-webfont.woff') format('woff'), + url('../font/fontawesome-webfont.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} +/* Font Awesome styles + ------------------------------------------------------- */ +/* includes sprites.less reset */ +[class^="icon-"], +[class*=" icon-"] { + font-family: FontAwesome; + font-weight: normal; + font-style: normal; + text-decoration: inherit; + display: inline; + width: auto; + height: auto; + line-height: normal; + vertical-align: baseline; + background-image: none !important; + background-position: 0% 0%; + background-repeat: repeat; +} +[class^="icon-"]:before, +[class*=" icon-"]:before { + text-decoration: inherit; + display: inline-block; + speak: none; +} +/* makes sure icons active on rollover in links */ +a [class^="icon-"], +a [class*=" icon-"] { + display: inline-block; +} +/* makes the font 33% larger relative to the icon container */ +.icon-large:before { + vertical-align: -10%; + font-size: 1.3333333333333333em; +} +.btn [class^="icon-"], +.nav [class^="icon-"], +.btn [class*=" icon-"], +.nav [class*=" icon-"] { + display: inline; + /* keeps button heights with and without icons the same */ + + line-height: .6em; +} +.btn [class^="icon-"].icon-spin, +.nav [class^="icon-"].icon-spin, +.btn [class*=" icon-"].icon-spin, +.nav [class*=" icon-"].icon-spin { + display: inline-block; +} +li [class^="icon-"], +li [class*=" icon-"] { + display: inline-block; + width: 1.25em; + text-align: center; +} +li [class^="icon-"].icon-large, +li [class*=" icon-"].icon-large { + /* increased font size for icon-large */ + + width: 1.5625em; +} +ul.icons { + list-style-type: none; + text-indent: -0.75em; +} +ul.icons li [class^="icon-"], +ul.icons li [class*=" icon-"] { + width: .75em; +} +.icon-muted { + color: #eeeeee; +} +.icon-border { + border: solid 1px #eeeeee; + padding: .2em .25em .15em; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.icon-2x { + font-size: 2em; +} +.icon-2x.icon-border { + border-width: 2px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.icon-3x { + font-size: 3em; +} +.icon-3x.icon-border { + border-width: 3px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} +.icon-4x { + font-size: 4em; +} +.icon-4x.icon-border { + border-width: 4px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} +.pull-right { + float: right; +} +.pull-left { + float: left; +} +[class^="icon-"].pull-left, +[class*=" icon-"].pull-left { + margin-right: .35em; +} +[class^="icon-"].pull-right, +[class*=" icon-"].pull-right { + margin-left: .35em; +} +.btn [class^="icon-"].pull-left.icon-2x, +.btn [class*=" icon-"].pull-left.icon-2x, +.btn [class^="icon-"].pull-right.icon-2x, +.btn [class*=" icon-"].pull-right.icon-2x { + margin-top: .35em; +} +.btn [class^="icon-"].icon-spin.icon-large, +.btn [class*=" icon-"].icon-spin.icon-large { + height: .75em; +} +.btn.btn-small [class^="icon-"].pull-left.icon-2x, +.btn.btn-small [class*=" icon-"].pull-left.icon-2x, +.btn.btn-small [class^="icon-"].pull-right.icon-2x, +.btn.btn-small [class*=" icon-"].pull-right.icon-2x { + margin-top: .45em; +} +.btn.btn-large [class^="icon-"].pull-left.icon-2x, +.btn.btn-large [class*=" icon-"].pull-left.icon-2x, +.btn.btn-large [class^="icon-"].pull-right.icon-2x, +.btn.btn-large [class*=" icon-"].pull-right.icon-2x { + margin-top: .2em; +} +.icon-spin { + display: inline-block; + -moz-animation: spin 2s infinite linear; + -o-animation: spin 2s infinite linear; + -webkit-animation: spin 2s infinite linear; + animation: spin 2s infinite linear; +} +@-moz-keyframes spin { + 0% { -moz-transform: rotate(0deg); } + 100% { -moz-transform: rotate(359deg); } +} +@-webkit-keyframes spin { + 0% { -webkit-transform: rotate(0deg); } + 100% { -webkit-transform: rotate(359deg); } +} +@-o-keyframes spin { + 0% { -o-transform: rotate(0deg); } + 100% { -o-transform: rotate(359deg); } +} +@-ms-keyframes spin { + 0% { -ms-transform: rotate(0deg); } + 100% { -ms-transform: rotate(359deg); } +} +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(359deg); } +} +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ +.icon-glass:before { content: "\f000"; } +.icon-music:before { content: "\f001"; } +.icon-search:before { content: "\f002"; } +.icon-envelope:before { content: "\f003"; } +.icon-heart:before { content: "\f004"; } +.icon-star:before { content: "\f005"; } +.icon-star-empty:before { content: "\f006"; } +.icon-user:before { content: "\f007"; } +.icon-film:before { content: "\f008"; } +.icon-th-large:before { content: "\f009"; } +.icon-th:before { content: "\f00a"; } +.icon-th-list:before { content: "\f00b"; } +.icon-ok:before { content: "\f00c"; } +.icon-remove:before { content: "\f00d"; } +.icon-zoom-in:before { content: "\f00e"; } + +.icon-zoom-out:before { content: "\f010"; } +.icon-off:before { content: "\f011"; } +.icon-signal:before { content: "\f012"; } +.icon-cog:before { content: "\f013"; } +.icon-trash:before { content: "\f014"; } +.icon-home:before { content: "\f015"; } +.icon-file:before { content: "\f016"; } +.icon-time:before { content: "\f017"; } +.icon-road:before { content: "\f018"; } +.icon-download-alt:before { content: "\f019"; } +.icon-download:before { content: "\f01a"; } +.icon-upload:before { content: "\f01b"; } +.icon-inbox:before { content: "\f01c"; } +.icon-play-circle:before { content: "\f01d"; } +.icon-repeat:before { content: "\f01e"; } + +/* \f020 doesn't work in Safari. all shifted one down */ +.icon-refresh:before { content: "\f021"; } +.icon-list-alt:before { content: "\f022"; } +.icon-lock:before { content: "\f023"; } +.icon-flag:before { content: "\f024"; } +.icon-headphones:before { content: "\f025"; } +.icon-volume-off:before { content: "\f026"; } +.icon-volume-down:before { content: "\f027"; } +.icon-volume-up:before { content: "\f028"; } +.icon-qrcode:before { content: "\f029"; } +.icon-barcode:before { content: "\f02a"; } +.icon-tag:before { content: "\f02b"; } +.icon-tags:before { content: "\f02c"; } +.icon-book:before { content: "\f02d"; } +.icon-bookmark:before { content: "\f02e"; } +.icon-print:before { content: "\f02f"; } + +.icon-camera:before { content: "\f030"; } +.icon-font:before { content: "\f031"; } +.icon-bold:before { content: "\f032"; } +.icon-italic:before { content: "\f033"; } +.icon-text-height:before { content: "\f034"; } +.icon-text-width:before { content: "\f035"; } +.icon-align-left:before { content: "\f036"; } +.icon-align-center:before { content: "\f037"; } +.icon-align-right:before { content: "\f038"; } +.icon-align-justify:before { content: "\f039"; } +.icon-list:before { content: "\f03a"; } +.icon-indent-left:before { content: "\f03b"; } +.icon-indent-right:before { content: "\f03c"; } +.icon-facetime-video:before { content: "\f03d"; } +.icon-picture:before { content: "\f03e"; } + +.icon-pencil:before { content: "\f040"; } +.icon-map-marker:before { content: "\f041"; } +.icon-adjust:before { content: "\f042"; } +.icon-tint:before { content: "\f043"; } +.icon-edit:before { content: "\f044"; } +.icon-share:before { content: "\f045"; } +.icon-check:before { content: "\f046"; } +.icon-move:before { content: "\f047"; } +.icon-step-backward:before { content: "\f048"; } +.icon-fast-backward:before { content: "\f049"; } +.icon-backward:before { content: "\f04a"; } +.icon-play:before { content: "\f04b"; } +.icon-pause:before { content: "\f04c"; } +.icon-stop:before { content: "\f04d"; } +.icon-forward:before { content: "\f04e"; } + +.icon-fast-forward:before { content: "\f050"; } +.icon-step-forward:before { content: "\f051"; } +.icon-eject:before { content: "\f052"; } +.icon-chevron-left:before { content: "\f053"; } +.icon-chevron-right:before { content: "\f054"; } +.icon-plus-sign:before { content: "\f055"; } +.icon-minus-sign:before { content: "\f056"; } +.icon-remove-sign:before { content: "\f057"; } +.icon-ok-sign:before { content: "\f058"; } +.icon-question-sign:before { content: "\f059"; } +.icon-info-sign:before { content: "\f05a"; } +.icon-screenshot:before { content: "\f05b"; } +.icon-remove-circle:before { content: "\f05c"; } +.icon-ok-circle:before { content: "\f05d"; } +.icon-ban-circle:before { content: "\f05e"; } + +.icon-arrow-left:before { content: "\f060"; } +.icon-arrow-right:before { content: "\f061"; } +.icon-arrow-up:before { content: "\f062"; } +.icon-arrow-down:before { content: "\f063"; } +.icon-share-alt:before { content: "\f064"; } +.icon-resize-full:before { content: "\f065"; } +.icon-resize-small:before { content: "\f066"; } +.icon-plus:before { content: "\f067"; } +.icon-minus:before { content: "\f068"; } +.icon-asterisk:before { content: "\f069"; } +.icon-exclamation-sign:before { content: "\f06a"; } +.icon-gift:before { content: "\f06b"; } +.icon-leaf:before { content: "\f06c"; } +.icon-fire:before { content: "\f06d"; } +.icon-eye-open:before { content: "\f06e"; } + +.icon-eye-close:before { content: "\f070"; } +.icon-warning-sign:before { content: "\f071"; } +.icon-plane:before { content: "\f072"; } +.icon-calendar:before { content: "\f073"; } +.icon-random:before { content: "\f074"; } +.icon-comment:before { content: "\f075"; } +.icon-magnet:before { content: "\f076"; } +.icon-chevron-up:before { content: "\f077"; } +.icon-chevron-down:before { content: "\f078"; } +.icon-retweet:before { content: "\f079"; } +.icon-shopping-cart:before { content: "\f07a"; } +.icon-folder-close:before { content: "\f07b"; } +.icon-folder-open:before { content: "\f07c"; } +.icon-resize-vertical:before { content: "\f07d"; } +.icon-resize-horizontal:before { content: "\f07e"; } + +.icon-bar-chart:before { content: "\f080"; } +.icon-twitter-sign:before { content: "\f081"; } +.icon-facebook-sign:before { content: "\f082"; } +.icon-camera-retro:before { content: "\f083"; } +.icon-key:before { content: "\f084"; } +.icon-cogs:before { content: "\f085"; } +.icon-comments:before { content: "\f086"; } +.icon-thumbs-up:before { content: "\f087"; } +.icon-thumbs-down:before { content: "\f088"; } +.icon-star-half:before { content: "\f089"; } +.icon-heart-empty:before { content: "\f08a"; } +.icon-signout:before { content: "\f08b"; } +.icon-linkedin-sign:before { content: "\f08c"; } +.icon-pushpin:before { content: "\f08d"; } +.icon-external-link:before { content: "\f08e"; } + +.icon-signin:before { content: "\f090"; } +.icon-trophy:before { content: "\f091"; } +.icon-github-sign:before { content: "\f092"; } +.icon-upload-alt:before { content: "\f093"; } +.icon-lemon:before { content: "\f094"; } +.icon-phone:before { content: "\f095"; } +.icon-check-empty:before { content: "\f096"; } +.icon-bookmark-empty:before { content: "\f097"; } +.icon-phone-sign:before { content: "\f098"; } +.icon-twitter:before { content: "\f099"; } +.icon-facebook:before { content: "\f09a"; } +.icon-github:before { content: "\f09b"; } +.icon-unlock:before { content: "\f09c"; } +.icon-credit-card:before { content: "\f09d"; } +.icon-rss:before { content: "\f09e"; } + +.icon-hdd:before { content: "\f0a0"; } +.icon-bullhorn:before { content: "\f0a1"; } +.icon-bell:before { content: "\f0a2"; } +.icon-certificate:before { content: "\f0a3"; } +.icon-hand-right:before { content: "\f0a4"; } +.icon-hand-left:before { content: "\f0a5"; } +.icon-hand-up:before { content: "\f0a6"; } +.icon-hand-down:before { content: "\f0a7"; } +.icon-circle-arrow-left:before { content: "\f0a8"; } +.icon-circle-arrow-right:before { content: "\f0a9"; } +.icon-circle-arrow-up:before { content: "\f0aa"; } +.icon-circle-arrow-down:before { content: "\f0ab"; } +.icon-globe:before { content: "\f0ac"; } +.icon-wrench:before { content: "\f0ad"; } +.icon-tasks:before { content: "\f0ae"; } + +.icon-filter:before { content: "\f0b0"; } +.icon-briefcase:before { content: "\f0b1"; } +.icon-fullscreen:before { content: "\f0b2"; } + +.icon-group:before { content: "\f0c0"; } +.icon-link:before { content: "\f0c1"; } +.icon-cloud:before { content: "\f0c2"; } +.icon-beaker:before { content: "\f0c3"; } +.icon-cut:before { content: "\f0c4"; } +.icon-copy:before { content: "\f0c5"; } +.icon-paper-clip:before { content: "\f0c6"; } +.icon-save:before { content: "\f0c7"; } +.icon-sign-blank:before { content: "\f0c8"; } +.icon-reorder:before { content: "\f0c9"; } +.icon-list-ul:before { content: "\f0ca"; } +.icon-list-ol:before { content: "\f0cb"; } +.icon-strikethrough:before { content: "\f0cc"; } +.icon-underline:before { content: "\f0cd"; } +.icon-table:before { content: "\f0ce"; } + +.icon-magic:before { content: "\f0d0"; } +.icon-truck:before { content: "\f0d1"; } +.icon-pinterest:before { content: "\f0d2"; } +.icon-pinterest-sign:before { content: "\f0d3"; } +.icon-google-plus-sign:before { content: "\f0d4"; } +.icon-google-plus:before { content: "\f0d5"; } +.icon-money:before { content: "\f0d6"; } +.icon-caret-down:before { content: "\f0d7"; } +.icon-caret-up:before { content: "\f0d8"; } +.icon-caret-left:before { content: "\f0d9"; } +.icon-caret-right:before { content: "\f0da"; } +.icon-columns:before { content: "\f0db"; } +.icon-sort:before { content: "\f0dc"; } +.icon-sort-down:before { content: "\f0dd"; } +.icon-sort-up:before { content: "\f0de"; } + +.icon-envelope-alt:before { content: "\f0e0"; } +.icon-linkedin:before { content: "\f0e1"; } +.icon-undo:before { content: "\f0e2"; } +.icon-legal:before { content: "\f0e3"; } +.icon-dashboard:before { content: "\f0e4"; } +.icon-comment-alt:before { content: "\f0e5"; } +.icon-comments-alt:before { content: "\f0e6"; } +.icon-bolt:before { content: "\f0e7"; } +.icon-sitemap:before { content: "\f0e8"; } +.icon-umbrella:before { content: "\f0e9"; } +.icon-paste:before { content: "\f0ea"; } +.icon-lightbulb:before { content: "\f0eb"; } +.icon-exchange:before { content: "\f0ec"; } +.icon-cloud-download:before { content: "\f0ed"; } +.icon-cloud-upload:before { content: "\f0ee"; } + +.icon-user-md:before { content: "\f0f0"; } +.icon-stethoscope:before { content: "\f0f1"; } +.icon-suitcase:before { content: "\f0f2"; } +.icon-bell-alt:before { content: "\f0f3"; } +.icon-coffee:before { content: "\f0f4"; } +.icon-food:before { content: "\f0f5"; } +.icon-file-alt:before { content: "\f0f6"; } +.icon-building:before { content: "\f0f7"; } +.icon-hospital:before { content: "\f0f8"; } +.icon-ambulance:before { content: "\f0f9"; } +.icon-medkit:before { content: "\f0fa"; } +.icon-fighter-jet:before { content: "\f0fb"; } +.icon-beer:before { content: "\f0fc"; } +.icon-h-sign:before { content: "\f0fd"; } +.icon-plus-sign-alt:before { content: "\f0fe"; } + +.icon-double-angle-left:before { content: "\f100"; } +.icon-double-angle-right:before { content: "\f101"; } +.icon-double-angle-up:before { content: "\f102"; } +.icon-double-angle-down:before { content: "\f103"; } +.icon-angle-left:before { content: "\f104"; } +.icon-angle-right:before { content: "\f105"; } +.icon-angle-up:before { content: "\f106"; } +.icon-angle-down:before { content: "\f107"; } +.icon-desktop:before { content: "\f108"; } +.icon-laptop:before { content: "\f109"; } +.icon-tablet:before { content: "\f10a"; } +.icon-mobile-phone:before { content: "\f10b"; } +.icon-circle-blank:before { content: "\f10c"; } +.icon-quote-left:before { content: "\f10d"; } +.icon-quote-right:before { content: "\f10e"; } + +.icon-spinner:before { content: "\f110"; } +.icon-circle:before { content: "\f111"; } +.icon-reply:before { content: "\f112"; } +.icon-github-alt:before { content: "\f113"; } +.icon-folder-close-alt:before { content: "\f114"; } +.icon-folder-open-alt:before { content: "\f115"; } diff --git a/doc/css/font-awesome.min.css b/doc/css/font-awesome.min.css index 6e9f69b9a..cdc67dcbe 100644 --- a/doc/css/font-awesome.min.css +++ b/doc/css/font-awesome.min.css @@ -1,34 +1,34 @@ -/* Font Awesome 3.0 - the iconic font designed for use with Twitter Bootstrap - ------------------------------------------------------- - The full suite of pictographic icons, examples, and documentation - can be found at: http://fortawesome.github.com/Font-Awesome/ - - License - ------------------------------------------------------- - • The Font Awesome font is licensed under the SIL Open Font License - http://scripts.sil.org/OFL - • Font Awesome CSS, LESS, and SASS files are licensed under the MIT License - - http://opensource.org/licenses/mit-license.html - • The Font Awesome pictograms are licensed under the CC BY 3.0 License - http://creativecommons.org/licenses/by/3.0/ - • Attribution is no longer required in Font Awesome 3.0, but much appreciated: - "Font Awesome by Dave Gandy - http://fortawesome.github.com/Font-Awesome" - - Contact - ------------------------------------------------------- - Email: dave@davegandy.com - Twitter: http://twitter.com/fortaweso_me - Work: Lead Product Designer @ http://kyruus.com - - */ - -@font-face { - font-family:'FontAwesome'; - src:url('../font/fontawesome-webfont.eot'); - src:url('../font/fontawesome-webfont.eot?#iefix') format('embedded-opentype'), - url('../font/fontawesome-webfont.woff') format('woff'), - url('../font/fontawesome-webfont.ttf') format('truetype'); - font-weight:normal; - font-style:normal -} - +/* Font Awesome 3.0 + the iconic font designed for use with Twitter Bootstrap + ------------------------------------------------------- + The full suite of pictographic icons, examples, and documentation + can be found at: http://fortawesome.github.com/Font-Awesome/ + + License + ------------------------------------------------------- + • The Font Awesome font is licensed under the SIL Open Font License - http://scripts.sil.org/OFL + • Font Awesome CSS, LESS, and SASS files are licensed under the MIT License - + http://opensource.org/licenses/mit-license.html + • The Font Awesome pictograms are licensed under the CC BY 3.0 License - http://creativecommons.org/licenses/by/3.0/ + • Attribution is no longer required in Font Awesome 3.0, but much appreciated: + "Font Awesome by Dave Gandy - http://fortawesome.github.com/Font-Awesome" + + Contact + ------------------------------------------------------- + Email: dave@davegandy.com + Twitter: http://twitter.com/fortaweso_me + Work: Lead Product Designer @ http://kyruus.com + + */ + +@font-face { + font-family:'FontAwesome'; + src:url('../font/fontawesome-webfont.eot'); + src:url('../font/fontawesome-webfont.eot?#iefix') format('embedded-opentype'), + url('../font/fontawesome-webfont.woff') format('woff'), + url('../font/fontawesome-webfont.ttf') format('truetype'); + font-weight:normal; + font-style:normal +} + [class^="icon-"],[class*=" icon-"]{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;display:inline;width:auto;height:auto;line-height:normal;vertical-align:baseline;background-image:none!important;background-position:0 0;background-repeat:repeat}[class^="icon-"]:before,[class*=" icon-"]:before{text-decoration:inherit;display:inline-block;speak:none}a [class^="icon-"],a [class*=" icon-"]{display:inline-block}.icon-large:before{vertical-align:-10%;font-size:1.3333333333333333em}.btn [class^="icon-"],.nav [class^="icon-"],.btn [class*=" icon-"],.nav [class*=" icon-"]{display:inline;line-height:.6em}.btn [class^="icon-"].icon-spin,.nav [class^="icon-"].icon-spin,.btn [class*=" icon-"].icon-spin,.nav [class*=" icon-"].icon-spin{display:inline-block}li [class^="icon-"],li [class*=" icon-"]{display:inline-block;width:1.25em;text-align:center}li [class^="icon-"].icon-large,li [class*=" icon-"].icon-large{width:1.5625em}ul.icons{list-style-type:none;text-indent:-0.75em}ul.icons li [class^="icon-"],ul.icons li [class*=" icon-"]{width:.75em}.icon-muted{color:#eee}.icon-border{border:solid 1px #eee;padding:.2em .25em .15em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.icon-2x{font-size:2em}.icon-2x.icon-border{border-width:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.icon-3x{font-size:3em}.icon-3x.icon-border{border-width:3px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.icon-4x{font-size:4em}.icon-4x.icon-border{border-width:4px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.pull-right{float:right}.pull-left{float:left}[class^="icon-"].pull-left,[class*=" icon-"].pull-left{margin-right:.35em}[class^="icon-"].pull-right,[class*=" icon-"].pull-right{margin-left:.35em}.btn [class^="icon-"].pull-left.icon-2x,.btn [class*=" icon-"].pull-left.icon-2x,.btn [class^="icon-"].pull-right.icon-2x,.btn [class*=" icon-"].pull-right.icon-2x{margin-top:.35em}.btn [class^="icon-"].icon-spin.icon-large,.btn [class*=" icon-"].icon-spin.icon-large{height:.75em}.btn.btn-small [class^="icon-"].pull-left.icon-2x,.btn.btn-small [class*=" icon-"].pull-left.icon-2x,.btn.btn-small [class^="icon-"].pull-right.icon-2x,.btn.btn-small [class*=" icon-"].pull-right.icon-2x{margin-top:.45em}.btn.btn-large [class^="icon-"].pull-left.icon-2x,.btn.btn-large [class*=" icon-"].pull-left.icon-2x,.btn.btn-large [class^="icon-"].pull-right.icon-2x,.btn.btn-large [class*=" icon-"].pull-right.icon-2x{margin-top:.2em}.icon-spin{display:inline-block;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.icon-glass:before{content:"\f000"}.icon-music:before{content:"\f001"}.icon-search:before{content:"\f002"}.icon-envelope:before{content:"\f003"}.icon-heart:before{content:"\f004"}.icon-star:before{content:"\f005"}.icon-star-empty:before{content:"\f006"}.icon-user:before{content:"\f007"}.icon-film:before{content:"\f008"}.icon-th-large:before{content:"\f009"}.icon-th:before{content:"\f00a"}.icon-th-list:before{content:"\f00b"}.icon-ok:before{content:"\f00c"}.icon-remove:before{content:"\f00d"}.icon-zoom-in:before{content:"\f00e"}.icon-zoom-out:before{content:"\f010"}.icon-off:before{content:"\f011"}.icon-signal:before{content:"\f012"}.icon-cog:before{content:"\f013"}.icon-trash:before{content:"\f014"}.icon-home:before{content:"\f015"}.icon-file:before{content:"\f016"}.icon-time:before{content:"\f017"}.icon-road:before{content:"\f018"}.icon-download-alt:before{content:"\f019"}.icon-download:before{content:"\f01a"}.icon-upload:before{content:"\f01b"}.icon-inbox:before{content:"\f01c"}.icon-play-circle:before{content:"\f01d"}.icon-repeat:before{content:"\f01e"}.icon-refresh:before{content:"\f021"}.icon-list-alt:before{content:"\f022"}.icon-lock:before{content:"\f023"}.icon-flag:before{content:"\f024"}.icon-headphones:before{content:"\f025"}.icon-volume-off:before{content:"\f026"}.icon-volume-down:before{content:"\f027"}.icon-volume-up:before{content:"\f028"}.icon-qrcode:before{content:"\f029"}.icon-barcode:before{content:"\f02a"}.icon-tag:before{content:"\f02b"}.icon-tags:before{content:"\f02c"}.icon-book:before{content:"\f02d"}.icon-bookmark:before{content:"\f02e"}.icon-print:before{content:"\f02f"}.icon-camera:before{content:"\f030"}.icon-font:before{content:"\f031"}.icon-bold:before{content:"\f032"}.icon-italic:before{content:"\f033"}.icon-text-height:before{content:"\f034"}.icon-text-width:before{content:"\f035"}.icon-align-left:before{content:"\f036"}.icon-align-center:before{content:"\f037"}.icon-align-right:before{content:"\f038"}.icon-align-justify:before{content:"\f039"}.icon-list:before{content:"\f03a"}.icon-indent-left:before{content:"\f03b"}.icon-indent-right:before{content:"\f03c"}.icon-facetime-video:before{content:"\f03d"}.icon-picture:before{content:"\f03e"}.icon-pencil:before{content:"\f040"}.icon-map-marker:before{content:"\f041"}.icon-adjust:before{content:"\f042"}.icon-tint:before{content:"\f043"}.icon-edit:before{content:"\f044"}.icon-share:before{content:"\f045"}.icon-check:before{content:"\f046"}.icon-move:before{content:"\f047"}.icon-step-backward:before{content:"\f048"}.icon-fast-backward:before{content:"\f049"}.icon-backward:before{content:"\f04a"}.icon-play:before{content:"\f04b"}.icon-pause:before{content:"\f04c"}.icon-stop:before{content:"\f04d"}.icon-forward:before{content:"\f04e"}.icon-fast-forward:before{content:"\f050"}.icon-step-forward:before{content:"\f051"}.icon-eject:before{content:"\f052"}.icon-chevron-left:before{content:"\f053"}.icon-chevron-right:before{content:"\f054"}.icon-plus-sign:before{content:"\f055"}.icon-minus-sign:before{content:"\f056"}.icon-remove-sign:before{content:"\f057"}.icon-ok-sign:before{content:"\f058"}.icon-question-sign:before{content:"\f059"}.icon-info-sign:before{content:"\f05a"}.icon-screenshot:before{content:"\f05b"}.icon-remove-circle:before{content:"\f05c"}.icon-ok-circle:before{content:"\f05d"}.icon-ban-circle:before{content:"\f05e"}.icon-arrow-left:before{content:"\f060"}.icon-arrow-right:before{content:"\f061"}.icon-arrow-up:before{content:"\f062"}.icon-arrow-down:before{content:"\f063"}.icon-share-alt:before{content:"\f064"}.icon-resize-full:before{content:"\f065"}.icon-resize-small:before{content:"\f066"}.icon-plus:before{content:"\f067"}.icon-minus:before{content:"\f068"}.icon-asterisk:before{content:"\f069"}.icon-exclamation-sign:before{content:"\f06a"}.icon-gift:before{content:"\f06b"}.icon-leaf:before{content:"\f06c"}.icon-fire:before{content:"\f06d"}.icon-eye-open:before{content:"\f06e"}.icon-eye-close:before{content:"\f070"}.icon-warning-sign:before{content:"\f071"}.icon-plane:before{content:"\f072"}.icon-calendar:before{content:"\f073"}.icon-random:before{content:"\f074"}.icon-comment:before{content:"\f075"}.icon-magnet:before{content:"\f076"}.icon-chevron-up:before{content:"\f077"}.icon-chevron-down:before{content:"\f078"}.icon-retweet:before{content:"\f079"}.icon-shopping-cart:before{content:"\f07a"}.icon-folder-close:before{content:"\f07b"}.icon-folder-open:before{content:"\f07c"}.icon-resize-vertical:before{content:"\f07d"}.icon-resize-horizontal:before{content:"\f07e"}.icon-bar-chart:before{content:"\f080"}.icon-twitter-sign:before{content:"\f081"}.icon-facebook-sign:before{content:"\f082"}.icon-camera-retro:before{content:"\f083"}.icon-key:before{content:"\f084"}.icon-cogs:before{content:"\f085"}.icon-comments:before{content:"\f086"}.icon-thumbs-up:before{content:"\f087"}.icon-thumbs-down:before{content:"\f088"}.icon-star-half:before{content:"\f089"}.icon-heart-empty:before{content:"\f08a"}.icon-signout:before{content:"\f08b"}.icon-linkedin-sign:before{content:"\f08c"}.icon-pushpin:before{content:"\f08d"}.icon-external-link:before{content:"\f08e"}.icon-signin:before{content:"\f090"}.icon-trophy:before{content:"\f091"}.icon-github-sign:before{content:"\f092"}.icon-upload-alt:before{content:"\f093"}.icon-lemon:before{content:"\f094"}.icon-phone:before{content:"\f095"}.icon-check-empty:before{content:"\f096"}.icon-bookmark-empty:before{content:"\f097"}.icon-phone-sign:before{content:"\f098"}.icon-twitter:before{content:"\f099"}.icon-facebook:before{content:"\f09a"}.icon-github:before{content:"\f09b"}.icon-unlock:before{content:"\f09c"}.icon-credit-card:before{content:"\f09d"}.icon-rss:before{content:"\f09e"}.icon-hdd:before{content:"\f0a0"}.icon-bullhorn:before{content:"\f0a1"}.icon-bell:before{content:"\f0a2"}.icon-certificate:before{content:"\f0a3"}.icon-hand-right:before{content:"\f0a4"}.icon-hand-left:before{content:"\f0a5"}.icon-hand-up:before{content:"\f0a6"}.icon-hand-down:before{content:"\f0a7"}.icon-circle-arrow-left:before{content:"\f0a8"}.icon-circle-arrow-right:before{content:"\f0a9"}.icon-circle-arrow-up:before{content:"\f0aa"}.icon-circle-arrow-down:before{content:"\f0ab"}.icon-globe:before{content:"\f0ac"}.icon-wrench:before{content:"\f0ad"}.icon-tasks:before{content:"\f0ae"}.icon-filter:before{content:"\f0b0"}.icon-briefcase:before{content:"\f0b1"}.icon-fullscreen:before{content:"\f0b2"}.icon-group:before{content:"\f0c0"}.icon-link:before{content:"\f0c1"}.icon-cloud:before{content:"\f0c2"}.icon-beaker:before{content:"\f0c3"}.icon-cut:before{content:"\f0c4"}.icon-copy:before{content:"\f0c5"}.icon-paper-clip:before{content:"\f0c6"}.icon-save:before{content:"\f0c7"}.icon-sign-blank:before{content:"\f0c8"}.icon-reorder:before{content:"\f0c9"}.icon-list-ul:before{content:"\f0ca"}.icon-list-ol:before{content:"\f0cb"}.icon-strikethrough:before{content:"\f0cc"}.icon-underline:before{content:"\f0cd"}.icon-table:before{content:"\f0ce"}.icon-magic:before{content:"\f0d0"}.icon-truck:before{content:"\f0d1"}.icon-pinterest:before{content:"\f0d2"}.icon-pinterest-sign:before{content:"\f0d3"}.icon-google-plus-sign:before{content:"\f0d4"}.icon-google-plus:before{content:"\f0d5"}.icon-money:before{content:"\f0d6"}.icon-caret-down:before{content:"\f0d7"}.icon-caret-up:before{content:"\f0d8"}.icon-caret-left:before{content:"\f0d9"}.icon-caret-right:before{content:"\f0da"}.icon-columns:before{content:"\f0db"}.icon-sort:before{content:"\f0dc"}.icon-sort-down:before{content:"\f0dd"}.icon-sort-up:before{content:"\f0de"}.icon-envelope-alt:before{content:"\f0e0"}.icon-linkedin:before{content:"\f0e1"}.icon-undo:before{content:"\f0e2"}.icon-legal:before{content:"\f0e3"}.icon-dashboard:before{content:"\f0e4"}.icon-comment-alt:before{content:"\f0e5"}.icon-comments-alt:before{content:"\f0e6"}.icon-bolt:before{content:"\f0e7"}.icon-sitemap:before{content:"\f0e8"}.icon-umbrella:before{content:"\f0e9"}.icon-paste:before{content:"\f0ea"}.icon-lightbulb:before{content:"\f0eb"}.icon-exchange:before{content:"\f0ec"}.icon-cloud-download:before{content:"\f0ed"}.icon-cloud-upload:before{content:"\f0ee"}.icon-user-md:before{content:"\f0f0"}.icon-stethoscope:before{content:"\f0f1"}.icon-suitcase:before{content:"\f0f2"}.icon-bell-alt:before{content:"\f0f3"}.icon-coffee:before{content:"\f0f4"}.icon-food:before{content:"\f0f5"}.icon-file-alt:before{content:"\f0f6"}.icon-building:before{content:"\f0f7"}.icon-hospital:before{content:"\f0f8"}.icon-ambulance:before{content:"\f0f9"}.icon-medkit:before{content:"\f0fa"}.icon-fighter-jet:before{content:"\f0fb"}.icon-beer:before{content:"\f0fc"}.icon-h-sign:before{content:"\f0fd"}.icon-plus-sign-alt:before{content:"\f0fe"}.icon-double-angle-left:before{content:"\f100"}.icon-double-angle-right:before{content:"\f101"}.icon-double-angle-up:before{content:"\f102"}.icon-double-angle-down:before{content:"\f103"}.icon-angle-left:before{content:"\f104"}.icon-angle-right:before{content:"\f105"}.icon-angle-up:before{content:"\f106"}.icon-angle-down:before{content:"\f107"}.icon-desktop:before{content:"\f108"}.icon-laptop:before{content:"\f109"}.icon-tablet:before{content:"\f10a"}.icon-mobile-phone:before{content:"\f10b"}.icon-circle-blank:before{content:"\f10c"}.icon-quote-left:before{content:"\f10d"}.icon-quote-right:before{content:"\f10e"}.icon-spinner:before{content:"\f110"}.icon-circle:before{content:"\f111"}.icon-reply:before{content:"\f112"}.icon-github-alt:before{content:"\f113"}.icon-folder-close-alt:before{content:"\f114"}.icon-folder-open-alt:before{content:"\f115"} \ No newline at end of file diff --git a/doc/css/theme.css b/doc/css/theme.css index 325ad8907..de13177a5 100644 --- a/doc/css/theme.css +++ b/doc/css/theme.css @@ -1,115 +1,115 @@ -body{color:#666;font-family:'Open Sans',Arial,sans-serif}body a{color:#2db2ea}h1,h2,h3,h4,h5,h6{color:#2f353e;font-weight:300}h1{font-weight:bold}ul{margin-left:0}ul li{list-style:none}.centered{text-align:center}.decorative-shadow{-webkit-box-shadow:0 0 0 4px rgba(0,0,0,0.2);-moz-box-shadow:0 0 0 4px rgba(0,0,0,0.2);box-shadow:0 0 0 4px rgba(0,0,0,0.2)}.teaser{height:200px;margin-top:-10px;background:url(../assets/slide-01.jpg);-webkit-background-size:cover;-moz-background-size:cover;background-size:cover}.teaser h1{margin-top:110px;color:#fff;text-shadow:0 0 5px #000}.middle-bar{width:auto;min-width:100%;height:auto;margin-bottom:25px;padding-top:10px;padding-bottom:10px;text-align:center;border-top:1px solid black;border-bottom:1px solid black;background:#222}.middle-bar h2{color:#fff}.middle-bar .btn{margin-left:15px}article h2 a{color:#000}article h2 a:hover{color:#2db2ea;text-decoration:none}article h2 a:hover:hover:after{float:right;font-family:"FontAwesome";content:"\f064"}.navbar-wrapper{position:absolute;top:0;left:0;right:0;z-index:10;margin-bottom:-90px}.navbar .navbar-inner{background-color:#000;background-image:none;border:0;-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;-webkit-box-shadow:0 0 0 4px rgba(0,0,0,0.2);-moz-box-shadow:0 0 0 4px rgba(0,0,0,0.2);box-shadow:0 0 0 4px rgba(0,0,0,0.2)}.navbar .brand{padding:14px 20px 16px;font-size:16px;font-weight:bold;text-shadow:0}.navbar .nav>li>a{padding:15px 20px}.navbar .btn-navbar{margin-top:7px}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{background-color:#2db2ea;color:#fff}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#fff;background-color:#2db2ea;box-shadow:none}.navbar .nav li.dropdown>.dropdown-toggle .caret,.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff}.navbar .nav>li>.dropdown-menu::before,.navbar .nav>li>.dropdown-menu::after{display:none}.carousel{margin-bottom:0}.carousel .item{height:500px}.carousel .item>img{position:absolute;top:0;left:0;min-width:100%;height:500px}.carousel .item .container{position:relative;text-align:center;z-index:9}.carousel-caption{background-color:transparent;position:static;max-width:1100px;padding:0 20px;margin-top:150px;margin-left:auto;margin-right:auto}.carousel-caption h1{font-size:60px;font-weight:800}.carousel-caption h1,.carousel-caption .lead{margin:0;margin-bottom:30px;line-height:1.25;color:#fff;text-shadow:0 0 5px #000}.carousel-caption .btn{-webkit-box-shadow:0 0 0 4px rgba(0,0,0,0.2);-moz-box-shadow:0 0 0 4px rgba(0,0,0,0.2);box-shadow:0 0 0 4px rgba(0,0,0,0.2)}.carousel-control{height:80px;margin-top:0;font-size:120px;text-shadow:0 1px 1px rgba(0,0,0,0.5);background-color:transparent;border:0;z-index:9}.btn{background-color:none;background-image:none;background:#5d6468;color:#fff;cursor:pointer;text-shadow:0 -1px 0 #2d3032;border:1px solid #51575a;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;-webkit-box-shadow:inset 0 0 0 rgba(0,0,0,0);-moz-box-shadow:inset 0 0 0 rgba(0,0,0,0);box-shadow:inset 0 0 0 rgba(0,0,0,0)}.btn:hover{color:#fff;background:#757d83;-webkit-transition:all .3s ease-in-out;-moz-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out;border-color:#5d6468}.btn.btn-primary{background:#2db2ea;text-shadow:0 -1px 0 #1076a1;border:1px solid #17a9e6}.btn.btn-primary:hover{background:#44baec;border:1px solid #2db2ea}footer{margin-top:30px;margin-bottom:0;padding-top:15px;color:#aaa;border-top:5px solid #212325;background:#2d3032}footer h1,footer h2,footer h3,footer h4,footer h5,footer h6{color:#fff;font-size:14px}footer a{color:#2db2ea;border-bottom:1px dotted #aaa}footer a:hover{color:#fff;text-decoration:none}footer .footer-bottom{width:auto;padding:20px;background:#212325}footer .footer-bottom p{margin:0}footer hr{border-top:0;border-bottom:1px solid #454a4d}.well{border-color:#ccc;background-color:#f5f6f6;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#f5f6f6),color-stop(100% #e0e0e0));background-image:-webkit-linear-gradient(top,#f5f6f6 0,#e0e0e0 100%);background-image:-moz-linear-gradient(top,#f5f6f6 0,#e0e0e0 100%);background-image:-ms-linear-gradient(top,#f5f6f6 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#f5f6f6 0,#e0e0e0 100%);background-image:linear-gradient(top,#f5f6f6 0,#e0e0e0 100%);box-shadow:inset 0 0 0 rgba(0,0,0,0);box-shadow:0 2px 5px 1px rgba(0,0,0,0.1)}.well input{margin-bottom:5px}.ribbon-left:before{content:"";float:left;border:24px solid #212325}.ribbon-left:before{border-left-color:transparent}.ribbon-left h2{margin-right:5px;line-height:48px;color:#fff;background:#212325;overflow:hidden}.ribbon-right:before{content:"";float:right;border:24px solid #2db2ea}.ribbon-right:before{border-right-color:transparent}.ribbon-right h2{padding-left:10px;line-height:48px;color:#fff;background:#2db2ea;overflow:hidden}.tag-cloud{margin-left:0;padding:0;list-style:none}.tag-cloud li{display:inline-block;margin-bottom:15px;position:relative}.tag-cloud a{padding:4px 10px;border:0;background:#454a4d;color:#fff;text-decoration:none;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.tag-cloud a:hover{background:#2db2ea}@media(min-width:979px) and (max-width:1200px){.tour-image{max-width:400px}}@media(max-width:979px){.navbar-wrapper{top:20px}.container.navbar-wrapper{margin-bottom:0;width:auto}.navbar-inner{border-radius:0;margin:-20px 0}.navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#fff;font-weight:normal}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:hover{background-color:#2db2ea;color:#fff}.carousel .item,.carousel img{height:450px}.tour-image{display:block;float:none;max-width:50%;margin:0 auto}}@media(max-width:767px){.navbar .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.carousel{margin-left:-20px;margin-right:-20px}.carousel .item,.carousel img{height:330px}.carousel-caption{padding:0 70px;margin-top:100px;text-align:center}.carousel-caption h1{font-size:30px}.carousel-caption .lead,.carousel-caption .btn{font-size:18px}.teaser,.middle-bar,footer,.footer-bottom{margin-left:-20px;margin-right:-20px;padding-left:20px;padding-right:20px}} -.uplist ul -{ - display: none; -} -.bs-docs-sidenav { - background-color: #FFFFFF; - border-radius: 6px; - box-shadow: 0px 1px 4px rgba(0, 0, 0, 0.063); - margin: 30px 0px 0px; - padding: 0px; -} - -.bs-docs-sidenav > li:first-child > a { - border-radius: 6px 6px 0px 0px; -} -.bs-docs-sidenav > .active > a { - border: 0px none currentColor; - box-shadow: inset 1px 0px 0px rgba(0, 0, 0, 0.102), inset -1px 0px 0px rgba(0, 0, 0, 0.102); - padding: 9px 15px; - position: relative; - text-shadow: 0px 1px 0px rgba(0, 0, 0, 0.149); - z-index: 2; -} - -.bs-docs-sidenav > li > a { - border: 1px solid #E5E5E5; - background-color: #EEEEEE; - display: block; - margin: 0px 0px -1px; - padding: 8px 14px; -} - -.bs-docs-sidenav > li > ul > li > a{ - border: 1px solid #E5E5E5; - display: block; - margin: 0px 0px -1px; - padding: 8px 14px 8px 25px; - -} - -.fixed-bar -{ - background: white; - width: 100%; -} - -#tab1 -{ - padding-top: 70px; -} -#contents -{ - padding-right: 15px; - padding-bottom: 50px; -} -#contents.affix { - height: 80%; - overflow-y: scroll; - top: 0; -} -@media (max-width: 767px) { - #contents.affix { - position: static; - width: auto; - top: 0; - overflow: visible; - } -} -section -{ - margin-bottom: 40px; - padding-bottom: 40px; - border-bottom: 1px solid grey; -} - -.table th -{ - background-color: #EEEEEE; -} - -.bs-docs-sidenav .icon-chevron-right { - float: right; - margin-right: -6px; - margin-top: 5px; - opacity: 1; -} - -#contents li > a -{ - font-size: 13px; -} - -@media (max-width: 480px) { - #contents li > a - { - font-size: 11px; - } -} -.middle-bar -{ - margin: 0; -} -.navbar .navbar-inner -{ - border: none; - padding: 0; - min-height: 0; -} -.middle-bar .brand -{ - margin-left: 20px; - margin-top: -5px; - line-height: 40px; +body{color:#666;font-family:'Open Sans',Arial,sans-serif}body a{color:#2db2ea}h1,h2,h3,h4,h5,h6{color:#2f353e;font-weight:300}h1{font-weight:bold}ul{margin-left:0}ul li{list-style:none}.centered{text-align:center}.decorative-shadow{-webkit-box-shadow:0 0 0 4px rgba(0,0,0,0.2);-moz-box-shadow:0 0 0 4px rgba(0,0,0,0.2);box-shadow:0 0 0 4px rgba(0,0,0,0.2)}.teaser{height:200px;margin-top:-10px;background:url(../assets/slide-01.jpg);-webkit-background-size:cover;-moz-background-size:cover;background-size:cover}.teaser h1{margin-top:110px;color:#fff;text-shadow:0 0 5px #000}.middle-bar{width:auto;min-width:100%;height:auto;margin-bottom:25px;padding-top:10px;padding-bottom:10px;text-align:center;border-top:1px solid black;border-bottom:1px solid black;background:#222}.middle-bar h2{color:#fff}.middle-bar .btn{margin-left:15px}article h2 a{color:#000}article h2 a:hover{color:#2db2ea;text-decoration:none}article h2 a:hover:hover:after{float:right;font-family:"FontAwesome";content:"\f064"}.navbar-wrapper{position:absolute;top:0;left:0;right:0;z-index:10;margin-bottom:-90px}.navbar .navbar-inner{background-color:#000;background-image:none;border:0;-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;-webkit-box-shadow:0 0 0 4px rgba(0,0,0,0.2);-moz-box-shadow:0 0 0 4px rgba(0,0,0,0.2);box-shadow:0 0 0 4px rgba(0,0,0,0.2)}.navbar .brand{padding:14px 20px 16px;font-size:16px;font-weight:bold;text-shadow:0}.navbar .nav>li>a{padding:15px 20px}.navbar .btn-navbar{margin-top:7px}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{background-color:#2db2ea;color:#fff}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#fff;background-color:#2db2ea;box-shadow:none}.navbar .nav li.dropdown>.dropdown-toggle .caret,.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff}.navbar .nav>li>.dropdown-menu::before,.navbar .nav>li>.dropdown-menu::after{display:none}.carousel{margin-bottom:0}.carousel .item{height:500px}.carousel .item>img{position:absolute;top:0;left:0;min-width:100%;height:500px}.carousel .item .container{position:relative;text-align:center;z-index:9}.carousel-caption{background-color:transparent;position:static;max-width:1100px;padding:0 20px;margin-top:150px;margin-left:auto;margin-right:auto}.carousel-caption h1{font-size:60px;font-weight:800}.carousel-caption h1,.carousel-caption .lead{margin:0;margin-bottom:30px;line-height:1.25;color:#fff;text-shadow:0 0 5px #000}.carousel-caption .btn{-webkit-box-shadow:0 0 0 4px rgba(0,0,0,0.2);-moz-box-shadow:0 0 0 4px rgba(0,0,0,0.2);box-shadow:0 0 0 4px rgba(0,0,0,0.2)}.carousel-control{height:80px;margin-top:0;font-size:120px;text-shadow:0 1px 1px rgba(0,0,0,0.5);background-color:transparent;border:0;z-index:9}.btn{background-color:none;background-image:none;background:#5d6468;color:#fff;cursor:pointer;text-shadow:0 -1px 0 #2d3032;border:1px solid #51575a;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;-webkit-box-shadow:inset 0 0 0 rgba(0,0,0,0);-moz-box-shadow:inset 0 0 0 rgba(0,0,0,0);box-shadow:inset 0 0 0 rgba(0,0,0,0)}.btn:hover{color:#fff;background:#757d83;-webkit-transition:all .3s ease-in-out;-moz-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out;border-color:#5d6468}.btn.btn-primary{background:#2db2ea;text-shadow:0 -1px 0 #1076a1;border:1px solid #17a9e6}.btn.btn-primary:hover{background:#44baec;border:1px solid #2db2ea}footer{margin-top:30px;margin-bottom:0;padding-top:15px;color:#aaa;border-top:5px solid #212325;background:#2d3032}footer h1,footer h2,footer h3,footer h4,footer h5,footer h6{color:#fff;font-size:14px}footer a{color:#2db2ea;border-bottom:1px dotted #aaa}footer a:hover{color:#fff;text-decoration:none}footer .footer-bottom{width:auto;padding:20px;background:#212325}footer .footer-bottom p{margin:0}footer hr{border-top:0;border-bottom:1px solid #454a4d}.well{border-color:#ccc;background-color:#f5f6f6;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#f5f6f6),color-stop(100% #e0e0e0));background-image:-webkit-linear-gradient(top,#f5f6f6 0,#e0e0e0 100%);background-image:-moz-linear-gradient(top,#f5f6f6 0,#e0e0e0 100%);background-image:-ms-linear-gradient(top,#f5f6f6 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#f5f6f6 0,#e0e0e0 100%);background-image:linear-gradient(top,#f5f6f6 0,#e0e0e0 100%);box-shadow:inset 0 0 0 rgba(0,0,0,0);box-shadow:0 2px 5px 1px rgba(0,0,0,0.1)}.well input{margin-bottom:5px}.ribbon-left:before{content:"";float:left;border:24px solid #212325}.ribbon-left:before{border-left-color:transparent}.ribbon-left h2{margin-right:5px;line-height:48px;color:#fff;background:#212325;overflow:hidden}.ribbon-right:before{content:"";float:right;border:24px solid #2db2ea}.ribbon-right:before{border-right-color:transparent}.ribbon-right h2{padding-left:10px;line-height:48px;color:#fff;background:#2db2ea;overflow:hidden}.tag-cloud{margin-left:0;padding:0;list-style:none}.tag-cloud li{display:inline-block;margin-bottom:15px;position:relative}.tag-cloud a{padding:4px 10px;border:0;background:#454a4d;color:#fff;text-decoration:none;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.tag-cloud a:hover{background:#2db2ea}@media(min-width:979px) and (max-width:1200px){.tour-image{max-width:400px}}@media(max-width:979px){.navbar-wrapper{top:20px}.container.navbar-wrapper{margin-bottom:0;width:auto}.navbar-inner{border-radius:0;margin:-20px 0}.navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#fff;font-weight:normal}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:hover{background-color:#2db2ea;color:#fff}.carousel .item,.carousel img{height:450px}.tour-image{display:block;float:none;max-width:50%;margin:0 auto}}@media(max-width:767px){.navbar .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.carousel{margin-left:-20px;margin-right:-20px}.carousel .item,.carousel img{height:330px}.carousel-caption{padding:0 70px;margin-top:100px;text-align:center}.carousel-caption h1{font-size:30px}.carousel-caption .lead,.carousel-caption .btn{font-size:18px}.teaser,.middle-bar,footer,.footer-bottom{margin-left:-20px;margin-right:-20px;padding-left:20px;padding-right:20px}} +.uplist ul +{ + display: none; +} +.bs-docs-sidenav { + background-color: #FFFFFF; + border-radius: 6px; + box-shadow: 0px 1px 4px rgba(0, 0, 0, 0.063); + margin: 30px 0px 0px; + padding: 0px; +} + +.bs-docs-sidenav > li:first-child > a { + border-radius: 6px 6px 0px 0px; +} +.bs-docs-sidenav > .active > a { + border: 0px none currentColor; + box-shadow: inset 1px 0px 0px rgba(0, 0, 0, 0.102), inset -1px 0px 0px rgba(0, 0, 0, 0.102); + padding: 9px 15px; + position: relative; + text-shadow: 0px 1px 0px rgba(0, 0, 0, 0.149); + z-index: 2; +} + +.bs-docs-sidenav > li > a { + border: 1px solid #E5E5E5; + background-color: #EEEEEE; + display: block; + margin: 0px 0px -1px; + padding: 8px 14px; +} + +.bs-docs-sidenav > li > ul > li > a{ + border: 1px solid #E5E5E5; + display: block; + margin: 0px 0px -1px; + padding: 8px 14px 8px 25px; + +} + +.fixed-bar +{ + background: white; + width: 100%; +} + +#tab1 +{ + padding-top: 70px; +} +#contents +{ + padding-right: 15px; + padding-bottom: 50px; +} +#contents.affix { + height: 80%; + overflow-y: scroll; + top: 0; +} +@media (max-width: 767px) { + #contents.affix { + position: static; + width: auto; + top: 0; + overflow: visible; + } +} +section +{ + margin-bottom: 40px; + padding-bottom: 40px; + border-bottom: 1px solid grey; +} + +.table th +{ + background-color: #EEEEEE; +} + +.bs-docs-sidenav .icon-chevron-right { + float: right; + margin-right: -6px; + margin-top: 5px; + opacity: 1; +} + +#contents li > a +{ + font-size: 13px; +} + +@media (max-width: 480px) { + #contents li > a + { + font-size: 11px; + } +} +.middle-bar +{ + margin: 0; +} +.navbar .navbar-inner +{ + border: none; + padding: 0; + min-height: 0; +} +.middle-bar .brand +{ + margin-left: 20px; + margin-top: -5px; + line-height: 40px; } \ No newline at end of file diff --git a/doc/deployment.html b/doc/deployment.html index fb2538141..cc1187251 100644 --- a/doc/deployment.html +++ b/doc/deployment.html @@ -1,202 +1,202 @@ - - - - - Gideros Documentation - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
- -

Deployment

- -
-
-

This document will discuss the build and deployment processes of Gideros Player -and your application to devices.

-

For IOS devices, you must be an approved Apple Developer for iOS and install the -iOS SDK (requires Intel-based Mac running Snow Leopard).

-

For Android devices you'll need Android SDK and Eclipse or other Android project compatible IDE.

- -

Gideros Player for devices allows you to see and test your application on device -instantly. After you deploy and open Gideros Player on your device, -you see the IP of your device. Enter this IP from “Player→Player Settings” menu:

- -

Player Settings

- -

When you press start button, your codes and asset files are transferred to -your iOS device via WiFi and your application starts.

-
-
-

Deploy Gideros Player to Devices

-

For IOS

-

There is a universal project GiderosiOSPlayer.zip, which -comes with the installation. You need to extract this zip file and -open, build, deploy this project from Xcode.

-

For Android

-

There is a ready to use application for Android development GiderosAndroidPlayer.apk which comes with the installation. You can install it directly on your usin USB data transfer cable, or memory card on your phone, or uploading it to a server (as dropbox) and accessing it from there.

-
- -
-

Deploy Your Application to iOS Devices

- -

To deploy your application to iPhone/iPad you need to:

- -
    -
  1. Export your application as Xcode project
  2. -
  3. Build and deploy Xcode project to actual device
  4. -
- -

For the second step, you need Intel-based Mac running Snow Leopard and -Apple Developer License.

- -

To deploy your application to Android you need to:

- -
    -
  1. Export your application as Android project
  2. -
  3. Import exported project into Eclipse
  4. -
  5. Run project from Eclipse
  6. -
- -

First step is done through “File→Export Project” menu:

- -

Export Project

- -
-
-

Similar to how you can deploy players on devices, you can also build a custom player, with built in plugins for specific platforms.

-

For example, if you have an Ad framework plugin for Android, you simply build Gideros Android player with this plugin and deploy it to device, to test it as you would with normal Android device player.

-

To deploy custom player with plugins to Android

-
    -
  1. Export your Gideros project as Android project
  2. -
  3. Add plugin as described in your specific plugin installation instruction
  4. -
  5. In your exported project, inside assets folder there is another assets folder, simply delete it, leaving upper assets folder empty
  6. -
  7. Build this project to run on your device
  8. -
  9. You now have Gideros Android player which behaves exactly the same as normal player, but has the functionalities of applied plugin
  10. -
-

To deploy custom player with plugins to IOS

-
    -
  1. Export your Gideros project as IOS project
  2. -
  3. Add plugin as described in your specific plugin installation instruction
  4. -
  5. In your exported project, open AppDelegate.m file
  6. -
  7. Change gdr_initialize(..., false) to gdr_initialize(..., true)
  8. -
  9. You now have Gideros IOS player which behaves exactly the same as normal player, but has the functionalities of applied plugin
  10. -
-
-
-
-
- -
- - - - -
- -
- - - - - - - - - - - - - - - - + + + + + Gideros Documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +

Deployment

+ +
+
+

This document will discuss the build and deployment processes of Gideros Player +and your application to devices.

+

For IOS devices, you must be an approved Apple Developer for iOS and install the +iOS SDK (requires Intel-based Mac running Snow Leopard).

+

For Android devices you'll need Android SDK and Eclipse or other Android project compatible IDE.

+ +

Gideros Player for devices allows you to see and test your application on device +instantly. After you deploy and open Gideros Player on your device, +you see the IP of your device. Enter this IP from “Player→Player Settings” menu:

+ +

Player Settings

+ +

When you press start button, your codes and asset files are transferred to +your iOS device via WiFi and your application starts.

+
+
+

Deploy Gideros Player to Devices

+

For IOS

+

There is a universal project GiderosiOSPlayer.zip, which +comes with the installation. You need to extract this zip file and +open, build, deploy this project from Xcode.

+

For Android

+

There is a ready to use application for Android development GiderosAndroidPlayer.apk which comes with the installation. You can install it directly on your usin USB data transfer cable, or memory card on your phone, or uploading it to a server (as dropbox) and accessing it from there.

+
+ +
+

Deploy Your Application to iOS Devices

+ +

To deploy your application to iPhone/iPad you need to:

+ +
    +
  1. Export your application as Xcode project
  2. +
  3. Build and deploy Xcode project to actual device
  4. +
+ +

For the second step, you need Intel-based Mac running Snow Leopard and +Apple Developer License.

+ +

To deploy your application to Android you need to:

+ +
    +
  1. Export your application as Android project
  2. +
  3. Import exported project into Eclipse
  4. +
  5. Run project from Eclipse
  6. +
+ +

First step is done through “File→Export Project” menu:

+ +

Export Project

+ +
+
+

Similar to how you can deploy players on devices, you can also build a custom player, with built in plugins for specific platforms.

+

For example, if you have an Ad framework plugin for Android, you simply build Gideros Android player with this plugin and deploy it to device, to test it as you would with normal Android device player.

+

To deploy custom player with plugins to Android

+
    +
  1. Export your Gideros project as Android project
  2. +
  3. Add plugin as described in your specific plugin installation instruction
  4. +
  5. In your exported project, inside assets folder there is another assets folder, simply delete it, leaving upper assets folder empty
  6. +
  7. Build this project to run on your device
  8. +
  9. You now have Gideros Android player which behaves exactly the same as normal player, but has the functionalities of applied plugin
  10. +
+

To deploy custom player with plugins to IOS

+
    +
  1. Export your Gideros project as IOS project
  2. +
  3. Add plugin as described in your specific plugin installation instruction
  4. +
  5. In your exported project, open AppDelegate.m file
  6. +
  7. Change gdr_initialize(..., false) to gdr_initialize(..., true)
  8. +
  9. You now have Gideros IOS player which behaves exactly the same as normal player, but has the functionalities of applied plugin
  10. +
+
+
+
+
+ +
+ + + + +
+ +
+ + + + + + + + + + + + + + + + diff --git a/doc/design/all.html b/doc/design/all.html index a1a0f2cb0..cbd44854e 100644 --- a/doc/design/all.html +++ b/doc/design/all.html @@ -1,126 +1,126 @@ - - - - - Gideros Reference Manual - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
-
-

Table of Contents

- -
-
-
- {foreach item=item from=$data} -

Back to top

- {assign var="template" value=$item.template} - {include file="$template.html" contents=$item} - {/foreach} -
-
- -
- -
- -
- - - - - - - - - - - - - + + + + + Gideros Reference Manual + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+

Table of Contents

+ +
+
+
+ {foreach item=item from=$data} +

Back to top

+ {assign var="template" value=$item.template} + {include file="$template.html" contents=$item} + {/foreach} +
+
+ +
+ +
+ +
+ + + + + + + + + + + + + diff --git a/doc/design/css/bootstrap-responsive.min.css b/doc/design/css/bootstrap-responsive.min.css index e98ed7004..d1b7f4b0b 100644 --- a/doc/design/css/bootstrap-responsive.min.css +++ b/doc/design/css/bootstrap-responsive.min.css @@ -1,9 +1,9 @@ -/*! - * Bootstrap Responsive v2.3.1 - * - * Copyright 2012 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 @twitter by @mdo and @fat. - */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}@-ms-viewport{width:device-width}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}.visible-desktop{display:inherit!important}@media(min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}}@media(max-width:767px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-phone{display:inherit!important}.hidden-phone{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:inherit!important}.hidden-print{display:none!important}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:30px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.564102564102564%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%}.row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%}.row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%}.row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%}.row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%}.row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%}.row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%}.row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%}.row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%}.row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%}.row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%}.row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%}.row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%}.row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%}.row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%}.row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%}.row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%}.row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%}.row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%}.row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%}.row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%}.row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%}.row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%}.row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%}.row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%}.row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%}.row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%}.row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%}.row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%}.row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%}.row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%}.row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%}.row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%}.row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%}.row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:30px}input.span12,textarea.span12,.uneditable-input.span12{width:1156px}input.span11,textarea.span11,.uneditable-input.span11{width:1056px}input.span10,textarea.span10,.uneditable-input.span10{width:956px}input.span9,textarea.span9,.uneditable-input.span9{width:856px}input.span8,textarea.span8,.uneditable-input.span8{width:756px}input.span7,textarea.span7,.uneditable-input.span7{width:656px}input.span6,textarea.span6,.uneditable-input.span6{width:556px}input.span5,textarea.span5,.uneditable-input.span5{width:456px}input.span4,textarea.span4,.uneditable-input.span4{width:356px}input.span3,textarea.span3,.uneditable-input.span3{width:256px}input.span2,textarea.span2,.uneditable-input.span2{width:156px}input.span1,textarea.span1,.uneditable-input.span1{width:56px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.7624309392265194%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%}.row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%}.row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%}.row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%}.row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%}.row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%}.row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%}.row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%}.row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%}.row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%}.row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%}.row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%}.row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%}.row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%}.row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%}.row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%}.row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%}.row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%}.row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%}.row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%}.row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%}.row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%}.row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%}.row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%}.row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%}.row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%}.row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%}.row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%}.row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%}.row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%}.row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%}.row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%}.row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%}.row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%}.row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:710px}input.span11,textarea.span11,.uneditable-input.span11{width:648px}input.span10,textarea.span10,.uneditable-input.span10{width:586px}input.span9,textarea.span9,.uneditable-input.span9{width:524px}input.span8,textarea.span8,.uneditable-input.span8{width:462px}input.span7,textarea.span7,.uneditable-input.span7{width:400px}input.span6,textarea.span6,.uneditable-input.span6{width:338px}input.span5,textarea.span5,.uneditable-input.span5{width:276px}input.span4,textarea.span4,.uneditable-input.span4{width:214px}input.span3,textarea.span3,.uneditable-input.span3{width:152px}input.span2,textarea.span2,.uneditable-input.span2{width:90px}input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}.thumbnails>li{float:none;margin-left:0}[class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="offset"]:first-child{margin-left:0}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}.controls-row [class*="span"]+[class*="span"]{margin-left:0}.modal{position:fixed;top:20px;right:20px;left:20px;width:auto;margin:0}.modal.fade{top:-100px}.modal.fade.in{top:20px}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:20px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.media .pull-left,.media .pull-right{display:block;float:none;margin-bottom:10px}.media-object{margin-right:0;margin-left:0}.modal{top:10px;right:10px;left:10px}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top,.navbar-fixed-bottom{position:static}.navbar-fixed-top{margin-bottom:20px}.navbar-fixed-bottom{margin-top:20px}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 10px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#777;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .nav>li>a:focus,.nav-collapse .dropdown-menu a:hover,.nav-collapse .dropdown-menu a:focus{background-color:#f2f2f2}.navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .nav>li>a:focus,.navbar-inverse .nav-collapse .dropdown-menu a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:focus{background-color:#111}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:none;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .open>.dropdown-menu{display:block}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-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)}.navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}} +/*! + * Bootstrap Responsive v2.3.1 + * + * Copyright 2012 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 @twitter by @mdo and @fat. + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}@-ms-viewport{width:device-width}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}.visible-desktop{display:inherit!important}@media(min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}}@media(max-width:767px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-phone{display:inherit!important}.hidden-phone{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:inherit!important}.hidden-print{display:none!important}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:30px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.564102564102564%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%}.row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%}.row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%}.row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%}.row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%}.row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%}.row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%}.row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%}.row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%}.row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%}.row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%}.row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%}.row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%}.row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%}.row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%}.row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%}.row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%}.row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%}.row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%}.row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%}.row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%}.row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%}.row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%}.row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%}.row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%}.row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%}.row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%}.row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%}.row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%}.row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%}.row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%}.row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%}.row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%}.row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%}.row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:30px}input.span12,textarea.span12,.uneditable-input.span12{width:1156px}input.span11,textarea.span11,.uneditable-input.span11{width:1056px}input.span10,textarea.span10,.uneditable-input.span10{width:956px}input.span9,textarea.span9,.uneditable-input.span9{width:856px}input.span8,textarea.span8,.uneditable-input.span8{width:756px}input.span7,textarea.span7,.uneditable-input.span7{width:656px}input.span6,textarea.span6,.uneditable-input.span6{width:556px}input.span5,textarea.span5,.uneditable-input.span5{width:456px}input.span4,textarea.span4,.uneditable-input.span4{width:356px}input.span3,textarea.span3,.uneditable-input.span3{width:256px}input.span2,textarea.span2,.uneditable-input.span2{width:156px}input.span1,textarea.span1,.uneditable-input.span1{width:56px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.7624309392265194%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%}.row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%}.row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%}.row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%}.row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%}.row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%}.row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%}.row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%}.row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%}.row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%}.row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%}.row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%}.row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%}.row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%}.row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%}.row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%}.row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%}.row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%}.row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%}.row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%}.row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%}.row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%}.row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%}.row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%}.row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%}.row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%}.row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%}.row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%}.row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%}.row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%}.row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%}.row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%}.row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%}.row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%}.row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:710px}input.span11,textarea.span11,.uneditable-input.span11{width:648px}input.span10,textarea.span10,.uneditable-input.span10{width:586px}input.span9,textarea.span9,.uneditable-input.span9{width:524px}input.span8,textarea.span8,.uneditable-input.span8{width:462px}input.span7,textarea.span7,.uneditable-input.span7{width:400px}input.span6,textarea.span6,.uneditable-input.span6{width:338px}input.span5,textarea.span5,.uneditable-input.span5{width:276px}input.span4,textarea.span4,.uneditable-input.span4{width:214px}input.span3,textarea.span3,.uneditable-input.span3{width:152px}input.span2,textarea.span2,.uneditable-input.span2{width:90px}input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}.thumbnails>li{float:none;margin-left:0}[class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="offset"]:first-child{margin-left:0}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}.controls-row [class*="span"]+[class*="span"]{margin-left:0}.modal{position:fixed;top:20px;right:20px;left:20px;width:auto;margin:0}.modal.fade{top:-100px}.modal.fade.in{top:20px}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:20px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.media .pull-left,.media .pull-right{display:block;float:none;margin-bottom:10px}.media-object{margin-right:0;margin-left:0}.modal{top:10px;right:10px;left:10px}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top,.navbar-fixed-bottom{position:static}.navbar-fixed-top{margin-bottom:20px}.navbar-fixed-bottom{margin-top:20px}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 10px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#777;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .nav>li>a:focus,.nav-collapse .dropdown-menu a:hover,.nav-collapse .dropdown-menu a:focus{background-color:#f2f2f2}.navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .nav>li>a:focus,.navbar-inverse .nav-collapse .dropdown-menu a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:focus{background-color:#111}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:none;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .open>.dropdown-menu{display:block}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-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)}.navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}} diff --git a/doc/design/css/bootstrap.css b/doc/design/css/bootstrap.css index 6fe343896..a2fb462a0 100644 --- a/doc/design/css/bootstrap.css +++ b/doc/design/css/bootstrap.css @@ -1,5652 +1,5652 @@ -/*! - * Bootstrap v2.2.2 - * - * Copyright 2012 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 @twitter by @mdo and @fat. - */ -.clearfix { - *zoom: 1; -} -.clearfix:before, -.clearfix:after { - display: table; - content: ""; - line-height: 0; -} -.clearfix:after { - clear: both; -} -.hide-text { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} -.input-block-level { - display: block; - width: 100%; - min-height: 30px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -nav, -section { - display: block; -} -audio, -canvas, -video { - display: inline-block; - *display: inline; - *zoom: 1; -} -audio:not([controls]) { - display: none; -} -html { - font-size: 100%; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; -} -a:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -a:hover, -a:active { - outline: 0; -} -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} -sup { - top: -0.5em; -} -sub { - bottom: -0.25em; -} -img { - /* Responsive images (ensure images don't scale beyond their parents) */ - - max-width: 100%; - /* Part 1: Set a maxium relative to the parent */ - - width: auto\9; - /* IE7-8 need help adjusting responsive images */ - - height: auto; - /* Part 2: Scale the height according to the width, otherwise you get stretching */ - - vertical-align: middle; - border: 0; - -ms-interpolation-mode: bicubic; -} -#map_canvas img, -.google-maps img { - max-width: none; -} -button, -input, -select, -textarea { - margin: 0; - font-size: 100%; - vertical-align: middle; -} -button, -input { - *overflow: visible; - line-height: normal; -} -button::-moz-focus-inner, -input::-moz-focus-inner { - padding: 0; - border: 0; -} -button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; - cursor: pointer; -} -label, -select, -button, -input[type="button"], -input[type="reset"], -input[type="submit"], -input[type="radio"], -input[type="checkbox"] { - cursor: pointer; -} -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-decoration, -input[type="search"]::-webkit-search-cancel-button { - -webkit-appearance: none; -} -textarea { - overflow: auto; - vertical-align: top; -} -@media print { - * { - text-shadow: none !important; - color: #000 !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: 0.5cm; - } - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - h2, - h3 { - page-break-after: avoid; - } -} -body { - margin: 0; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - line-height: 20px; - color: #333333; - background-color: #ffffff; -} -a { - color: #0088cc; - text-decoration: none; -} -a:hover { - color: #005580; - text-decoration: underline; -} -.img-rounded { - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} -.img-polaroid { - padding: 4px; - background-color: #fff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); -} -.img-circle { - -webkit-border-radius: 500px; - -moz-border-radius: 500px; - border-radius: 500px; -} -.row { - margin-left: -20px; - *zoom: 1; -} -.row:before, -.row:after { - display: table; - content: ""; - line-height: 0; -} -.row:after { - clear: both; -} -[class*="span"] { - float: left; - min-height: 1px; - margin-left: 20px; -} -.container, -.navbar-static-top .container, -.navbar-fixed-top .container, -.navbar-fixed-bottom .container { - width: 940px; -} -.span12 { - width: 940px; -} -.span11 { - width: 860px; -} -.span10 { - width: 780px; -} -.span9 { - width: 700px; -} -.span8 { - width: 620px; -} -.span7 { - width: 540px; -} -.span6 { - width: 460px; -} -.span5 { - width: 380px; -} -.span4 { - width: 300px; -} -.span3 { - width: 220px; -} -.span2 { - width: 140px; -} -.span1 { - width: 60px; -} -.offset12 { - margin-left: 980px; -} -.offset11 { - margin-left: 900px; -} -.offset10 { - margin-left: 820px; -} -.offset9 { - margin-left: 740px; -} -.offset8 { - margin-left: 660px; -} -.offset7 { - margin-left: 580px; -} -.offset6 { - margin-left: 500px; -} -.offset5 { - margin-left: 420px; -} -.offset4 { - margin-left: 340px; -} -.offset3 { - margin-left: 260px; -} -.offset2 { - margin-left: 180px; -} -.offset1 { - margin-left: 100px; -} -.row-fluid { - width: 100%; - *zoom: 1; -} -.row-fluid:before, -.row-fluid:after { - display: table; - content: ""; - line-height: 0; -} -.row-fluid:after { - clear: both; -} -.row-fluid [class*="span"] { - display: block; - width: 100%; - min-height: 30px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - float: left; - margin-left: 2.127659574468085%; - *margin-left: 2.074468085106383%; -} -.row-fluid [class*="span"]:first-child { - margin-left: 0; -} -.row-fluid .controls-row [class*="span"] + [class*="span"] { - margin-left: 2.127659574468085%; -} -.row-fluid .span12 { - width: 100%; - *width: 99.94680851063829%; -} -.row-fluid .span11 { - width: 91.48936170212765%; - *width: 91.43617021276594%; -} -.row-fluid .span10 { - width: 82.97872340425532%; - *width: 82.92553191489361%; -} -.row-fluid .span9 { - width: 74.46808510638297%; - *width: 74.41489361702126%; -} -.row-fluid .span8 { - width: 65.95744680851064%; - *width: 65.90425531914893%; -} -.row-fluid .span7 { - width: 57.44680851063829%; - *width: 57.39361702127659%; -} -.row-fluid .span6 { - width: 48.93617021276595%; - *width: 48.88297872340425%; -} -.row-fluid .span5 { - width: 40.42553191489362%; - *width: 40.37234042553192%; -} -.row-fluid .span4 { - width: 31.914893617021278%; - *width: 31.861702127659576%; -} -.row-fluid .span3 { - width: 23.404255319148934%; - *width: 23.351063829787233%; -} -.row-fluid .span2 { - width: 14.893617021276595%; - *width: 14.840425531914894%; -} -.row-fluid .span1 { - width: 6.382978723404255%; - *width: 6.329787234042553%; -} -.row-fluid .offset12 { - margin-left: 104.25531914893617%; - *margin-left: 104.14893617021275%; -} -.row-fluid .offset12:first-child { - margin-left: 102.12765957446808%; - *margin-left: 102.02127659574467%; -} -.row-fluid .offset11 { - margin-left: 95.74468085106382%; - *margin-left: 95.6382978723404%; -} -.row-fluid .offset11:first-child { - margin-left: 93.61702127659574%; - *margin-left: 93.51063829787232%; -} -.row-fluid .offset10 { - margin-left: 87.23404255319149%; - *margin-left: 87.12765957446807%; -} -.row-fluid .offset10:first-child { - margin-left: 85.1063829787234%; - *margin-left: 84.99999999999999%; -} -.row-fluid .offset9 { - margin-left: 78.72340425531914%; - *margin-left: 78.61702127659572%; -} -.row-fluid .offset9:first-child { - margin-left: 76.59574468085106%; - *margin-left: 76.48936170212764%; -} -.row-fluid .offset8 { - margin-left: 70.2127659574468%; - *margin-left: 70.10638297872339%; -} -.row-fluid .offset8:first-child { - margin-left: 68.08510638297872%; - *margin-left: 67.9787234042553%; -} -.row-fluid .offset7 { - margin-left: 61.70212765957446%; - *margin-left: 61.59574468085106%; -} -.row-fluid .offset7:first-child { - margin-left: 59.574468085106375%; - *margin-left: 59.46808510638297%; -} -.row-fluid .offset6 { - margin-left: 53.191489361702125%; - *margin-left: 53.085106382978715%; -} -.row-fluid .offset6:first-child { - margin-left: 51.063829787234035%; - *margin-left: 50.95744680851063%; -} -.row-fluid .offset5 { - margin-left: 44.68085106382979%; - *margin-left: 44.57446808510638%; -} -.row-fluid .offset5:first-child { - margin-left: 42.5531914893617%; - *margin-left: 42.4468085106383%; -} -.row-fluid .offset4 { - margin-left: 36.170212765957444%; - *margin-left: 36.06382978723405%; -} -.row-fluid .offset4:first-child { - margin-left: 34.04255319148936%; - *margin-left: 33.93617021276596%; -} -.row-fluid .offset3 { - margin-left: 27.659574468085104%; - *margin-left: 27.5531914893617%; -} -.row-fluid .offset3:first-child { - margin-left: 25.53191489361702%; - *margin-left: 25.425531914893618%; -} -.row-fluid .offset2 { - margin-left: 19.148936170212764%; - *margin-left: 19.04255319148936%; -} -.row-fluid .offset2:first-child { - margin-left: 17.02127659574468%; - *margin-left: 16.914893617021278%; -} -.row-fluid .offset1 { - margin-left: 10.638297872340425%; - *margin-left: 10.53191489361702%; -} -.row-fluid .offset1:first-child { - margin-left: 8.51063829787234%; - *margin-left: 8.404255319148938%; -} -[class*="span"].hide, -.row-fluid [class*="span"].hide { - display: none; -} -[class*="span"].pull-right, -.row-fluid [class*="span"].pull-right { - float: right; -} -.container { - margin-right: auto; - margin-left: auto; - *zoom: 1; -} -.container:before, -.container:after { - display: table; - content: ""; - line-height: 0; -} -.container:after { - clear: both; -} -.container-fluid { - padding-right: 20px; - padding-left: 20px; - *zoom: 1; -} -.container-fluid:before, -.container-fluid:after { - display: table; - content: ""; - line-height: 0; -} -.container-fluid:after { - clear: both; -} -p { - margin: 0 0 10px; -} -.lead { - margin-bottom: 20px; - font-size: 21px; - font-weight: 200; - line-height: 30px; -} -small { - font-size: 85%; -} -strong { - font-weight: bold; -} -em { - font-style: italic; -} -cite { - font-style: normal; -} -.muted { - color: #999999; -} -a.muted:hover { - color: #808080; -} -.text-warning { - color: #c09853; -} -a.text-warning:hover { - color: #a47e3c; -} -.text-error { - color: #b94a48; -} -a.text-error:hover { - color: #953b39; -} -.text-info { - color: #3a87ad; -} -a.text-info:hover { - color: #2d6987; -} -.text-success { - color: #468847; -} -a.text-success:hover { - color: #356635; -} -h1, -h2, -h3, -h4, -h5, -h6 { - margin: 10px 0; - font-family: inherit; - font-weight: bold; - line-height: 20px; - color: inherit; - text-rendering: optimizelegibility; -} -h1 small, -h2 small, -h3 small, -h4 small, -h5 small, -h6 small { - font-weight: normal; - line-height: 1; - color: #999999; -} -h1, -h2, -h3 { - line-height: 40px; -} -h1 { - font-size: 38.5px; -} -h2 { - font-size: 31.5px; -} -h3 { - font-size: 24.5px; -} -h4 { - font-size: 17.5px; -} -h5 { - font-size: 14px; -} -h6 { - font-size: 11.9px; -} -h1 small { - font-size: 24.5px; -} -h2 small { - font-size: 17.5px; -} -h3 small { - font-size: 14px; -} -h4 small { - font-size: 14px; -} -.page-header { - padding-bottom: 9px; - margin: 20px 0 30px; - border-bottom: 1px solid #eeeeee; -} -ul, -ol { - padding: 0; - margin: 0 0 10px 25px; -} -ul ul, -ul ol, -ol ol, -ol ul { - margin-bottom: 0; -} -li { - line-height: 20px; -} -ul.unstyled, -ol.unstyled { - margin-left: 0; - list-style: none; -} -ul.inline, -ol.inline { - margin-left: 0; - list-style: none; -} -ul.inline > li, -ol.inline > li { - display: inline-block; - padding-left: 5px; - padding-right: 5px; -} -dl { - margin-bottom: 20px; -} -dt, -dd { - line-height: 20px; -} -dt { - font-weight: bold; -} -dd { - margin-left: 10px; -} -.dl-horizontal { - *zoom: 1; -} -.dl-horizontal:before, -.dl-horizontal:after { - display: table; - content: ""; - line-height: 0; -} -.dl-horizontal:after { - clear: both; -} -.dl-horizontal dt { - float: left; - width: 160px; - clear: left; - text-align: right; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -.dl-horizontal dd { - margin-left: 180px; -} -hr { - margin: 20px 0; - border: 0; - border-top: 1px solid #eeeeee; - border-bottom: 1px solid #ffffff; -} -abbr[title], -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted #999999; -} -abbr.initialism { - font-size: 90%; - text-transform: uppercase; -} -blockquote { - padding: 0 0 0 15px; - margin: 0 0 20px; - border-left: 5px solid #eeeeee; -} -blockquote p { - margin-bottom: 0; - font-size: 16px; - font-weight: 300; - line-height: 25px; -} -blockquote small { - display: block; - line-height: 20px; - color: #999999; -} -blockquote small:before { - content: '\2014 \00A0'; -} -blockquote.pull-right { - float: 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: 20px; -} -code, -pre { - padding: 0 3px 2px; - font-family: Monaco, Menlo, Consolas, "Courier New", monospace; - font-size: 12px; - color: #333333; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -code { - padding: 2px 4px; - color: #d14; - background-color: #f7f7f9; - border: 1px solid #e1e1e8; - white-space: nowrap; -} -pre { - display: block; - padding: 9.5px; - margin: 0 0 10px; - font-size: 13px; - line-height: 20px; - word-break: break-all; - word-wrap: break-word; - white-space: pre; - white-space: pre-wrap; - background-color: #f5f5f5; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.15); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -pre.prettyprint { - margin-bottom: 20px; -} -pre code { - padding: 0; - color: inherit; - white-space: pre; - white-space: pre-wrap; - background-color: transparent; - border: 0; -} -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} -.label, -.badge { - display: inline-block; - padding: 2px 4px; - font-size: 11.844px; - font-weight: bold; - line-height: 14px; - color: #ffffff; - vertical-align: baseline; - white-space: nowrap; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #999999; -} -.label { - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.badge { - padding-left: 9px; - padding-right: 9px; - -webkit-border-radius: 9px; - -moz-border-radius: 9px; - border-radius: 9px; -} -.label:empty, -.badge:empty { - display: none; -} -a.label:hover, -a.badge:hover { - color: #ffffff; - text-decoration: none; - cursor: pointer; -} -.label-important, -.badge-important { - background-color: #b94a48; -} -.label-important[href], -.badge-important[href] { - background-color: #953b39; -} -.label-warning, -.badge-warning { - background-color: #f89406; -} -.label-warning[href], -.badge-warning[href] { - background-color: #c67605; -} -.label-success, -.badge-success { - background-color: #468847; -} -.label-success[href], -.badge-success[href] { - background-color: #356635; -} -.label-info, -.badge-info { - background-color: #3a87ad; -} -.label-info[href], -.badge-info[href] { - background-color: #2d6987; -} -.label-inverse, -.badge-inverse { - background-color: #333333; -} -.label-inverse[href], -.badge-inverse[href] { - background-color: #1a1a1a; -} -.btn .label, -.btn .badge { - position: relative; - top: -1px; -} -.btn-mini .label, -.btn-mini .badge { - top: 0; -} -table { - max-width: 100%; - background-color: transparent; - border-collapse: collapse; - border-spacing: 0; -} -.table { - width: 100%; - margin-bottom: 20px; -} -.table th, -.table td { - padding: 8px; - line-height: 20px; - text-align: left; - vertical-align: top; - border-top: 1px solid #dddddd; -} -.table th { - font-weight: bold; -} -.table thead th { - vertical-align: bottom; -} -.table caption + thead tr:first-child th, -.table caption + thead tr:first-child td, -.table colgroup + thead tr:first-child th, -.table colgroup + thead tr:first-child td, -.table thead:first-child tr:first-child th, -.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 th, -.table-condensed td { - padding: 4px 5px; -} -.table-bordered { - border: 1px solid #dddddd; - border-collapse: separate; - *border-collapse: collapse; - border-left: 0; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.table-bordered th, -.table-bordered td { - border-left: 1px solid #dddddd; -} -.table-bordered caption + thead tr:first-child th, -.table-bordered caption + tbody tr:first-child th, -.table-bordered caption + tbody tr:first-child td, -.table-bordered colgroup + thead tr:first-child th, -.table-bordered colgroup + tbody tr:first-child th, -.table-bordered colgroup + tbody tr:first-child td, -.table-bordered thead:first-child tr:first-child th, -.table-bordered tbody:first-child tr:first-child th, -.table-bordered tbody:first-child tr:first-child td { - border-top: 0; -} -.table-bordered thead:first-child tr:first-child > th:first-child, -.table-bordered tbody:first-child tr:first-child > td:first-child { - -webkit-border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; - border-top-left-radius: 4px; -} -.table-bordered thead:first-child tr:first-child > th:last-child, -.table-bordered tbody:first-child tr:first-child > td:last-child { - -webkit-border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; - border-top-right-radius: 4px; -} -.table-bordered thead:last-child tr:last-child > th:first-child, -.table-bordered tbody:last-child tr:last-child > td:first-child, -.table-bordered tfoot:last-child tr:last-child > td:first-child { - -webkit-border-bottom-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - border-bottom-left-radius: 4px; -} -.table-bordered thead:last-child tr:last-child > th:last-child, -.table-bordered tbody:last-child tr:last-child > td:last-child, -.table-bordered tfoot:last-child tr:last-child > td:last-child { - -webkit-border-bottom-right-radius: 4px; - -moz-border-radius-bottomright: 4px; - border-bottom-right-radius: 4px; -} -.table-bordered tfoot + tbody:last-child tr:last-child td:first-child { - -webkit-border-bottom-left-radius: 0; - -moz-border-radius-bottomleft: 0; - border-bottom-left-radius: 0; -} -.table-bordered tfoot + tbody:last-child tr:last-child td:last-child { - -webkit-border-bottom-right-radius: 0; - -moz-border-radius-bottomright: 0; - border-bottom-right-radius: 0; -} -.table-bordered caption + thead tr:first-child th:first-child, -.table-bordered caption + tbody tr:first-child td:first-child, -.table-bordered colgroup + thead tr:first-child th:first-child, -.table-bordered colgroup + tbody tr:first-child td:first-child { - -webkit-border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; - border-top-left-radius: 4px; -} -.table-bordered caption + thead tr:first-child th:last-child, -.table-bordered caption + tbody tr:first-child td:last-child, -.table-bordered colgroup + thead tr:first-child th:last-child, -.table-bordered colgroup + tbody tr:first-child td:last-child { - -webkit-border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; - border-top-right-radius: 4px; -} -.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 td[class*="span"], -table th[class*="span"], -.row-fluid table td[class*="span"], -.row-fluid table th[class*="span"] { - display: table-cell; - float: none; - margin-left: 0; -} -.table td.span1, -.table th.span1 { - float: none; - width: 44px; - margin-left: 0; -} -.table td.span2, -.table th.span2 { - float: none; - width: 124px; - margin-left: 0; -} -.table td.span3, -.table th.span3 { - float: none; - width: 204px; - margin-left: 0; -} -.table td.span4, -.table th.span4 { - float: none; - width: 284px; - margin-left: 0; -} -.table td.span5, -.table th.span5 { - float: none; - width: 364px; - margin-left: 0; -} -.table td.span6, -.table th.span6 { - float: none; - width: 444px; - margin-left: 0; -} -.table td.span7, -.table th.span7 { - float: none; - width: 524px; - margin-left: 0; -} -.table td.span8, -.table th.span8 { - float: none; - width: 604px; - margin-left: 0; -} -.table td.span9, -.table th.span9 { - float: none; - width: 684px; - margin-left: 0; -} -.table td.span10, -.table th.span10 { - float: none; - width: 764px; - margin-left: 0; -} -.table td.span11, -.table th.span11 { - float: none; - width: 844px; - margin-left: 0; -} -.table td.span12, -.table th.span12 { - float: none; - width: 924px; - margin-left: 0; -} -.table tbody tr.success td { - background-color: #dff0d8; -} -.table tbody tr.error td { - background-color: #f2dede; -} -.table tbody tr.warning td { - background-color: #fcf8e3; -} -.table tbody tr.info td { - background-color: #d9edf7; -} -.table-hover tbody tr.success:hover td { - background-color: #d0e9c6; -} -.table-hover tbody tr.error:hover td { - background-color: #ebcccc; -} -.table-hover tbody tr.warning:hover td { - background-color: #faf2cc; -} -.table-hover tbody tr.info:hover td { - background-color: #c4e3f3; -} -form { - margin: 0 0 20px; -} -fieldset { - padding: 0; - margin: 0; - border: 0; -} -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 20px; - font-size: 21px; - line-height: 40px; - color: #333333; - border: 0; - border-bottom: 1px solid #e5e5e5; -} -legend small { - font-size: 15px; - color: #999999; -} -label, -input, -button, -select, -textarea { - font-size: 14px; - font-weight: normal; - line-height: 20px; -} -input, -button, -select, -textarea { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -} -label { - display: block; - margin-bottom: 5px; -} -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"], -.uneditable-input { - display: inline-block; - height: 20px; - padding: 4px 6px; - margin-bottom: 10px; - font-size: 14px; - line-height: 20px; - color: #555555; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - vertical-align: middle; -} -input, -textarea, -.uneditable-input { - width: 206px; -} -textarea { - height: auto; -} -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"], -.uneditable-input { - background-color: #ffffff; - border: 1px solid #cccccc; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -webkit-transition: border linear .2s, box-shadow linear .2s; - -moz-transition: border linear .2s, box-shadow linear .2s; - -o-transition: border linear .2s, box-shadow linear .2s; - transition: border linear .2s, box-shadow linear .2s; -} -textarea:focus, -input[type="text"]:focus, -input[type="password"]:focus, -input[type="datetime"]:focus, -input[type="datetime-local"]:focus, -input[type="date"]:focus, -input[type="month"]:focus, -input[type="time"]:focus, -input[type="week"]:focus, -input[type="number"]:focus, -input[type="email"]:focus, -input[type="url"]:focus, -input[type="search"]:focus, -input[type="tel"]:focus, -input[type="color"]:focus, -.uneditable-input:focus { - border-color: rgba(82, 168, 236, 0.8); - outline: 0; - outline: thin dotted \9; - /* IE6-9 */ - - -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6); - -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6); - box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6); -} -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - *margin-top: 0; - /* IE7 */ - - margin-top: 1px \9; - /* IE8-9 */ - - line-height: normal; -} -input[type="file"], -input[type="image"], -input[type="submit"], -input[type="reset"], -input[type="button"], -input[type="radio"], -input[type="checkbox"] { - width: auto; -} -select, -input[type="file"] { - height: 30px; - /* In IE7, the height of the select element cannot be changed by height, only font-size */ - - *margin-top: 4px; - /* For IE7, add top margin to align select with labels */ - - line-height: 30px; -} -select { - width: 220px; - border: 1px solid #cccccc; - background-color: #ffffff; -} -select[multiple], -select[size] { - height: auto; -} -select:focus, -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.uneditable-input, -.uneditable-textarea { - color: #999999; - background-color: #fcfcfc; - border-color: #cccccc; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - cursor: not-allowed; -} -.uneditable-input { - overflow: hidden; - white-space: nowrap; -} -.uneditable-textarea { - width: auto; - height: auto; -} -input:-moz-placeholder, -textarea:-moz-placeholder { - color: #999999; -} -input:-ms-input-placeholder, -textarea:-ms-input-placeholder { - color: #999999; -} -input::-webkit-input-placeholder, -textarea::-webkit-input-placeholder { - color: #999999; -} -.radio, -.checkbox { - min-height: 20px; - padding-left: 20px; -} -.radio input[type="radio"], -.checkbox input[type="checkbox"] { - float: left; - margin-left: -20px; -} -.controls > .radio:first-child, -.controls > .checkbox:first-child { - padding-top: 5px; -} -.radio.inline, -.checkbox.inline { - display: inline-block; - padding-top: 5px; - margin-bottom: 0; - vertical-align: middle; -} -.radio.inline + .radio.inline, -.checkbox.inline + .checkbox.inline { - margin-left: 10px; -} -.input-mini { - width: 60px; -} -.input-small { - width: 90px; -} -.input-medium { - width: 150px; -} -.input-large { - width: 210px; -} -.input-xlarge { - width: 270px; -} -.input-xxlarge { - width: 530px; -} -input[class*="span"], -select[class*="span"], -textarea[class*="span"], -.uneditable-input[class*="span"], -.row-fluid input[class*="span"], -.row-fluid select[class*="span"], -.row-fluid textarea[class*="span"], -.row-fluid .uneditable-input[class*="span"] { - float: none; - margin-left: 0; -} -.input-append input[class*="span"], -.input-append .uneditable-input[class*="span"], -.input-prepend input[class*="span"], -.input-prepend .uneditable-input[class*="span"], -.row-fluid input[class*="span"], -.row-fluid select[class*="span"], -.row-fluid textarea[class*="span"], -.row-fluid .uneditable-input[class*="span"], -.row-fluid .input-prepend [class*="span"], -.row-fluid .input-append [class*="span"] { - display: inline-block; -} -input, -textarea, -.uneditable-input { - margin-left: 0; -} -.controls-row [class*="span"] + [class*="span"] { - margin-left: 20px; -} -input.span12, textarea.span12, .uneditable-input.span12 { - width: 926px; -} -input.span11, textarea.span11, .uneditable-input.span11 { - width: 846px; -} -input.span10, textarea.span10, .uneditable-input.span10 { - width: 766px; -} -input.span9, textarea.span9, .uneditable-input.span9 { - width: 686px; -} -input.span8, textarea.span8, .uneditable-input.span8 { - width: 606px; -} -input.span7, textarea.span7, .uneditable-input.span7 { - width: 526px; -} -input.span6, textarea.span6, .uneditable-input.span6 { - width: 446px; -} -input.span5, textarea.span5, .uneditable-input.span5 { - width: 366px; -} -input.span4, textarea.span4, .uneditable-input.span4 { - width: 286px; -} -input.span3, textarea.span3, .uneditable-input.span3 { - width: 206px; -} -input.span2, textarea.span2, .uneditable-input.span2 { - width: 126px; -} -input.span1, textarea.span1, .uneditable-input.span1 { - width: 46px; -} -.controls-row { - *zoom: 1; -} -.controls-row:before, -.controls-row:after { - display: table; - content: ""; - line-height: 0; -} -.controls-row:after { - clear: both; -} -.controls-row [class*="span"], -.row-fluid .controls-row [class*="span"] { - float: left; -} -.controls-row .checkbox[class*="span"], -.controls-row .radio[class*="span"] { - padding-top: 5px; -} -input[disabled], -select[disabled], -textarea[disabled], -input[readonly], -select[readonly], -textarea[readonly] { - cursor: not-allowed; - background-color: #eeeeee; -} -input[type="radio"][disabled], -input[type="checkbox"][disabled], -input[type="radio"][readonly], -input[type="checkbox"][readonly] { - background-color: transparent; -} -.control-group.warning .control-label, -.control-group.warning .help-block, -.control-group.warning .help-inline { - color: #c09853; -} -.control-group.warning .checkbox, -.control-group.warning .radio, -.control-group.warning input, -.control-group.warning select, -.control-group.warning textarea { - color: #c09853; -} -.control-group.warning input, -.control-group.warning select, -.control-group.warning textarea { - border-color: #c09853; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.control-group.warning input:focus, -.control-group.warning select:focus, -.control-group.warning textarea:focus { - border-color: #a47e3c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; - -moz-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; -} -.control-group.warning .input-prepend .add-on, -.control-group.warning .input-append .add-on { - color: #c09853; - background-color: #fcf8e3; - border-color: #c09853; -} -.control-group.error .control-label, -.control-group.error .help-block, -.control-group.error .help-inline { - color: #b94a48; -} -.control-group.error .checkbox, -.control-group.error .radio, -.control-group.error input, -.control-group.error select, -.control-group.error textarea { - color: #b94a48; -} -.control-group.error input, -.control-group.error select, -.control-group.error textarea { - border-color: #b94a48; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.control-group.error input:focus, -.control-group.error select:focus, -.control-group.error textarea:focus { - border-color: #953b39; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; - -moz-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; -} -.control-group.error .input-prepend .add-on, -.control-group.error .input-append .add-on { - color: #b94a48; - background-color: #f2dede; - border-color: #b94a48; -} -.control-group.success .control-label, -.control-group.success .help-block, -.control-group.success .help-inline { - color: #468847; -} -.control-group.success .checkbox, -.control-group.success .radio, -.control-group.success input, -.control-group.success select, -.control-group.success textarea { - color: #468847; -} -.control-group.success input, -.control-group.success select, -.control-group.success textarea { - border-color: #468847; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.control-group.success input:focus, -.control-group.success select:focus, -.control-group.success textarea:focus { - border-color: #356635; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; - -moz-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; -} -.control-group.success .input-prepend .add-on, -.control-group.success .input-append .add-on { - color: #468847; - background-color: #dff0d8; - border-color: #468847; -} -.control-group.info .control-label, -.control-group.info .help-block, -.control-group.info .help-inline { - color: #3a87ad; -} -.control-group.info .checkbox, -.control-group.info .radio, -.control-group.info input, -.control-group.info select, -.control-group.info textarea { - color: #3a87ad; -} -.control-group.info input, -.control-group.info select, -.control-group.info textarea { - border-color: #3a87ad; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.control-group.info input:focus, -.control-group.info select:focus, -.control-group.info textarea:focus { - border-color: #2d6987; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; -} -.control-group.info .input-prepend .add-on, -.control-group.info .input-append .add-on { - color: #3a87ad; - background-color: #d9edf7; - border-color: #3a87ad; -} -input:focus:invalid, -textarea:focus:invalid, -select:focus:invalid { - color: #b94a48; - border-color: #ee5f5b; -} -input:focus:invalid:focus, -textarea:focus:invalid:focus, -select:focus:invalid:focus { - border-color: #e9322d; - -webkit-box-shadow: 0 0 6px #f8b9b7; - -moz-box-shadow: 0 0 6px #f8b9b7; - box-shadow: 0 0 6px #f8b9b7; -} -.form-actions { - padding: 19px 20px 20px; - margin-top: 20px; - margin-bottom: 20px; - background-color: #f5f5f5; - border-top: 1px solid #e5e5e5; - *zoom: 1; -} -.form-actions:before, -.form-actions:after { - display: table; - content: ""; - line-height: 0; -} -.form-actions:after { - clear: both; -} -.help-block, -.help-inline { - color: #595959; -} -.help-block { - display: block; - margin-bottom: 10px; -} -.help-inline { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - vertical-align: middle; - padding-left: 5px; -} -.input-append, -.input-prepend { - margin-bottom: 5px; - font-size: 0; - white-space: nowrap; -} -.input-append input, -.input-prepend input, -.input-append select, -.input-prepend select, -.input-append .uneditable-input, -.input-prepend .uneditable-input, -.input-append .dropdown-menu, -.input-prepend .dropdown-menu { - font-size: 14px; -} -.input-append input, -.input-prepend input, -.input-append select, -.input-prepend select, -.input-append .uneditable-input, -.input-prepend .uneditable-input { - position: relative; - margin-bottom: 0; - *margin-left: 0; - vertical-align: top; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} -.input-append input:focus, -.input-prepend input:focus, -.input-append select:focus, -.input-prepend select:focus, -.input-append .uneditable-input:focus, -.input-prepend .uneditable-input:focus { - z-index: 2; -} -.input-append .add-on, -.input-prepend .add-on { - display: inline-block; - width: auto; - height: 20px; - min-width: 16px; - padding: 4px 5px; - font-size: 14px; - font-weight: normal; - line-height: 20px; - text-align: center; - text-shadow: 0 1px 0 #ffffff; - background-color: #eeeeee; - border: 1px solid #ccc; -} -.input-append .add-on, -.input-prepend .add-on, -.input-append .btn, -.input-prepend .btn, -.input-append .btn-group > .dropdown-toggle, -.input-prepend .btn-group > .dropdown-toggle { - vertical-align: top; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.input-append .active, -.input-prepend .active { - background-color: #a9dba9; - border-color: #46a546; -} -.input-prepend .add-on, -.input-prepend .btn { - margin-right: -1px; -} -.input-prepend .add-on:first-child, -.input-prepend .btn:first-child { - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} -.input-append input, -.input-append select, -.input-append .uneditable-input { - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} -.input-append input + .btn-group .btn:last-child, -.input-append select + .btn-group .btn:last-child, -.input-append .uneditable-input + .btn-group .btn:last-child { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} -.input-append .add-on, -.input-append .btn, -.input-append .btn-group { - margin-left: -1px; -} -.input-append .add-on:last-child, -.input-append .btn:last-child, -.input-append .btn-group:last-child > .dropdown-toggle { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} -.input-prepend.input-append input, -.input-prepend.input-append select, -.input-prepend.input-append .uneditable-input { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.input-prepend.input-append input + .btn-group .btn, -.input-prepend.input-append select + .btn-group .btn, -.input-prepend.input-append .uneditable-input + .btn-group .btn { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} -.input-prepend.input-append .add-on:first-child, -.input-prepend.input-append .btn:first-child { - margin-right: -1px; - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} -.input-prepend.input-append .add-on:last-child, -.input-prepend.input-append .btn:last-child { - margin-left: -1px; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} -.input-prepend.input-append .btn-group:first-child { - margin-left: 0; -} -input.search-query { - padding-right: 14px; - padding-right: 4px \9; - padding-left: 14px; - padding-left: 4px \9; - /* IE7-8 doesn't have border-radius, so don't indent the padding */ - - margin-bottom: 0; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; -} -/* Allow for input prepend/append in search forms */ -.form-search .input-append .search-query, -.form-search .input-prepend .search-query { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.form-search .input-append .search-query { - -webkit-border-radius: 14px 0 0 14px; - -moz-border-radius: 14px 0 0 14px; - border-radius: 14px 0 0 14px; -} -.form-search .input-append .btn { - -webkit-border-radius: 0 14px 14px 0; - -moz-border-radius: 0 14px 14px 0; - border-radius: 0 14px 14px 0; -} -.form-search .input-prepend .search-query { - -webkit-border-radius: 0 14px 14px 0; - -moz-border-radius: 0 14px 14px 0; - border-radius: 0 14px 14px 0; -} -.form-search .input-prepend .btn { - -webkit-border-radius: 14px 0 0 14px; - -moz-border-radius: 14px 0 0 14px; - border-radius: 14px 0 0 14px; -} -.form-search input, -.form-inline input, -.form-horizontal input, -.form-search textarea, -.form-inline textarea, -.form-horizontal textarea, -.form-search select, -.form-inline select, -.form-horizontal select, -.form-search .help-inline, -.form-inline .help-inline, -.form-horizontal .help-inline, -.form-search .uneditable-input, -.form-inline .uneditable-input, -.form-horizontal .uneditable-input, -.form-search .input-prepend, -.form-inline .input-prepend, -.form-horizontal .input-prepend, -.form-search .input-append, -.form-inline .input-append, -.form-horizontal .input-append { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - margin-bottom: 0; - vertical-align: middle; -} -.form-search .hide, -.form-inline .hide, -.form-horizontal .hide { - display: none; -} -.form-search label, -.form-inline label, -.form-search .btn-group, -.form-inline .btn-group { - display: inline-block; -} -.form-search .input-append, -.form-inline .input-append, -.form-search .input-prepend, -.form-inline .input-prepend { - margin-bottom: 0; -} -.form-search .radio, -.form-search .checkbox, -.form-inline .radio, -.form-inline .checkbox { - padding-left: 0; - margin-bottom: 0; - vertical-align: middle; -} -.form-search .radio input[type="radio"], -.form-search .checkbox input[type="checkbox"], -.form-inline .radio input[type="radio"], -.form-inline .checkbox input[type="checkbox"] { - float: left; - margin-right: 3px; - margin-left: 0; -} -.control-group { - margin-bottom: 10px; -} -legend + .control-group { - margin-top: 20px; - -webkit-margin-top-collapse: separate; -} -.form-horizontal .control-group { - margin-bottom: 20px; - *zoom: 1; -} -.form-horizontal .control-group:before, -.form-horizontal .control-group:after { - display: table; - content: ""; - line-height: 0; -} -.form-horizontal .control-group:after { - clear: both; -} -.form-horizontal .control-label { - float: left; - width: 160px; - padding-top: 5px; - text-align: right; -} -.form-horizontal .controls { - *display: inline-block; - *padding-left: 20px; - margin-left: 180px; - *margin-left: 0; -} -.form-horizontal .controls:first-child { - *padding-left: 180px; -} -.form-horizontal .help-block { - margin-bottom: 0; -} -.form-horizontal input + .help-block, -.form-horizontal select + .help-block, -.form-horizontal textarea + .help-block, -.form-horizontal .uneditable-input + .help-block, -.form-horizontal .input-prepend + .help-block, -.form-horizontal .input-append + .help-block { - margin-top: 10px; -} -.form-horizontal .form-actions { - padding-left: 180px; -} -.btn { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - padding: 4px 12px; - margin-bottom: 0; - font-size: 14px; - line-height: 20px; - text-align: center; - vertical-align: middle; - cursor: pointer; - color: #333333; - text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); - background-color: #f5f5f5; - background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); - background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); - background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); - border-color: #e6e6e6 #e6e6e6 #bfbfbf; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #e6e6e6; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - border: 1px solid #bbbbbb; - *border: 0; - border-bottom-color: #a2a2a2; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - *margin-left: .3em; - -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); -} -.btn:hover, -.btn:active, -.btn.active, -.btn.disabled, -.btn[disabled] { - color: #333333; - background-color: #e6e6e6; - *background-color: #d9d9d9; -} -.btn:active, -.btn.active { - background-color: #cccccc \9; -} -.btn:first-child { - *margin-left: 0; -} -.btn:hover { - color: #333333; - text-decoration: none; - background-position: 0 -15px; - -webkit-transition: background-position 0.1s linear; - -moz-transition: background-position 0.1s linear; - -o-transition: background-position 0.1s linear; - transition: background-position 0.1s linear; -} -.btn:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.btn.active, -.btn:active { - background-image: none; - outline: 0; - -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); - -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); - box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); -} -.btn.disabled, -.btn[disabled] { - cursor: default; - background-image: none; - opacity: 0.65; - filter: alpha(opacity=65); - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} -.btn-large { - padding: 11px 19px; - font-size: 17.5px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} -.btn-large [class^="icon-"], -.btn-large [class*=" icon-"] { - margin-top: 4px; -} -.btn-small { - padding: 2px 10px; - font-size: 11.9px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.btn-small [class^="icon-"], -.btn-small [class*=" icon-"] { - margin-top: 0; -} -.btn-mini [class^="icon-"], -.btn-mini [class*=" icon-"] { - margin-top: -1px; -} -.btn-mini { - padding: 0 6px; - font-size: 10.5px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.btn-block { - display: block; - width: 100%; - padding-left: 0; - padding-right: 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.btn-block + .btn-block { - margin-top: 5px; -} -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { - width: 100%; -} -.btn-primary.active, -.btn-warning.active, -.btn-danger.active, -.btn-success.active, -.btn-info.active, -.btn-inverse.active { - color: rgba(255, 255, 255, 0.75); -} -.btn { - border-color: #c5c5c5; - border-color: rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.25); -} -.btn-primary { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #006dcc; - background-image: -moz-linear-gradient(top, #0088cc, #0044cc); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); - background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); - background-image: -o-linear-gradient(top, #0088cc, #0044cc); - background-image: linear-gradient(to bottom, #0088cc, #0044cc); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); - border-color: #0044cc #0044cc #002a80; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #0044cc; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-primary:hover, -.btn-primary:active, -.btn-primary.active, -.btn-primary.disabled, -.btn-primary[disabled] { - color: #ffffff; - background-color: #0044cc; - *background-color: #003bb3; -} -.btn-primary:active, -.btn-primary.active { - background-color: #003399 \9; -} -.btn-warning { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #faa732; - background-image: -moz-linear-gradient(top, #fbb450, #f89406); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); - background-image: -webkit-linear-gradient(top, #fbb450, #f89406); - background-image: -o-linear-gradient(top, #fbb450, #f89406); - background-image: linear-gradient(to bottom, #fbb450, #f89406); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); - border-color: #f89406 #f89406 #ad6704; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #f89406; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-warning:hover, -.btn-warning:active, -.btn-warning.active, -.btn-warning.disabled, -.btn-warning[disabled] { - color: #ffffff; - background-color: #f89406; - *background-color: #df8505; -} -.btn-warning:active, -.btn-warning.active { - background-color: #c67605 \9; -} -.btn-danger { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #da4f49; - background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); - background-image: linear-gradient(to bottom, #ee5f5b, #bd362f); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0); - border-color: #bd362f #bd362f #802420; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #bd362f; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-danger:hover, -.btn-danger:active, -.btn-danger.active, -.btn-danger.disabled, -.btn-danger[disabled] { - color: #ffffff; - background-color: #bd362f; - *background-color: #a9302a; -} -.btn-danger:active, -.btn-danger.active { - background-color: #942a25 \9; -} -.btn-success { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #5bb75b; - background-image: -moz-linear-gradient(top, #62c462, #51a351); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); - background-image: -webkit-linear-gradient(top, #62c462, #51a351); - background-image: -o-linear-gradient(top, #62c462, #51a351); - background-image: linear-gradient(to bottom, #62c462, #51a351); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0); - border-color: #51a351 #51a351 #387038; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #51a351; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-success:hover, -.btn-success:active, -.btn-success.active, -.btn-success.disabled, -.btn-success[disabled] { - color: #ffffff; - background-color: #51a351; - *background-color: #499249; -} -.btn-success:active, -.btn-success.active { - background-color: #408140 \9; -} -.btn-info { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #49afcd; - background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); - background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); - background-image: linear-gradient(to bottom, #5bc0de, #2f96b4); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0); - border-color: #2f96b4 #2f96b4 #1f6377; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #2f96b4; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-info:hover, -.btn-info:active, -.btn-info.active, -.btn-info.disabled, -.btn-info[disabled] { - color: #ffffff; - background-color: #2f96b4; - *background-color: #2a85a0; -} -.btn-info:active, -.btn-info.active { - background-color: #24748c \9; -} -.btn-inverse { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #363636; - background-image: -moz-linear-gradient(top, #444444, #222222); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222)); - background-image: -webkit-linear-gradient(top, #444444, #222222); - background-image: -o-linear-gradient(top, #444444, #222222); - background-image: linear-gradient(to bottom, #444444, #222222); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0); - border-color: #222222 #222222 #000000; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #222222; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-inverse:hover, -.btn-inverse:active, -.btn-inverse.active, -.btn-inverse.disabled, -.btn-inverse[disabled] { - color: #ffffff; - background-color: #222222; - *background-color: #151515; -} -.btn-inverse:active, -.btn-inverse.active { - background-color: #080808 \9; -} -button.btn, -input[type="submit"].btn { - *padding-top: 3px; - *padding-bottom: 3px; -} -button.btn::-moz-focus-inner, -input[type="submit"].btn::-moz-focus-inner { - padding: 0; - border: 0; -} -button.btn.btn-large, -input[type="submit"].btn.btn-large { - *padding-top: 7px; - *padding-bottom: 7px; -} -button.btn.btn-small, -input[type="submit"].btn.btn-small { - *padding-top: 3px; - *padding-bottom: 3px; -} -button.btn.btn-mini, -input[type="submit"].btn.btn-mini { - *padding-top: 1px; - *padding-bottom: 1px; -} -.btn-link, -.btn-link:active, -.btn-link[disabled] { - background-color: transparent; - background-image: none; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} -.btn-link { - border-color: transparent; - cursor: pointer; - color: #0088cc; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.btn-link:hover { - color: #005580; - text-decoration: underline; - background-color: transparent; -} -.btn-link[disabled]:hover { - color: #333333; - text-decoration: none; -} -.btn-group { - position: relative; - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - font-size: 0; - vertical-align: middle; - white-space: nowrap; - *margin-left: .3em; -} -.btn-group:first-child { - *margin-left: 0; -} -.btn-group + .btn-group { - margin-left: 5px; -} -.btn-toolbar { - font-size: 0; - margin-top: 10px; - margin-bottom: 10px; -} -.btn-toolbar > .btn + .btn, -.btn-toolbar > .btn-group + .btn, -.btn-toolbar > .btn + .btn-group { - margin-left: 5px; -} -.btn-group > .btn { - position: relative; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.btn-group > .btn + .btn { - margin-left: -1px; -} -.btn-group > .btn, -.btn-group > .dropdown-menu, -.btn-group > .popover { - font-size: 14px; -} -.btn-group > .btn-mini { - font-size: 10.5px; -} -.btn-group > .btn-small { - font-size: 11.9px; -} -.btn-group > .btn-large { - font-size: 17.5px; -} -.btn-group > .btn:first-child { - margin-left: 0; - -webkit-border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; - border-top-left-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - border-bottom-left-radius: 4px; -} -.btn-group > .btn:last-child, -.btn-group > .dropdown-toggle { - -webkit-border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; - border-top-right-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -moz-border-radius-bottomright: 4px; - border-bottom-right-radius: 4px; -} -.btn-group > .btn.large:first-child { - margin-left: 0; - -webkit-border-top-left-radius: 6px; - -moz-border-radius-topleft: 6px; - border-top-left-radius: 6px; - -webkit-border-bottom-left-radius: 6px; - -moz-border-radius-bottomleft: 6px; - border-bottom-left-radius: 6px; -} -.btn-group > .btn.large:last-child, -.btn-group > .large.dropdown-toggle { - -webkit-border-top-right-radius: 6px; - -moz-border-radius-topright: 6px; - border-top-right-radius: 6px; - -webkit-border-bottom-right-radius: 6px; - -moz-border-radius-bottomright: 6px; - border-bottom-right-radius: 6px; -} -.btn-group > .btn:hover, -.btn-group > .btn:focus, -.btn-group > .btn:active, -.btn-group > .btn.active { - z-index: 2; -} -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} -.btn-group > .btn + .dropdown-toggle { - padding-left: 8px; - padding-right: 8px; - -webkit-box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - -moz-box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - *padding-top: 5px; - *padding-bottom: 5px; -} -.btn-group > .btn-mini + .dropdown-toggle { - padding-left: 5px; - padding-right: 5px; - *padding-top: 2px; - *padding-bottom: 2px; -} -.btn-group > .btn-small + .dropdown-toggle { - *padding-top: 5px; - *padding-bottom: 4px; -} -.btn-group > .btn-large + .dropdown-toggle { - padding-left: 12px; - padding-right: 12px; - *padding-top: 7px; - *padding-bottom: 7px; -} -.btn-group.open .dropdown-toggle { - background-image: none; - -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); - -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); - box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); -} -.btn-group.open .btn.dropdown-toggle { - background-color: #e6e6e6; -} -.btn-group.open .btn-primary.dropdown-toggle { - background-color: #0044cc; -} -.btn-group.open .btn-warning.dropdown-toggle { - background-color: #f89406; -} -.btn-group.open .btn-danger.dropdown-toggle { - background-color: #bd362f; -} -.btn-group.open .btn-success.dropdown-toggle { - background-color: #51a351; -} -.btn-group.open .btn-info.dropdown-toggle { - background-color: #2f96b4; -} -.btn-group.open .btn-inverse.dropdown-toggle { - background-color: #222222; -} -.btn .caret { - margin-top: 8px; - margin-left: 0; -} -.btn-mini .caret, -.btn-small .caret, -.btn-large .caret { - margin-top: 6px; -} -.btn-large .caret { - border-left-width: 5px; - border-right-width: 5px; - border-top-width: 5px; -} -.dropup .btn-large .caret { - border-bottom-width: 5px; -} -.btn-primary .caret, -.btn-warning .caret, -.btn-danger .caret, -.btn-info .caret, -.btn-success .caret, -.btn-inverse .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} -.btn-group-vertical { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; -} -.btn-group-vertical > .btn { - display: block; - float: none; - max-width: 100%; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.btn-group-vertical > .btn + .btn { - margin-left: 0; - margin-top: -1px; -} -.btn-group-vertical > .btn:first-child { - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; -} -.btn-group-vertical > .btn:last-child { - -webkit-border-radius: 0 0 4px 4px; - -moz-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; -} -.btn-group-vertical > .btn-large:first-child { - -webkit-border-radius: 6px 6px 0 0; - -moz-border-radius: 6px 6px 0 0; - border-radius: 6px 6px 0 0; -} -.btn-group-vertical > .btn-large:last-child { - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; -} -.nav { - margin-left: 0; - margin-bottom: 20px; - list-style: none; -} -.nav > li > a { - display: block; -} -.nav > li > a:hover { - text-decoration: none; - background-color: #eeeeee; -} -.nav > li > a > img { - max-width: none; -} -.nav > .pull-right { - float: right; -} -.nav-header { - display: block; - padding: 3px 15px; - font-size: 11px; - font-weight: bold; - line-height: 20px; - color: #999999; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - text-transform: uppercase; -} -.nav li + .nav-header { - margin-top: 9px; -} -.nav-list { - padding-left: 15px; - padding-right: 15px; - margin-bottom: 0; -} -.nav-list > li > a, -.nav-list .nav-header { - margin-left: -15px; - margin-right: -15px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); -} -.nav-list > li > a { - padding: 3px 15px; -} -.nav-list > .active > a, -.nav-list > .active > a:hover { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); - background-color: #0088cc; -} -.nav-list [class^="icon-"], -.nav-list [class*=" icon-"] { - margin-right: 2px; -} -.nav-list .divider { - *width: 100%; - height: 1px; - margin: 9px 1px; - *margin: -5px 0 5px; - overflow: hidden; - background-color: #e5e5e5; - border-bottom: 1px solid #ffffff; -} -.nav-tabs, -.nav-pills { - *zoom: 1; -} -.nav-tabs:before, -.nav-pills:before, -.nav-tabs:after, -.nav-pills:after { - display: table; - content: ""; - line-height: 0; -} -.nav-tabs:after, -.nav-pills:after { - clear: both; -} -.nav-tabs > li, -.nav-pills > li { - float: left; -} -.nav-tabs > li > a, -.nav-pills > li > a { - padding-right: 12px; - padding-left: 12px; - margin-right: 2px; - line-height: 14px; -} -.nav-tabs { - border-bottom: 1px solid #ddd; -} -.nav-tabs > li { - margin-bottom: -1px; -} -.nav-tabs > li > a { - padding-top: 8px; - padding-bottom: 8px; - line-height: 20px; - border: 1px solid transparent; - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; -} -.nav-tabs > li > a:hover { - border-color: #eeeeee #eeeeee #dddddd; -} -.nav-tabs > .active > a, -.nav-tabs > .active > a:hover { - color: #555555; - background-color: #ffffff; - border: 1px solid #ddd; - border-bottom-color: transparent; - cursor: default; -} -.nav-pills > li > a { - padding-top: 8px; - padding-bottom: 8px; - margin-top: 2px; - margin-bottom: 2px; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; -} -.nav-pills > .active > a, -.nav-pills > .active > a:hover { - color: #ffffff; - background-color: #0088cc; -} -.nav-stacked > li { - float: none; -} -.nav-stacked > li > a { - margin-right: 0; -} -.nav-tabs.nav-stacked { - border-bottom: 0; -} -.nav-tabs.nav-stacked > li > a { - border: 1px solid #ddd; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.nav-tabs.nav-stacked > li:first-child > a { - -webkit-border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; - border-top-right-radius: 4px; - -webkit-border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; - border-top-left-radius: 4px; -} -.nav-tabs.nav-stacked > li:last-child > a { - -webkit-border-bottom-right-radius: 4px; - -moz-border-radius-bottomright: 4px; - border-bottom-right-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - border-bottom-left-radius: 4px; -} -.nav-tabs.nav-stacked > li > a:hover { - border-color: #ddd; - z-index: 2; -} -.nav-pills.nav-stacked > li > a { - margin-bottom: 3px; -} -.nav-pills.nav-stacked > li:last-child > a { - margin-bottom: 1px; -} -.nav-tabs .dropdown-menu { - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; -} -.nav-pills .dropdown-menu { - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} -.nav .dropdown-toggle .caret { - border-top-color: #0088cc; - border-bottom-color: #0088cc; - margin-top: 6px; -} -.nav .dropdown-toggle:hover .caret { - border-top-color: #005580; - border-bottom-color: #005580; -} -/* move down carets for tabs */ -.nav-tabs .dropdown-toggle .caret { - margin-top: 8px; -} -.nav .active .dropdown-toggle .caret { - border-top-color: #fff; - border-bottom-color: #fff; -} -.nav-tabs .active .dropdown-toggle .caret { - border-top-color: #555555; - border-bottom-color: #555555; -} -.nav > .dropdown.active > a:hover { - cursor: pointer; -} -.nav-tabs .open .dropdown-toggle, -.nav-pills .open .dropdown-toggle, -.nav > li.dropdown.open.active > a:hover { - color: #ffffff; - background-color: #999999; - border-color: #999999; -} -.nav li.dropdown.open .caret, -.nav li.dropdown.open.active .caret, -.nav li.dropdown.open a:hover .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; - opacity: 1; - filter: alpha(opacity=100); -} -.tabs-stacked .open > a:hover { - border-color: #999999; -} -.tabbable { - *zoom: 1; -} -.tabbable:before, -.tabbable:after { - display: table; - content: ""; - line-height: 0; -} -.tabbable:after { - clear: both; -} -.tab-content { - overflow: auto; -} -.tabs-below > .nav-tabs, -.tabs-right > .nav-tabs, -.tabs-left > .nav-tabs { - border-bottom: 0; -} -.tab-content > .tab-pane, -.pill-content > .pill-pane { - display: none; -} -.tab-content > .active, -.pill-content > .active { - display: block; -} -.tabs-below > .nav-tabs { - border-top: 1px solid #ddd; -} -.tabs-below > .nav-tabs > li { - margin-top: -1px; - margin-bottom: 0; -} -.tabs-below > .nav-tabs > li > a { - -webkit-border-radius: 0 0 4px 4px; - -moz-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; -} -.tabs-below > .nav-tabs > li > a:hover { - border-bottom-color: transparent; - border-top-color: #ddd; -} -.tabs-below > .nav-tabs > .active > a, -.tabs-below > .nav-tabs > .active > a:hover { - border-color: transparent #ddd #ddd #ddd; -} -.tabs-left > .nav-tabs > li, -.tabs-right > .nav-tabs > li { - float: none; -} -.tabs-left > .nav-tabs > li > a, -.tabs-right > .nav-tabs > li > a { - min-width: 74px; - margin-right: 0; - margin-bottom: 3px; -} -.tabs-left > .nav-tabs { - float: left; - margin-right: 19px; - border-right: 1px solid #ddd; -} -.tabs-left > .nav-tabs > li > a { - margin-right: -1px; - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} -.tabs-left > .nav-tabs > li > a:hover { - border-color: #eeeeee #dddddd #eeeeee #eeeeee; -} -.tabs-left > .nav-tabs .active > a, -.tabs-left > .nav-tabs .active > a:hover { - border-color: #ddd transparent #ddd #ddd; - *border-right-color: #ffffff; -} -.tabs-right > .nav-tabs { - float: right; - margin-left: 19px; - border-left: 1px solid #ddd; -} -.tabs-right > .nav-tabs > li > a { - margin-left: -1px; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} -.tabs-right > .nav-tabs > li > a:hover { - border-color: #eeeeee #eeeeee #eeeeee #dddddd; -} -.tabs-right > .nav-tabs .active > a, -.tabs-right > .nav-tabs .active > a:hover { - border-color: #ddd #ddd #ddd transparent; - *border-left-color: #ffffff; -} -.nav > .disabled > a { - color: #999999; -} -.nav > .disabled > a:hover { - text-decoration: none; - background-color: transparent; - cursor: default; -} -.navbar { - overflow: visible; - margin-bottom: 20px; - *position: relative; - *z-index: 2; -} -.navbar-inner { - min-height: 40px; - padding-left: 20px; - padding-right: 20px; - background-color: #fafafa; - background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2)); - background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2); - background-image: -o-linear-gradient(top, #ffffff, #f2f2f2); - background-image: linear-gradient(to bottom, #ffffff, #f2f2f2); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0); - border: 1px solid #d4d4d4; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); - -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); - *zoom: 1; -} -.navbar-inner:before, -.navbar-inner:after { - display: table; - content: ""; - line-height: 0; -} -.navbar-inner:after { - clear: both; -} -.navbar .container { - width: auto; -} -.nav-collapse.collapse { - height: auto; - overflow: visible; -} -.navbar .brand { - float: left; - display: block; - padding: 10px 20px 10px; - margin-left: -20px; - font-size: 20px; - font-weight: 200; - color: #777777; - text-shadow: 0 1px 0 #ffffff; -} -.navbar .brand:hover { - text-decoration: none; -} -.navbar-text { - margin-bottom: 0; - line-height: 40px; - color: #777777; -} -.navbar-link { - color: #777777; -} -.navbar-link:hover { - color: #333333; -} -.navbar .divider-vertical { - height: 40px; - margin: 0 9px; - border-left: 1px solid #f2f2f2; - border-right: 1px solid #ffffff; -} -.navbar .btn, -.navbar .btn-group { - margin-top: 5px; -} -.navbar .btn-group .btn, -.navbar .input-prepend .btn, -.navbar .input-append .btn { - margin-top: 0; -} -.navbar-form { - margin-bottom: 0; - *zoom: 1; -} -.navbar-form:before, -.navbar-form:after { - display: table; - content: ""; - line-height: 0; -} -.navbar-form:after { - clear: both; -} -.navbar-form input, -.navbar-form select, -.navbar-form .radio, -.navbar-form .checkbox { - margin-top: 5px; -} -.navbar-form input, -.navbar-form select, -.navbar-form .btn { - display: inline-block; - margin-bottom: 0; -} -.navbar-form input[type="image"], -.navbar-form input[type="checkbox"], -.navbar-form input[type="radio"] { - margin-top: 3px; -} -.navbar-form .input-append, -.navbar-form .input-prepend { - margin-top: 5px; - white-space: nowrap; -} -.navbar-form .input-append input, -.navbar-form .input-prepend input { - margin-top: 0; -} -.navbar-search { - position: relative; - float: left; - margin-top: 5px; - margin-bottom: 0; -} -.navbar-search .search-query { - margin-bottom: 0; - padding: 4px 14px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 13px; - font-weight: normal; - line-height: 1; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; -} -.navbar-static-top { - position: static; - margin-bottom: 0; -} -.navbar-static-top .navbar-inner { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: 1030; - margin-bottom: 0; -} -.navbar-fixed-top .navbar-inner, -.navbar-static-top .navbar-inner { - border-width: 0 0 1px; -} -.navbar-fixed-bottom .navbar-inner { - border-width: 1px 0 0; -} -.navbar-fixed-top .navbar-inner, -.navbar-fixed-bottom .navbar-inner { - padding-left: 0; - padding-right: 0; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.navbar-static-top .container, -.navbar-fixed-top .container, -.navbar-fixed-bottom .container { - width: 940px; -} -.navbar-fixed-top { - top: 0; -} -.navbar-fixed-top .navbar-inner, -.navbar-static-top .navbar-inner { - -webkit-box-shadow: 0 1px 10px rgba(0,0,0,.1); - -moz-box-shadow: 0 1px 10px rgba(0,0,0,.1); - box-shadow: 0 1px 10px rgba(0,0,0,.1); -} -.navbar-fixed-bottom { - bottom: 0; -} -.navbar-fixed-bottom .navbar-inner { - -webkit-box-shadow: 0 -1px 10px rgba(0,0,0,.1); - -moz-box-shadow: 0 -1px 10px rgba(0,0,0,.1); - box-shadow: 0 -1px 10px rgba(0,0,0,.1); -} -.navbar .nav { - position: relative; - left: 0; - display: block; - float: left; - margin: 0 10px 0 0; -} -.navbar .nav.pull-right { - float: right; - margin-right: 0; -} -.navbar .nav > li { - float: left; -} -.navbar .nav > li > a { - float: none; - padding: 10px 15px 10px; - color: #777777; - text-decoration: none; - text-shadow: 0 1px 0 #ffffff; -} -.navbar .nav .dropdown-toggle .caret { - margin-top: 8px; -} -.navbar .nav > li > a:focus, -.navbar .nav > li > a:hover { - background-color: transparent; - color: #333333; - text-decoration: none; -} -.navbar .nav > .active > a, -.navbar .nav > .active > a:hover, -.navbar .nav > .active > a:focus { - color: #555555; - text-decoration: none; - background-color: #e5e5e5; - -webkit-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); - -moz-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); -} -.navbar .btn-navbar { - display: none; - float: right; - padding: 7px 10px; - margin-left: 5px; - margin-right: 5px; - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #ededed; - background-image: -moz-linear-gradient(top, #f2f2f2, #e5e5e5); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5)); - background-image: -webkit-linear-gradient(top, #f2f2f2, #e5e5e5); - background-image: -o-linear-gradient(top, #f2f2f2, #e5e5e5); - background-image: linear-gradient(to bottom, #f2f2f2, #e5e5e5); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0); - border-color: #e5e5e5 #e5e5e5 #bfbfbf; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #e5e5e5; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075); - -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075); - box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075); -} -.navbar .btn-navbar:hover, -.navbar .btn-navbar:active, -.navbar .btn-navbar.active, -.navbar .btn-navbar.disabled, -.navbar .btn-navbar[disabled] { - color: #ffffff; - background-color: #e5e5e5; - *background-color: #d9d9d9; -} -.navbar .btn-navbar:active, -.navbar .btn-navbar.active { - background-color: #cccccc \9; -} -.navbar .btn-navbar .icon-bar { - display: block; - width: 18px; - height: 2px; - background-color: #f5f5f5; - -webkit-border-radius: 1px; - -moz-border-radius: 1px; - border-radius: 1px; - -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); - -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); - box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); -} -.btn-navbar .icon-bar + .icon-bar { - margin-top: 3px; -} -.navbar .nav > li > .dropdown-menu:before { - content: ''; - display: inline-block; - border-left: 7px solid transparent; - border-right: 7px solid transparent; - border-bottom: 7px solid #ccc; - border-bottom-color: rgba(0, 0, 0, 0.2); - position: absolute; - top: -7px; - left: 9px; -} -.navbar .nav > li > .dropdown-menu:after { - content: ''; - display: inline-block; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid #ffffff; - position: absolute; - top: -6px; - left: 10px; -} -.navbar-fixed-bottom .nav > li > .dropdown-menu:before { - border-top: 7px solid #ccc; - border-top-color: rgba(0, 0, 0, 0.2); - border-bottom: 0; - bottom: -7px; - top: auto; -} -.navbar-fixed-bottom .nav > li > .dropdown-menu:after { - border-top: 6px solid #ffffff; - border-bottom: 0; - bottom: -6px; - top: auto; -} -.navbar .nav li.dropdown > a:hover .caret { - border-top-color: #555555; - border-bottom-color: #555555; -} -.navbar .nav li.dropdown.open > .dropdown-toggle, -.navbar .nav li.dropdown.active > .dropdown-toggle, -.navbar .nav li.dropdown.open.active > .dropdown-toggle { - background-color: #e5e5e5; - color: #555555; -} -.navbar .nav li.dropdown > .dropdown-toggle .caret { - border-top-color: #777777; - border-bottom-color: #777777; -} -.navbar .nav li.dropdown.open > .dropdown-toggle .caret, -.navbar .nav li.dropdown.active > .dropdown-toggle .caret, -.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret { - border-top-color: #555555; - border-bottom-color: #555555; -} -.navbar .pull-right > li > .dropdown-menu, -.navbar .nav > li > .dropdown-menu.pull-right { - left: auto; - right: 0; -} -.navbar .pull-right > li > .dropdown-menu:before, -.navbar .nav > li > .dropdown-menu.pull-right:before { - left: auto; - right: 12px; -} -.navbar .pull-right > li > .dropdown-menu:after, -.navbar .nav > li > .dropdown-menu.pull-right:after { - left: auto; - right: 13px; -} -.navbar .pull-right > li > .dropdown-menu .dropdown-menu, -.navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu { - left: auto; - right: 100%; - margin-left: 0; - margin-right: -1px; - -webkit-border-radius: 6px 0 6px 6px; - -moz-border-radius: 6px 0 6px 6px; - border-radius: 6px 0 6px 6px; -} -.navbar-inverse .navbar-inner { - background-color: #1b1b1b; - background-image: -moz-linear-gradient(top, #222222, #111111); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111)); - background-image: -webkit-linear-gradient(top, #222222, #111111); - background-image: -o-linear-gradient(top, #222222, #111111); - background-image: linear-gradient(to bottom, #222222, #111111); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0); - border-color: #252525; -} -.navbar-inverse .brand, -.navbar-inverse .nav > li > a { - color: #999999; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); -} -.navbar-inverse .brand:hover, -.navbar-inverse .nav > li > a:hover { - color: #ffffff; -} -.navbar-inverse .brand { - color: #999999; -} -.navbar-inverse .navbar-text { - color: #999999; -} -.navbar-inverse .nav > li > a:focus, -.navbar-inverse .nav > li > a:hover { - background-color: transparent; - color: #ffffff; -} -.navbar-inverse .nav .active > a, -.navbar-inverse .nav .active > a:hover, -.navbar-inverse .nav .active > a:focus { - color: #ffffff; - background-color: #111111; -} -.navbar-inverse .navbar-link { - color: #999999; -} -.navbar-inverse .navbar-link:hover { - color: #ffffff; -} -.navbar-inverse .divider-vertical { - border-left-color: #111111; - border-right-color: #222222; -} -.navbar-inverse .nav li.dropdown.open > .dropdown-toggle, -.navbar-inverse .nav li.dropdown.active > .dropdown-toggle, -.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { - background-color: #111111; - color: #ffffff; -} -.navbar-inverse .nav li.dropdown > a:hover .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} -.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret { - border-top-color: #999999; - border-bottom-color: #999999; -} -.navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret, -.navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret, -.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} -.navbar-inverse .navbar-search .search-query { - color: #ffffff; - background-color: #515151; - border-color: #111111; - -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15); - -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15); - box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15); - -webkit-transition: none; - -moz-transition: none; - -o-transition: none; - transition: none; -} -.navbar-inverse .navbar-search .search-query:-moz-placeholder { - color: #cccccc; -} -.navbar-inverse .navbar-search .search-query:-ms-input-placeholder { - color: #cccccc; -} -.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder { - color: #cccccc; -} -.navbar-inverse .navbar-search .search-query:focus, -.navbar-inverse .navbar-search .search-query.focused { - padding: 5px 15px; - color: #333333; - text-shadow: 0 1px 0 #ffffff; - background-color: #ffffff; - border: 0; - -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - outline: 0; -} -.navbar-inverse .btn-navbar { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #0e0e0e; - background-image: -moz-linear-gradient(top, #151515, #040404); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404)); - background-image: -webkit-linear-gradient(top, #151515, #040404); - background-image: -o-linear-gradient(top, #151515, #040404); - background-image: linear-gradient(to bottom, #151515, #040404); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0); - border-color: #040404 #040404 #000000; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #040404; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.navbar-inverse .btn-navbar:hover, -.navbar-inverse .btn-navbar:active, -.navbar-inverse .btn-navbar.active, -.navbar-inverse .btn-navbar.disabled, -.navbar-inverse .btn-navbar[disabled] { - color: #ffffff; - background-color: #040404; - *background-color: #000000; -} -.navbar-inverse .btn-navbar:active, -.navbar-inverse .btn-navbar.active { - background-color: #000000 \9; -} -.breadcrumb { - padding: 8px 15px; - margin: 0 0 20px; - list-style: none; - background-color: #f5f5f5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.breadcrumb > li { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - text-shadow: 0 1px 0 #ffffff; -} -.breadcrumb > li > .divider { - padding: 0 5px; - color: #ccc; -} -.breadcrumb > .active { - color: #999999; -} -.pagination { - margin: 20px 0; -} -.pagination ul { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - margin-left: 0; - margin-bottom: 0; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); -} -.pagination ul > li { - display: inline; -} -.pagination ul > li > a, -.pagination ul > li > span { - float: left; - padding: 4px 12px; - line-height: 20px; - text-decoration: none; - background-color: #ffffff; - border: 1px solid #dddddd; - border-left-width: 0; -} -.pagination ul > li > a:hover, -.pagination ul > .active > a, -.pagination ul > .active > span { - background-color: #f5f5f5; -} -.pagination ul > .active > a, -.pagination ul > .active > span { - color: #999999; - cursor: default; -} -.pagination ul > .disabled > span, -.pagination ul > .disabled > a, -.pagination ul > .disabled > a:hover { - color: #999999; - background-color: transparent; - cursor: default; -} -.pagination ul > li:first-child > a, -.pagination ul > li:first-child > span { - border-left-width: 1px; - -webkit-border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; - border-top-left-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - border-bottom-left-radius: 4px; -} -.pagination ul > li:last-child > a, -.pagination ul > li:last-child > span { - -webkit-border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; - border-top-right-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -moz-border-radius-bottomright: 4px; - border-bottom-right-radius: 4px; -} -.pagination-centered { - text-align: center; -} -.pagination-right { - text-align: right; -} -.pagination-large ul > li > a, -.pagination-large ul > li > span { - padding: 11px 19px; - font-size: 17.5px; -} -.pagination-large ul > li:first-child > a, -.pagination-large ul > li:first-child > span { - -webkit-border-top-left-radius: 6px; - -moz-border-radius-topleft: 6px; - border-top-left-radius: 6px; - -webkit-border-bottom-left-radius: 6px; - -moz-border-radius-bottomleft: 6px; - border-bottom-left-radius: 6px; -} -.pagination-large ul > li:last-child > a, -.pagination-large ul > li:last-child > span { - -webkit-border-top-right-radius: 6px; - -moz-border-radius-topright: 6px; - border-top-right-radius: 6px; - -webkit-border-bottom-right-radius: 6px; - -moz-border-radius-bottomright: 6px; - border-bottom-right-radius: 6px; -} -.pagination-mini ul > li:first-child > a, -.pagination-small ul > li:first-child > a, -.pagination-mini ul > li:first-child > span, -.pagination-small ul > li:first-child > span { - -webkit-border-top-left-radius: 3px; - -moz-border-radius-topleft: 3px; - border-top-left-radius: 3px; - -webkit-border-bottom-left-radius: 3px; - -moz-border-radius-bottomleft: 3px; - border-bottom-left-radius: 3px; -} -.pagination-mini ul > li:last-child > a, -.pagination-small ul > li:last-child > a, -.pagination-mini ul > li:last-child > span, -.pagination-small ul > li:last-child > span { - -webkit-border-top-right-radius: 3px; - -moz-border-radius-topright: 3px; - border-top-right-radius: 3px; - -webkit-border-bottom-right-radius: 3px; - -moz-border-radius-bottomright: 3px; - border-bottom-right-radius: 3px; -} -.pagination-small ul > li > a, -.pagination-small ul > li > span { - padding: 2px 10px; - font-size: 11.9px; -} -.pagination-mini ul > li > a, -.pagination-mini ul > li > span { - padding: 0 6px; - font-size: 10.5px; -} -.pager { - margin: 20px 0; - list-style: none; - text-align: center; - *zoom: 1; -} -.pager:before, -.pager:after { - display: table; - content: ""; - line-height: 0; -} -.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; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; -} -.pager li > a:hover { - text-decoration: none; - background-color: #f5f5f5; -} -.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 > span { - color: #999999; - background-color: #fff; - cursor: default; -} -.thumbnails { - margin-left: -20px; - list-style: none; - *zoom: 1; -} -.thumbnails:before, -.thumbnails:after { - display: table; - content: ""; - line-height: 0; -} -.thumbnails:after { - clear: both; -} -.row-fluid .thumbnails { - margin-left: 0; -} -.thumbnails > li { - float: left; - margin-bottom: 20px; - margin-left: 20px; -} -.thumbnail { - display: block; - padding: 4px; - line-height: 20px; - border: 1px solid #ddd; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); - -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); - -webkit-transition: all 0.2s ease-in-out; - -moz-transition: all 0.2s ease-in-out; - -o-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; -} -a.thumbnail:hover { - border-color: #0088cc; - -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); - -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); - box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); -} -.thumbnail > img { - display: block; - max-width: 100%; - margin-left: auto; - margin-right: auto; -} -.thumbnail .caption { - padding: 9px; - color: #555555; -} -.alert { - padding: 8px 35px 8px 14px; - margin-bottom: 20px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - background-color: #fcf8e3; - border: 1px solid #fbeed5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.alert, -.alert h4 { - color: #c09853; -} -.alert h4 { - margin: 0; -} -.alert .close { - position: relative; - top: -2px; - right: -21px; - line-height: 20px; -} -.alert-success { - background-color: #dff0d8; - border-color: #d6e9c6; - color: #468847; -} -.alert-success h4 { - color: #468847; -} -.alert-danger, -.alert-error { - background-color: #f2dede; - border-color: #eed3d7; - color: #b94a48; -} -.alert-danger h4, -.alert-error h4 { - color: #b94a48; -} -.alert-info { - background-color: #d9edf7; - border-color: #bce8f1; - color: #3a87ad; -} -.alert-info h4 { - color: #3a87ad; -} -.alert-block { - padding-top: 14px; - padding-bottom: 14px; -} -.alert-block > p, -.alert-block > ul { - margin-bottom: 0; -} -.alert-block p + p { - margin-top: 5px; -} -@-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; - } -} -@-ms-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 { - overflow: hidden; - height: 20px; - margin-bottom: 20px; - background-color: #f7f7f7; - background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); - background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0); - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.progress .bar { - width: 0%; - height: 100%; - color: #ffffff; - float: left; - font-size: 12px; - text-align: center; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #0e90d2; - background-image: -moz-linear-gradient(top, #149bdf, #0480be); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); - background-image: -webkit-linear-gradient(top, #149bdf, #0480be); - background-image: -o-linear-gradient(top, #149bdf, #0480be); - background-image: linear-gradient(to bottom, #149bdf, #0480be); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0); - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -moz-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-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-transition: width 0.6s ease; - -moz-transition: width 0.6s ease; - -o-transition: width 0.6s ease; - transition: width 0.6s ease; -} -.progress .bar + .bar { - -webkit-box-shadow: inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15); - -moz-box-shadow: inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15); - box-shadow: inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15); -} -.progress-striped .bar { - background-color: #149bdf; - 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: -o-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); - -webkit-background-size: 40px 40px; - -moz-background-size: 40px 40px; - -o-background-size: 40px 40px; - background-size: 40px 40px; -} -.progress.active .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-danger .bar, -.progress .bar-danger { - background-color: #dd514c; - background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); - background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0); -} -.progress-danger.progress-striped .bar, -.progress-striped .bar-danger { - background-color: #ee5f5b; - 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: -o-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-success .bar, -.progress .bar-success { - background-color: #5eb95e; - background-image: -moz-linear-gradient(top, #62c462, #57a957); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); - background-image: -webkit-linear-gradient(top, #62c462, #57a957); - background-image: -o-linear-gradient(top, #62c462, #57a957); - background-image: linear-gradient(to bottom, #62c462, #57a957); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0); -} -.progress-success.progress-striped .bar, -.progress-striped .bar-success { - background-color: #62c462; - 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: -o-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-info .bar, -.progress .bar-info { - background-color: #4bb1cf; - background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); - background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); - background-image: -o-linear-gradient(top, #5bc0de, #339bb9); - background-image: linear-gradient(to bottom, #5bc0de, #339bb9); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0); -} -.progress-info.progress-striped .bar, -.progress-striped .bar-info { - background-color: #5bc0de; - 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: -o-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-warning .bar, -.progress .bar-warning { - background-color: #faa732; - background-image: -moz-linear-gradient(top, #fbb450, #f89406); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); - background-image: -webkit-linear-gradient(top, #fbb450, #f89406); - background-image: -o-linear-gradient(top, #fbb450, #f89406); - background-image: linear-gradient(to bottom, #fbb450, #f89406); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); -} -.progress-warning.progress-striped .bar, -.progress-striped .bar-warning { - background-color: #fbb450; - 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: -o-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); -} -.hero-unit { - padding: 60px; - margin-bottom: 30px; - font-size: 18px; - font-weight: 200; - line-height: 30px; - color: inherit; - background-color: #eeeeee; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} -.hero-unit h1 { - margin-bottom: 0; - font-size: 60px; - line-height: 1; - color: inherit; - letter-spacing: -1px; -} -.hero-unit li { - line-height: 30px; -} -.media, -.media-body { - overflow: hidden; - *overflow: visible; - 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 { - margin-left: 0; - list-style: none; -} -.tooltip { - position: absolute; - z-index: 1030; - display: block; - visibility: visible; - padding: 5px; - font-size: 11px; - opacity: 0; - filter: alpha(opacity=0); -} -.tooltip.in { - opacity: 0.8; - filter: alpha(opacity=80); -} -.tooltip.top { - margin-top: -3px; -} -.tooltip.right { - margin-left: 3px; -} -.tooltip.bottom { - margin-top: 3px; -} -.tooltip.left { - margin-left: -3px; -} -.tooltip-inner { - max-width: 200px; - padding: 3px 8px; - color: #ffffff; - text-align: center; - text-decoration: none; - background-color: #000000; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - 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-width: 5px 5px 0; - border-top-color: #000000; -} -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-width: 5px 5px 5px 0; - border-right-color: #000000; -} -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-width: 5px 0 5px 5px; - border-left-color: #000000; -} -.tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000000; -} -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1010; - display: none; - width: 236px; - padding: 1px; - text-align: left; - background-color: #ffffff; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - white-space: normal; -} -.popover.top { - margin-top: -10px; -} -.popover.right { - margin-left: 10px; -} -.popover.bottom { - margin-top: 10px; -} -.popover.left { - margin-left: -10px; -} -.popover-title { - margin: 0; - padding: 8px 14px; - font-size: 14px; - font-weight: normal; - line-height: 18px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - -webkit-border-radius: 5px 5px 0 0; - -moz-border-radius: 5px 5px 0 0; - 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 { - left: 50%; - margin-left: -11px; - border-bottom-width: 0; - border-top-color: #999; - border-top-color: rgba(0, 0, 0, 0.25); - bottom: -11px; -} -.popover.top .arrow:after { - bottom: 1px; - margin-left: -10px; - border-bottom-width: 0; - border-top-color: #ffffff; -} -.popover.right .arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-left-width: 0; - border-right-color: #999; - border-right-color: rgba(0, 0, 0, 0.25); -} -.popover.right .arrow:after { - left: 1px; - bottom: -10px; - border-left-width: 0; - border-right-color: #ffffff; -} -.popover.bottom .arrow { - left: 50%; - margin-left: -11px; - border-top-width: 0; - border-bottom-color: #999; - border-bottom-color: rgba(0, 0, 0, 0.25); - top: -11px; -} -.popover.bottom .arrow:after { - top: 1px; - margin-left: -10px; - border-top-width: 0; - border-bottom-color: #ffffff; -} -.popover.left .arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-right-width: 0; - border-left-color: #999; - border-left-color: rgba(0, 0, 0, 0.25); -} -.popover.left .arrow:after { - right: 1px; - border-right-width: 0; - border-left-color: #ffffff; - bottom: -10px; -} -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: #000000; -} -.modal-backdrop.fade { - opacity: 0; -} -.modal-backdrop, -.modal-backdrop.fade.in { - opacity: 0.8; - filter: alpha(opacity=80); -} -.modal { - position: fixed; - top: 10%; - left: 50%; - z-index: 1050; - width: 560px; - margin-left: -280px; - background-color: #ffffff; - border: 1px solid #999; - border: 1px solid rgba(0, 0, 0, 0.3); - *border: 1px solid #999; - /* IE6-7 */ - - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -webkit-background-clip: padding-box; - -moz-background-clip: padding-box; - background-clip: padding-box; - outline: none; -} -.modal.fade { - -webkit-transition: opacity .3s linear, top .3s ease-out; - -moz-transition: opacity .3s linear, top .3s ease-out; - -o-transition: opacity .3s linear, top .3s ease-out; - transition: opacity .3s linear, top .3s ease-out; - top: -25%; -} -.modal.fade.in { - top: 10%; -} -.modal-header { - padding: 9px 15px; - border-bottom: 1px solid #eee; -} -.modal-header .close { - margin-top: 2px; -} -.modal-header h3 { - margin: 0; - line-height: 30px; -} -.modal-body { - position: relative; - overflow-y: auto; - max-height: 400px; - padding: 15px; -} -.modal-form { - margin-bottom: 0; -} -.modal-footer { - padding: 14px 15px 15px; - margin-bottom: 0; - text-align: right; - background-color: #f5f5f5; - border-top: 1px solid #ddd; - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; - -webkit-box-shadow: inset 0 1px 0 #ffffff; - -moz-box-shadow: inset 0 1px 0 #ffffff; - box-shadow: inset 0 1px 0 #ffffff; - *zoom: 1; -} -.modal-footer:before, -.modal-footer:after { - display: table; - content: ""; - line-height: 0; -} -.modal-footer:after { - clear: both; -} -.modal-footer .btn + .btn { - margin-left: 5px; - margin-bottom: 0; -} -.modal-footer .btn-group .btn + .btn { - margin-left: -1px; -} -.modal-footer .btn-block + .btn-block { - margin-left: 0; -} -.dropup, -.dropdown { - position: relative; -} -.dropdown-toggle { - *margin-bottom: -3px; -} -.dropdown-toggle:active, -.open .dropdown-toggle { - outline: 0; -} -.caret { - display: inline-block; - width: 0; - height: 0; - vertical-align: top; - border-top: 4px solid #000000; - border-right: 4px solid transparent; - border-left: 4px solid transparent; - content: ""; -} -.dropdown .caret { - margin-top: 8px; - margin-left: 2px; -} -.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; - list-style: none; - background-color: #ffffff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - *border-right-width: 2px; - *border-bottom-width: 2px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -.dropdown-menu.pull-right { - right: 0; - left: auto; -} -.dropdown-menu .divider { - *width: 100%; - height: 1px; - margin: 9px 1px; - *margin: -5px 0 5px; - overflow: hidden; - background-color: #e5e5e5; - border-bottom: 1px solid #ffffff; -} -.dropdown-menu li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: 20px; - color: #333333; - white-space: nowrap; -} -.dropdown-menu li > a:hover, -.dropdown-menu li > a:focus, -.dropdown-submenu:hover > a { - text-decoration: none; - color: #ffffff; - background-color: #0081c2; - background-image: -moz-linear-gradient(top, #0088cc, #0077b3); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); - background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); - background-image: -o-linear-gradient(top, #0088cc, #0077b3); - background-image: linear-gradient(to bottom, #0088cc, #0077b3); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); -} -.dropdown-menu .active > a, -.dropdown-menu .active > a:hover { - color: #ffffff; - text-decoration: none; - outline: 0; - background-color: #0081c2; - background-image: -moz-linear-gradient(top, #0088cc, #0077b3); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); - background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); - background-image: -o-linear-gradient(top, #0088cc, #0077b3); - background-image: linear-gradient(to bottom, #0088cc, #0077b3); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); -} -.dropdown-menu .disabled > a, -.dropdown-menu .disabled > a:hover { - color: #999999; -} -.dropdown-menu .disabled > a:hover { - text-decoration: none; - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - cursor: default; -} -.open { - *z-index: 1000; -} -.open > .dropdown-menu { - display: block; -} -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - border-top: 0; - border-bottom: 4px solid #000000; - content: ""; -} -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 1px; -} -.dropdown-submenu { - position: relative; -} -.dropdown-submenu > .dropdown-menu { - top: 0; - left: 100%; - margin-top: -6px; - margin-left: -1px; - -webkit-border-radius: 0 6px 6px 6px; - -moz-border-radius: 0 6px 6px 6px; - border-radius: 0 6px 6px 6px; -} -.dropdown-submenu:hover > .dropdown-menu { - display: block; -} -.dropup .dropdown-submenu > .dropdown-menu { - top: auto; - bottom: 0; - margin-top: 0; - margin-bottom: -2px; - -webkit-border-radius: 5px 5px 5px 0; - -moz-border-radius: 5px 5px 5px 0; - border-radius: 5px 5px 5px 0; -} -.dropdown-submenu > a:after { - display: block; - content: " "; - float: right; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; - border-width: 5px 0 5px 5px; - border-left-color: #cccccc; - margin-top: 5px; - margin-right: -10px; -} -.dropdown-submenu:hover > a:after { - border-left-color: #ffffff; -} -.dropdown-submenu.pull-left { - float: none; -} -.dropdown-submenu.pull-left > .dropdown-menu { - left: -100%; - margin-left: 10px; - -webkit-border-radius: 6px 0 6px 6px; - -moz-border-radius: 6px 0 6px 6px; - border-radius: 6px 0 6px 6px; -} -.dropdown .dropdown-menu .nav-header { - padding-left: 20px; - padding-right: 20px; -} -.typeahead { - z-index: 1051; - margin-top: 2px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.accordion { - margin-bottom: 20px; -} -.accordion-group { - margin-bottom: 2px; - border: 1px solid #e5e5e5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.accordion-heading { - border-bottom: 0; -} -.accordion-heading .accordion-toggle { - display: block; - padding: 8px 15px; -} -.accordion-toggle { - cursor: pointer; -} -.accordion-inner { - padding: 9px 15px; - border-top: 1px solid #e5e5e5; -} -.carousel { - position: relative; - margin-bottom: 20px; - line-height: 1; -} -.carousel-inner { - overflow: hidden; - width: 100%; - position: relative; -} -.carousel-inner > .item { - display: none; - position: relative; - -webkit-transition: 0.6s ease-in-out left; - -moz-transition: 0.6s ease-in-out left; - -o-transition: 0.6s ease-in-out left; - transition: 0.6s ease-in-out left; -} -.carousel-inner > .item > img { - display: block; - 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: 40%; - left: 15px; - width: 40px; - height: 40px; - margin-top: -20px; - font-size: 60px; - font-weight: 100; - line-height: 30px; - color: #ffffff; - text-align: center; - background: #222222; - border: 3px solid #ffffff; - -webkit-border-radius: 23px; - -moz-border-radius: 23px; - border-radius: 23px; - opacity: 0.5; - filter: alpha(opacity=50); -} -.carousel-control.right { - left: auto; - right: 15px; -} -.carousel-control:hover { - color: #ffffff; - text-decoration: none; - opacity: 0.9; - filter: alpha(opacity=90); -} -.carousel-caption { - position: absolute; - left: 0; - right: 0; - bottom: 0; - padding: 15px; - background: #333333; - background: rgba(0, 0, 0, 0.75); -} -.carousel-caption h4, -.carousel-caption p { - color: #ffffff; - line-height: 20px; -} -.carousel-caption h4 { - margin: 0 0 5px; -} -.carousel-caption p { - margin-bottom: 0; -} -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e3e3e3; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - -moz-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-large { - padding: 24px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} -.well-small { - padding: 9px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.close { - float: right; - font-size: 20px; - font-weight: bold; - line-height: 20px; - color: #000000; - text-shadow: 0 1px 0 #ffffff; - opacity: 0.2; - filter: alpha(opacity=20); -} -.close:hover { - color: #000000; - text-decoration: none; - cursor: pointer; - opacity: 0.4; - filter: alpha(opacity=40); -} -button.close { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; -} -.pull-right { - float: right; -} -.pull-left { - float: left; -} -.hide { - display: none; -} -.show { - display: block; -} -.invisible { - visibility: hidden; -} -.affix { - position: fixed; -} -.fade { - opacity: 0; - -webkit-transition: opacity 0.15s linear; - -moz-transition: opacity 0.15s linear; - -o-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; -} -.fade.in { - opacity: 1; -} -.collapse { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition: height 0.35s ease; - -moz-transition: height 0.35s ease; - -o-transition: height 0.35s ease; - transition: height 0.35s ease; -} -.collapse.in { - height: auto; -} -.hidden { - display: none; - visibility: hidden; -} -.visible-phone { - display: none !important; -} -.visible-tablet { - display: none !important; -} -.hidden-desktop { - display: none !important; -} -.visible-desktop { - display: inherit !important; -} -@media (min-width: 768px) and (max-width: 979px) { - .hidden-desktop { - display: inherit !important; - } - .visible-desktop { - display: none !important ; - } - .visible-tablet { - display: inherit !important; - } - .hidden-tablet { - display: none !important; - } -} -@media (max-width: 767px) { - .hidden-desktop { - display: inherit !important; - } - .visible-desktop { - display: none !important; - } - .visible-phone { - display: inherit !important; - } - .hidden-phone { - display: none !important; - } -} -@media (max-width: 767px) { - body { - padding-left: 20px; - padding-right: 20px; - } - .navbar-fixed-top, - .navbar-fixed-bottom, - .navbar-static-top { - margin-left: -20px; - margin-right: -20px; - } - .container-fluid { - padding: 0; - } - .dl-horizontal dt { - float: none; - clear: none; - width: auto; - text-align: left; - } - .dl-horizontal dd { - margin-left: 0; - } - .container { - width: auto; - } - .row-fluid { - width: 100%; - } - .row, - .thumbnails { - margin-left: 0; - } - .thumbnails > li { - float: none; - margin-left: 0; - } - [class*="span"], - .uneditable-input[class*="span"], - .row-fluid [class*="span"] { - float: none; - display: block; - width: 100%; - margin-left: 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - .span12, - .row-fluid .span12 { - width: 100%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - .row-fluid [class*="offset"]:first-child { - margin-left: 0; - } - .input-large, - .input-xlarge, - .input-xxlarge, - input[class*="span"], - select[class*="span"], - textarea[class*="span"], - .uneditable-input { - display: block; - width: 100%; - min-height: 30px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - .input-prepend input, - .input-append input, - .input-prepend input[class*="span"], - .input-append input[class*="span"] { - display: inline-block; - width: auto; - } - .controls-row [class*="span"] + [class*="span"] { - margin-left: 0; - } - .modal { - position: fixed; - top: 20px; - left: 20px; - right: 20px; - width: auto; - margin: 0; - } - .modal.fade { - top: -100px; - } - .modal.fade.in { - top: 20px; - } -} -@media (max-width: 480px) { - .nav-collapse { - -webkit-transform: translate3d(0, 0, 0); - } - .page-header h1 small { - display: block; - line-height: 20px; - } - input[type="checkbox"], - input[type="radio"] { - border: 1px solid #ccc; - } - .form-horizontal .control-label { - float: none; - width: auto; - padding-top: 0; - text-align: left; - } - .form-horizontal .controls { - margin-left: 0; - } - .form-horizontal .control-list { - padding-top: 0; - } - .form-horizontal .form-actions { - padding-left: 10px; - padding-right: 10px; - } - .media .pull-left, - .media .pull-right { - float: none; - display: block; - margin-bottom: 10px; - } - .media-object { - margin-right: 0; - margin-left: 0; - } - .modal { - top: 10px; - left: 10px; - right: 10px; - } - .modal-header .close { - padding: 10px; - margin: -10px; - } - .carousel-caption { - position: static; - } -} -@media (min-width: 768px) and (max-width: 979px) { - .row { - margin-left: -20px; - *zoom: 1; - } - .row:before, - .row:after { - display: table; - content: ""; - line-height: 0; - } - .row:after { - clear: both; - } - [class*="span"] { - float: left; - min-height: 1px; - margin-left: 20px; - } - .container, - .navbar-static-top .container, - .navbar-fixed-top .container, - .navbar-fixed-bottom .container { - width: 724px; - } - .span12 { - width: 724px; - } - .span11 { - width: 662px; - } - .span10 { - width: 600px; - } - .span9 { - width: 538px; - } - .span8 { - width: 476px; - } - .span7 { - width: 414px; - } - .span6 { - width: 352px; - } - .span5 { - width: 290px; - } - .span4 { - width: 228px; - } - .span3 { - width: 166px; - } - .span2 { - width: 104px; - } - .span1 { - width: 42px; - } - .offset12 { - margin-left: 764px; - } - .offset11 { - margin-left: 702px; - } - .offset10 { - margin-left: 640px; - } - .offset9 { - margin-left: 578px; - } - .offset8 { - margin-left: 516px; - } - .offset7 { - margin-left: 454px; - } - .offset6 { - margin-left: 392px; - } - .offset5 { - margin-left: 330px; - } - .offset4 { - margin-left: 268px; - } - .offset3 { - margin-left: 206px; - } - .offset2 { - margin-left: 144px; - } - .offset1 { - margin-left: 82px; - } - .row-fluid { - width: 100%; - *zoom: 1; - } - .row-fluid:before, - .row-fluid:after { - display: table; - content: ""; - line-height: 0; - } - .row-fluid:after { - clear: both; - } - .row-fluid [class*="span"] { - display: block; - width: 100%; - min-height: 30px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - float: left; - margin-left: 2.7624309392265194%; - *margin-left: 2.709239449864817%; - } - .row-fluid [class*="span"]:first-child { - margin-left: 0; - } - .row-fluid .controls-row [class*="span"] + [class*="span"] { - margin-left: 2.7624309392265194%; - } - .row-fluid .span12 { - width: 100%; - *width: 99.94680851063829%; - } - .row-fluid .span11 { - width: 91.43646408839778%; - *width: 91.38327259903608%; - } - .row-fluid .span10 { - width: 82.87292817679558%; - *width: 82.81973668743387%; - } - .row-fluid .span9 { - width: 74.30939226519337%; - *width: 74.25620077583166%; - } - .row-fluid .span8 { - width: 65.74585635359117%; - *width: 65.69266486422946%; - } - .row-fluid .span7 { - width: 57.18232044198895%; - *width: 57.12912895262725%; - } - .row-fluid .span6 { - width: 48.61878453038674%; - *width: 48.56559304102504%; - } - .row-fluid .span5 { - width: 40.05524861878453%; - *width: 40.00205712942283%; - } - .row-fluid .span4 { - width: 31.491712707182323%; - *width: 31.43852121782062%; - } - .row-fluid .span3 { - width: 22.92817679558011%; - *width: 22.87498530621841%; - } - .row-fluid .span2 { - width: 14.3646408839779%; - *width: 14.311449394616199%; - } - .row-fluid .span1 { - width: 5.801104972375691%; - *width: 5.747913483013988%; - } - .row-fluid .offset12 { - margin-left: 105.52486187845304%; - *margin-left: 105.41847889972962%; - } - .row-fluid .offset12:first-child { - margin-left: 102.76243093922652%; - *margin-left: 102.6560479605031%; - } - .row-fluid .offset11 { - margin-left: 96.96132596685082%; - *margin-left: 96.8549429881274%; - } - .row-fluid .offset11:first-child { - margin-left: 94.1988950276243%; - *margin-left: 94.09251204890089%; - } - .row-fluid .offset10 { - margin-left: 88.39779005524862%; - *margin-left: 88.2914070765252%; - } - .row-fluid .offset10:first-child { - margin-left: 85.6353591160221%; - *margin-left: 85.52897613729868%; - } - .row-fluid .offset9 { - margin-left: 79.8342541436464%; - *margin-left: 79.72787116492299%; - } - .row-fluid .offset9:first-child { - margin-left: 77.07182320441989%; - *margin-left: 76.96544022569647%; - } - .row-fluid .offset8 { - margin-left: 71.2707182320442%; - *margin-left: 71.16433525332079%; - } - .row-fluid .offset8:first-child { - margin-left: 68.50828729281768%; - *margin-left: 68.40190431409427%; - } - .row-fluid .offset7 { - margin-left: 62.70718232044199%; - *margin-left: 62.600799341718584%; - } - .row-fluid .offset7:first-child { - margin-left: 59.94475138121547%; - *margin-left: 59.838368402492065%; - } - .row-fluid .offset6 { - margin-left: 54.14364640883978%; - *margin-left: 54.037263430116376%; - } - .row-fluid .offset6:first-child { - margin-left: 51.38121546961326%; - *margin-left: 51.27483249088986%; - } - .row-fluid .offset5 { - margin-left: 45.58011049723757%; - *margin-left: 45.47372751851417%; - } - .row-fluid .offset5:first-child { - margin-left: 42.81767955801105%; - *margin-left: 42.71129657928765%; - } - .row-fluid .offset4 { - margin-left: 37.01657458563536%; - *margin-left: 36.91019160691196%; - } - .row-fluid .offset4:first-child { - margin-left: 34.25414364640884%; - *margin-left: 34.14776066768544%; - } - .row-fluid .offset3 { - margin-left: 28.45303867403315%; - *margin-left: 28.346655695309746%; - } - .row-fluid .offset3:first-child { - margin-left: 25.69060773480663%; - *margin-left: 25.584224756083227%; - } - .row-fluid .offset2 { - margin-left: 19.88950276243094%; - *margin-left: 19.783119783707537%; - } - .row-fluid .offset2:first-child { - margin-left: 17.12707182320442%; - *margin-left: 17.02068884448102%; - } - .row-fluid .offset1 { - margin-left: 11.32596685082873%; - *margin-left: 11.219583872105325%; - } - .row-fluid .offset1:first-child { - margin-left: 8.56353591160221%; - *margin-left: 8.457152932878806%; - } - input, - textarea, - .uneditable-input { - margin-left: 0; - } - .controls-row [class*="span"] + [class*="span"] { - margin-left: 20px; - } - input.span12, textarea.span12, .uneditable-input.span12 { - width: 710px; - } - input.span11, textarea.span11, .uneditable-input.span11 { - width: 648px; - } - input.span10, textarea.span10, .uneditable-input.span10 { - width: 586px; - } - input.span9, textarea.span9, .uneditable-input.span9 { - width: 524px; - } - input.span8, textarea.span8, .uneditable-input.span8 { - width: 462px; - } - input.span7, textarea.span7, .uneditable-input.span7 { - width: 400px; - } - input.span6, textarea.span6, .uneditable-input.span6 { - width: 338px; - } - input.span5, textarea.span5, .uneditable-input.span5 { - width: 276px; - } - input.span4, textarea.span4, .uneditable-input.span4 { - width: 214px; - } - input.span3, textarea.span3, .uneditable-input.span3 { - width: 152px; - } - input.span2, textarea.span2, .uneditable-input.span2 { - width: 90px; - } - input.span1, textarea.span1, .uneditable-input.span1 { - width: 28px; - } -} -@media (min-width: 1200px) { - .row { - margin-left: -30px; - *zoom: 1; - } - .row:before, - .row:after { - display: table; - content: ""; - line-height: 0; - } - .row:after { - clear: both; - } - [class*="span"] { - float: left; - min-height: 1px; - margin-left: 30px; - } - .container, - .navbar-static-top .container, - .navbar-fixed-top .container, - .navbar-fixed-bottom .container { - width: 1170px; - } - .span12 { - width: 1170px; - } - .span11 { - width: 1070px; - } - .span10 { - width: 970px; - } - .span9 { - width: 870px; - } - .span8 { - width: 770px; - } - .span7 { - width: 670px; - } - .span6 { - width: 570px; - } - .span5 { - width: 470px; - } - .span4 { - width: 370px; - } - .span3 { - width: 270px; - } - .span2 { - width: 170px; - } - .span1 { - width: 70px; - } - .offset12 { - margin-left: 1230px; - } - .offset11 { - margin-left: 1130px; - } - .offset10 { - margin-left: 1030px; - } - .offset9 { - margin-left: 930px; - } - .offset8 { - margin-left: 830px; - } - .offset7 { - margin-left: 730px; - } - .offset6 { - margin-left: 630px; - } - .offset5 { - margin-left: 530px; - } - .offset4 { - margin-left: 430px; - } - .offset3 { - margin-left: 330px; - } - .offset2 { - margin-left: 230px; - } - .offset1 { - margin-left: 130px; - } - .row-fluid { - width: 100%; - *zoom: 1; - } - .row-fluid:before, - .row-fluid:after { - display: table; - content: ""; - line-height: 0; - } - .row-fluid:after { - clear: both; - } - .row-fluid [class*="span"] { - display: block; - width: 100%; - min-height: 30px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - float: left; - margin-left: 2.564102564102564%; - *margin-left: 2.5109110747408616%; - } - .row-fluid [class*="span"]:first-child { - margin-left: 0; - } - .row-fluid .controls-row [class*="span"] + [class*="span"] { - margin-left: 2.564102564102564%; - } - .row-fluid .span12 { - width: 100%; - *width: 99.94680851063829%; - } - .row-fluid .span11 { - width: 91.45299145299145%; - *width: 91.39979996362975%; - } - .row-fluid .span10 { - width: 82.90598290598291%; - *width: 82.8527914166212%; - } - .row-fluid .span9 { - width: 74.35897435897436%; - *width: 74.30578286961266%; - } - .row-fluid .span8 { - width: 65.81196581196582%; - *width: 65.75877432260411%; - } - .row-fluid .span7 { - width: 57.26495726495726%; - *width: 57.21176577559556%; - } - .row-fluid .span6 { - width: 48.717948717948715%; - *width: 48.664757228587014%; - } - .row-fluid .span5 { - width: 40.17094017094017%; - *width: 40.11774868157847%; - } - .row-fluid .span4 { - width: 31.623931623931625%; - *width: 31.570740134569924%; - } - .row-fluid .span3 { - width: 23.076923076923077%; - *width: 23.023731587561375%; - } - .row-fluid .span2 { - width: 14.52991452991453%; - *width: 14.476723040552828%; - } - .row-fluid .span1 { - width: 5.982905982905983%; - *width: 5.929714493544281%; - } - .row-fluid .offset12 { - margin-left: 105.12820512820512%; - *margin-left: 105.02182214948171%; - } - .row-fluid .offset12:first-child { - margin-left: 102.56410256410257%; - *margin-left: 102.45771958537915%; - } - .row-fluid .offset11 { - margin-left: 96.58119658119658%; - *margin-left: 96.47481360247316%; - } - .row-fluid .offset11:first-child { - margin-left: 94.01709401709402%; - *margin-left: 93.91071103837061%; - } - .row-fluid .offset10 { - margin-left: 88.03418803418803%; - *margin-left: 87.92780505546462%; - } - .row-fluid .offset10:first-child { - margin-left: 85.47008547008548%; - *margin-left: 85.36370249136206%; - } - .row-fluid .offset9 { - margin-left: 79.48717948717949%; - *margin-left: 79.38079650845607%; - } - .row-fluid .offset9:first-child { - margin-left: 76.92307692307693%; - *margin-left: 76.81669394435352%; - } - .row-fluid .offset8 { - margin-left: 70.94017094017094%; - *margin-left: 70.83378796144753%; - } - .row-fluid .offset8:first-child { - margin-left: 68.37606837606839%; - *margin-left: 68.26968539734497%; - } - .row-fluid .offset7 { - margin-left: 62.393162393162385%; - *margin-left: 62.28677941443899%; - } - .row-fluid .offset7:first-child { - margin-left: 59.82905982905982%; - *margin-left: 59.72267685033642%; - } - .row-fluid .offset6 { - margin-left: 53.84615384615384%; - *margin-left: 53.739770867430444%; - } - .row-fluid .offset6:first-child { - margin-left: 51.28205128205128%; - *margin-left: 51.175668303327875%; - } - .row-fluid .offset5 { - margin-left: 45.299145299145295%; - *margin-left: 45.1927623204219%; - } - .row-fluid .offset5:first-child { - margin-left: 42.73504273504273%; - *margin-left: 42.62865975631933%; - } - .row-fluid .offset4 { - margin-left: 36.75213675213675%; - *margin-left: 36.645753773413354%; - } - .row-fluid .offset4:first-child { - margin-left: 34.18803418803419%; - *margin-left: 34.081651209310785%; - } - .row-fluid .offset3 { - margin-left: 28.205128205128204%; - *margin-left: 28.0987452264048%; - } - .row-fluid .offset3:first-child { - margin-left: 25.641025641025642%; - *margin-left: 25.53464266230224%; - } - .row-fluid .offset2 { - margin-left: 19.65811965811966%; - *margin-left: 19.551736679396257%; - } - .row-fluid .offset2:first-child { - margin-left: 17.094017094017094%; - *margin-left: 16.98763411529369%; - } - .row-fluid .offset1 { - margin-left: 11.11111111111111%; - *margin-left: 11.004728132387708%; - } - .row-fluid .offset1:first-child { - margin-left: 8.547008547008547%; - *margin-left: 8.440625568285142%; - } - input, - textarea, - .uneditable-input { - margin-left: 0; - } - .controls-row [class*="span"] + [class*="span"] { - margin-left: 30px; - } - input.span12, textarea.span12, .uneditable-input.span12 { - width: 1156px; - } - input.span11, textarea.span11, .uneditable-input.span11 { - width: 1056px; - } - input.span10, textarea.span10, .uneditable-input.span10 { - width: 956px; - } - input.span9, textarea.span9, .uneditable-input.span9 { - width: 856px; - } - input.span8, textarea.span8, .uneditable-input.span8 { - width: 756px; - } - input.span7, textarea.span7, .uneditable-input.span7 { - width: 656px; - } - input.span6, textarea.span6, .uneditable-input.span6 { - width: 556px; - } - input.span5, textarea.span5, .uneditable-input.span5 { - width: 456px; - } - input.span4, textarea.span4, .uneditable-input.span4 { - width: 356px; - } - input.span3, textarea.span3, .uneditable-input.span3 { - width: 256px; - } - input.span2, textarea.span2, .uneditable-input.span2 { - width: 156px; - } - input.span1, textarea.span1, .uneditable-input.span1 { - width: 56px; - } - .thumbnails { - margin-left: -30px; - } - .thumbnails > li { - margin-left: 30px; - } - .row-fluid .thumbnails { - margin-left: 0; - } -} -@media (max-width: 979px) { - body { - padding-top: 0; - } - .navbar-fixed-top, - .navbar-fixed-bottom { - position: static; - } - .navbar-fixed-top { - margin-bottom: 20px; - } - .navbar-fixed-bottom { - margin-top: 20px; - } - .navbar-fixed-top .navbar-inner, - .navbar-fixed-bottom .navbar-inner { - padding: 5px; - } - .navbar .container { - width: auto; - padding: 0; - } - .navbar .brand { - padding-left: 10px; - padding-right: 10px; - margin: 0 0 0 -5px; - } - .nav-collapse { - clear: both; - } - .nav-collapse .nav { - float: none; - margin: 0 0 10px; - } - .nav-collapse .nav > li { - float: none; - } - .nav-collapse .nav > li > a { - margin-bottom: 2px; - } - .nav-collapse .nav > .divider-vertical { - display: none; - } - .nav-collapse .nav .nav-header { - color: #777777; - text-shadow: none; - } - .nav-collapse .nav > li > a, - .nav-collapse .dropdown-menu a { - padding: 9px 15px; - font-weight: bold; - color: #777777; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - } - .nav-collapse .btn { - padding: 4px 10px 4px; - font-weight: normal; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - } - .nav-collapse .dropdown-menu li + li a { - margin-bottom: 2px; - } - .nav-collapse .nav > li > a:hover, - .nav-collapse .dropdown-menu a:hover { - background-color: #f2f2f2; - } - .navbar-inverse .nav-collapse .nav > li > a, - .navbar-inverse .nav-collapse .dropdown-menu a { - color: #999999; - } - .navbar-inverse .nav-collapse .nav > li > a:hover, - .navbar-inverse .nav-collapse .dropdown-menu a:hover { - background-color: #111111; - } - .nav-collapse.in .btn-group { - margin-top: 5px; - padding: 0; - } - .nav-collapse .dropdown-menu { - position: static; - top: auto; - left: auto; - float: none; - display: none; - max-width: none; - margin: 0 15px; - padding: 0; - background-color: transparent; - border: none; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; - } - .nav-collapse .open > .dropdown-menu { - display: block; - } - .nav-collapse .dropdown-menu:before, - .nav-collapse .dropdown-menu:after { - display: none; - } - .nav-collapse .dropdown-menu .divider { - display: none; - } - .nav-collapse .nav > li > .dropdown-menu:before, - .nav-collapse .nav > li > .dropdown-menu:after { - display: none; - } - .nav-collapse .navbar-form, - .nav-collapse .navbar-search { - float: none; - padding: 10px 15px; - margin: 10px 0; - border-top: 1px solid #f2f2f2; - border-bottom: 1px solid #f2f2f2; - -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1); - -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1); - box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1); - } - .navbar-inverse .nav-collapse .navbar-form, - .navbar-inverse .nav-collapse .navbar-search { - border-top-color: #111111; - border-bottom-color: #111111; - } - .navbar .nav-collapse .nav.pull-right { - float: none; - margin-left: 0; - } - .nav-collapse, - .nav-collapse.collapse { - overflow: hidden; - height: 0; - } - .navbar .btn-navbar { - display: block; - } - .navbar-static .navbar-inner { - padding-left: 10px; - padding-right: 10px; - } -} -@media (min-width: 980px) { - .nav-collapse.collapse { - height: auto !important; - overflow: visible !important; - } -} +/*! + * Bootstrap v2.2.2 + * + * Copyright 2012 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 @twitter by @mdo and @fat. + */ +.clearfix { + *zoom: 1; +} +.clearfix:before, +.clearfix:after { + display: table; + content: ""; + line-height: 0; +} +.clearfix:after { + clear: both; +} +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +.input-block-level { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +nav, +section { + display: block; +} +audio, +canvas, +video { + display: inline-block; + *display: inline; + *zoom: 1; +} +audio:not([controls]) { + display: none; +} +html { + font-size: 100%; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} +a:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +a:hover, +a:active { + outline: 0; +} +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} +sup { + top: -0.5em; +} +sub { + bottom: -0.25em; +} +img { + /* Responsive images (ensure images don't scale beyond their parents) */ + + max-width: 100%; + /* Part 1: Set a maxium relative to the parent */ + + width: auto\9; + /* IE7-8 need help adjusting responsive images */ + + height: auto; + /* Part 2: Scale the height according to the width, otherwise you get stretching */ + + vertical-align: middle; + border: 0; + -ms-interpolation-mode: bicubic; +} +#map_canvas img, +.google-maps img { + max-width: none; +} +button, +input, +select, +textarea { + margin: 0; + font-size: 100%; + vertical-align: middle; +} +button, +input { + *overflow: visible; + line-height: normal; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} +label, +select, +button, +input[type="button"], +input[type="reset"], +input[type="submit"], +input[type="radio"], +input[type="checkbox"] { + cursor: pointer; +} +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-decoration, +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} +textarea { + overflow: auto; + vertical-align: top; +} +@media print { + * { + text-shadow: none !important; + color: #000 !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: 0.5cm; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } +} +body { + margin: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 20px; + color: #333333; + background-color: #ffffff; +} +a { + color: #0088cc; + text-decoration: none; +} +a:hover { + color: #005580; + text-decoration: underline; +} +.img-rounded { + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} +.img-polaroid { + padding: 4px; + background-color: #fff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} +.img-circle { + -webkit-border-radius: 500px; + -moz-border-radius: 500px; + border-radius: 500px; +} +.row { + margin-left: -20px; + *zoom: 1; +} +.row:before, +.row:after { + display: table; + content: ""; + line-height: 0; +} +.row:after { + clear: both; +} +[class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; +} +.container, +.navbar-static-top .container, +.navbar-fixed-top .container, +.navbar-fixed-bottom .container { + width: 940px; +} +.span12 { + width: 940px; +} +.span11 { + width: 860px; +} +.span10 { + width: 780px; +} +.span9 { + width: 700px; +} +.span8 { + width: 620px; +} +.span7 { + width: 540px; +} +.span6 { + width: 460px; +} +.span5 { + width: 380px; +} +.span4 { + width: 300px; +} +.span3 { + width: 220px; +} +.span2 { + width: 140px; +} +.span1 { + width: 60px; +} +.offset12 { + margin-left: 980px; +} +.offset11 { + margin-left: 900px; +} +.offset10 { + margin-left: 820px; +} +.offset9 { + margin-left: 740px; +} +.offset8 { + margin-left: 660px; +} +.offset7 { + margin-left: 580px; +} +.offset6 { + margin-left: 500px; +} +.offset5 { + margin-left: 420px; +} +.offset4 { + margin-left: 340px; +} +.offset3 { + margin-left: 260px; +} +.offset2 { + margin-left: 180px; +} +.offset1 { + margin-left: 100px; +} +.row-fluid { + width: 100%; + *zoom: 1; +} +.row-fluid:before, +.row-fluid:after { + display: table; + content: ""; + line-height: 0; +} +.row-fluid:after { + clear: both; +} +.row-fluid [class*="span"] { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + float: left; + margin-left: 2.127659574468085%; + *margin-left: 2.074468085106383%; +} +.row-fluid [class*="span"]:first-child { + margin-left: 0; +} +.row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.127659574468085%; +} +.row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; +} +.row-fluid .span11 { + width: 91.48936170212765%; + *width: 91.43617021276594%; +} +.row-fluid .span10 { + width: 82.97872340425532%; + *width: 82.92553191489361%; +} +.row-fluid .span9 { + width: 74.46808510638297%; + *width: 74.41489361702126%; +} +.row-fluid .span8 { + width: 65.95744680851064%; + *width: 65.90425531914893%; +} +.row-fluid .span7 { + width: 57.44680851063829%; + *width: 57.39361702127659%; +} +.row-fluid .span6 { + width: 48.93617021276595%; + *width: 48.88297872340425%; +} +.row-fluid .span5 { + width: 40.42553191489362%; + *width: 40.37234042553192%; +} +.row-fluid .span4 { + width: 31.914893617021278%; + *width: 31.861702127659576%; +} +.row-fluid .span3 { + width: 23.404255319148934%; + *width: 23.351063829787233%; +} +.row-fluid .span2 { + width: 14.893617021276595%; + *width: 14.840425531914894%; +} +.row-fluid .span1 { + width: 6.382978723404255%; + *width: 6.329787234042553%; +} +.row-fluid .offset12 { + margin-left: 104.25531914893617%; + *margin-left: 104.14893617021275%; +} +.row-fluid .offset12:first-child { + margin-left: 102.12765957446808%; + *margin-left: 102.02127659574467%; +} +.row-fluid .offset11 { + margin-left: 95.74468085106382%; + *margin-left: 95.6382978723404%; +} +.row-fluid .offset11:first-child { + margin-left: 93.61702127659574%; + *margin-left: 93.51063829787232%; +} +.row-fluid .offset10 { + margin-left: 87.23404255319149%; + *margin-left: 87.12765957446807%; +} +.row-fluid .offset10:first-child { + margin-left: 85.1063829787234%; + *margin-left: 84.99999999999999%; +} +.row-fluid .offset9 { + margin-left: 78.72340425531914%; + *margin-left: 78.61702127659572%; +} +.row-fluid .offset9:first-child { + margin-left: 76.59574468085106%; + *margin-left: 76.48936170212764%; +} +.row-fluid .offset8 { + margin-left: 70.2127659574468%; + *margin-left: 70.10638297872339%; +} +.row-fluid .offset8:first-child { + margin-left: 68.08510638297872%; + *margin-left: 67.9787234042553%; +} +.row-fluid .offset7 { + margin-left: 61.70212765957446%; + *margin-left: 61.59574468085106%; +} +.row-fluid .offset7:first-child { + margin-left: 59.574468085106375%; + *margin-left: 59.46808510638297%; +} +.row-fluid .offset6 { + margin-left: 53.191489361702125%; + *margin-left: 53.085106382978715%; +} +.row-fluid .offset6:first-child { + margin-left: 51.063829787234035%; + *margin-left: 50.95744680851063%; +} +.row-fluid .offset5 { + margin-left: 44.68085106382979%; + *margin-left: 44.57446808510638%; +} +.row-fluid .offset5:first-child { + margin-left: 42.5531914893617%; + *margin-left: 42.4468085106383%; +} +.row-fluid .offset4 { + margin-left: 36.170212765957444%; + *margin-left: 36.06382978723405%; +} +.row-fluid .offset4:first-child { + margin-left: 34.04255319148936%; + *margin-left: 33.93617021276596%; +} +.row-fluid .offset3 { + margin-left: 27.659574468085104%; + *margin-left: 27.5531914893617%; +} +.row-fluid .offset3:first-child { + margin-left: 25.53191489361702%; + *margin-left: 25.425531914893618%; +} +.row-fluid .offset2 { + margin-left: 19.148936170212764%; + *margin-left: 19.04255319148936%; +} +.row-fluid .offset2:first-child { + margin-left: 17.02127659574468%; + *margin-left: 16.914893617021278%; +} +.row-fluid .offset1 { + margin-left: 10.638297872340425%; + *margin-left: 10.53191489361702%; +} +.row-fluid .offset1:first-child { + margin-left: 8.51063829787234%; + *margin-left: 8.404255319148938%; +} +[class*="span"].hide, +.row-fluid [class*="span"].hide { + display: none; +} +[class*="span"].pull-right, +.row-fluid [class*="span"].pull-right { + float: right; +} +.container { + margin-right: auto; + margin-left: auto; + *zoom: 1; +} +.container:before, +.container:after { + display: table; + content: ""; + line-height: 0; +} +.container:after { + clear: both; +} +.container-fluid { + padding-right: 20px; + padding-left: 20px; + *zoom: 1; +} +.container-fluid:before, +.container-fluid:after { + display: table; + content: ""; + line-height: 0; +} +.container-fluid:after { + clear: both; +} +p { + margin: 0 0 10px; +} +.lead { + margin-bottom: 20px; + font-size: 21px; + font-weight: 200; + line-height: 30px; +} +small { + font-size: 85%; +} +strong { + font-weight: bold; +} +em { + font-style: italic; +} +cite { + font-style: normal; +} +.muted { + color: #999999; +} +a.muted:hover { + color: #808080; +} +.text-warning { + color: #c09853; +} +a.text-warning:hover { + color: #a47e3c; +} +.text-error { + color: #b94a48; +} +a.text-error:hover { + color: #953b39; +} +.text-info { + color: #3a87ad; +} +a.text-info:hover { + color: #2d6987; +} +.text-success { + color: #468847; +} +a.text-success:hover { + color: #356635; +} +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 10px 0; + font-family: inherit; + font-weight: bold; + line-height: 20px; + color: inherit; + text-rendering: optimizelegibility; +} +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small { + font-weight: normal; + line-height: 1; + color: #999999; +} +h1, +h2, +h3 { + line-height: 40px; +} +h1 { + font-size: 38.5px; +} +h2 { + font-size: 31.5px; +} +h3 { + font-size: 24.5px; +} +h4 { + font-size: 17.5px; +} +h5 { + font-size: 14px; +} +h6 { + font-size: 11.9px; +} +h1 small { + font-size: 24.5px; +} +h2 small { + font-size: 17.5px; +} +h3 small { + font-size: 14px; +} +h4 small { + font-size: 14px; +} +.page-header { + padding-bottom: 9px; + margin: 20px 0 30px; + border-bottom: 1px solid #eeeeee; +} +ul, +ol { + padding: 0; + margin: 0 0 10px 25px; +} +ul ul, +ul ol, +ol ol, +ol ul { + margin-bottom: 0; +} +li { + line-height: 20px; +} +ul.unstyled, +ol.unstyled { + margin-left: 0; + list-style: none; +} +ul.inline, +ol.inline { + margin-left: 0; + list-style: none; +} +ul.inline > li, +ol.inline > li { + display: inline-block; + padding-left: 5px; + padding-right: 5px; +} +dl { + margin-bottom: 20px; +} +dt, +dd { + line-height: 20px; +} +dt { + font-weight: bold; +} +dd { + margin-left: 10px; +} +.dl-horizontal { + *zoom: 1; +} +.dl-horizontal:before, +.dl-horizontal:after { + display: table; + content: ""; + line-height: 0; +} +.dl-horizontal:after { + clear: both; +} +.dl-horizontal dt { + float: left; + width: 160px; + clear: left; + text-align: right; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.dl-horizontal dd { + margin-left: 180px; +} +hr { + margin: 20px 0; + border: 0; + border-top: 1px solid #eeeeee; + border-bottom: 1px solid #ffffff; +} +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #999999; +} +abbr.initialism { + font-size: 90%; + text-transform: uppercase; +} +blockquote { + padding: 0 0 0 15px; + margin: 0 0 20px; + border-left: 5px solid #eeeeee; +} +blockquote p { + margin-bottom: 0; + font-size: 16px; + font-weight: 300; + line-height: 25px; +} +blockquote small { + display: block; + line-height: 20px; + color: #999999; +} +blockquote small:before { + content: '\2014 \00A0'; +} +blockquote.pull-right { + float: 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: 20px; +} +code, +pre { + padding: 0 3px 2px; + font-family: Monaco, Menlo, Consolas, "Courier New", monospace; + font-size: 12px; + color: #333333; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +code { + padding: 2px 4px; + color: #d14; + background-color: #f7f7f9; + border: 1px solid #e1e1e8; + white-space: nowrap; +} +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 20px; + word-break: break-all; + word-wrap: break-word; + white-space: pre; + white-space: pre-wrap; + background-color: #f5f5f5; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.15); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +pre.prettyprint { + margin-bottom: 20px; +} +pre code { + padding: 0; + color: inherit; + white-space: pre; + white-space: pre-wrap; + background-color: transparent; + border: 0; +} +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} +.label, +.badge { + display: inline-block; + padding: 2px 4px; + font-size: 11.844px; + font-weight: bold; + line-height: 14px; + color: #ffffff; + vertical-align: baseline; + white-space: nowrap; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #999999; +} +.label { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.badge { + padding-left: 9px; + padding-right: 9px; + -webkit-border-radius: 9px; + -moz-border-radius: 9px; + border-radius: 9px; +} +.label:empty, +.badge:empty { + display: none; +} +a.label:hover, +a.badge:hover { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} +.label-important, +.badge-important { + background-color: #b94a48; +} +.label-important[href], +.badge-important[href] { + background-color: #953b39; +} +.label-warning, +.badge-warning { + background-color: #f89406; +} +.label-warning[href], +.badge-warning[href] { + background-color: #c67605; +} +.label-success, +.badge-success { + background-color: #468847; +} +.label-success[href], +.badge-success[href] { + background-color: #356635; +} +.label-info, +.badge-info { + background-color: #3a87ad; +} +.label-info[href], +.badge-info[href] { + background-color: #2d6987; +} +.label-inverse, +.badge-inverse { + background-color: #333333; +} +.label-inverse[href], +.badge-inverse[href] { + background-color: #1a1a1a; +} +.btn .label, +.btn .badge { + position: relative; + top: -1px; +} +.btn-mini .label, +.btn-mini .badge { + top: 0; +} +table { + max-width: 100%; + background-color: transparent; + border-collapse: collapse; + border-spacing: 0; +} +.table { + width: 100%; + margin-bottom: 20px; +} +.table th, +.table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #dddddd; +} +.table th { + font-weight: bold; +} +.table thead th { + vertical-align: bottom; +} +.table caption + thead tr:first-child th, +.table caption + thead tr:first-child td, +.table colgroup + thead tr:first-child th, +.table colgroup + thead tr:first-child td, +.table thead:first-child tr:first-child th, +.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 th, +.table-condensed td { + padding: 4px 5px; +} +.table-bordered { + border: 1px solid #dddddd; + border-collapse: separate; + *border-collapse: collapse; + border-left: 0; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.table-bordered th, +.table-bordered td { + border-left: 1px solid #dddddd; +} +.table-bordered caption + thead tr:first-child th, +.table-bordered caption + tbody tr:first-child th, +.table-bordered caption + tbody tr:first-child td, +.table-bordered colgroup + thead tr:first-child th, +.table-bordered colgroup + tbody tr:first-child th, +.table-bordered colgroup + tbody tr:first-child td, +.table-bordered thead:first-child tr:first-child th, +.table-bordered tbody:first-child tr:first-child th, +.table-bordered tbody:first-child tr:first-child td { + border-top: 0; +} +.table-bordered thead:first-child tr:first-child > th:first-child, +.table-bordered tbody:first-child tr:first-child > td:first-child { + -webkit-border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; + border-top-left-radius: 4px; +} +.table-bordered thead:first-child tr:first-child > th:last-child, +.table-bordered tbody:first-child tr:first-child > td:last-child { + -webkit-border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; + border-top-right-radius: 4px; +} +.table-bordered thead:last-child tr:last-child > th:first-child, +.table-bordered tbody:last-child tr:last-child > td:first-child, +.table-bordered tfoot:last-child tr:last-child > td:first-child { + -webkit-border-bottom-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + border-bottom-left-radius: 4px; +} +.table-bordered thead:last-child tr:last-child > th:last-child, +.table-bordered tbody:last-child tr:last-child > td:last-child, +.table-bordered tfoot:last-child tr:last-child > td:last-child { + -webkit-border-bottom-right-radius: 4px; + -moz-border-radius-bottomright: 4px; + border-bottom-right-radius: 4px; +} +.table-bordered tfoot + tbody:last-child tr:last-child td:first-child { + -webkit-border-bottom-left-radius: 0; + -moz-border-radius-bottomleft: 0; + border-bottom-left-radius: 0; +} +.table-bordered tfoot + tbody:last-child tr:last-child td:last-child { + -webkit-border-bottom-right-radius: 0; + -moz-border-radius-bottomright: 0; + border-bottom-right-radius: 0; +} +.table-bordered caption + thead tr:first-child th:first-child, +.table-bordered caption + tbody tr:first-child td:first-child, +.table-bordered colgroup + thead tr:first-child th:first-child, +.table-bordered colgroup + tbody tr:first-child td:first-child { + -webkit-border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; + border-top-left-radius: 4px; +} +.table-bordered caption + thead tr:first-child th:last-child, +.table-bordered caption + tbody tr:first-child td:last-child, +.table-bordered colgroup + thead tr:first-child th:last-child, +.table-bordered colgroup + tbody tr:first-child td:last-child { + -webkit-border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; + border-top-right-radius: 4px; +} +.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 td[class*="span"], +table th[class*="span"], +.row-fluid table td[class*="span"], +.row-fluid table th[class*="span"] { + display: table-cell; + float: none; + margin-left: 0; +} +.table td.span1, +.table th.span1 { + float: none; + width: 44px; + margin-left: 0; +} +.table td.span2, +.table th.span2 { + float: none; + width: 124px; + margin-left: 0; +} +.table td.span3, +.table th.span3 { + float: none; + width: 204px; + margin-left: 0; +} +.table td.span4, +.table th.span4 { + float: none; + width: 284px; + margin-left: 0; +} +.table td.span5, +.table th.span5 { + float: none; + width: 364px; + margin-left: 0; +} +.table td.span6, +.table th.span6 { + float: none; + width: 444px; + margin-left: 0; +} +.table td.span7, +.table th.span7 { + float: none; + width: 524px; + margin-left: 0; +} +.table td.span8, +.table th.span8 { + float: none; + width: 604px; + margin-left: 0; +} +.table td.span9, +.table th.span9 { + float: none; + width: 684px; + margin-left: 0; +} +.table td.span10, +.table th.span10 { + float: none; + width: 764px; + margin-left: 0; +} +.table td.span11, +.table th.span11 { + float: none; + width: 844px; + margin-left: 0; +} +.table td.span12, +.table th.span12 { + float: none; + width: 924px; + margin-left: 0; +} +.table tbody tr.success td { + background-color: #dff0d8; +} +.table tbody tr.error td { + background-color: #f2dede; +} +.table tbody tr.warning td { + background-color: #fcf8e3; +} +.table tbody tr.info td { + background-color: #d9edf7; +} +.table-hover tbody tr.success:hover td { + background-color: #d0e9c6; +} +.table-hover tbody tr.error:hover td { + background-color: #ebcccc; +} +.table-hover tbody tr.warning:hover td { + background-color: #faf2cc; +} +.table-hover tbody tr.info:hover td { + background-color: #c4e3f3; +} +form { + margin: 0 0 20px; +} +fieldset { + padding: 0; + margin: 0; + border: 0; +} +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: 40px; + color: #333333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} +legend small { + font-size: 15px; + color: #999999; +} +label, +input, +button, +select, +textarea { + font-size: 14px; + font-weight: normal; + line-height: 20px; +} +input, +button, +select, +textarea { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +} +label { + display: block; + margin-bottom: 5px; +} +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"], +.uneditable-input { + display: inline-block; + height: 20px; + padding: 4px 6px; + margin-bottom: 10px; + font-size: 14px; + line-height: 20px; + color: #555555; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + vertical-align: middle; +} +input, +textarea, +.uneditable-input { + width: 206px; +} +textarea { + height: auto; +} +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"], +.uneditable-input { + background-color: #ffffff; + border: 1px solid #cccccc; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border linear .2s, box-shadow linear .2s; + -moz-transition: border linear .2s, box-shadow linear .2s; + -o-transition: border linear .2s, box-shadow linear .2s; + transition: border linear .2s, box-shadow linear .2s; +} +textarea:focus, +input[type="text"]:focus, +input[type="password"]:focus, +input[type="datetime"]:focus, +input[type="datetime-local"]:focus, +input[type="date"]:focus, +input[type="month"]:focus, +input[type="time"]:focus, +input[type="week"]:focus, +input[type="number"]:focus, +input[type="email"]:focus, +input[type="url"]:focus, +input[type="search"]:focus, +input[type="tel"]:focus, +input[type="color"]:focus, +.uneditable-input:focus { + border-color: rgba(82, 168, 236, 0.8); + outline: 0; + outline: thin dotted \9; + /* IE6-9 */ + + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6); + -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6); +} +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + *margin-top: 0; + /* IE7 */ + + margin-top: 1px \9; + /* IE8-9 */ + + line-height: normal; +} +input[type="file"], +input[type="image"], +input[type="submit"], +input[type="reset"], +input[type="button"], +input[type="radio"], +input[type="checkbox"] { + width: auto; +} +select, +input[type="file"] { + height: 30px; + /* In IE7, the height of the select element cannot be changed by height, only font-size */ + + *margin-top: 4px; + /* For IE7, add top margin to align select with labels */ + + line-height: 30px; +} +select { + width: 220px; + border: 1px solid #cccccc; + background-color: #ffffff; +} +select[multiple], +select[size] { + height: auto; +} +select:focus, +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.uneditable-input, +.uneditable-textarea { + color: #999999; + background-color: #fcfcfc; + border-color: #cccccc; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + cursor: not-allowed; +} +.uneditable-input { + overflow: hidden; + white-space: nowrap; +} +.uneditable-textarea { + width: auto; + height: auto; +} +input:-moz-placeholder, +textarea:-moz-placeholder { + color: #999999; +} +input:-ms-input-placeholder, +textarea:-ms-input-placeholder { + color: #999999; +} +input::-webkit-input-placeholder, +textarea::-webkit-input-placeholder { + color: #999999; +} +.radio, +.checkbox { + min-height: 20px; + padding-left: 20px; +} +.radio input[type="radio"], +.checkbox input[type="checkbox"] { + float: left; + margin-left: -20px; +} +.controls > .radio:first-child, +.controls > .checkbox:first-child { + padding-top: 5px; +} +.radio.inline, +.checkbox.inline { + display: inline-block; + padding-top: 5px; + margin-bottom: 0; + vertical-align: middle; +} +.radio.inline + .radio.inline, +.checkbox.inline + .checkbox.inline { + margin-left: 10px; +} +.input-mini { + width: 60px; +} +.input-small { + width: 90px; +} +.input-medium { + width: 150px; +} +.input-large { + width: 210px; +} +.input-xlarge { + width: 270px; +} +.input-xxlarge { + width: 530px; +} +input[class*="span"], +select[class*="span"], +textarea[class*="span"], +.uneditable-input[class*="span"], +.row-fluid input[class*="span"], +.row-fluid select[class*="span"], +.row-fluid textarea[class*="span"], +.row-fluid .uneditable-input[class*="span"] { + float: none; + margin-left: 0; +} +.input-append input[class*="span"], +.input-append .uneditable-input[class*="span"], +.input-prepend input[class*="span"], +.input-prepend .uneditable-input[class*="span"], +.row-fluid input[class*="span"], +.row-fluid select[class*="span"], +.row-fluid textarea[class*="span"], +.row-fluid .uneditable-input[class*="span"], +.row-fluid .input-prepend [class*="span"], +.row-fluid .input-append [class*="span"] { + display: inline-block; +} +input, +textarea, +.uneditable-input { + margin-left: 0; +} +.controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; +} +input.span12, textarea.span12, .uneditable-input.span12 { + width: 926px; +} +input.span11, textarea.span11, .uneditable-input.span11 { + width: 846px; +} +input.span10, textarea.span10, .uneditable-input.span10 { + width: 766px; +} +input.span9, textarea.span9, .uneditable-input.span9 { + width: 686px; +} +input.span8, textarea.span8, .uneditable-input.span8 { + width: 606px; +} +input.span7, textarea.span7, .uneditable-input.span7 { + width: 526px; +} +input.span6, textarea.span6, .uneditable-input.span6 { + width: 446px; +} +input.span5, textarea.span5, .uneditable-input.span5 { + width: 366px; +} +input.span4, textarea.span4, .uneditable-input.span4 { + width: 286px; +} +input.span3, textarea.span3, .uneditable-input.span3 { + width: 206px; +} +input.span2, textarea.span2, .uneditable-input.span2 { + width: 126px; +} +input.span1, textarea.span1, .uneditable-input.span1 { + width: 46px; +} +.controls-row { + *zoom: 1; +} +.controls-row:before, +.controls-row:after { + display: table; + content: ""; + line-height: 0; +} +.controls-row:after { + clear: both; +} +.controls-row [class*="span"], +.row-fluid .controls-row [class*="span"] { + float: left; +} +.controls-row .checkbox[class*="span"], +.controls-row .radio[class*="span"] { + padding-top: 5px; +} +input[disabled], +select[disabled], +textarea[disabled], +input[readonly], +select[readonly], +textarea[readonly] { + cursor: not-allowed; + background-color: #eeeeee; +} +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"][readonly], +input[type="checkbox"][readonly] { + background-color: transparent; +} +.control-group.warning .control-label, +.control-group.warning .help-block, +.control-group.warning .help-inline { + color: #c09853; +} +.control-group.warning .checkbox, +.control-group.warning .radio, +.control-group.warning input, +.control-group.warning select, +.control-group.warning textarea { + color: #c09853; +} +.control-group.warning input, +.control-group.warning select, +.control-group.warning textarea { + border-color: #c09853; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.control-group.warning input:focus, +.control-group.warning select:focus, +.control-group.warning textarea:focus { + border-color: #a47e3c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; + -moz-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; +} +.control-group.warning .input-prepend .add-on, +.control-group.warning .input-append .add-on { + color: #c09853; + background-color: #fcf8e3; + border-color: #c09853; +} +.control-group.error .control-label, +.control-group.error .help-block, +.control-group.error .help-inline { + color: #b94a48; +} +.control-group.error .checkbox, +.control-group.error .radio, +.control-group.error input, +.control-group.error select, +.control-group.error textarea { + color: #b94a48; +} +.control-group.error input, +.control-group.error select, +.control-group.error textarea { + border-color: #b94a48; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.control-group.error input:focus, +.control-group.error select:focus, +.control-group.error textarea:focus { + border-color: #953b39; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; + -moz-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; +} +.control-group.error .input-prepend .add-on, +.control-group.error .input-append .add-on { + color: #b94a48; + background-color: #f2dede; + border-color: #b94a48; +} +.control-group.success .control-label, +.control-group.success .help-block, +.control-group.success .help-inline { + color: #468847; +} +.control-group.success .checkbox, +.control-group.success .radio, +.control-group.success input, +.control-group.success select, +.control-group.success textarea { + color: #468847; +} +.control-group.success input, +.control-group.success select, +.control-group.success textarea { + border-color: #468847; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.control-group.success input:focus, +.control-group.success select:focus, +.control-group.success textarea:focus { + border-color: #356635; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; + -moz-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; +} +.control-group.success .input-prepend .add-on, +.control-group.success .input-append .add-on { + color: #468847; + background-color: #dff0d8; + border-color: #468847; +} +.control-group.info .control-label, +.control-group.info .help-block, +.control-group.info .help-inline { + color: #3a87ad; +} +.control-group.info .checkbox, +.control-group.info .radio, +.control-group.info input, +.control-group.info select, +.control-group.info textarea { + color: #3a87ad; +} +.control-group.info input, +.control-group.info select, +.control-group.info textarea { + border-color: #3a87ad; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.control-group.info input:focus, +.control-group.info select:focus, +.control-group.info textarea:focus { + border-color: #2d6987; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; +} +.control-group.info .input-prepend .add-on, +.control-group.info .input-append .add-on { + color: #3a87ad; + background-color: #d9edf7; + border-color: #3a87ad; +} +input:focus:invalid, +textarea:focus:invalid, +select:focus:invalid { + color: #b94a48; + border-color: #ee5f5b; +} +input:focus:invalid:focus, +textarea:focus:invalid:focus, +select:focus:invalid:focus { + border-color: #e9322d; + -webkit-box-shadow: 0 0 6px #f8b9b7; + -moz-box-shadow: 0 0 6px #f8b9b7; + box-shadow: 0 0 6px #f8b9b7; +} +.form-actions { + padding: 19px 20px 20px; + margin-top: 20px; + margin-bottom: 20px; + background-color: #f5f5f5; + border-top: 1px solid #e5e5e5; + *zoom: 1; +} +.form-actions:before, +.form-actions:after { + display: table; + content: ""; + line-height: 0; +} +.form-actions:after { + clear: both; +} +.help-block, +.help-inline { + color: #595959; +} +.help-block { + display: block; + margin-bottom: 10px; +} +.help-inline { + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; + vertical-align: middle; + padding-left: 5px; +} +.input-append, +.input-prepend { + margin-bottom: 5px; + font-size: 0; + white-space: nowrap; +} +.input-append input, +.input-prepend input, +.input-append select, +.input-prepend select, +.input-append .uneditable-input, +.input-prepend .uneditable-input, +.input-append .dropdown-menu, +.input-prepend .dropdown-menu { + font-size: 14px; +} +.input-append input, +.input-prepend input, +.input-append select, +.input-prepend select, +.input-append .uneditable-input, +.input-prepend .uneditable-input { + position: relative; + margin-bottom: 0; + *margin-left: 0; + vertical-align: top; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} +.input-append input:focus, +.input-prepend input:focus, +.input-append select:focus, +.input-prepend select:focus, +.input-append .uneditable-input:focus, +.input-prepend .uneditable-input:focus { + z-index: 2; +} +.input-append .add-on, +.input-prepend .add-on { + display: inline-block; + width: auto; + height: 20px; + min-width: 16px; + padding: 4px 5px; + font-size: 14px; + font-weight: normal; + line-height: 20px; + text-align: center; + text-shadow: 0 1px 0 #ffffff; + background-color: #eeeeee; + border: 1px solid #ccc; +} +.input-append .add-on, +.input-prepend .add-on, +.input-append .btn, +.input-prepend .btn, +.input-append .btn-group > .dropdown-toggle, +.input-prepend .btn-group > .dropdown-toggle { + vertical-align: top; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +.input-append .active, +.input-prepend .active { + background-color: #a9dba9; + border-color: #46a546; +} +.input-prepend .add-on, +.input-prepend .btn { + margin-right: -1px; +} +.input-prepend .add-on:first-child, +.input-prepend .btn:first-child { + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} +.input-append input, +.input-append select, +.input-append .uneditable-input { + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} +.input-append input + .btn-group .btn:last-child, +.input-append select + .btn-group .btn:last-child, +.input-append .uneditable-input + .btn-group .btn:last-child { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} +.input-append .add-on, +.input-append .btn, +.input-append .btn-group { + margin-left: -1px; +} +.input-append .add-on:last-child, +.input-append .btn:last-child, +.input-append .btn-group:last-child > .dropdown-toggle { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} +.input-prepend.input-append input, +.input-prepend.input-append select, +.input-prepend.input-append .uneditable-input { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +.input-prepend.input-append input + .btn-group .btn, +.input-prepend.input-append select + .btn-group .btn, +.input-prepend.input-append .uneditable-input + .btn-group .btn { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} +.input-prepend.input-append .add-on:first-child, +.input-prepend.input-append .btn:first-child { + margin-right: -1px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} +.input-prepend.input-append .add-on:last-child, +.input-prepend.input-append .btn:last-child { + margin-left: -1px; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} +.input-prepend.input-append .btn-group:first-child { + margin-left: 0; +} +input.search-query { + padding-right: 14px; + padding-right: 4px \9; + padding-left: 14px; + padding-left: 4px \9; + /* IE7-8 doesn't have border-radius, so don't indent the padding */ + + margin-bottom: 0; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} +/* Allow for input prepend/append in search forms */ +.form-search .input-append .search-query, +.form-search .input-prepend .search-query { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +.form-search .input-append .search-query { + -webkit-border-radius: 14px 0 0 14px; + -moz-border-radius: 14px 0 0 14px; + border-radius: 14px 0 0 14px; +} +.form-search .input-append .btn { + -webkit-border-radius: 0 14px 14px 0; + -moz-border-radius: 0 14px 14px 0; + border-radius: 0 14px 14px 0; +} +.form-search .input-prepend .search-query { + -webkit-border-radius: 0 14px 14px 0; + -moz-border-radius: 0 14px 14px 0; + border-radius: 0 14px 14px 0; +} +.form-search .input-prepend .btn { + -webkit-border-radius: 14px 0 0 14px; + -moz-border-radius: 14px 0 0 14px; + border-radius: 14px 0 0 14px; +} +.form-search input, +.form-inline input, +.form-horizontal input, +.form-search textarea, +.form-inline textarea, +.form-horizontal textarea, +.form-search select, +.form-inline select, +.form-horizontal select, +.form-search .help-inline, +.form-inline .help-inline, +.form-horizontal .help-inline, +.form-search .uneditable-input, +.form-inline .uneditable-input, +.form-horizontal .uneditable-input, +.form-search .input-prepend, +.form-inline .input-prepend, +.form-horizontal .input-prepend, +.form-search .input-append, +.form-inline .input-append, +.form-horizontal .input-append { + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; + margin-bottom: 0; + vertical-align: middle; +} +.form-search .hide, +.form-inline .hide, +.form-horizontal .hide { + display: none; +} +.form-search label, +.form-inline label, +.form-search .btn-group, +.form-inline .btn-group { + display: inline-block; +} +.form-search .input-append, +.form-inline .input-append, +.form-search .input-prepend, +.form-inline .input-prepend { + margin-bottom: 0; +} +.form-search .radio, +.form-search .checkbox, +.form-inline .radio, +.form-inline .checkbox { + padding-left: 0; + margin-bottom: 0; + vertical-align: middle; +} +.form-search .radio input[type="radio"], +.form-search .checkbox input[type="checkbox"], +.form-inline .radio input[type="radio"], +.form-inline .checkbox input[type="checkbox"] { + float: left; + margin-right: 3px; + margin-left: 0; +} +.control-group { + margin-bottom: 10px; +} +legend + .control-group { + margin-top: 20px; + -webkit-margin-top-collapse: separate; +} +.form-horizontal .control-group { + margin-bottom: 20px; + *zoom: 1; +} +.form-horizontal .control-group:before, +.form-horizontal .control-group:after { + display: table; + content: ""; + line-height: 0; +} +.form-horizontal .control-group:after { + clear: both; +} +.form-horizontal .control-label { + float: left; + width: 160px; + padding-top: 5px; + text-align: right; +} +.form-horizontal .controls { + *display: inline-block; + *padding-left: 20px; + margin-left: 180px; + *margin-left: 0; +} +.form-horizontal .controls:first-child { + *padding-left: 180px; +} +.form-horizontal .help-block { + margin-bottom: 0; +} +.form-horizontal input + .help-block, +.form-horizontal select + .help-block, +.form-horizontal textarea + .help-block, +.form-horizontal .uneditable-input + .help-block, +.form-horizontal .input-prepend + .help-block, +.form-horizontal .input-append + .help-block { + margin-top: 10px; +} +.form-horizontal .form-actions { + padding-left: 180px; +} +.btn { + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; + padding: 4px 12px; + margin-bottom: 0; + font-size: 14px; + line-height: 20px; + text-align: center; + vertical-align: middle; + cursor: pointer; + color: #333333; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + background-color: #f5f5f5; + background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); + background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); + background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); + border-color: #e6e6e6 #e6e6e6 #bfbfbf; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #e6e6e6; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + border: 1px solid #bbbbbb; + *border: 0; + border-bottom-color: #a2a2a2; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + *margin-left: .3em; + -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); + -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); + box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); +} +.btn:hover, +.btn:active, +.btn.active, +.btn.disabled, +.btn[disabled] { + color: #333333; + background-color: #e6e6e6; + *background-color: #d9d9d9; +} +.btn:active, +.btn.active { + background-color: #cccccc \9; +} +.btn:first-child { + *margin-left: 0; +} +.btn:hover { + color: #333333; + text-decoration: none; + background-position: 0 -15px; + -webkit-transition: background-position 0.1s linear; + -moz-transition: background-position 0.1s linear; + -o-transition: background-position 0.1s linear; + transition: background-position 0.1s linear; +} +.btn:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn.active, +.btn:active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); + -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); + box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); +} +.btn.disabled, +.btn[disabled] { + cursor: default; + background-image: none; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} +.btn-large { + padding: 11px 19px; + font-size: 17.5px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} +.btn-large [class^="icon-"], +.btn-large [class*=" icon-"] { + margin-top: 4px; +} +.btn-small { + padding: 2px 10px; + font-size: 11.9px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.btn-small [class^="icon-"], +.btn-small [class*=" icon-"] { + margin-top: 0; +} +.btn-mini [class^="icon-"], +.btn-mini [class*=" icon-"] { + margin-top: -1px; +} +.btn-mini { + padding: 0 6px; + font-size: 10.5px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.btn-block { + display: block; + width: 100%; + padding-left: 0; + padding-right: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.btn-block + .btn-block { + margin-top: 5px; +} +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} +.btn-primary.active, +.btn-warning.active, +.btn-danger.active, +.btn-success.active, +.btn-info.active, +.btn-inverse.active { + color: rgba(255, 255, 255, 0.75); +} +.btn { + border-color: #c5c5c5; + border-color: rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.25); +} +.btn-primary { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #006dcc; + background-image: -moz-linear-gradient(top, #0088cc, #0044cc); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); + background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); + background-image: -o-linear-gradient(top, #0088cc, #0044cc); + background-image: linear-gradient(to bottom, #0088cc, #0044cc); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); + border-color: #0044cc #0044cc #002a80; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #0044cc; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.btn-primary:hover, +.btn-primary:active, +.btn-primary.active, +.btn-primary.disabled, +.btn-primary[disabled] { + color: #ffffff; + background-color: #0044cc; + *background-color: #003bb3; +} +.btn-primary:active, +.btn-primary.active { + background-color: #003399 \9; +} +.btn-warning { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #faa732; + background-image: -moz-linear-gradient(top, #fbb450, #f89406); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); + background-image: -webkit-linear-gradient(top, #fbb450, #f89406); + background-image: -o-linear-gradient(top, #fbb450, #f89406); + background-image: linear-gradient(to bottom, #fbb450, #f89406); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); + border-color: #f89406 #f89406 #ad6704; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #f89406; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.btn-warning:hover, +.btn-warning:active, +.btn-warning.active, +.btn-warning.disabled, +.btn-warning[disabled] { + color: #ffffff; + background-color: #f89406; + *background-color: #df8505; +} +.btn-warning:active, +.btn-warning.active { + background-color: #c67605 \9; +} +.btn-danger { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #da4f49; + background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); + background-image: linear-gradient(to bottom, #ee5f5b, #bd362f); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0); + border-color: #bd362f #bd362f #802420; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #bd362f; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.btn-danger:hover, +.btn-danger:active, +.btn-danger.active, +.btn-danger.disabled, +.btn-danger[disabled] { + color: #ffffff; + background-color: #bd362f; + *background-color: #a9302a; +} +.btn-danger:active, +.btn-danger.active { + background-color: #942a25 \9; +} +.btn-success { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #5bb75b; + background-image: -moz-linear-gradient(top, #62c462, #51a351); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); + background-image: -webkit-linear-gradient(top, #62c462, #51a351); + background-image: -o-linear-gradient(top, #62c462, #51a351); + background-image: linear-gradient(to bottom, #62c462, #51a351); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0); + border-color: #51a351 #51a351 #387038; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #51a351; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.btn-success:hover, +.btn-success:active, +.btn-success.active, +.btn-success.disabled, +.btn-success[disabled] { + color: #ffffff; + background-color: #51a351; + *background-color: #499249; +} +.btn-success:active, +.btn-success.active { + background-color: #408140 \9; +} +.btn-info { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #49afcd; + background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); + background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); + background-image: linear-gradient(to bottom, #5bc0de, #2f96b4); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0); + border-color: #2f96b4 #2f96b4 #1f6377; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #2f96b4; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.btn-info:hover, +.btn-info:active, +.btn-info.active, +.btn-info.disabled, +.btn-info[disabled] { + color: #ffffff; + background-color: #2f96b4; + *background-color: #2a85a0; +} +.btn-info:active, +.btn-info.active { + background-color: #24748c \9; +} +.btn-inverse { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #363636; + background-image: -moz-linear-gradient(top, #444444, #222222); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222)); + background-image: -webkit-linear-gradient(top, #444444, #222222); + background-image: -o-linear-gradient(top, #444444, #222222); + background-image: linear-gradient(to bottom, #444444, #222222); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0); + border-color: #222222 #222222 #000000; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #222222; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.btn-inverse:hover, +.btn-inverse:active, +.btn-inverse.active, +.btn-inverse.disabled, +.btn-inverse[disabled] { + color: #ffffff; + background-color: #222222; + *background-color: #151515; +} +.btn-inverse:active, +.btn-inverse.active { + background-color: #080808 \9; +} +button.btn, +input[type="submit"].btn { + *padding-top: 3px; + *padding-bottom: 3px; +} +button.btn::-moz-focus-inner, +input[type="submit"].btn::-moz-focus-inner { + padding: 0; + border: 0; +} +button.btn.btn-large, +input[type="submit"].btn.btn-large { + *padding-top: 7px; + *padding-bottom: 7px; +} +button.btn.btn-small, +input[type="submit"].btn.btn-small { + *padding-top: 3px; + *padding-bottom: 3px; +} +button.btn.btn-mini, +input[type="submit"].btn.btn-mini { + *padding-top: 1px; + *padding-bottom: 1px; +} +.btn-link, +.btn-link:active, +.btn-link[disabled] { + background-color: transparent; + background-image: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} +.btn-link { + border-color: transparent; + cursor: pointer; + color: #0088cc; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +.btn-link:hover { + color: #005580; + text-decoration: underline; + background-color: transparent; +} +.btn-link[disabled]:hover { + color: #333333; + text-decoration: none; +} +.btn-group { + position: relative; + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; + font-size: 0; + vertical-align: middle; + white-space: nowrap; + *margin-left: .3em; +} +.btn-group:first-child { + *margin-left: 0; +} +.btn-group + .btn-group { + margin-left: 5px; +} +.btn-toolbar { + font-size: 0; + margin-top: 10px; + margin-bottom: 10px; +} +.btn-toolbar > .btn + .btn, +.btn-toolbar > .btn-group + .btn, +.btn-toolbar > .btn + .btn-group { + margin-left: 5px; +} +.btn-group > .btn { + position: relative; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +.btn-group > .btn + .btn { + margin-left: -1px; +} +.btn-group > .btn, +.btn-group > .dropdown-menu, +.btn-group > .popover { + font-size: 14px; +} +.btn-group > .btn-mini { + font-size: 10.5px; +} +.btn-group > .btn-small { + font-size: 11.9px; +} +.btn-group > .btn-large { + font-size: 17.5px; +} +.btn-group > .btn:first-child { + margin-left: 0; + -webkit-border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; + border-top-left-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + border-bottom-left-radius: 4px; +} +.btn-group > .btn:last-child, +.btn-group > .dropdown-toggle { + -webkit-border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; + border-top-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -moz-border-radius-bottomright: 4px; + border-bottom-right-radius: 4px; +} +.btn-group > .btn.large:first-child { + margin-left: 0; + -webkit-border-top-left-radius: 6px; + -moz-border-radius-topleft: 6px; + border-top-left-radius: 6px; + -webkit-border-bottom-left-radius: 6px; + -moz-border-radius-bottomleft: 6px; + border-bottom-left-radius: 6px; +} +.btn-group > .btn.large:last-child, +.btn-group > .large.dropdown-toggle { + -webkit-border-top-right-radius: 6px; + -moz-border-radius-topright: 6px; + border-top-right-radius: 6px; + -webkit-border-bottom-right-radius: 6px; + -moz-border-radius-bottomright: 6px; + border-bottom-right-radius: 6px; +} +.btn-group > .btn:hover, +.btn-group > .btn:focus, +.btn-group > .btn:active, +.btn-group > .btn.active { + z-index: 2; +} +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} +.btn-group > .btn + .dropdown-toggle { + padding-left: 8px; + padding-right: 8px; + -webkit-box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); + -moz-box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); + box-shadow: inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); + *padding-top: 5px; + *padding-bottom: 5px; +} +.btn-group > .btn-mini + .dropdown-toggle { + padding-left: 5px; + padding-right: 5px; + *padding-top: 2px; + *padding-bottom: 2px; +} +.btn-group > .btn-small + .dropdown-toggle { + *padding-top: 5px; + *padding-bottom: 4px; +} +.btn-group > .btn-large + .dropdown-toggle { + padding-left: 12px; + padding-right: 12px; + *padding-top: 7px; + *padding-bottom: 7px; +} +.btn-group.open .dropdown-toggle { + background-image: none; + -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); + -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); + box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05); +} +.btn-group.open .btn.dropdown-toggle { + background-color: #e6e6e6; +} +.btn-group.open .btn-primary.dropdown-toggle { + background-color: #0044cc; +} +.btn-group.open .btn-warning.dropdown-toggle { + background-color: #f89406; +} +.btn-group.open .btn-danger.dropdown-toggle { + background-color: #bd362f; +} +.btn-group.open .btn-success.dropdown-toggle { + background-color: #51a351; +} +.btn-group.open .btn-info.dropdown-toggle { + background-color: #2f96b4; +} +.btn-group.open .btn-inverse.dropdown-toggle { + background-color: #222222; +} +.btn .caret { + margin-top: 8px; + margin-left: 0; +} +.btn-mini .caret, +.btn-small .caret, +.btn-large .caret { + margin-top: 6px; +} +.btn-large .caret { + border-left-width: 5px; + border-right-width: 5px; + border-top-width: 5px; +} +.dropup .btn-large .caret { + border-bottom-width: 5px; +} +.btn-primary .caret, +.btn-warning .caret, +.btn-danger .caret, +.btn-info .caret, +.btn-success .caret, +.btn-inverse .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} +.btn-group-vertical { + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; +} +.btn-group-vertical > .btn { + display: block; + float: none; + max-width: 100%; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +.btn-group-vertical > .btn + .btn { + margin-left: 0; + margin-top: -1px; +} +.btn-group-vertical > .btn:first-child { + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} +.btn-group-vertical > .btn:last-child { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} +.btn-group-vertical > .btn-large:first-child { + -webkit-border-radius: 6px 6px 0 0; + -moz-border-radius: 6px 6px 0 0; + border-radius: 6px 6px 0 0; +} +.btn-group-vertical > .btn-large:last-child { + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; +} +.nav { + margin-left: 0; + margin-bottom: 20px; + list-style: none; +} +.nav > li > a { + display: block; +} +.nav > li > a:hover { + text-decoration: none; + background-color: #eeeeee; +} +.nav > li > a > img { + max-width: none; +} +.nav > .pull-right { + float: right; +} +.nav-header { + display: block; + padding: 3px 15px; + font-size: 11px; + font-weight: bold; + line-height: 20px; + color: #999999; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + text-transform: uppercase; +} +.nav li + .nav-header { + margin-top: 9px; +} +.nav-list { + padding-left: 15px; + padding-right: 15px; + margin-bottom: 0; +} +.nav-list > li > a, +.nav-list .nav-header { + margin-left: -15px; + margin-right: -15px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); +} +.nav-list > li > a { + padding: 3px 15px; +} +.nav-list > .active > a, +.nav-list > .active > a:hover { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); + background-color: #0088cc; +} +.nav-list [class^="icon-"], +.nav-list [class*=" icon-"] { + margin-right: 2px; +} +.nav-list .divider { + *width: 100%; + height: 1px; + margin: 9px 1px; + *margin: -5px 0 5px; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; +} +.nav-tabs, +.nav-pills { + *zoom: 1; +} +.nav-tabs:before, +.nav-pills:before, +.nav-tabs:after, +.nav-pills:after { + display: table; + content: ""; + line-height: 0; +} +.nav-tabs:after, +.nav-pills:after { + clear: both; +} +.nav-tabs > li, +.nav-pills > li { + float: left; +} +.nav-tabs > li > a, +.nav-pills > li > a { + padding-right: 12px; + padding-left: 12px; + margin-right: 2px; + line-height: 14px; +} +.nav-tabs { + border-bottom: 1px solid #ddd; +} +.nav-tabs > li { + margin-bottom: -1px; +} +.nav-tabs > li > a { + padding-top: 8px; + padding-bottom: 8px; + line-height: 20px; + border: 1px solid transparent; + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} +.nav-tabs > li > a:hover { + border-color: #eeeeee #eeeeee #dddddd; +} +.nav-tabs > .active > a, +.nav-tabs > .active > a:hover { + color: #555555; + background-color: #ffffff; + border: 1px solid #ddd; + border-bottom-color: transparent; + cursor: default; +} +.nav-pills > li > a { + padding-top: 8px; + padding-bottom: 8px; + margin-top: 2px; + margin-bottom: 2px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} +.nav-pills > .active > a, +.nav-pills > .active > a:hover { + color: #ffffff; + background-color: #0088cc; +} +.nav-stacked > li { + float: none; +} +.nav-stacked > li > a { + margin-right: 0; +} +.nav-tabs.nav-stacked { + border-bottom: 0; +} +.nav-tabs.nav-stacked > li > a { + border: 1px solid #ddd; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +.nav-tabs.nav-stacked > li:first-child > a { + -webkit-border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; + border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; + border-top-left-radius: 4px; +} +.nav-tabs.nav-stacked > li:last-child > a { + -webkit-border-bottom-right-radius: 4px; + -moz-border-radius-bottomright: 4px; + border-bottom-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + border-bottom-left-radius: 4px; +} +.nav-tabs.nav-stacked > li > a:hover { + border-color: #ddd; + z-index: 2; +} +.nav-pills.nav-stacked > li > a { + margin-bottom: 3px; +} +.nav-pills.nav-stacked > li:last-child > a { + margin-bottom: 1px; +} +.nav-tabs .dropdown-menu { + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; +} +.nav-pills .dropdown-menu { + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} +.nav .dropdown-toggle .caret { + border-top-color: #0088cc; + border-bottom-color: #0088cc; + margin-top: 6px; +} +.nav .dropdown-toggle:hover .caret { + border-top-color: #005580; + border-bottom-color: #005580; +} +/* move down carets for tabs */ +.nav-tabs .dropdown-toggle .caret { + margin-top: 8px; +} +.nav .active .dropdown-toggle .caret { + border-top-color: #fff; + border-bottom-color: #fff; +} +.nav-tabs .active .dropdown-toggle .caret { + border-top-color: #555555; + border-bottom-color: #555555; +} +.nav > .dropdown.active > a:hover { + cursor: pointer; +} +.nav-tabs .open .dropdown-toggle, +.nav-pills .open .dropdown-toggle, +.nav > li.dropdown.open.active > a:hover { + color: #ffffff; + background-color: #999999; + border-color: #999999; +} +.nav li.dropdown.open .caret, +.nav li.dropdown.open.active .caret, +.nav li.dropdown.open a:hover .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; + opacity: 1; + filter: alpha(opacity=100); +} +.tabs-stacked .open > a:hover { + border-color: #999999; +} +.tabbable { + *zoom: 1; +} +.tabbable:before, +.tabbable:after { + display: table; + content: ""; + line-height: 0; +} +.tabbable:after { + clear: both; +} +.tab-content { + overflow: auto; +} +.tabs-below > .nav-tabs, +.tabs-right > .nav-tabs, +.tabs-left > .nav-tabs { + border-bottom: 0; +} +.tab-content > .tab-pane, +.pill-content > .pill-pane { + display: none; +} +.tab-content > .active, +.pill-content > .active { + display: block; +} +.tabs-below > .nav-tabs { + border-top: 1px solid #ddd; +} +.tabs-below > .nav-tabs > li { + margin-top: -1px; + margin-bottom: 0; +} +.tabs-below > .nav-tabs > li > a { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} +.tabs-below > .nav-tabs > li > a:hover { + border-bottom-color: transparent; + border-top-color: #ddd; +} +.tabs-below > .nav-tabs > .active > a, +.tabs-below > .nav-tabs > .active > a:hover { + border-color: transparent #ddd #ddd #ddd; +} +.tabs-left > .nav-tabs > li, +.tabs-right > .nav-tabs > li { + float: none; +} +.tabs-left > .nav-tabs > li > a, +.tabs-right > .nav-tabs > li > a { + min-width: 74px; + margin-right: 0; + margin-bottom: 3px; +} +.tabs-left > .nav-tabs { + float: left; + margin-right: 19px; + border-right: 1px solid #ddd; +} +.tabs-left > .nav-tabs > li > a { + margin-right: -1px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} +.tabs-left > .nav-tabs > li > a:hover { + border-color: #eeeeee #dddddd #eeeeee #eeeeee; +} +.tabs-left > .nav-tabs .active > a, +.tabs-left > .nav-tabs .active > a:hover { + border-color: #ddd transparent #ddd #ddd; + *border-right-color: #ffffff; +} +.tabs-right > .nav-tabs { + float: right; + margin-left: 19px; + border-left: 1px solid #ddd; +} +.tabs-right > .nav-tabs > li > a { + margin-left: -1px; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} +.tabs-right > .nav-tabs > li > a:hover { + border-color: #eeeeee #eeeeee #eeeeee #dddddd; +} +.tabs-right > .nav-tabs .active > a, +.tabs-right > .nav-tabs .active > a:hover { + border-color: #ddd #ddd #ddd transparent; + *border-left-color: #ffffff; +} +.nav > .disabled > a { + color: #999999; +} +.nav > .disabled > a:hover { + text-decoration: none; + background-color: transparent; + cursor: default; +} +.navbar { + overflow: visible; + margin-bottom: 20px; + *position: relative; + *z-index: 2; +} +.navbar-inner { + min-height: 40px; + padding-left: 20px; + padding-right: 20px; + background-color: #fafafa; + background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2)); + background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2); + background-image: -o-linear-gradient(top, #ffffff, #f2f2f2); + background-image: linear-gradient(to bottom, #ffffff, #f2f2f2); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0); + border: 1px solid #d4d4d4; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + *zoom: 1; +} +.navbar-inner:before, +.navbar-inner:after { + display: table; + content: ""; + line-height: 0; +} +.navbar-inner:after { + clear: both; +} +.navbar .container { + width: auto; +} +.nav-collapse.collapse { + height: auto; + overflow: visible; +} +.navbar .brand { + float: left; + display: block; + padding: 10px 20px 10px; + margin-left: -20px; + font-size: 20px; + font-weight: 200; + color: #777777; + text-shadow: 0 1px 0 #ffffff; +} +.navbar .brand:hover { + text-decoration: none; +} +.navbar-text { + margin-bottom: 0; + line-height: 40px; + color: #777777; +} +.navbar-link { + color: #777777; +} +.navbar-link:hover { + color: #333333; +} +.navbar .divider-vertical { + height: 40px; + margin: 0 9px; + border-left: 1px solid #f2f2f2; + border-right: 1px solid #ffffff; +} +.navbar .btn, +.navbar .btn-group { + margin-top: 5px; +} +.navbar .btn-group .btn, +.navbar .input-prepend .btn, +.navbar .input-append .btn { + margin-top: 0; +} +.navbar-form { + margin-bottom: 0; + *zoom: 1; +} +.navbar-form:before, +.navbar-form:after { + display: table; + content: ""; + line-height: 0; +} +.navbar-form:after { + clear: both; +} +.navbar-form input, +.navbar-form select, +.navbar-form .radio, +.navbar-form .checkbox { + margin-top: 5px; +} +.navbar-form input, +.navbar-form select, +.navbar-form .btn { + display: inline-block; + margin-bottom: 0; +} +.navbar-form input[type="image"], +.navbar-form input[type="checkbox"], +.navbar-form input[type="radio"] { + margin-top: 3px; +} +.navbar-form .input-append, +.navbar-form .input-prepend { + margin-top: 5px; + white-space: nowrap; +} +.navbar-form .input-append input, +.navbar-form .input-prepend input { + margin-top: 0; +} +.navbar-search { + position: relative; + float: left; + margin-top: 5px; + margin-bottom: 0; +} +.navbar-search .search-query { + margin-bottom: 0; + padding: 4px 14px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + font-weight: normal; + line-height: 1; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} +.navbar-static-top { + position: static; + margin-bottom: 0; +} +.navbar-static-top .navbar-inner { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; + margin-bottom: 0; +} +.navbar-fixed-top .navbar-inner, +.navbar-static-top .navbar-inner { + border-width: 0 0 1px; +} +.navbar-fixed-bottom .navbar-inner { + border-width: 1px 0 0; +} +.navbar-fixed-top .navbar-inner, +.navbar-fixed-bottom .navbar-inner { + padding-left: 0; + padding-right: 0; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +.navbar-static-top .container, +.navbar-fixed-top .container, +.navbar-fixed-bottom .container { + width: 940px; +} +.navbar-fixed-top { + top: 0; +} +.navbar-fixed-top .navbar-inner, +.navbar-static-top .navbar-inner { + -webkit-box-shadow: 0 1px 10px rgba(0,0,0,.1); + -moz-box-shadow: 0 1px 10px rgba(0,0,0,.1); + box-shadow: 0 1px 10px rgba(0,0,0,.1); +} +.navbar-fixed-bottom { + bottom: 0; +} +.navbar-fixed-bottom .navbar-inner { + -webkit-box-shadow: 0 -1px 10px rgba(0,0,0,.1); + -moz-box-shadow: 0 -1px 10px rgba(0,0,0,.1); + box-shadow: 0 -1px 10px rgba(0,0,0,.1); +} +.navbar .nav { + position: relative; + left: 0; + display: block; + float: left; + margin: 0 10px 0 0; +} +.navbar .nav.pull-right { + float: right; + margin-right: 0; +} +.navbar .nav > li { + float: left; +} +.navbar .nav > li > a { + float: none; + padding: 10px 15px 10px; + color: #777777; + text-decoration: none; + text-shadow: 0 1px 0 #ffffff; +} +.navbar .nav .dropdown-toggle .caret { + margin-top: 8px; +} +.navbar .nav > li > a:focus, +.navbar .nav > li > a:hover { + background-color: transparent; + color: #333333; + text-decoration: none; +} +.navbar .nav > .active > a, +.navbar .nav > .active > a:hover, +.navbar .nav > .active > a:focus { + color: #555555; + text-decoration: none; + background-color: #e5e5e5; + -webkit-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); + -moz-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); +} +.navbar .btn-navbar { + display: none; + float: right; + padding: 7px 10px; + margin-left: 5px; + margin-right: 5px; + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #ededed; + background-image: -moz-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5)); + background-image: -webkit-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: -o-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: linear-gradient(to bottom, #f2f2f2, #e5e5e5); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0); + border-color: #e5e5e5 #e5e5e5 #bfbfbf; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #e5e5e5; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075); + -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075); + box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075); +} +.navbar .btn-navbar:hover, +.navbar .btn-navbar:active, +.navbar .btn-navbar.active, +.navbar .btn-navbar.disabled, +.navbar .btn-navbar[disabled] { + color: #ffffff; + background-color: #e5e5e5; + *background-color: #d9d9d9; +} +.navbar .btn-navbar:active, +.navbar .btn-navbar.active { + background-color: #cccccc \9; +} +.navbar .btn-navbar .icon-bar { + display: block; + width: 18px; + height: 2px; + background-color: #f5f5f5; + -webkit-border-radius: 1px; + -moz-border-radius: 1px; + border-radius: 1px; + -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); + -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); +} +.btn-navbar .icon-bar + .icon-bar { + margin-top: 3px; +} +.navbar .nav > li > .dropdown-menu:before { + content: ''; + display: inline-block; + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-bottom: 7px solid #ccc; + border-bottom-color: rgba(0, 0, 0, 0.2); + position: absolute; + top: -7px; + left: 9px; +} +.navbar .nav > li > .dropdown-menu:after { + content: ''; + display: inline-block; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-bottom: 6px solid #ffffff; + position: absolute; + top: -6px; + left: 10px; +} +.navbar-fixed-bottom .nav > li > .dropdown-menu:before { + border-top: 7px solid #ccc; + border-top-color: rgba(0, 0, 0, 0.2); + border-bottom: 0; + bottom: -7px; + top: auto; +} +.navbar-fixed-bottom .nav > li > .dropdown-menu:after { + border-top: 6px solid #ffffff; + border-bottom: 0; + bottom: -6px; + top: auto; +} +.navbar .nav li.dropdown > a:hover .caret { + border-top-color: #555555; + border-bottom-color: #555555; +} +.navbar .nav li.dropdown.open > .dropdown-toggle, +.navbar .nav li.dropdown.active > .dropdown-toggle, +.navbar .nav li.dropdown.open.active > .dropdown-toggle { + background-color: #e5e5e5; + color: #555555; +} +.navbar .nav li.dropdown > .dropdown-toggle .caret { + border-top-color: #777777; + border-bottom-color: #777777; +} +.navbar .nav li.dropdown.open > .dropdown-toggle .caret, +.navbar .nav li.dropdown.active > .dropdown-toggle .caret, +.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret { + border-top-color: #555555; + border-bottom-color: #555555; +} +.navbar .pull-right > li > .dropdown-menu, +.navbar .nav > li > .dropdown-menu.pull-right { + left: auto; + right: 0; +} +.navbar .pull-right > li > .dropdown-menu:before, +.navbar .nav > li > .dropdown-menu.pull-right:before { + left: auto; + right: 12px; +} +.navbar .pull-right > li > .dropdown-menu:after, +.navbar .nav > li > .dropdown-menu.pull-right:after { + left: auto; + right: 13px; +} +.navbar .pull-right > li > .dropdown-menu .dropdown-menu, +.navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu { + left: auto; + right: 100%; + margin-left: 0; + margin-right: -1px; + -webkit-border-radius: 6px 0 6px 6px; + -moz-border-radius: 6px 0 6px 6px; + border-radius: 6px 0 6px 6px; +} +.navbar-inverse .navbar-inner { + background-color: #1b1b1b; + background-image: -moz-linear-gradient(top, #222222, #111111); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111)); + background-image: -webkit-linear-gradient(top, #222222, #111111); + background-image: -o-linear-gradient(top, #222222, #111111); + background-image: linear-gradient(to bottom, #222222, #111111); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0); + border-color: #252525; +} +.navbar-inverse .brand, +.navbar-inverse .nav > li > a { + color: #999999; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} +.navbar-inverse .brand:hover, +.navbar-inverse .nav > li > a:hover { + color: #ffffff; +} +.navbar-inverse .brand { + color: #999999; +} +.navbar-inverse .navbar-text { + color: #999999; +} +.navbar-inverse .nav > li > a:focus, +.navbar-inverse .nav > li > a:hover { + background-color: transparent; + color: #ffffff; +} +.navbar-inverse .nav .active > a, +.navbar-inverse .nav .active > a:hover, +.navbar-inverse .nav .active > a:focus { + color: #ffffff; + background-color: #111111; +} +.navbar-inverse .navbar-link { + color: #999999; +} +.navbar-inverse .navbar-link:hover { + color: #ffffff; +} +.navbar-inverse .divider-vertical { + border-left-color: #111111; + border-right-color: #222222; +} +.navbar-inverse .nav li.dropdown.open > .dropdown-toggle, +.navbar-inverse .nav li.dropdown.active > .dropdown-toggle, +.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { + background-color: #111111; + color: #ffffff; +} +.navbar-inverse .nav li.dropdown > a:hover .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} +.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret { + border-top-color: #999999; + border-bottom-color: #999999; +} +.navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret, +.navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret, +.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} +.navbar-inverse .navbar-search .search-query { + color: #ffffff; + background-color: #515151; + border-color: #111111; + -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15); + -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15); + box-shadow: inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15); + -webkit-transition: none; + -moz-transition: none; + -o-transition: none; + transition: none; +} +.navbar-inverse .navbar-search .search-query:-moz-placeholder { + color: #cccccc; +} +.navbar-inverse .navbar-search .search-query:-ms-input-placeholder { + color: #cccccc; +} +.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder { + color: #cccccc; +} +.navbar-inverse .navbar-search .search-query:focus, +.navbar-inverse .navbar-search .search-query.focused { + padding: 5px 15px; + color: #333333; + text-shadow: 0 1px 0 #ffffff; + background-color: #ffffff; + border: 0; + -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + outline: 0; +} +.navbar-inverse .btn-navbar { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #0e0e0e; + background-image: -moz-linear-gradient(top, #151515, #040404); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404)); + background-image: -webkit-linear-gradient(top, #151515, #040404); + background-image: -o-linear-gradient(top, #151515, #040404); + background-image: linear-gradient(to bottom, #151515, #040404); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0); + border-color: #040404 #040404 #000000; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + *background-color: #040404; + /* Darken IE7 buttons by default so they stand out more given they won't have borders */ + + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.navbar-inverse .btn-navbar:hover, +.navbar-inverse .btn-navbar:active, +.navbar-inverse .btn-navbar.active, +.navbar-inverse .btn-navbar.disabled, +.navbar-inverse .btn-navbar[disabled] { + color: #ffffff; + background-color: #040404; + *background-color: #000000; +} +.navbar-inverse .btn-navbar:active, +.navbar-inverse .btn-navbar.active { + background-color: #000000 \9; +} +.breadcrumb { + padding: 8px 15px; + margin: 0 0 20px; + list-style: none; + background-color: #f5f5f5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.breadcrumb > li { + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; + text-shadow: 0 1px 0 #ffffff; +} +.breadcrumb > li > .divider { + padding: 0 5px; + color: #ccc; +} +.breadcrumb > .active { + color: #999999; +} +.pagination { + margin: 20px 0; +} +.pagination ul { + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; + margin-left: 0; + margin-bottom: 0; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); +} +.pagination ul > li { + display: inline; +} +.pagination ul > li > a, +.pagination ul > li > span { + float: left; + padding: 4px 12px; + line-height: 20px; + text-decoration: none; + background-color: #ffffff; + border: 1px solid #dddddd; + border-left-width: 0; +} +.pagination ul > li > a:hover, +.pagination ul > .active > a, +.pagination ul > .active > span { + background-color: #f5f5f5; +} +.pagination ul > .active > a, +.pagination ul > .active > span { + color: #999999; + cursor: default; +} +.pagination ul > .disabled > span, +.pagination ul > .disabled > a, +.pagination ul > .disabled > a:hover { + color: #999999; + background-color: transparent; + cursor: default; +} +.pagination ul > li:first-child > a, +.pagination ul > li:first-child > span { + border-left-width: 1px; + -webkit-border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; + border-top-left-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + border-bottom-left-radius: 4px; +} +.pagination ul > li:last-child > a, +.pagination ul > li:last-child > span { + -webkit-border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; + border-top-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -moz-border-radius-bottomright: 4px; + border-bottom-right-radius: 4px; +} +.pagination-centered { + text-align: center; +} +.pagination-right { + text-align: right; +} +.pagination-large ul > li > a, +.pagination-large ul > li > span { + padding: 11px 19px; + font-size: 17.5px; +} +.pagination-large ul > li:first-child > a, +.pagination-large ul > li:first-child > span { + -webkit-border-top-left-radius: 6px; + -moz-border-radius-topleft: 6px; + border-top-left-radius: 6px; + -webkit-border-bottom-left-radius: 6px; + -moz-border-radius-bottomleft: 6px; + border-bottom-left-radius: 6px; +} +.pagination-large ul > li:last-child > a, +.pagination-large ul > li:last-child > span { + -webkit-border-top-right-radius: 6px; + -moz-border-radius-topright: 6px; + border-top-right-radius: 6px; + -webkit-border-bottom-right-radius: 6px; + -moz-border-radius-bottomright: 6px; + border-bottom-right-radius: 6px; +} +.pagination-mini ul > li:first-child > a, +.pagination-small ul > li:first-child > a, +.pagination-mini ul > li:first-child > span, +.pagination-small ul > li:first-child > span { + -webkit-border-top-left-radius: 3px; + -moz-border-radius-topleft: 3px; + border-top-left-radius: 3px; + -webkit-border-bottom-left-radius: 3px; + -moz-border-radius-bottomleft: 3px; + border-bottom-left-radius: 3px; +} +.pagination-mini ul > li:last-child > a, +.pagination-small ul > li:last-child > a, +.pagination-mini ul > li:last-child > span, +.pagination-small ul > li:last-child > span { + -webkit-border-top-right-radius: 3px; + -moz-border-radius-topright: 3px; + border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + -moz-border-radius-bottomright: 3px; + border-bottom-right-radius: 3px; +} +.pagination-small ul > li > a, +.pagination-small ul > li > span { + padding: 2px 10px; + font-size: 11.9px; +} +.pagination-mini ul > li > a, +.pagination-mini ul > li > span { + padding: 0 6px; + font-size: 10.5px; +} +.pager { + margin: 20px 0; + list-style: none; + text-align: center; + *zoom: 1; +} +.pager:before, +.pager:after { + display: table; + content: ""; + line-height: 0; +} +.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; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} +.pager li > a:hover { + text-decoration: none; + background-color: #f5f5f5; +} +.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 > span { + color: #999999; + background-color: #fff; + cursor: default; +} +.thumbnails { + margin-left: -20px; + list-style: none; + *zoom: 1; +} +.thumbnails:before, +.thumbnails:after { + display: table; + content: ""; + line-height: 0; +} +.thumbnails:after { + clear: both; +} +.row-fluid .thumbnails { + margin-left: 0; +} +.thumbnails > li { + float: left; + margin-bottom: 20px; + margin-left: 20px; +} +.thumbnail { + display: block; + padding: 4px; + line-height: 20px; + border: 1px solid #ddd; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} +a.thumbnail:hover { + border-color: #0088cc; + -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); +} +.thumbnail > img { + display: block; + max-width: 100%; + margin-left: auto; + margin-right: auto; +} +.thumbnail .caption { + padding: 9px; + color: #555555; +} +.alert { + padding: 8px 35px 8px 14px; + margin-bottom: 20px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + background-color: #fcf8e3; + border: 1px solid #fbeed5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.alert, +.alert h4 { + color: #c09853; +} +.alert h4 { + margin: 0; +} +.alert .close { + position: relative; + top: -2px; + right: -21px; + line-height: 20px; +} +.alert-success { + background-color: #dff0d8; + border-color: #d6e9c6; + color: #468847; +} +.alert-success h4 { + color: #468847; +} +.alert-danger, +.alert-error { + background-color: #f2dede; + border-color: #eed3d7; + color: #b94a48; +} +.alert-danger h4, +.alert-error h4 { + color: #b94a48; +} +.alert-info { + background-color: #d9edf7; + border-color: #bce8f1; + color: #3a87ad; +} +.alert-info h4 { + color: #3a87ad; +} +.alert-block { + padding-top: 14px; + padding-bottom: 14px; +} +.alert-block > p, +.alert-block > ul { + margin-bottom: 0; +} +.alert-block p + p { + margin-top: 5px; +} +@-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; + } +} +@-ms-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 { + overflow: hidden; + height: 20px; + margin-bottom: 20px; + background-color: #f7f7f7; + background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); + background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0); + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.progress .bar { + width: 0%; + height: 100%; + color: #ffffff; + float: left; + font-size: 12px; + text-align: center; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #0e90d2; + background-image: -moz-linear-gradient(top, #149bdf, #0480be); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); + background-image: -webkit-linear-gradient(top, #149bdf, #0480be); + background-image: -o-linear-gradient(top, #149bdf, #0480be); + background-image: linear-gradient(to bottom, #149bdf, #0480be); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0); + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -moz-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-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-transition: width 0.6s ease; + -moz-transition: width 0.6s ease; + -o-transition: width 0.6s ease; + transition: width 0.6s ease; +} +.progress .bar + .bar { + -webkit-box-shadow: inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15); + -moz-box-shadow: inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15); + box-shadow: inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15); +} +.progress-striped .bar { + background-color: #149bdf; + 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: -o-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); + -webkit-background-size: 40px 40px; + -moz-background-size: 40px 40px; + -o-background-size: 40px 40px; + background-size: 40px 40px; +} +.progress.active .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-danger .bar, +.progress .bar-danger { + background-color: #dd514c; + background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); + background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0); +} +.progress-danger.progress-striped .bar, +.progress-striped .bar-danger { + background-color: #ee5f5b; + 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: -o-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-success .bar, +.progress .bar-success { + background-color: #5eb95e; + background-image: -moz-linear-gradient(top, #62c462, #57a957); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); + background-image: -webkit-linear-gradient(top, #62c462, #57a957); + background-image: -o-linear-gradient(top, #62c462, #57a957); + background-image: linear-gradient(to bottom, #62c462, #57a957); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0); +} +.progress-success.progress-striped .bar, +.progress-striped .bar-success { + background-color: #62c462; + 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: -o-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-info .bar, +.progress .bar-info { + background-color: #4bb1cf; + background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); + background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); + background-image: -o-linear-gradient(top, #5bc0de, #339bb9); + background-image: linear-gradient(to bottom, #5bc0de, #339bb9); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0); +} +.progress-info.progress-striped .bar, +.progress-striped .bar-info { + background-color: #5bc0de; + 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: -o-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-warning .bar, +.progress .bar-warning { + background-color: #faa732; + background-image: -moz-linear-gradient(top, #fbb450, #f89406); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); + background-image: -webkit-linear-gradient(top, #fbb450, #f89406); + background-image: -o-linear-gradient(top, #fbb450, #f89406); + background-image: linear-gradient(to bottom, #fbb450, #f89406); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); +} +.progress-warning.progress-striped .bar, +.progress-striped .bar-warning { + background-color: #fbb450; + 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: -o-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); +} +.hero-unit { + padding: 60px; + margin-bottom: 30px; + font-size: 18px; + font-weight: 200; + line-height: 30px; + color: inherit; + background-color: #eeeeee; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} +.hero-unit h1 { + margin-bottom: 0; + font-size: 60px; + line-height: 1; + color: inherit; + letter-spacing: -1px; +} +.hero-unit li { + line-height: 30px; +} +.media, +.media-body { + overflow: hidden; + *overflow: visible; + 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 { + margin-left: 0; + list-style: none; +} +.tooltip { + position: absolute; + z-index: 1030; + display: block; + visibility: visible; + padding: 5px; + font-size: 11px; + opacity: 0; + filter: alpha(opacity=0); +} +.tooltip.in { + opacity: 0.8; + filter: alpha(opacity=80); +} +.tooltip.top { + margin-top: -3px; +} +.tooltip.right { + margin-left: 3px; +} +.tooltip.bottom { + margin-top: 3px; +} +.tooltip.left { + margin-left: -3px; +} +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #ffffff; + text-align: center; + text-decoration: none; + background-color: #000000; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + 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-width: 5px 5px 0; + border-top-color: #000000; +} +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000000; +} +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000000; +} +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000000; +} +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1010; + display: none; + width: 236px; + padding: 1px; + text-align: left; + background-color: #ffffff; + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + white-space: normal; +} +.popover.top { + margin-top: -10px; +} +.popover.right { + margin-left: 10px; +} +.popover.bottom { + margin-top: 10px; +} +.popover.left { + margin-left: -10px; +} +.popover-title { + margin: 0; + padding: 8px 14px; + font-size: 14px; + font-weight: normal; + line-height: 18px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + -webkit-border-radius: 5px 5px 0 0; + -moz-border-radius: 5px 5px 0 0; + 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 { + left: 50%; + margin-left: -11px; + border-bottom-width: 0; + border-top-color: #999; + border-top-color: rgba(0, 0, 0, 0.25); + bottom: -11px; +} +.popover.top .arrow:after { + bottom: 1px; + margin-left: -10px; + border-bottom-width: 0; + border-top-color: #ffffff; +} +.popover.right .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-left-width: 0; + border-right-color: #999; + border-right-color: rgba(0, 0, 0, 0.25); +} +.popover.right .arrow:after { + left: 1px; + bottom: -10px; + border-left-width: 0; + border-right-color: #ffffff; +} +.popover.bottom .arrow { + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, 0.25); + top: -11px; +} +.popover.bottom .arrow:after { + top: 1px; + margin-left: -10px; + border-top-width: 0; + border-bottom-color: #ffffff; +} +.popover.left .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999; + border-left-color: rgba(0, 0, 0, 0.25); +} +.popover.left .arrow:after { + right: 1px; + border-right-width: 0; + border-left-color: #ffffff; + bottom: -10px; +} +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000000; +} +.modal-backdrop.fade { + opacity: 0; +} +.modal-backdrop, +.modal-backdrop.fade.in { + opacity: 0.8; + filter: alpha(opacity=80); +} +.modal { + position: fixed; + top: 10%; + left: 50%; + z-index: 1050; + width: 560px; + margin-left: -280px; + background-color: #ffffff; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, 0.3); + *border: 1px solid #999; + /* IE6-7 */ + + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; + outline: none; +} +.modal.fade { + -webkit-transition: opacity .3s linear, top .3s ease-out; + -moz-transition: opacity .3s linear, top .3s ease-out; + -o-transition: opacity .3s linear, top .3s ease-out; + transition: opacity .3s linear, top .3s ease-out; + top: -25%; +} +.modal.fade.in { + top: 10%; +} +.modal-header { + padding: 9px 15px; + border-bottom: 1px solid #eee; +} +.modal-header .close { + margin-top: 2px; +} +.modal-header h3 { + margin: 0; + line-height: 30px; +} +.modal-body { + position: relative; + overflow-y: auto; + max-height: 400px; + padding: 15px; +} +.modal-form { + margin-bottom: 0; +} +.modal-footer { + padding: 14px 15px 15px; + margin-bottom: 0; + text-align: right; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; + -webkit-box-shadow: inset 0 1px 0 #ffffff; + -moz-box-shadow: inset 0 1px 0 #ffffff; + box-shadow: inset 0 1px 0 #ffffff; + *zoom: 1; +} +.modal-footer:before, +.modal-footer:after { + display: table; + content: ""; + line-height: 0; +} +.modal-footer:after { + clear: both; +} +.modal-footer .btn + .btn { + margin-left: 5px; + margin-bottom: 0; +} +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} +.dropup, +.dropdown { + position: relative; +} +.dropdown-toggle { + *margin-bottom: -3px; +} +.dropdown-toggle:active, +.open .dropdown-toggle { + outline: 0; +} +.caret { + display: inline-block; + width: 0; + height: 0; + vertical-align: top; + border-top: 4px solid #000000; + border-right: 4px solid transparent; + border-left: 4px solid transparent; + content: ""; +} +.dropdown .caret { + margin-top: 8px; + margin-left: 2px; +} +.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; + list-style: none; + background-color: #ffffff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + *border-right-width: 2px; + *border-bottom-width: 2px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} +.dropdown-menu.pull-right { + right: 0; + left: auto; +} +.dropdown-menu .divider { + *width: 100%; + height: 1px; + margin: 9px 1px; + *margin: -5px 0 5px; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; +} +.dropdown-menu li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 20px; + color: #333333; + white-space: nowrap; +} +.dropdown-menu li > a:hover, +.dropdown-menu li > a:focus, +.dropdown-submenu:hover > a { + text-decoration: none; + color: #ffffff; + background-color: #0081c2; + background-image: -moz-linear-gradient(top, #0088cc, #0077b3); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); + background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); + background-image: -o-linear-gradient(top, #0088cc, #0077b3); + background-image: linear-gradient(to bottom, #0088cc, #0077b3); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); +} +.dropdown-menu .active > a, +.dropdown-menu .active > a:hover { + color: #ffffff; + text-decoration: none; + outline: 0; + background-color: #0081c2; + background-image: -moz-linear-gradient(top, #0088cc, #0077b3); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); + background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); + background-image: -o-linear-gradient(top, #0088cc, #0077b3); + background-image: linear-gradient(to bottom, #0088cc, #0077b3); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); +} +.dropdown-menu .disabled > a, +.dropdown-menu .disabled > a:hover { + color: #999999; +} +.dropdown-menu .disabled > a:hover { + text-decoration: none; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + cursor: default; +} +.open { + *z-index: 1000; +} +.open > .dropdown-menu { + display: block; +} +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + border-top: 0; + border-bottom: 4px solid #000000; + content: ""; +} +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; +} +.dropdown-submenu { + position: relative; +} +.dropdown-submenu > .dropdown-menu { + top: 0; + left: 100%; + margin-top: -6px; + margin-left: -1px; + -webkit-border-radius: 0 6px 6px 6px; + -moz-border-radius: 0 6px 6px 6px; + border-radius: 0 6px 6px 6px; +} +.dropdown-submenu:hover > .dropdown-menu { + display: block; +} +.dropup .dropdown-submenu > .dropdown-menu { + top: auto; + bottom: 0; + margin-top: 0; + margin-bottom: -2px; + -webkit-border-radius: 5px 5px 5px 0; + -moz-border-radius: 5px 5px 5px 0; + border-radius: 5px 5px 5px 0; +} +.dropdown-submenu > a:after { + display: block; + content: " "; + float: right; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; + border-width: 5px 0 5px 5px; + border-left-color: #cccccc; + margin-top: 5px; + margin-right: -10px; +} +.dropdown-submenu:hover > a:after { + border-left-color: #ffffff; +} +.dropdown-submenu.pull-left { + float: none; +} +.dropdown-submenu.pull-left > .dropdown-menu { + left: -100%; + margin-left: 10px; + -webkit-border-radius: 6px 0 6px 6px; + -moz-border-radius: 6px 0 6px 6px; + border-radius: 6px 0 6px 6px; +} +.dropdown .dropdown-menu .nav-header { + padding-left: 20px; + padding-right: 20px; +} +.typeahead { + z-index: 1051; + margin-top: 2px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.accordion { + margin-bottom: 20px; +} +.accordion-group { + margin-bottom: 2px; + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.accordion-heading { + border-bottom: 0; +} +.accordion-heading .accordion-toggle { + display: block; + padding: 8px 15px; +} +.accordion-toggle { + cursor: pointer; +} +.accordion-inner { + padding: 9px 15px; + border-top: 1px solid #e5e5e5; +} +.carousel { + position: relative; + margin-bottom: 20px; + line-height: 1; +} +.carousel-inner { + overflow: hidden; + width: 100%; + position: relative; +} +.carousel-inner > .item { + display: none; + position: relative; + -webkit-transition: 0.6s ease-in-out left; + -moz-transition: 0.6s ease-in-out left; + -o-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; +} +.carousel-inner > .item > img { + display: block; + 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: 40%; + left: 15px; + width: 40px; + height: 40px; + margin-top: -20px; + font-size: 60px; + font-weight: 100; + line-height: 30px; + color: #ffffff; + text-align: center; + background: #222222; + border: 3px solid #ffffff; + -webkit-border-radius: 23px; + -moz-border-radius: 23px; + border-radius: 23px; + opacity: 0.5; + filter: alpha(opacity=50); +} +.carousel-control.right { + left: auto; + right: 15px; +} +.carousel-control:hover { + color: #ffffff; + text-decoration: none; + opacity: 0.9; + filter: alpha(opacity=90); +} +.carousel-caption { + position: absolute; + left: 0; + right: 0; + bottom: 0; + padding: 15px; + background: #333333; + background: rgba(0, 0, 0, 0.75); +} +.carousel-caption h4, +.carousel-caption p { + color: #ffffff; + line-height: 20px; +} +.carousel-caption h4 { + margin: 0 0 5px; +} +.carousel-caption p { + margin-bottom: 0; +} +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + -moz-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-large { + padding: 24px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} +.well-small { + padding: 9px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.close { + float: right; + font-size: 20px; + font-weight: bold; + line-height: 20px; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); +} +.close:hover { + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.4; + filter: alpha(opacity=40); +} +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} +.pull-right { + float: right; +} +.pull-left { + float: left; +} +.hide { + display: none; +} +.show { + display: block; +} +.invisible { + visibility: hidden; +} +.affix { + position: fixed; +} +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + -moz-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} +.fade.in { + opacity: 1; +} +.collapse { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height 0.35s ease; + -moz-transition: height 0.35s ease; + -o-transition: height 0.35s ease; + transition: height 0.35s ease; +} +.collapse.in { + height: auto; +} +.hidden { + display: none; + visibility: hidden; +} +.visible-phone { + display: none !important; +} +.visible-tablet { + display: none !important; +} +.hidden-desktop { + display: none !important; +} +.visible-desktop { + display: inherit !important; +} +@media (min-width: 768px) and (max-width: 979px) { + .hidden-desktop { + display: inherit !important; + } + .visible-desktop { + display: none !important ; + } + .visible-tablet { + display: inherit !important; + } + .hidden-tablet { + display: none !important; + } +} +@media (max-width: 767px) { + .hidden-desktop { + display: inherit !important; + } + .visible-desktop { + display: none !important; + } + .visible-phone { + display: inherit !important; + } + .hidden-phone { + display: none !important; + } +} +@media (max-width: 767px) { + body { + padding-left: 20px; + padding-right: 20px; + } + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-left: -20px; + margin-right: -20px; + } + .container-fluid { + padding: 0; + } + .dl-horizontal dt { + float: none; + clear: none; + width: auto; + text-align: left; + } + .dl-horizontal dd { + margin-left: 0; + } + .container { + width: auto; + } + .row-fluid { + width: 100%; + } + .row, + .thumbnails { + margin-left: 0; + } + .thumbnails > li { + float: none; + margin-left: 0; + } + [class*="span"], + .uneditable-input[class*="span"], + .row-fluid [class*="span"] { + float: none; + display: block; + width: 100%; + margin-left: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + .input-large, + .input-xlarge, + .input-xxlarge, + input[class*="span"], + select[class*="span"], + textarea[class*="span"], + .uneditable-input { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + .modal { + position: fixed; + top: 20px; + left: 20px; + right: 20px; + width: auto; + margin: 0; + } + .modal.fade { + top: -100px; + } + .modal.fade.in { + top: 20px; + } +} +@media (max-width: 480px) { + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + .page-header h1 small { + display: block; + line-height: 20px; + } + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + .form-horizontal .controls { + margin-left: 0; + } + .form-horizontal .control-list { + padding-top: 0; + } + .form-horizontal .form-actions { + padding-left: 10px; + padding-right: 10px; + } + .media .pull-left, + .media .pull-right { + float: none; + display: block; + margin-bottom: 10px; + } + .media-object { + margin-right: 0; + margin-left: 0; + } + .modal { + top: 10px; + left: 10px; + right: 10px; + } + .modal-header .close { + padding: 10px; + margin: -10px; + } + .carousel-caption { + position: static; + } +} +@media (min-width: 768px) and (max-width: 979px) { + .row { + margin-left: -20px; + *zoom: 1; + } + .row:before, + .row:after { + display: table; + content: ""; + line-height: 0; + } + .row:after { + clear: both; + } + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + .span12 { + width: 724px; + } + .span11 { + width: 662px; + } + .span10 { + width: 600px; + } + .span9 { + width: 538px; + } + .span8 { + width: 476px; + } + .span7 { + width: 414px; + } + .span6 { + width: 352px; + } + .span5 { + width: 290px; + } + .span4 { + width: 228px; + } + .span3 { + width: 166px; + } + .span2 { + width: 104px; + } + .span1 { + width: 42px; + } + .offset12 { + margin-left: 764px; + } + .offset11 { + margin-left: 702px; + } + .offset10 { + margin-left: 640px; + } + .offset9 { + margin-left: 578px; + } + .offset8 { + margin-left: 516px; + } + .offset7 { + margin-left: 454px; + } + .offset6 { + margin-left: 392px; + } + .offset5 { + margin-left: 330px; + } + .offset4 { + margin-left: 268px; + } + .offset3 { + margin-left: 206px; + } + .offset2 { + margin-left: 144px; + } + .offset1 { + margin-left: 82px; + } + .row-fluid { + width: 100%; + *zoom: 1; + } + .row-fluid:before, + .row-fluid:after { + display: table; + content: ""; + line-height: 0; + } + .row-fluid:after { + clear: both; + } + .row-fluid [class*="span"] { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + float: left; + margin-left: 2.7624309392265194%; + *margin-left: 2.709239449864817%; + } + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + input, + textarea, + .uneditable-input { + margin-left: 0; + } + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + input.span12, textarea.span12, .uneditable-input.span12 { + width: 710px; + } + input.span11, textarea.span11, .uneditable-input.span11 { + width: 648px; + } + input.span10, textarea.span10, .uneditable-input.span10 { + width: 586px; + } + input.span9, textarea.span9, .uneditable-input.span9 { + width: 524px; + } + input.span8, textarea.span8, .uneditable-input.span8 { + width: 462px; + } + input.span7, textarea.span7, .uneditable-input.span7 { + width: 400px; + } + input.span6, textarea.span6, .uneditable-input.span6 { + width: 338px; + } + input.span5, textarea.span5, .uneditable-input.span5 { + width: 276px; + } + input.span4, textarea.span4, .uneditable-input.span4 { + width: 214px; + } + input.span3, textarea.span3, .uneditable-input.span3 { + width: 152px; + } + input.span2, textarea.span2, .uneditable-input.span2 { + width: 90px; + } + input.span1, textarea.span1, .uneditable-input.span1 { + width: 28px; + } +} +@media (min-width: 1200px) { + .row { + margin-left: -30px; + *zoom: 1; + } + .row:before, + .row:after { + display: table; + content: ""; + line-height: 0; + } + .row:after { + clear: both; + } + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 30px; + } + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 1170px; + } + .span12 { + width: 1170px; + } + .span11 { + width: 1070px; + } + .span10 { + width: 970px; + } + .span9 { + width: 870px; + } + .span8 { + width: 770px; + } + .span7 { + width: 670px; + } + .span6 { + width: 570px; + } + .span5 { + width: 470px; + } + .span4 { + width: 370px; + } + .span3 { + width: 270px; + } + .span2 { + width: 170px; + } + .span1 { + width: 70px; + } + .offset12 { + margin-left: 1230px; + } + .offset11 { + margin-left: 1130px; + } + .offset10 { + margin-left: 1030px; + } + .offset9 { + margin-left: 930px; + } + .offset8 { + margin-left: 830px; + } + .offset7 { + margin-left: 730px; + } + .offset6 { + margin-left: 630px; + } + .offset5 { + margin-left: 530px; + } + .offset4 { + margin-left: 430px; + } + .offset3 { + margin-left: 330px; + } + .offset2 { + margin-left: 230px; + } + .offset1 { + margin-left: 130px; + } + .row-fluid { + width: 100%; + *zoom: 1; + } + .row-fluid:before, + .row-fluid:after { + display: table; + content: ""; + line-height: 0; + } + .row-fluid:after { + clear: both; + } + .row-fluid [class*="span"] { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + float: left; + margin-left: 2.564102564102564%; + *margin-left: 2.5109110747408616%; + } + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.564102564102564%; + } + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + .row-fluid .span11 { + width: 91.45299145299145%; + *width: 91.39979996362975%; + } + .row-fluid .span10 { + width: 82.90598290598291%; + *width: 82.8527914166212%; + } + .row-fluid .span9 { + width: 74.35897435897436%; + *width: 74.30578286961266%; + } + .row-fluid .span8 { + width: 65.81196581196582%; + *width: 65.75877432260411%; + } + .row-fluid .span7 { + width: 57.26495726495726%; + *width: 57.21176577559556%; + } + .row-fluid .span6 { + width: 48.717948717948715%; + *width: 48.664757228587014%; + } + .row-fluid .span5 { + width: 40.17094017094017%; + *width: 40.11774868157847%; + } + .row-fluid .span4 { + width: 31.623931623931625%; + *width: 31.570740134569924%; + } + .row-fluid .span3 { + width: 23.076923076923077%; + *width: 23.023731587561375%; + } + .row-fluid .span2 { + width: 14.52991452991453%; + *width: 14.476723040552828%; + } + .row-fluid .span1 { + width: 5.982905982905983%; + *width: 5.929714493544281%; + } + .row-fluid .offset12 { + margin-left: 105.12820512820512%; + *margin-left: 105.02182214948171%; + } + .row-fluid .offset12:first-child { + margin-left: 102.56410256410257%; + *margin-left: 102.45771958537915%; + } + .row-fluid .offset11 { + margin-left: 96.58119658119658%; + *margin-left: 96.47481360247316%; + } + .row-fluid .offset11:first-child { + margin-left: 94.01709401709402%; + *margin-left: 93.91071103837061%; + } + .row-fluid .offset10 { + margin-left: 88.03418803418803%; + *margin-left: 87.92780505546462%; + } + .row-fluid .offset10:first-child { + margin-left: 85.47008547008548%; + *margin-left: 85.36370249136206%; + } + .row-fluid .offset9 { + margin-left: 79.48717948717949%; + *margin-left: 79.38079650845607%; + } + .row-fluid .offset9:first-child { + margin-left: 76.92307692307693%; + *margin-left: 76.81669394435352%; + } + .row-fluid .offset8 { + margin-left: 70.94017094017094%; + *margin-left: 70.83378796144753%; + } + .row-fluid .offset8:first-child { + margin-left: 68.37606837606839%; + *margin-left: 68.26968539734497%; + } + .row-fluid .offset7 { + margin-left: 62.393162393162385%; + *margin-left: 62.28677941443899%; + } + .row-fluid .offset7:first-child { + margin-left: 59.82905982905982%; + *margin-left: 59.72267685033642%; + } + .row-fluid .offset6 { + margin-left: 53.84615384615384%; + *margin-left: 53.739770867430444%; + } + .row-fluid .offset6:first-child { + margin-left: 51.28205128205128%; + *margin-left: 51.175668303327875%; + } + .row-fluid .offset5 { + margin-left: 45.299145299145295%; + *margin-left: 45.1927623204219%; + } + .row-fluid .offset5:first-child { + margin-left: 42.73504273504273%; + *margin-left: 42.62865975631933%; + } + .row-fluid .offset4 { + margin-left: 36.75213675213675%; + *margin-left: 36.645753773413354%; + } + .row-fluid .offset4:first-child { + margin-left: 34.18803418803419%; + *margin-left: 34.081651209310785%; + } + .row-fluid .offset3 { + margin-left: 28.205128205128204%; + *margin-left: 28.0987452264048%; + } + .row-fluid .offset3:first-child { + margin-left: 25.641025641025642%; + *margin-left: 25.53464266230224%; + } + .row-fluid .offset2 { + margin-left: 19.65811965811966%; + *margin-left: 19.551736679396257%; + } + .row-fluid .offset2:first-child { + margin-left: 17.094017094017094%; + *margin-left: 16.98763411529369%; + } + .row-fluid .offset1 { + margin-left: 11.11111111111111%; + *margin-left: 11.004728132387708%; + } + .row-fluid .offset1:first-child { + margin-left: 8.547008547008547%; + *margin-left: 8.440625568285142%; + } + input, + textarea, + .uneditable-input { + margin-left: 0; + } + .controls-row [class*="span"] + [class*="span"] { + margin-left: 30px; + } + input.span12, textarea.span12, .uneditable-input.span12 { + width: 1156px; + } + input.span11, textarea.span11, .uneditable-input.span11 { + width: 1056px; + } + input.span10, textarea.span10, .uneditable-input.span10 { + width: 956px; + } + input.span9, textarea.span9, .uneditable-input.span9 { + width: 856px; + } + input.span8, textarea.span8, .uneditable-input.span8 { + width: 756px; + } + input.span7, textarea.span7, .uneditable-input.span7 { + width: 656px; + } + input.span6, textarea.span6, .uneditable-input.span6 { + width: 556px; + } + input.span5, textarea.span5, .uneditable-input.span5 { + width: 456px; + } + input.span4, textarea.span4, .uneditable-input.span4 { + width: 356px; + } + input.span3, textarea.span3, .uneditable-input.span3 { + width: 256px; + } + input.span2, textarea.span2, .uneditable-input.span2 { + width: 156px; + } + input.span1, textarea.span1, .uneditable-input.span1 { + width: 56px; + } + .thumbnails { + margin-left: -30px; + } + .thumbnails > li { + margin-left: 30px; + } + .row-fluid .thumbnails { + margin-left: 0; + } +} +@media (max-width: 979px) { + body { + padding-top: 0; + } + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + .navbar-fixed-top { + margin-bottom: 20px; + } + .navbar-fixed-bottom { + margin-top: 20px; + } + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + .navbar .container { + width: auto; + padding: 0; + } + .navbar .brand { + padding-left: 10px; + padding-right: 10px; + margin: 0 0 0 -5px; + } + .nav-collapse { + clear: both; + } + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + .nav-collapse .nav > li { + float: none; + } + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + .nav-collapse .nav > .divider-vertical { + display: none; + } + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + .nav-collapse .nav > li > a, + .nav-collapse .dropdown-menu a { + padding: 9px 15px; + font-weight: bold; + color: #777777; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + } + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + .nav-collapse .nav > li > a:hover, + .nav-collapse .dropdown-menu a:hover { + background-color: #f2f2f2; + } + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + .navbar-inverse .nav-collapse .nav > li > a:hover, + .navbar-inverse .nav-collapse .dropdown-menu a:hover { + background-color: #111111; + } + .nav-collapse.in .btn-group { + margin-top: 5px; + padding: 0; + } + .nav-collapse .dropdown-menu { + position: static; + top: auto; + left: auto; + float: none; + display: none; + max-width: none; + margin: 0 15px; + padding: 0; + background-color: transparent; + border: none; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + } + .nav-collapse .open > .dropdown-menu { + display: block; + } + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + .nav-collapse .dropdown-menu .divider { + display: none; + } + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + .nav-collapse .navbar-form, + .nav-collapse .navbar-search { + float: none; + padding: 10px 15px; + margin: 10px 0; + border-top: 1px solid #f2f2f2; + border-bottom: 1px solid #f2f2f2; + -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1); + -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1); + box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1); + } + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + .nav-collapse, + .nav-collapse.collapse { + overflow: hidden; + height: 0; + } + .navbar .btn-navbar { + display: block; + } + .navbar-static .navbar-inner { + padding-left: 10px; + padding-right: 10px; + } +} +@media (min-width: 980px) { + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} diff --git a/doc/design/css/bootstrap.min.css b/doc/design/css/bootstrap.min.css index 296f03b02..012aa875b 100644 --- a/doc/design/css/bootstrap.min.css +++ b/doc/design/css/bootstrap.min.css @@ -1,724 +1,724 @@ -/*! - * Bootstrap v2.2.2 - * - * Copyright 2012 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 @twitter by @mdo and @fat. - */ -.clearfix{*zoom:1;}.clearfix:before,.clearfix:after{display:table;content:"";line-height:0;} -.clearfix:after{clear:both;} -.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0;} -.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} -article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block;} -audio,canvas,video{display:inline-block;*display:inline;*zoom:1;} -audio:not([controls]){display:none;} -html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;} -a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} -a:hover,a:active{outline:0;} -sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline;} -sup{top:-0.5em;} -sub{bottom:-0.25em;} -img{max-width:100%;width:auto\9;height:auto;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic;} -#map_canvas img,.google-maps img{max-width:none;} -button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle;} -button,input{*overflow:visible;line-height:normal;} -button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0;} -button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer;} -label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer;} -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-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none;} -textarea{overflow:auto;vertical-align:top;} -@media print{*{text-shadow:none !important;color:#000 !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:0.5cm;}p,h2,h3{orphans:3;widows:3;} h2,h3{page-break-after:avoid;}}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333333;background-color:#ffffff;} -a{color:#0088cc;text-decoration:none;} -a:hover{color:#005580;text-decoration:underline;} -.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} -.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.2);-webkit-box-shadow:0 1px 3px rgba(0, 0, 0, 0.1);-moz-box-shadow:0 1px 3px rgba(0, 0, 0, 0.1);box-shadow:0 1px 3px rgba(0, 0, 0, 0.1);} -.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px;} -.row{margin-left:-20px;*zoom:1;}.row:before,.row:after{display:table;content:"";line-height:0;} -.row:after{clear:both;} -[class*="span"]{float:left;min-height:1px;margin-left:20px;} -.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px;} -.span12{width:940px;} -.span11{width:860px;} -.span10{width:780px;} -.span9{width:700px;} -.span8{width:620px;} -.span7{width:540px;} -.span6{width:460px;} -.span5{width:380px;} -.span4{width:300px;} -.span3{width:220px;} -.span2{width:140px;} -.span1{width:60px;} -.offset12{margin-left:980px;} -.offset11{margin-left:900px;} -.offset10{margin-left:820px;} -.offset9{margin-left:740px;} -.offset8{margin-left:660px;} -.offset7{margin-left:580px;} -.offset6{margin-left:500px;} -.offset5{margin-left:420px;} -.offset4{margin-left:340px;} -.offset3{margin-left:260px;} -.offset2{margin-left:180px;} -.offset1{margin-left:100px;} -.row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";line-height:0;} -.row-fluid:after{clear:both;} -.row-fluid [class*="span"]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;} -.row-fluid [class*="span"]:first-child{margin-left:0;} -.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%;} -.row-fluid .span12{width:100%;*width:99.94680851063829%;} -.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%;} -.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%;} -.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%;} -.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%;} -.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%;} -.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%;} -.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%;} -.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%;} -.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%;} -.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%;} -.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%;} -.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%;} -.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%;} -.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%;} -.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%;} -.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%;} -.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%;} -.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%;} -.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%;} -.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%;} -.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%;} -.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%;} -.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%;} -.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%;} -.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%;} -.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%;} -.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%;} -.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%;} -.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%;} -.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%;} -.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%;} -.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%;} -.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%;} -.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%;} -.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%;} -[class*="span"].hide,.row-fluid [class*="span"].hide{display:none;} -[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right;} -.container{margin-right:auto;margin-left:auto;*zoom:1;}.container:before,.container:after{display:table;content:"";line-height:0;} -.container:after{clear:both;} -.container-fluid{padding-right:20px;padding-left:20px;*zoom:1;}.container-fluid:before,.container-fluid:after{display:table;content:"";line-height:0;} -.container-fluid:after{clear:both;} -p{margin:0 0 10px;} -.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px;} -small{font-size:85%;} -strong{font-weight:bold;} -em{font-style:italic;} -cite{font-style:normal;} -.muted{color:#999999;} -a.muted:hover{color:#808080;} -.text-warning{color:#c09853;} -a.text-warning:hover{color:#a47e3c;} -.text-error{color:#b94a48;} -a.text-error:hover{color:#953b39;} -.text-info{color:#3a87ad;} -a.text-info:hover{color:#2d6987;} -.text-success{color:#468847;} -a.text-success:hover{color:#356635;} -h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:inherit;text-rendering:optimizelegibility;}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999999;} -h1,h2,h3{line-height:40px;} -h1{font-size:38.5px;} -h2{font-size:31.5px;} -h3{font-size:24.5px;} -h4{font-size:17.5px;} -h5{font-size:14px;} -h6{font-size:11.9px;} -h1 small{font-size:24.5px;} -h2 small{font-size:17.5px;} -h3 small{font-size:14px;} -h4 small{font-size:14px;} -.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eeeeee;} -ul,ol{padding:0;margin:0 0 10px 25px;} -ul ul,ul ol,ol ol,ol ul{margin-bottom:0;} -li{line-height:20px;} -ul.unstyled,ol.unstyled{margin-left:0;list-style:none;} -ul.inline,ol.inline{margin-left:0;list-style:none;}ul.inline >li,ol.inline >li{display:inline-block;padding-left:5px;padding-right:5px;} -dl{margin-bottom:20px;} -dt,dd{line-height:20px;} -dt{font-weight:bold;} -dd{margin-left:10px;} -.dl-horizontal{*zoom:1;}.dl-horizontal:before,.dl-horizontal:after{display:table;content:"";line-height:0;} -.dl-horizontal:after{clear:both;} -.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;} -.dl-horizontal dd{margin-left:180px;} -hr{margin:20px 0;border:0;border-top:1px solid #eeeeee;border-bottom:1px solid #ffffff;} -abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999999;} -abbr.initialism{font-size:90%;text-transform:uppercase;} -blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eeeeee;}blockquote p{margin-bottom:0;font-size:16px;font-weight:300;line-height:25px;} -blockquote small{display:block;line-height:20px;color:#999999;}blockquote small:before{content:'\2014 \00A0';} -blockquote.pull-right{float: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:20px;} -code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#333333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} -code{padding:2px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8;white-space:nowrap;} -pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}pre.prettyprint{margin-bottom:20px;} -pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0;} -.pre-scrollable{max-height:340px;overflow-y:scroll;} -.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#ffffff;vertical-align:baseline;white-space:nowrap;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#999999;} -.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} -.badge{padding-left:9px;padding-right:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px;} -.label:empty,.badge:empty{display:none;} -a.label:hover,a.badge:hover{color:#ffffff;text-decoration:none;cursor:pointer;} -.label-important,.badge-important{background-color:#b94a48;} -.label-important[href],.badge-important[href]{background-color:#953b39;} -.label-warning,.badge-warning{background-color:#f89406;} -.label-warning[href],.badge-warning[href]{background-color:#c67605;} -.label-success,.badge-success{background-color:#468847;} -.label-success[href],.badge-success[href]{background-color:#356635;} -.label-info,.badge-info{background-color:#3a87ad;} -.label-info[href],.badge-info[href]{background-color:#2d6987;} -.label-inverse,.badge-inverse{background-color:#333333;} -.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a;} -.btn .label,.btn .badge{position:relative;top:-1px;} -.btn-mini .label,.btn-mini .badge{top:0;} -table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0;} -.table{width:100%;margin-bottom:20px;}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #dddddd;} -.table th{font-weight:bold;} -.table thead th{vertical-align:bottom;} -.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.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 th,.table-condensed td{padding:4px 5px;} -.table-bordered{border:1px solid #dddddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.table-bordered th,.table-bordered td{border-left:1px solid #dddddd;} -.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0;} -.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child{-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;} -.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;} -.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child{-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;} -.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child{-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;} -.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0;} -.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;-moz-border-radius-bottomright:0;border-bottom-right-radius:0;} -.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;} -.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;} -.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 td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0;} -.table td.span1,.table th.span1{float:none;width:44px;margin-left:0;} -.table td.span2,.table th.span2{float:none;width:124px;margin-left:0;} -.table td.span3,.table th.span3{float:none;width:204px;margin-left:0;} -.table td.span4,.table th.span4{float:none;width:284px;margin-left:0;} -.table td.span5,.table th.span5{float:none;width:364px;margin-left:0;} -.table td.span6,.table th.span6{float:none;width:444px;margin-left:0;} -.table td.span7,.table th.span7{float:none;width:524px;margin-left:0;} -.table td.span8,.table th.span8{float:none;width:604px;margin-left:0;} -.table td.span9,.table th.span9{float:none;width:684px;margin-left:0;} -.table td.span10,.table th.span10{float:none;width:764px;margin-left:0;} -.table td.span11,.table th.span11{float:none;width:844px;margin-left:0;} -.table td.span12,.table th.span12{float:none;width:924px;margin-left:0;} -.table tbody tr.success td{background-color:#dff0d8;} -.table tbody tr.error td{background-color:#f2dede;} -.table tbody tr.warning td{background-color:#fcf8e3;} -.table tbody tr.info td{background-color:#d9edf7;} -.table-hover tbody tr.success:hover td{background-color:#d0e9c6;} -.table-hover tbody tr.error:hover td{background-color:#ebcccc;} -.table-hover tbody tr.warning:hover td{background-color:#faf2cc;} -.table-hover tbody tr.info:hover td{background-color:#c4e3f3;} -form{margin:0 0 20px;} -fieldset{padding:0;margin:0;border:0;} -legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333333;border:0;border-bottom:1px solid #e5e5e5;}legend small{font-size:15px;color:#999999;} -label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px;} -input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;} -label{display:block;margin-bottom:5px;} -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"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#555555;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;vertical-align:middle;} -input,textarea,.uneditable-input{width:206px;} -textarea{height:auto;} -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"],.uneditable-input{background-color:#ffffff;border:1px solid #cccccc;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-webkit-transition:border linear .2s, box-shadow linear .2s;-moz-transition:border linear .2s, box-shadow linear .2s;-o-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82, 168, 236, 0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);} -input[type="radio"],input[type="checkbox"]{margin:4px 0 0;*margin-top:0;margin-top:1px \9;line-height:normal;} -input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto;} -select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px;} -select{width:220px;border:1px solid #cccccc;background-color:#ffffff;} -select[multiple],select[size]{height:auto;} -select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} -.uneditable-input,.uneditable-textarea{color:#999999;background-color:#fcfcfc;border-color:#cccccc;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);cursor:not-allowed;} -.uneditable-input{overflow:hidden;white-space:nowrap;} -.uneditable-textarea{width:auto;height:auto;} -input:-moz-placeholder,textarea:-moz-placeholder{color:#999999;} -input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999999;} -input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999999;} -.radio,.checkbox{min-height:20px;padding-left:20px;} -.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px;} -.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px;} -.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle;} -.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px;} -.input-mini{width:60px;} -.input-small{width:90px;} -.input-medium{width:150px;} -.input-large{width:210px;} -.input-xlarge{width:270px;} -.input-xxlarge{width:530px;} -input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0;} -.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block;} -input,textarea,.uneditable-input{margin-left:0;} -.controls-row [class*="span"]+[class*="span"]{margin-left:20px;} -input.span12, textarea.span12, .uneditable-input.span12{width:926px;} -input.span11, textarea.span11, .uneditable-input.span11{width:846px;} -input.span10, textarea.span10, .uneditable-input.span10{width:766px;} -input.span9, textarea.span9, .uneditable-input.span9{width:686px;} -input.span8, textarea.span8, .uneditable-input.span8{width:606px;} -input.span7, textarea.span7, .uneditable-input.span7{width:526px;} -input.span6, textarea.span6, .uneditable-input.span6{width:446px;} -input.span5, textarea.span5, .uneditable-input.span5{width:366px;} -input.span4, textarea.span4, .uneditable-input.span4{width:286px;} -input.span3, textarea.span3, .uneditable-input.span3{width:206px;} -input.span2, textarea.span2, .uneditable-input.span2{width:126px;} -input.span1, textarea.span1, .uneditable-input.span1{width:46px;} -.controls-row{*zoom:1;}.controls-row:before,.controls-row:after{display:table;content:"";line-height:0;} -.controls-row:after{clear:both;} -.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left;} -.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px;} -input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eeeeee;} -input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent;} -.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853;} -.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853;} -.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #dbc59e;-moz-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;} -.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853;} -.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48;} -.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48;} -.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #d59392;-moz-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;} -.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48;} -.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847;} -.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847;} -.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7aba7b;-moz-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;} -.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847;} -.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad;} -.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad;} -.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7ab5d3;} -.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad;} -input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b;}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7;} -.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1;}.form-actions:before,.form-actions:after{display:table;content:"";line-height:0;} -.form-actions:after{clear:both;} -.help-block,.help-inline{color:#595959;} -.help-block{display:block;margin-bottom:10px;} -.help-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding-left:5px;} -.input-append,.input-prepend{margin-bottom:5px;font-size:0;white-space:nowrap;}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu{font-size:14px;} -.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2;} -.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #ffffff;background-color:#eeeeee;border:1px solid #ccc;} -.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} -.input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546;} -.input-prepend .add-on,.input-prepend .btn{margin-right:-1px;} -.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;} -.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} -.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px;} -.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} -.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} -.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;} -.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} -.input-prepend.input-append .btn-group:first-child{margin-left:0;} -input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;} -.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} -.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px;} -.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0;} -.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0;} -.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px;} -.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;*zoom:1;margin-bottom:0;vertical-align:middle;} -.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none;} -.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block;} -.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0;} -.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle;} -.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0;} -.control-group{margin-bottom:10px;} -legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate;} -.form-horizontal .control-group{margin-bottom:20px;*zoom:1;}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;content:"";line-height:0;} -.form-horizontal .control-group:after{clear:both;} -.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right;} -.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0;}.form-horizontal .controls:first-child{*padding-left:180px;} -.form-horizontal .help-block{margin-bottom:0;} -.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px;} -.form-horizontal .form-actions{padding-left:180px;} -.btn{display:inline-block;*display:inline;*zoom:1;padding:4px 12px;margin-bottom:0;font-size:14px;line-height:20px;text-align:center;vertical-align:middle;cursor:pointer;color:#333333;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(to bottom, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#e6e6e6;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border:1px solid #bbbbbb;*border:0;border-bottom-color:#a2a2a2;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);}.btn:hover,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333333;background-color:#e6e6e6;*background-color:#d9d9d9;} -.btn:active,.btn.active{background-color:#cccccc \9;} -.btn:first-child{*margin-left:0;} -.btn:hover{color:#333333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position 0.1s linear;-moz-transition:background-position 0.1s linear;-o-transition:background-position 0.1s linear;transition:background-position 0.1s linear;} -.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} -.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);} -.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} -.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} -.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px;} -.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} -.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0;} -.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px;} -.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} -.btn-block{display:block;width:100%;padding-left:0;padding-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} -.btn-block+.btn-block{margin-top:5px;} -input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%;} -.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255, 255, 255, 0.75);} -.btn{border-color:#c5c5c5;border-color:rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.25);} -.btn-primary{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#006dcc;background-image:-moz-linear-gradient(top, #0088cc, #0044cc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));background-image:-webkit-linear-gradient(top, #0088cc, #0044cc);background-image:-o-linear-gradient(top, #0088cc, #0044cc);background-image:linear-gradient(to bottom, #0088cc, #0044cc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);border-color:#0044cc #0044cc #002a80;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#0044cc;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#ffffff;background-color:#0044cc;*background-color:#003bb3;} -.btn-primary:active,.btn-primary.active{background-color:#003399 \9;} -.btn-warning{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(to bottom, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);border-color:#f89406 #f89406 #ad6704;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#f89406;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-warning:hover,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#ffffff;background-color:#f89406;*background-color:#df8505;} -.btn-warning:active,.btn-warning.active{background-color:#c67605 \9;} -.btn-danger{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(to bottom, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#bd362f;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-danger:hover,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#ffffff;background-color:#bd362f;*background-color:#a9302a;} -.btn-danger:active,.btn-danger.active{background-color:#942a25 \9;} -.btn-success{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(to bottom, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0);border-color:#51a351 #51a351 #387038;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#51a351;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-success:hover,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#ffffff;background-color:#51a351;*background-color:#499249;} -.btn-success:active,.btn-success.active{background-color:#408140 \9;} -.btn-info{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(to bottom, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0);border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#2f96b4;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-info:hover,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#ffffff;background-color:#2f96b4;*background-color:#2a85a0;} -.btn-info:active,.btn-info.active{background-color:#24748c \9;} -.btn-inverse{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#363636;background-image:-moz-linear-gradient(top, #444444, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222));background-image:-webkit-linear-gradient(top, #444444, #222222);background-image:-o-linear-gradient(top, #444444, #222222);background-image:linear-gradient(to bottom, #444444, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0);border-color:#222222 #222222 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#222222;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-inverse:hover,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#ffffff;background-color:#222222;*background-color:#151515;} -.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9;} -button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px;}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0;} -button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px;} -button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px;} -button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px;} -.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} -.btn-link{border-color:transparent;cursor:pointer;color:#0088cc;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} -.btn-link:hover{color:#005580;text-decoration:underline;background-color:transparent;} -.btn-link[disabled]:hover{color:#333333;text-decoration:none;} -.btn-group{position:relative;display:inline-block;*display:inline;*zoom:1;font-size:0;vertical-align:middle;white-space:nowrap;*margin-left:.3em;}.btn-group:first-child{*margin-left:0;} -.btn-group+.btn-group{margin-left:5px;} -.btn-toolbar{font-size:0;margin-top:10px;margin-bottom:10px;}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px;} -.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} -.btn-group>.btn+.btn{margin-left:-1px;} -.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px;} -.btn-group>.btn-mini{font-size:10.5px;} -.btn-group>.btn-small{font-size:11.9px;} -.btn-group>.btn-large{font-size:17.5px;} -.btn-group>.btn:first-child{margin-left:0;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;} -.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;} -.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;} -.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius:6px;} -.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2;} -.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0;} -.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);*padding-top:5px;*padding-bottom:5px;} -.btn-group>.btn-mini+.dropdown-toggle{padding-left:5px;padding-right:5px;*padding-top:2px;*padding-bottom:2px;} -.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px;} -.btn-group>.btn-large+.dropdown-toggle{padding-left:12px;padding-right:12px;*padding-top:7px;*padding-bottom:7px;} -.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);} -.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6;} -.btn-group.open .btn-primary.dropdown-toggle{background-color:#0044cc;} -.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406;} -.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f;} -.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351;} -.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4;} -.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222222;} -.btn .caret{margin-top:8px;margin-left:0;} -.btn-mini .caret,.btn-small .caret,.btn-large .caret{margin-top:6px;} -.btn-large .caret{border-left-width:5px;border-right-width:5px;border-top-width:5px;} -.dropup .btn-large .caret{border-bottom-width:5px;} -.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;} -.btn-group-vertical{display:inline-block;*display:inline;*zoom:1;} -.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} -.btn-group-vertical>.btn+.btn{margin-left:0;margin-top:-1px;} -.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;} -.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;} -.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0;} -.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;} -.nav{margin-left:0;margin-bottom:20px;list-style:none;} -.nav>li>a{display:block;} -.nav>li>a:hover{text-decoration:none;background-color:#eeeeee;} -.nav>li>a>img{max-width:none;} -.nav>.pull-right{float:right;} -.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999999;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);text-transform:uppercase;} -.nav li+.nav-header{margin-top:9px;} -.nav-list{padding-left:15px;padding-right:15px;margin-bottom:0;} -.nav-list>li>a,.nav-list .nav-header{margin-left:-15px;margin-right:-15px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);} -.nav-list>li>a{padding:3px 15px;} -.nav-list>.active>a,.nav-list>.active>a:hover{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.2);background-color:#0088cc;} -.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px;} -.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;} -.nav-tabs,.nav-pills{*zoom:1;}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;content:"";line-height:0;} -.nav-tabs:after,.nav-pills:after{clear:both;} -.nav-tabs>li,.nav-pills>li{float:left;} -.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px;} -.nav-tabs{border-bottom:1px solid #ddd;} -.nav-tabs>li{margin-bottom:-1px;} -.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}.nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #dddddd;} -.nav-tabs>.active>a,.nav-tabs>.active>a:hover{color:#555555;background-color:#ffffff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default;} -.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;} -.nav-pills>.active>a,.nav-pills>.active>a:hover{color:#ffffff;background-color:#0088cc;} -.nav-stacked>li{float:none;} -.nav-stacked>li>a{margin-right:0;} -.nav-tabs.nav-stacked{border-bottom:0;} -.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} -.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;} -.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;} -.nav-tabs.nav-stacked>li>a:hover{border-color:#ddd;z-index:2;} -.nav-pills.nav-stacked>li>a{margin-bottom:3px;} -.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px;} -.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;} -.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} -.nav .dropdown-toggle .caret{border-top-color:#0088cc;border-bottom-color:#0088cc;margin-top:6px;} -.nav .dropdown-toggle:hover .caret{border-top-color:#005580;border-bottom-color:#005580;} -.nav-tabs .dropdown-toggle .caret{margin-top:8px;} -.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff;} -.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555555;border-bottom-color:#555555;} -.nav>.dropdown.active>a:hover{cursor:pointer;} -.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover{color:#ffffff;background-color:#999999;border-color:#999999;} -.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;opacity:1;filter:alpha(opacity=100);} -.tabs-stacked .open>a:hover{border-color:#999999;} -.tabbable{*zoom:1;}.tabbable:before,.tabbable:after{display:table;content:"";line-height:0;} -.tabbable:after{clear:both;} -.tab-content{overflow:auto;} -.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0;} -.tab-content>.tab-pane,.pill-content>.pill-pane{display:none;} -.tab-content>.active,.pill-content>.active{display:block;} -.tabs-below>.nav-tabs{border-top:1px solid #ddd;} -.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0;} -.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;}.tabs-below>.nav-tabs>li>a:hover{border-bottom-color:transparent;border-top-color:#ddd;} -.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover{border-color:transparent #ddd #ddd #ddd;} -.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none;} -.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px;} -.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd;} -.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;} -.tabs-left>.nav-tabs>li>a:hover{border-color:#eeeeee #dddddd #eeeeee #eeeeee;} -.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover{border-color:#ddd transparent #ddd #ddd;*border-right-color:#ffffff;} -.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd;} -.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} -.tabs-right>.nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #eeeeee #dddddd;} -.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover{border-color:#ddd #ddd #ddd transparent;*border-left-color:#ffffff;} -.nav>.disabled>a{color:#999999;} -.nav>.disabled>a:hover{text-decoration:none;background-color:transparent;cursor:default;} -.navbar{overflow:visible;margin-bottom:20px;*position:relative;*z-index:2;} -.navbar-inner{min-height:40px;padding-left:20px;padding-right:20px;background-color:#fafafa;background-image:-moz-linear-gradient(top, #ffffff, #f2f2f2);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2));background-image:-webkit-linear-gradient(top, #ffffff, #f2f2f2);background-image:-o-linear-gradient(top, #ffffff, #f2f2f2);background-image:linear-gradient(to bottom, #ffffff, #f2f2f2);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0);border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 4px rgba(0, 0, 0, 0.065);-moz-box-shadow:0 1px 4px rgba(0, 0, 0, 0.065);box-shadow:0 1px 4px rgba(0, 0, 0, 0.065);*zoom:1;}.navbar-inner:before,.navbar-inner:after{display:table;content:"";line-height:0;} -.navbar-inner:after{clear:both;} -.navbar .container{width:auto;} -.nav-collapse.collapse{height:auto;overflow:visible;} -.navbar .brand{float:left;display:block;padding:10px 20px 10px;margin-left:-20px;font-size:20px;font-weight:200;color:#777777;text-shadow:0 1px 0 #ffffff;}.navbar .brand:hover{text-decoration:none;} -.navbar-text{margin-bottom:0;line-height:40px;color:#777777;} -.navbar-link{color:#777777;}.navbar-link:hover{color:#333333;} -.navbar .divider-vertical{height:40px;margin:0 9px;border-left:1px solid #f2f2f2;border-right:1px solid #ffffff;} -.navbar .btn,.navbar .btn-group{margin-top:5px;} -.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn{margin-top:0;} -.navbar-form{margin-bottom:0;*zoom:1;}.navbar-form:before,.navbar-form:after{display:table;content:"";line-height:0;} -.navbar-form:after{clear:both;} -.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px;} -.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0;} -.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px;} -.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap;}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0;} -.navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0;}.navbar-search .search-query{margin-bottom:0;padding:4px 14px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;} -.navbar-static-top{position:static;margin-bottom:0;}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} -.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0;} -.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px;} -.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0;} -.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-left:0;padding-right:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} -.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px;} -.navbar-fixed-top{top:0;} -.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,.1);box-shadow:0 1px 10px rgba(0,0,0,.1);} -.navbar-fixed-bottom{bottom:0;}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,.1);box-shadow:0 -1px 10px rgba(0,0,0,.1);} -.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0;} -.navbar .nav.pull-right{float:right;margin-right:0;} -.navbar .nav>li{float:left;} -.navbar .nav>li>a{float:none;padding:10px 15px 10px;color:#777777;text-decoration:none;text-shadow:0 1px 0 #ffffff;} -.navbar .nav .dropdown-toggle .caret{margin-top:8px;} -.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{background-color:transparent;color:#333333;text-decoration:none;} -.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555555;text-decoration:none;background-color:#e5e5e5;-webkit-box-shadow:inset 0 3px 8px rgba(0, 0, 0, 0.125);-moz-box-shadow:inset 0 3px 8px rgba(0, 0, 0, 0.125);box-shadow:inset 0 3px 8px rgba(0, 0, 0, 0.125);} -.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-left:5px;margin-right:5px;color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#ededed;background-image:-moz-linear-gradient(top, #f2f2f2, #e5e5e5);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5));background-image:-webkit-linear-gradient(top, #f2f2f2, #e5e5e5);background-image:-o-linear-gradient(top, #f2f2f2, #e5e5e5);background-image:linear-gradient(to bottom, #f2f2f2, #e5e5e5);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0);border-color:#e5e5e5 #e5e5e5 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#e5e5e5;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);}.navbar .btn-navbar:hover,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#ffffff;background-color:#e5e5e5;*background-color:#d9d9d9;} -.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#cccccc \9;} -.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);-moz-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);} -.btn-navbar .icon-bar+.icon-bar{margin-top:3px;} -.navbar .nav>li>.dropdown-menu:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0, 0, 0, 0.2);position:absolute;top:-7px;left:9px;} -.navbar .nav>li>.dropdown-menu:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #ffffff;position:absolute;top:-6px;left:10px;} -.navbar-fixed-bottom .nav>li>.dropdown-menu:before{border-top:7px solid #ccc;border-top-color:rgba(0, 0, 0, 0.2);border-bottom:0;bottom:-7px;top:auto;} -.navbar-fixed-bottom .nav>li>.dropdown-menu:after{border-top:6px solid #ffffff;border-bottom:0;bottom:-6px;top:auto;} -.navbar .nav li.dropdown>a:hover .caret{border-top-color:#555555;border-bottom-color:#555555;} -.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{background-color:#e5e5e5;color:#555555;} -.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#777777;border-bottom-color:#777777;} -.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555555;border-bottom-color:#555555;} -.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{left:auto;right:0;}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{left:auto;right:12px;} -.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{left:auto;right:13px;} -.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{left:auto;right:100%;margin-left:0;margin-right:-1px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px;} -.navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top, #222222, #111111);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111));background-image:-webkit-linear-gradient(top, #222222, #111111);background-image:-o-linear-gradient(top, #222222, #111111);background-image:linear-gradient(to bottom, #222222, #111111);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0);border-color:#252525;} -.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999999;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover{color:#ffffff;} -.navbar-inverse .brand{color:#999999;} -.navbar-inverse .navbar-text{color:#999999;} -.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{background-color:transparent;color:#ffffff;} -.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#ffffff;background-color:#111111;} -.navbar-inverse .navbar-link{color:#999999;}.navbar-inverse .navbar-link:hover{color:#ffffff;} -.navbar-inverse .divider-vertical{border-left-color:#111111;border-right-color:#222222;} -.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{background-color:#111111;color:#ffffff;} -.navbar-inverse .nav li.dropdown>a:hover .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;} -.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999999;border-bottom-color:#999999;} -.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;} -.navbar-inverse .navbar-search .search-query{color:#ffffff;background-color:#515151;border-color:#111111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none;}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#cccccc;} -.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#cccccc;} -.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#cccccc;} -.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333333;text-shadow:0 1px 0 #ffffff;background-color:#ffffff;border:0;-webkit-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);-moz-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);box-shadow:0 0 3px rgba(0, 0, 0, 0.15);outline:0;} -.navbar-inverse .btn-navbar{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#0e0e0e;background-image:-moz-linear-gradient(top, #151515, #040404);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404));background-image:-webkit-linear-gradient(top, #151515, #040404);background-image:-o-linear-gradient(top, #151515, #040404);background-image:linear-gradient(to bottom, #151515, #040404);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0);border-color:#040404 #040404 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#040404;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#ffffff;background-color:#040404;*background-color:#000000;} -.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000000 \9;} -.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.breadcrumb>li{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 0 #ffffff;}.breadcrumb>li>.divider{padding:0 5px;color:#ccc;} -.breadcrumb>.active{color:#999999;} -.pagination{margin:20px 0;} -.pagination ul{display:inline-block;*display:inline;*zoom:1;margin-left:0;margin-bottom:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);} -.pagination ul>li{display:inline;} -.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#ffffff;border:1px solid #dddddd;border-left-width:0;} -.pagination ul>li>a:hover,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5;} -.pagination ul>.active>a,.pagination ul>.active>span{color:#999999;cursor:default;} -.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover{color:#999999;background-color:transparent;cursor:default;} -.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;} -.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;} -.pagination-centered{text-align:center;} -.pagination-right{text-align:right;} -.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px;} -.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;} -.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius:6px;} -.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-top-left-radius:3px;-moz-border-radius-topleft:3px;border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-bottomleft:3px;border-bottom-left-radius:3px;} -.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;-moz-border-radius-topright:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;-moz-border-radius-bottomright:3px;border-bottom-right-radius:3px;} -.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px;} -.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px;} -.pager{margin:20px 0;list-style:none;text-align:center;*zoom:1;}.pager:before,.pager:after{display:table;content:"";line-height:0;} -.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;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;} -.pager li>a:hover{text-decoration:none;background-color:#f5f5f5;} -.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>span{color:#999999;background-color:#fff;cursor:default;} -.thumbnails{margin-left:-20px;list-style:none;*zoom:1;}.thumbnails:before,.thumbnails:after{display:table;content:"";line-height:0;} -.thumbnails:after{clear:both;} -.row-fluid .thumbnails{margin-left:0;} -.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px;} -.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0, 0, 0, 0.055);-moz-box-shadow:0 1px 3px rgba(0, 0, 0, 0.055);box-shadow:0 1px 3px rgba(0, 0, 0, 0.055);-webkit-transition:all 0.2s ease-in-out;-moz-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;} -a.thumbnail:hover{border-color:#0088cc;-webkit-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);-moz-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);} -.thumbnail>img{display:block;max-width:100%;margin-left:auto;margin-right:auto;} -.thumbnail .caption{padding:9px;color:#555555;} -.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.alert,.alert h4{color:#c09853;} -.alert h4{margin:0;} -.alert .close{position:relative;top:-2px;right:-21px;line-height:20px;} -.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#468847;} -.alert-success h4{color:#468847;} -.alert-danger,.alert-error{background-color:#f2dede;border-color:#eed3d7;color:#b94a48;} -.alert-danger h4,.alert-error h4{color:#b94a48;} -.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#3a87ad;} -.alert-info h4{color:#3a87ad;} -.alert-block{padding-top:14px;padding-bottom:14px;} -.alert-block>p,.alert-block>ul{margin-bottom:0;} -.alert-block p+p{margin-top:5px;} -@-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;}}@-ms-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{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f7f7f7;background-image:-moz-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));background-image:-webkit-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-o-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:linear-gradient(to bottom, #f5f5f5, #f9f9f9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.progress .bar{width:0%;height:100%;color:#ffffff;float:left;font-size:12px;text-align:center;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top, #149bdf, #0480be);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));background-image:-webkit-linear-gradient(top, #149bdf, #0480be);background-image:-o-linear-gradient(top, #149bdf, #0480be);background-image:linear-gradient(to bottom, #149bdf, #0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-moz-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-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width 0.6s ease;-moz-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease;} -.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15);} -.progress-striped .bar{background-color:#149bdf;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:-o-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);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px;} -.progress.active .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-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top, #ee5f5b, #c43c35);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));background-image:-webkit-linear-gradient(top, #ee5f5b, #c43c35);background-image:-o-linear-gradient(top, #ee5f5b, #c43c35);background-image:linear-gradient(to bottom, #ee5f5b, #c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0);} -.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;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:-o-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-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top, #62c462, #57a957);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));background-image:-webkit-linear-gradient(top, #62c462, #57a957);background-image:-o-linear-gradient(top, #62c462, #57a957);background-image:linear-gradient(to bottom, #62c462, #57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0);} -.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;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:-o-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-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top, #5bc0de, #339bb9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));background-image:-webkit-linear-gradient(top, #5bc0de, #339bb9);background-image:-o-linear-gradient(top, #5bc0de, #339bb9);background-image:linear-gradient(to bottom, #5bc0de, #339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0);} -.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;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:-o-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-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(to bottom, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);} -.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;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:-o-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);} -.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eeeeee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;color:inherit;letter-spacing:-1px;} -.hero-unit li{line-height:30px;} -.media,.media-body{overflow:hidden;*overflow:visible;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{margin-left:0;list-style:none;} -.tooltip{position:absolute;z-index:1030;display:block;visibility:visible;padding:5px;font-size:11px;opacity:0;filter:alpha(opacity=0);}.tooltip.in{opacity:0.8;filter:alpha(opacity=80);} -.tooltip.top{margin-top:-3px;} -.tooltip.right{margin-left:3px;} -.tooltip.bottom{margin-top:3px;} -.tooltip.left{margin-left:-3px;} -.tooltip-inner{max-width:200px;padding:3px 8px;color:#ffffff;text-align:center;text-decoration:none;background-color:#000000;-webkit-border-radius:4px;-moz-border-radius:4px;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-width:5px 5px 0;border-top-color:#000000;} -.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000000;} -.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000000;} -.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000000;} -.popover{position:absolute;top:0;left:0;z-index:1010;display:none;width:236px;padding:1px;text-align:left;background-color:#ffffff;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);white-space:normal;}.popover.top{margin-top:-10px;} -.popover.right{margin-left:10px;} -.popover.bottom{margin-top:10px;} -.popover.left{margin-left:-10px;} -.popover-title{margin:0;padding:8px 14px;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;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{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0, 0, 0, 0.25);bottom:-11px;}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#ffffff;} -.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0, 0, 0, 0.25);}.popover.right .arrow:after{left:1px;bottom:-10px;border-left-width:0;border-right-color:#ffffff;} -.popover.bottom .arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0, 0, 0, 0.25);top:-11px;}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#ffffff;} -.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0, 0, 0, 0.25);}.popover.left .arrow:after{right:1px;border-right-width:0;border-left-color:#ffffff;bottom:-10px;} -.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000000;}.modal-backdrop.fade{opacity:0;} -.modal-backdrop,.modal-backdrop.fade.in{opacity:0.8;filter:alpha(opacity=80);} -.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#ffffff;border:1px solid #999;border:1px solid rgba(0, 0, 0, 0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;outline:none;}.modal.fade{-webkit-transition:opacity .3s linear, top .3s ease-out;-moz-transition:opacity .3s linear, top .3s ease-out;-o-transition:opacity .3s linear, top .3s ease-out;transition:opacity .3s linear, top .3s ease-out;top:-25%;} -.modal.fade.in{top:10%;} -.modal-header{padding:9px 15px;border-bottom:1px solid #eee;}.modal-header .close{margin-top:2px;} -.modal-header h3{margin:0;line-height:30px;} -.modal-body{position:relative;overflow-y:auto;max-height:400px;padding:15px;} -.modal-form{margin-bottom:0;} -.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;*zoom:1;}.modal-footer:before,.modal-footer:after{display:table;content:"";line-height:0;} -.modal-footer:after{clear:both;} -.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0;} -.modal-footer .btn-group .btn+.btn{margin-left:-1px;} -.modal-footer .btn-block+.btn-block{margin-left:0;} -.dropup,.dropdown{position:relative;} -.dropdown-toggle{*margin-bottom:-3px;} -.dropdown-toggle:active,.open .dropdown-toggle{outline:0;} -.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000000;border-right:4px solid transparent;border-left:4px solid transparent;content:"";} -.dropdown .caret{margin-top:8px;margin-left:2px;} -.dropdown-menu1{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#ffffff;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;}.dropdown-menu.pull-right{right:0;left:auto;} -.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;} -.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#ffffff;text-decoration:none;outline:0;background-color:#0081c2;background-image:-moz-linear-gradient(top, #0088cc, #0077b3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3));background-image:-webkit-linear-gradient(top, #0088cc, #0077b3);background-image:-o-linear-gradient(top, #0088cc, #0077b3);background-image:linear-gradient(to bottom, #0088cc, #0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);} -.dropdown-menu .disabled>a,.dropdown-menu .disabled>a:hover{color:#999999;} -.dropdown-menu .disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:default;} -.open{*z-index:1000;}.open >.dropdown-menu{display:block;} -.pull-right>.dropdown-menu{right:0;left:auto;} -.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000000;content:"";} -.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px;} -.dropdown-submenu{position:relative;} -.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px;} -.dropdown-submenu:hover>.dropdown-menu{display:block;} -.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0;} -.dropdown-submenu>a:after{display:block;content:" ";float:right;width:0;height:0;border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#cccccc;margin-top:5px;margin-right:-10px;} -.dropdown-submenu:hover>a:after{border-left-color:#ffffff;} -.dropdown-submenu.pull-left{float:none;}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px;} -.dropdown .dropdown-menu .nav-header{padding-left:20px;padding-right:20px;} -.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.accordion{margin-bottom:20px;} -.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.accordion-heading{border-bottom:0;} -.accordion-heading .accordion-toggle{display:block;padding:8px 15px;} -.accordion-toggle{cursor:pointer;} -.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5;} -.carousel{position:relative;margin-bottom:20px;line-height:1;} -.carousel-inner{overflow:hidden;width:100%;position:relative;} -.carousel-inner>.item{display:none;position:relative;-webkit-transition:0.6s ease-in-out left;-moz-transition:0.6s ease-in-out left;-o-transition:0.6s ease-in-out left;transition:0.6s ease-in-out left;} -.carousel-inner>.item>img{display:block;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:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#ffffff;text-align:center;background:#222222;border:3px solid #ffffff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:0.5;filter:alpha(opacity=50);}.carousel-control.right{left:auto;right:15px;} -.carousel-control:hover{color:#ffffff;text-decoration:none;opacity:0.9;filter:alpha(opacity=90);} -.carousel-caption{position:absolute;left:0;right:0;bottom:0;padding:15px;background:#333333;background:rgba(0, 0, 0, 0.75);} -.carousel-caption h4,.carousel-caption p{color:#ffffff;line-height:20px;} -.carousel-caption h4{margin:0 0 5px;} -.carousel-caption p{margin-bottom:0;} -.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);-moz-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-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} -.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} -.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000000;text-shadow:0 1px 0 #ffffff;opacity:0.2;filter:alpha(opacity=20);}.close:hover{color:#000000;text-decoration:none;cursor:pointer;opacity:0.4;filter:alpha(opacity=40);} -button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none;} -.pull-right{float:right;} -.pull-left{float:left;} -.hide{display:none;} -.show{display:block;} -.invisible{visibility:hidden;} -.affix{position:fixed;} -.fade{opacity:0;-webkit-transition:opacity 0.15s linear;-moz-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear;}.fade.in{opacity:1;} -.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height 0.35s ease;-moz-transition:height 0.35s ease;-o-transition:height 0.35s ease;transition:height 0.35s ease;}.collapse.in{height:auto;} -.hidden{display:none;visibility:hidden;} -.visible-phone{display:none !important;} -.visible-tablet{display:none !important;} -.hidden-desktop{display:none !important;} -.visible-desktop{display:inherit !important;} -@media (min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit !important;} .visible-desktop{display:none !important ;} .visible-tablet{display:inherit !important;} .hidden-tablet{display:none !important;}}@media (max-width:767px){.hidden-desktop{display:inherit !important;} .visible-desktop{display:none !important;} .visible-phone{display:inherit !important;} .hidden-phone{display:none !important;}}@media (max-width:767px){body{padding-left:20px;padding-right:20px;} .navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-left:-20px;margin-right:-20px;} .container-fluid{padding:0;} .dl-horizontal dt{float:none;clear:none;width:auto;text-align:left;} .dl-horizontal dd{margin-left:0;} .container{width:auto;} .row-fluid{width:100%;} .row,.thumbnails{margin-left:0;} .thumbnails>li{float:none;margin-left:0;} [class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{float:none;display:block;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} .span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} .row-fluid [class*="offset"]:first-child{margin-left:0;} .input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} .input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto;} .controls-row [class*="span"]+[class*="span"]{margin-left:0;} .modal{position:fixed;top:20px;left:20px;right:20px;width:auto;margin:0;}.modal.fade{top:-100px;} .modal.fade.in{top:20px;}}@media (max-width:480px){.nav-collapse{-webkit-transform:translate3d(0, 0, 0);} .page-header h1 small{display:block;line-height:20px;} input[type="checkbox"],input[type="radio"]{border:1px solid #ccc;} .form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left;} .form-horizontal .controls{margin-left:0;} .form-horizontal .control-list{padding-top:0;} .form-horizontal .form-actions{padding-left:10px;padding-right:10px;} .media .pull-left,.media .pull-right{float:none;display:block;margin-bottom:10px;} .media-object{margin-right:0;margin-left:0;} .modal{top:10px;left:10px;right:10px;} .modal-header .close{padding:10px;margin:-10px;} .carousel-caption{position:static;}}@media (min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1;}.row:before,.row:after{display:table;content:"";line-height:0;} .row:after{clear:both;} [class*="span"]{float:left;min-height:1px;margin-left:20px;} .container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px;} .span12{width:724px;} .span11{width:662px;} .span10{width:600px;} .span9{width:538px;} .span8{width:476px;} .span7{width:414px;} .span6{width:352px;} .span5{width:290px;} .span4{width:228px;} .span3{width:166px;} .span2{width:104px;} .span1{width:42px;} .offset12{margin-left:764px;} .offset11{margin-left:702px;} .offset10{margin-left:640px;} .offset9{margin-left:578px;} .offset8{margin-left:516px;} .offset7{margin-left:454px;} .offset6{margin-left:392px;} .offset5{margin-left:330px;} .offset4{margin-left:268px;} .offset3{margin-left:206px;} .offset2{margin-left:144px;} .offset1{margin-left:82px;} .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";line-height:0;} .row-fluid:after{clear:both;} .row-fluid [class*="span"]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;} .row-fluid [class*="span"]:first-child{margin-left:0;} .row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.7624309392265194%;} .row-fluid .span12{width:100%;*width:99.94680851063829%;} .row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%;} .row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%;} .row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%;} .row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%;} .row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%;} .row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%;} .row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%;} .row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%;} .row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%;} .row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%;} .row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%;} .row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%;} .row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%;} .row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%;} .row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%;} .row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%;} .row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%;} .row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%;} .row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%;} .row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%;} .row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%;} .row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%;} .row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%;} .row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%;} .row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%;} .row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%;} .row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%;} .row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%;} .row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%;} .row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%;} .row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%;} .row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%;} .row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%;} .row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%;} .row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%;} input,textarea,.uneditable-input{margin-left:0;} .controls-row [class*="span"]+[class*="span"]{margin-left:20px;} input.span12, textarea.span12, .uneditable-input.span12{width:710px;} input.span11, textarea.span11, .uneditable-input.span11{width:648px;} input.span10, textarea.span10, .uneditable-input.span10{width:586px;} input.span9, textarea.span9, .uneditable-input.span9{width:524px;} input.span8, textarea.span8, .uneditable-input.span8{width:462px;} input.span7, textarea.span7, .uneditable-input.span7{width:400px;} input.span6, textarea.span6, .uneditable-input.span6{width:338px;} input.span5, textarea.span5, .uneditable-input.span5{width:276px;} input.span4, textarea.span4, .uneditable-input.span4{width:214px;} input.span3, textarea.span3, .uneditable-input.span3{width:152px;} input.span2, textarea.span2, .uneditable-input.span2{width:90px;} input.span1, textarea.span1, .uneditable-input.span1{width:28px;}}@media (min-width:1200px){.row{margin-left:-30px;*zoom:1;}.row:before,.row:after{display:table;content:"";line-height:0;} .row:after{clear:both;} [class*="span"]{float:left;min-height:1px;margin-left:30px;} .container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px;} .span12{width:1170px;} .span11{width:1070px;} .span10{width:970px;} .span9{width:870px;} .span8{width:770px;} .span7{width:670px;} .span6{width:570px;} .span5{width:470px;} .span4{width:370px;} .span3{width:270px;} .span2{width:170px;} .span1{width:70px;} .offset12{margin-left:1230px;} .offset11{margin-left:1130px;} .offset10{margin-left:1030px;} .offset9{margin-left:930px;} .offset8{margin-left:830px;} .offset7{margin-left:730px;} .offset6{margin-left:630px;} .offset5{margin-left:530px;} .offset4{margin-left:430px;} .offset3{margin-left:330px;} .offset2{margin-left:230px;} .offset1{margin-left:130px;} .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";line-height:0;} .row-fluid:after{clear:both;} .row-fluid [class*="span"]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;} .row-fluid [class*="span"]:first-child{margin-left:0;} .row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.564102564102564%;} .row-fluid .span12{width:100%;*width:99.94680851063829%;} .row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%;} .row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%;} .row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%;} .row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%;} .row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%;} .row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%;} .row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%;} .row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%;} .row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%;} .row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%;} .row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%;} .row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%;} .row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%;} .row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%;} .row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%;} .row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%;} .row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%;} .row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%;} .row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%;} .row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%;} .row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%;} .row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%;} .row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%;} .row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%;} .row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%;} .row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%;} .row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%;} .row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%;} .row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%;} .row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%;} .row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%;} .row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%;} .row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%;} .row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%;} .row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%;} input,textarea,.uneditable-input{margin-left:0;} .controls-row [class*="span"]+[class*="span"]{margin-left:30px;} input.span12, textarea.span12, .uneditable-input.span12{width:1156px;} input.span11, textarea.span11, .uneditable-input.span11{width:1056px;} input.span10, textarea.span10, .uneditable-input.span10{width:956px;} input.span9, textarea.span9, .uneditable-input.span9{width:856px;} input.span8, textarea.span8, .uneditable-input.span8{width:756px;} input.span7, textarea.span7, .uneditable-input.span7{width:656px;} input.span6, textarea.span6, .uneditable-input.span6{width:556px;} input.span5, textarea.span5, .uneditable-input.span5{width:456px;} input.span4, textarea.span4, .uneditable-input.span4{width:356px;} input.span3, textarea.span3, .uneditable-input.span3{width:256px;} input.span2, textarea.span2, .uneditable-input.span2{width:156px;} input.span1, textarea.span1, .uneditable-input.span1{width:56px;} .thumbnails{margin-left:-30px;} .thumbnails>li{margin-left:30px;} .row-fluid .thumbnails{margin-left:0;}}@media (max-width:979px){body{padding-top:0;} .navbar-fixed-top,.navbar-fixed-bottom{position:static;} .navbar-fixed-top{margin-bottom:20px;} .navbar-fixed-bottom{margin-top:20px;} .navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px;} .navbar .container{width:auto;padding:0;} .navbar .brand{padding-left:10px;padding-right:10px;margin:0 0 0 -5px;} .nav-collapse{clear:both;} .nav-collapse .nav{float:none;margin:0 0 10px;} .nav-collapse .nav>li{float:none;} .nav-collapse .nav>li>a{margin-bottom:2px;} .nav-collapse .nav>.divider-vertical{display:none;} .nav-collapse .nav .nav-header{color:#777777;text-shadow:none;} .nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} .nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} .nav-collapse .dropdown-menu li+li a{margin-bottom:2px;} .nav-collapse .nav>li>a:hover,.nav-collapse .dropdown-menu a:hover{background-color:#f2f2f2;} .navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999999;} .navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:hover{background-color:#111111;} .nav-collapse.in .btn-group{margin-top:5px;padding:0;} .nav-collapse .dropdown-menu{position:static;top:auto;left:auto;float:none;display:none;max-width:none;margin:0 15px;padding:0;background-color:transparent;border:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} .nav-collapse .open>.dropdown-menu{display:block;} .nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none;} .nav-collapse .dropdown-menu .divider{display:none;} .nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none;} .nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);} .navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111111;border-bottom-color:#111111;} .navbar .nav-collapse .nav.pull-right{float:none;margin-left:0;} .nav-collapse,.nav-collapse.collapse{overflow:hidden;height:0;} .navbar .btn-navbar{display:block;} .navbar-static .navbar-inner{padding-left:10px;padding-right:10px;}}@media (min-width:980px){.nav-collapse.collapse{height:auto !important;overflow:visible !important;}} +/*! + * Bootstrap v2.2.2 + * + * Copyright 2012 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 @twitter by @mdo and @fat. + */ +.clearfix{*zoom:1;}.clearfix:before,.clearfix:after{display:table;content:"";line-height:0;} +.clearfix:after{clear:both;} +.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0;} +.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} +article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block;} +audio,canvas,video{display:inline-block;*display:inline;*zoom:1;} +audio:not([controls]){display:none;} +html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;} +a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} +a:hover,a:active{outline:0;} +sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline;} +sup{top:-0.5em;} +sub{bottom:-0.25em;} +img{max-width:100%;width:auto\9;height:auto;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic;} +#map_canvas img,.google-maps img{max-width:none;} +button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle;} +button,input{*overflow:visible;line-height:normal;} +button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0;} +button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer;} +label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer;} +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-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none;} +textarea{overflow:auto;vertical-align:top;} +@media print{*{text-shadow:none !important;color:#000 !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:0.5cm;}p,h2,h3{orphans:3;widows:3;} h2,h3{page-break-after:avoid;}}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333333;background-color:#ffffff;} +a{color:#0088cc;text-decoration:none;} +a:hover{color:#005580;text-decoration:underline;} +.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} +.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.2);-webkit-box-shadow:0 1px 3px rgba(0, 0, 0, 0.1);-moz-box-shadow:0 1px 3px rgba(0, 0, 0, 0.1);box-shadow:0 1px 3px rgba(0, 0, 0, 0.1);} +.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px;} +.row{margin-left:-20px;*zoom:1;}.row:before,.row:after{display:table;content:"";line-height:0;} +.row:after{clear:both;} +[class*="span"]{float:left;min-height:1px;margin-left:20px;} +.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px;} +.span12{width:940px;} +.span11{width:860px;} +.span10{width:780px;} +.span9{width:700px;} +.span8{width:620px;} +.span7{width:540px;} +.span6{width:460px;} +.span5{width:380px;} +.span4{width:300px;} +.span3{width:220px;} +.span2{width:140px;} +.span1{width:60px;} +.offset12{margin-left:980px;} +.offset11{margin-left:900px;} +.offset10{margin-left:820px;} +.offset9{margin-left:740px;} +.offset8{margin-left:660px;} +.offset7{margin-left:580px;} +.offset6{margin-left:500px;} +.offset5{margin-left:420px;} +.offset4{margin-left:340px;} +.offset3{margin-left:260px;} +.offset2{margin-left:180px;} +.offset1{margin-left:100px;} +.row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";line-height:0;} +.row-fluid:after{clear:both;} +.row-fluid [class*="span"]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;} +.row-fluid [class*="span"]:first-child{margin-left:0;} +.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%;} +.row-fluid .span12{width:100%;*width:99.94680851063829%;} +.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%;} +.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%;} +.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%;} +.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%;} +.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%;} +.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%;} +.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%;} +.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%;} +.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%;} +.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%;} +.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%;} +.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%;} +.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%;} +.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%;} +.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%;} +.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%;} +.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%;} +.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%;} +.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%;} +.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%;} +.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%;} +.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%;} +.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%;} +.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%;} +.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%;} +.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%;} +.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%;} +.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%;} +.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%;} +.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%;} +.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%;} +.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%;} +.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%;} +.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%;} +.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%;} +[class*="span"].hide,.row-fluid [class*="span"].hide{display:none;} +[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right;} +.container{margin-right:auto;margin-left:auto;*zoom:1;}.container:before,.container:after{display:table;content:"";line-height:0;} +.container:after{clear:both;} +.container-fluid{padding-right:20px;padding-left:20px;*zoom:1;}.container-fluid:before,.container-fluid:after{display:table;content:"";line-height:0;} +.container-fluid:after{clear:both;} +p{margin:0 0 10px;} +.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px;} +small{font-size:85%;} +strong{font-weight:bold;} +em{font-style:italic;} +cite{font-style:normal;} +.muted{color:#999999;} +a.muted:hover{color:#808080;} +.text-warning{color:#c09853;} +a.text-warning:hover{color:#a47e3c;} +.text-error{color:#b94a48;} +a.text-error:hover{color:#953b39;} +.text-info{color:#3a87ad;} +a.text-info:hover{color:#2d6987;} +.text-success{color:#468847;} +a.text-success:hover{color:#356635;} +h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:inherit;text-rendering:optimizelegibility;}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999999;} +h1,h2,h3{line-height:40px;} +h1{font-size:38.5px;} +h2{font-size:31.5px;} +h3{font-size:24.5px;} +h4{font-size:17.5px;} +h5{font-size:14px;} +h6{font-size:11.9px;} +h1 small{font-size:24.5px;} +h2 small{font-size:17.5px;} +h3 small{font-size:14px;} +h4 small{font-size:14px;} +.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eeeeee;} +ul,ol{padding:0;margin:0 0 10px 25px;} +ul ul,ul ol,ol ol,ol ul{margin-bottom:0;} +li{line-height:20px;} +ul.unstyled,ol.unstyled{margin-left:0;list-style:none;} +ul.inline,ol.inline{margin-left:0;list-style:none;}ul.inline >li,ol.inline >li{display:inline-block;padding-left:5px;padding-right:5px;} +dl{margin-bottom:20px;} +dt,dd{line-height:20px;} +dt{font-weight:bold;} +dd{margin-left:10px;} +.dl-horizontal{*zoom:1;}.dl-horizontal:before,.dl-horizontal:after{display:table;content:"";line-height:0;} +.dl-horizontal:after{clear:both;} +.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;} +.dl-horizontal dd{margin-left:180px;} +hr{margin:20px 0;border:0;border-top:1px solid #eeeeee;border-bottom:1px solid #ffffff;} +abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999999;} +abbr.initialism{font-size:90%;text-transform:uppercase;} +blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eeeeee;}blockquote p{margin-bottom:0;font-size:16px;font-weight:300;line-height:25px;} +blockquote small{display:block;line-height:20px;color:#999999;}blockquote small:before{content:'\2014 \00A0';} +blockquote.pull-right{float: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:20px;} +code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#333333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} +code{padding:2px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8;white-space:nowrap;} +pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}pre.prettyprint{margin-bottom:20px;} +pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0;} +.pre-scrollable{max-height:340px;overflow-y:scroll;} +.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#ffffff;vertical-align:baseline;white-space:nowrap;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#999999;} +.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} +.badge{padding-left:9px;padding-right:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px;} +.label:empty,.badge:empty{display:none;} +a.label:hover,a.badge:hover{color:#ffffff;text-decoration:none;cursor:pointer;} +.label-important,.badge-important{background-color:#b94a48;} +.label-important[href],.badge-important[href]{background-color:#953b39;} +.label-warning,.badge-warning{background-color:#f89406;} +.label-warning[href],.badge-warning[href]{background-color:#c67605;} +.label-success,.badge-success{background-color:#468847;} +.label-success[href],.badge-success[href]{background-color:#356635;} +.label-info,.badge-info{background-color:#3a87ad;} +.label-info[href],.badge-info[href]{background-color:#2d6987;} +.label-inverse,.badge-inverse{background-color:#333333;} +.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a;} +.btn .label,.btn .badge{position:relative;top:-1px;} +.btn-mini .label,.btn-mini .badge{top:0;} +table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0;} +.table{width:100%;margin-bottom:20px;}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #dddddd;} +.table th{font-weight:bold;} +.table thead th{vertical-align:bottom;} +.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.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 th,.table-condensed td{padding:4px 5px;} +.table-bordered{border:1px solid #dddddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.table-bordered th,.table-bordered td{border-left:1px solid #dddddd;} +.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0;} +.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child{-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;} +.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;} +.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child{-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;} +.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child{-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;} +.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0;} +.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;-moz-border-radius-bottomright:0;border-bottom-right-radius:0;} +.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;} +.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;} +.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 td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0;} +.table td.span1,.table th.span1{float:none;width:44px;margin-left:0;} +.table td.span2,.table th.span2{float:none;width:124px;margin-left:0;} +.table td.span3,.table th.span3{float:none;width:204px;margin-left:0;} +.table td.span4,.table th.span4{float:none;width:284px;margin-left:0;} +.table td.span5,.table th.span5{float:none;width:364px;margin-left:0;} +.table td.span6,.table th.span6{float:none;width:444px;margin-left:0;} +.table td.span7,.table th.span7{float:none;width:524px;margin-left:0;} +.table td.span8,.table th.span8{float:none;width:604px;margin-left:0;} +.table td.span9,.table th.span9{float:none;width:684px;margin-left:0;} +.table td.span10,.table th.span10{float:none;width:764px;margin-left:0;} +.table td.span11,.table th.span11{float:none;width:844px;margin-left:0;} +.table td.span12,.table th.span12{float:none;width:924px;margin-left:0;} +.table tbody tr.success td{background-color:#dff0d8;} +.table tbody tr.error td{background-color:#f2dede;} +.table tbody tr.warning td{background-color:#fcf8e3;} +.table tbody tr.info td{background-color:#d9edf7;} +.table-hover tbody tr.success:hover td{background-color:#d0e9c6;} +.table-hover tbody tr.error:hover td{background-color:#ebcccc;} +.table-hover tbody tr.warning:hover td{background-color:#faf2cc;} +.table-hover tbody tr.info:hover td{background-color:#c4e3f3;} +form{margin:0 0 20px;} +fieldset{padding:0;margin:0;border:0;} +legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333333;border:0;border-bottom:1px solid #e5e5e5;}legend small{font-size:15px;color:#999999;} +label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px;} +input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;} +label{display:block;margin-bottom:5px;} +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"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#555555;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;vertical-align:middle;} +input,textarea,.uneditable-input{width:206px;} +textarea{height:auto;} +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"],.uneditable-input{background-color:#ffffff;border:1px solid #cccccc;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-webkit-transition:border linear .2s, box-shadow linear .2s;-moz-transition:border linear .2s, box-shadow linear .2s;-o-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82, 168, 236, 0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);} +input[type="radio"],input[type="checkbox"]{margin:4px 0 0;*margin-top:0;margin-top:1px \9;line-height:normal;} +input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto;} +select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px;} +select{width:220px;border:1px solid #cccccc;background-color:#ffffff;} +select[multiple],select[size]{height:auto;} +select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} +.uneditable-input,.uneditable-textarea{color:#999999;background-color:#fcfcfc;border-color:#cccccc;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);cursor:not-allowed;} +.uneditable-input{overflow:hidden;white-space:nowrap;} +.uneditable-textarea{width:auto;height:auto;} +input:-moz-placeholder,textarea:-moz-placeholder{color:#999999;} +input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999999;} +input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999999;} +.radio,.checkbox{min-height:20px;padding-left:20px;} +.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px;} +.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px;} +.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle;} +.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px;} +.input-mini{width:60px;} +.input-small{width:90px;} +.input-medium{width:150px;} +.input-large{width:210px;} +.input-xlarge{width:270px;} +.input-xxlarge{width:530px;} +input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0;} +.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block;} +input,textarea,.uneditable-input{margin-left:0;} +.controls-row [class*="span"]+[class*="span"]{margin-left:20px;} +input.span12, textarea.span12, .uneditable-input.span12{width:926px;} +input.span11, textarea.span11, .uneditable-input.span11{width:846px;} +input.span10, textarea.span10, .uneditable-input.span10{width:766px;} +input.span9, textarea.span9, .uneditable-input.span9{width:686px;} +input.span8, textarea.span8, .uneditable-input.span8{width:606px;} +input.span7, textarea.span7, .uneditable-input.span7{width:526px;} +input.span6, textarea.span6, .uneditable-input.span6{width:446px;} +input.span5, textarea.span5, .uneditable-input.span5{width:366px;} +input.span4, textarea.span4, .uneditable-input.span4{width:286px;} +input.span3, textarea.span3, .uneditable-input.span3{width:206px;} +input.span2, textarea.span2, .uneditable-input.span2{width:126px;} +input.span1, textarea.span1, .uneditable-input.span1{width:46px;} +.controls-row{*zoom:1;}.controls-row:before,.controls-row:after{display:table;content:"";line-height:0;} +.controls-row:after{clear:both;} +.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left;} +.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px;} +input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eeeeee;} +input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent;} +.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853;} +.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853;} +.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #dbc59e;-moz-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;} +.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853;} +.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48;} +.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48;} +.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #d59392;-moz-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;} +.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48;} +.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847;} +.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847;} +.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7aba7b;-moz-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;} +.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847;} +.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad;} +.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad;} +.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 6px #7ab5d3;} +.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad;} +input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b;}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7;} +.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1;}.form-actions:before,.form-actions:after{display:table;content:"";line-height:0;} +.form-actions:after{clear:both;} +.help-block,.help-inline{color:#595959;} +.help-block{display:block;margin-bottom:10px;} +.help-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding-left:5px;} +.input-append,.input-prepend{margin-bottom:5px;font-size:0;white-space:nowrap;}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu{font-size:14px;} +.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2;} +.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #ffffff;background-color:#eeeeee;border:1px solid #ccc;} +.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} +.input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546;} +.input-prepend .add-on,.input-prepend .btn{margin-right:-1px;} +.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;} +.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} +.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px;} +.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} +.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} +.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;} +.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} +.input-prepend.input-append .btn-group:first-child{margin-left:0;} +input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;} +.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} +.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px;} +.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0;} +.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0;} +.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px;} +.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;*zoom:1;margin-bottom:0;vertical-align:middle;} +.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none;} +.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block;} +.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0;} +.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle;} +.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0;} +.control-group{margin-bottom:10px;} +legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate;} +.form-horizontal .control-group{margin-bottom:20px;*zoom:1;}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;content:"";line-height:0;} +.form-horizontal .control-group:after{clear:both;} +.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right;} +.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0;}.form-horizontal .controls:first-child{*padding-left:180px;} +.form-horizontal .help-block{margin-bottom:0;} +.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px;} +.form-horizontal .form-actions{padding-left:180px;} +.btn{display:inline-block;*display:inline;*zoom:1;padding:4px 12px;margin-bottom:0;font-size:14px;line-height:20px;text-align:center;vertical-align:middle;cursor:pointer;color:#333333;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(to bottom, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#e6e6e6;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border:1px solid #bbbbbb;*border:0;border-bottom-color:#a2a2a2;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);}.btn:hover,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333333;background-color:#e6e6e6;*background-color:#d9d9d9;} +.btn:active,.btn.active{background-color:#cccccc \9;} +.btn:first-child{*margin-left:0;} +.btn:hover{color:#333333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position 0.1s linear;-moz-transition:background-position 0.1s linear;-o-transition:background-position 0.1s linear;transition:background-position 0.1s linear;} +.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} +.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);} +.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} +.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} +.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px;} +.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} +.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0;} +.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px;} +.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} +.btn-block{display:block;width:100%;padding-left:0;padding-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} +.btn-block+.btn-block{margin-top:5px;} +input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%;} +.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255, 255, 255, 0.75);} +.btn{border-color:#c5c5c5;border-color:rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.25);} +.btn-primary{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#006dcc;background-image:-moz-linear-gradient(top, #0088cc, #0044cc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));background-image:-webkit-linear-gradient(top, #0088cc, #0044cc);background-image:-o-linear-gradient(top, #0088cc, #0044cc);background-image:linear-gradient(to bottom, #0088cc, #0044cc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);border-color:#0044cc #0044cc #002a80;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#0044cc;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#ffffff;background-color:#0044cc;*background-color:#003bb3;} +.btn-primary:active,.btn-primary.active{background-color:#003399 \9;} +.btn-warning{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(to bottom, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);border-color:#f89406 #f89406 #ad6704;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#f89406;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-warning:hover,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#ffffff;background-color:#f89406;*background-color:#df8505;} +.btn-warning:active,.btn-warning.active{background-color:#c67605 \9;} +.btn-danger{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(to bottom, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#bd362f;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-danger:hover,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#ffffff;background-color:#bd362f;*background-color:#a9302a;} +.btn-danger:active,.btn-danger.active{background-color:#942a25 \9;} +.btn-success{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(to bottom, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0);border-color:#51a351 #51a351 #387038;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#51a351;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-success:hover,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#ffffff;background-color:#51a351;*background-color:#499249;} +.btn-success:active,.btn-success.active{background-color:#408140 \9;} +.btn-info{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(to bottom, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0);border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#2f96b4;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-info:hover,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#ffffff;background-color:#2f96b4;*background-color:#2a85a0;} +.btn-info:active,.btn-info.active{background-color:#24748c \9;} +.btn-inverse{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#363636;background-image:-moz-linear-gradient(top, #444444, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222));background-image:-webkit-linear-gradient(top, #444444, #222222);background-image:-o-linear-gradient(top, #444444, #222222);background-image:linear-gradient(to bottom, #444444, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0);border-color:#222222 #222222 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#222222;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-inverse:hover,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#ffffff;background-color:#222222;*background-color:#151515;} +.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9;} +button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px;}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0;} +button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px;} +button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px;} +button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px;} +.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} +.btn-link{border-color:transparent;cursor:pointer;color:#0088cc;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} +.btn-link:hover{color:#005580;text-decoration:underline;background-color:transparent;} +.btn-link[disabled]:hover{color:#333333;text-decoration:none;} +.btn-group{position:relative;display:inline-block;*display:inline;*zoom:1;font-size:0;vertical-align:middle;white-space:nowrap;*margin-left:.3em;}.btn-group:first-child{*margin-left:0;} +.btn-group+.btn-group{margin-left:5px;} +.btn-toolbar{font-size:0;margin-top:10px;margin-bottom:10px;}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px;} +.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} +.btn-group>.btn+.btn{margin-left:-1px;} +.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px;} +.btn-group>.btn-mini{font-size:10.5px;} +.btn-group>.btn-small{font-size:11.9px;} +.btn-group>.btn-large{font-size:17.5px;} +.btn-group>.btn:first-child{margin-left:0;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;} +.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;} +.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;} +.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius:6px;} +.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2;} +.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0;} +.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);*padding-top:5px;*padding-bottom:5px;} +.btn-group>.btn-mini+.dropdown-toggle{padding-left:5px;padding-right:5px;*padding-top:2px;*padding-bottom:2px;} +.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px;} +.btn-group>.btn-large+.dropdown-toggle{padding-left:12px;padding-right:12px;*padding-top:7px;*padding-bottom:7px;} +.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);} +.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6;} +.btn-group.open .btn-primary.dropdown-toggle{background-color:#0044cc;} +.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406;} +.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f;} +.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351;} +.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4;} +.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222222;} +.btn .caret{margin-top:8px;margin-left:0;} +.btn-mini .caret,.btn-small .caret,.btn-large .caret{margin-top:6px;} +.btn-large .caret{border-left-width:5px;border-right-width:5px;border-top-width:5px;} +.dropup .btn-large .caret{border-bottom-width:5px;} +.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;} +.btn-group-vertical{display:inline-block;*display:inline;*zoom:1;} +.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} +.btn-group-vertical>.btn+.btn{margin-left:0;margin-top:-1px;} +.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;} +.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;} +.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0;} +.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;} +.nav{margin-left:0;margin-bottom:20px;list-style:none;} +.nav>li>a{display:block;} +.nav>li>a:hover{text-decoration:none;background-color:#eeeeee;} +.nav>li>a>img{max-width:none;} +.nav>.pull-right{float:right;} +.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999999;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);text-transform:uppercase;} +.nav li+.nav-header{margin-top:9px;} +.nav-list{padding-left:15px;padding-right:15px;margin-bottom:0;} +.nav-list>li>a,.nav-list .nav-header{margin-left:-15px;margin-right:-15px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);} +.nav-list>li>a{padding:3px 15px;} +.nav-list>.active>a,.nav-list>.active>a:hover{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.2);background-color:#0088cc;} +.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px;} +.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;} +.nav-tabs,.nav-pills{*zoom:1;}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;content:"";line-height:0;} +.nav-tabs:after,.nav-pills:after{clear:both;} +.nav-tabs>li,.nav-pills>li{float:left;} +.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px;} +.nav-tabs{border-bottom:1px solid #ddd;} +.nav-tabs>li{margin-bottom:-1px;} +.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}.nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #dddddd;} +.nav-tabs>.active>a,.nav-tabs>.active>a:hover{color:#555555;background-color:#ffffff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default;} +.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;} +.nav-pills>.active>a,.nav-pills>.active>a:hover{color:#ffffff;background-color:#0088cc;} +.nav-stacked>li{float:none;} +.nav-stacked>li>a{margin-right:0;} +.nav-tabs.nav-stacked{border-bottom:0;} +.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} +.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;} +.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;} +.nav-tabs.nav-stacked>li>a:hover{border-color:#ddd;z-index:2;} +.nav-pills.nav-stacked>li>a{margin-bottom:3px;} +.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px;} +.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;} +.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} +.nav .dropdown-toggle .caret{border-top-color:#0088cc;border-bottom-color:#0088cc;margin-top:6px;} +.nav .dropdown-toggle:hover .caret{border-top-color:#005580;border-bottom-color:#005580;} +.nav-tabs .dropdown-toggle .caret{margin-top:8px;} +.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff;} +.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555555;border-bottom-color:#555555;} +.nav>.dropdown.active>a:hover{cursor:pointer;} +.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover{color:#ffffff;background-color:#999999;border-color:#999999;} +.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;opacity:1;filter:alpha(opacity=100);} +.tabs-stacked .open>a:hover{border-color:#999999;} +.tabbable{*zoom:1;}.tabbable:before,.tabbable:after{display:table;content:"";line-height:0;} +.tabbable:after{clear:both;} +.tab-content{overflow:auto;} +.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0;} +.tab-content>.tab-pane,.pill-content>.pill-pane{display:none;} +.tab-content>.active,.pill-content>.active{display:block;} +.tabs-below>.nav-tabs{border-top:1px solid #ddd;} +.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0;} +.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;}.tabs-below>.nav-tabs>li>a:hover{border-bottom-color:transparent;border-top-color:#ddd;} +.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover{border-color:transparent #ddd #ddd #ddd;} +.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none;} +.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px;} +.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd;} +.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;} +.tabs-left>.nav-tabs>li>a:hover{border-color:#eeeeee #dddddd #eeeeee #eeeeee;} +.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover{border-color:#ddd transparent #ddd #ddd;*border-right-color:#ffffff;} +.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd;} +.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} +.tabs-right>.nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #eeeeee #dddddd;} +.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover{border-color:#ddd #ddd #ddd transparent;*border-left-color:#ffffff;} +.nav>.disabled>a{color:#999999;} +.nav>.disabled>a:hover{text-decoration:none;background-color:transparent;cursor:default;} +.navbar{overflow:visible;margin-bottom:20px;*position:relative;*z-index:2;} +.navbar-inner{min-height:40px;padding-left:20px;padding-right:20px;background-color:#fafafa;background-image:-moz-linear-gradient(top, #ffffff, #f2f2f2);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2));background-image:-webkit-linear-gradient(top, #ffffff, #f2f2f2);background-image:-o-linear-gradient(top, #ffffff, #f2f2f2);background-image:linear-gradient(to bottom, #ffffff, #f2f2f2);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0);border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 4px rgba(0, 0, 0, 0.065);-moz-box-shadow:0 1px 4px rgba(0, 0, 0, 0.065);box-shadow:0 1px 4px rgba(0, 0, 0, 0.065);*zoom:1;}.navbar-inner:before,.navbar-inner:after{display:table;content:"";line-height:0;} +.navbar-inner:after{clear:both;} +.navbar .container{width:auto;} +.nav-collapse.collapse{height:auto;overflow:visible;} +.navbar .brand{float:left;display:block;padding:10px 20px 10px;margin-left:-20px;font-size:20px;font-weight:200;color:#777777;text-shadow:0 1px 0 #ffffff;}.navbar .brand:hover{text-decoration:none;} +.navbar-text{margin-bottom:0;line-height:40px;color:#777777;} +.navbar-link{color:#777777;}.navbar-link:hover{color:#333333;} +.navbar .divider-vertical{height:40px;margin:0 9px;border-left:1px solid #f2f2f2;border-right:1px solid #ffffff;} +.navbar .btn,.navbar .btn-group{margin-top:5px;} +.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn{margin-top:0;} +.navbar-form{margin-bottom:0;*zoom:1;}.navbar-form:before,.navbar-form:after{display:table;content:"";line-height:0;} +.navbar-form:after{clear:both;} +.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px;} +.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0;} +.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px;} +.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap;}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0;} +.navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0;}.navbar-search .search-query{margin-bottom:0;padding:4px 14px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;} +.navbar-static-top{position:static;margin-bottom:0;}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} +.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0;} +.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px;} +.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0;} +.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-left:0;padding-right:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} +.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px;} +.navbar-fixed-top{top:0;} +.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,.1);box-shadow:0 1px 10px rgba(0,0,0,.1);} +.navbar-fixed-bottom{bottom:0;}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,.1);box-shadow:0 -1px 10px rgba(0,0,0,.1);} +.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0;} +.navbar .nav.pull-right{float:right;margin-right:0;} +.navbar .nav>li{float:left;} +.navbar .nav>li>a{float:none;padding:10px 15px 10px;color:#777777;text-decoration:none;text-shadow:0 1px 0 #ffffff;} +.navbar .nav .dropdown-toggle .caret{margin-top:8px;} +.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{background-color:transparent;color:#333333;text-decoration:none;} +.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555555;text-decoration:none;background-color:#e5e5e5;-webkit-box-shadow:inset 0 3px 8px rgba(0, 0, 0, 0.125);-moz-box-shadow:inset 0 3px 8px rgba(0, 0, 0, 0.125);box-shadow:inset 0 3px 8px rgba(0, 0, 0, 0.125);} +.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-left:5px;margin-right:5px;color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#ededed;background-image:-moz-linear-gradient(top, #f2f2f2, #e5e5e5);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5));background-image:-webkit-linear-gradient(top, #f2f2f2, #e5e5e5);background-image:-o-linear-gradient(top, #f2f2f2, #e5e5e5);background-image:linear-gradient(to bottom, #f2f2f2, #e5e5e5);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0);border-color:#e5e5e5 #e5e5e5 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#e5e5e5;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);}.navbar .btn-navbar:hover,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#ffffff;background-color:#e5e5e5;*background-color:#d9d9d9;} +.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#cccccc \9;} +.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);-moz-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);} +.btn-navbar .icon-bar+.icon-bar{margin-top:3px;} +.navbar .nav>li>.dropdown-menu:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0, 0, 0, 0.2);position:absolute;top:-7px;left:9px;} +.navbar .nav>li>.dropdown-menu:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #ffffff;position:absolute;top:-6px;left:10px;} +.navbar-fixed-bottom .nav>li>.dropdown-menu:before{border-top:7px solid #ccc;border-top-color:rgba(0, 0, 0, 0.2);border-bottom:0;bottom:-7px;top:auto;} +.navbar-fixed-bottom .nav>li>.dropdown-menu:after{border-top:6px solid #ffffff;border-bottom:0;bottom:-6px;top:auto;} +.navbar .nav li.dropdown>a:hover .caret{border-top-color:#555555;border-bottom-color:#555555;} +.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{background-color:#e5e5e5;color:#555555;} +.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#777777;border-bottom-color:#777777;} +.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555555;border-bottom-color:#555555;} +.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{left:auto;right:0;}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{left:auto;right:12px;} +.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{left:auto;right:13px;} +.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{left:auto;right:100%;margin-left:0;margin-right:-1px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px;} +.navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top, #222222, #111111);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111));background-image:-webkit-linear-gradient(top, #222222, #111111);background-image:-o-linear-gradient(top, #222222, #111111);background-image:linear-gradient(to bottom, #222222, #111111);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0);border-color:#252525;} +.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999999;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover{color:#ffffff;} +.navbar-inverse .brand{color:#999999;} +.navbar-inverse .navbar-text{color:#999999;} +.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{background-color:transparent;color:#ffffff;} +.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#ffffff;background-color:#111111;} +.navbar-inverse .navbar-link{color:#999999;}.navbar-inverse .navbar-link:hover{color:#ffffff;} +.navbar-inverse .divider-vertical{border-left-color:#111111;border-right-color:#222222;} +.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{background-color:#111111;color:#ffffff;} +.navbar-inverse .nav li.dropdown>a:hover .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;} +.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999999;border-bottom-color:#999999;} +.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;} +.navbar-inverse .navbar-search .search-query{color:#ffffff;background-color:#515151;border-color:#111111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none;}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#cccccc;} +.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#cccccc;} +.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#cccccc;} +.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333333;text-shadow:0 1px 0 #ffffff;background-color:#ffffff;border:0;-webkit-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);-moz-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);box-shadow:0 0 3px rgba(0, 0, 0, 0.15);outline:0;} +.navbar-inverse .btn-navbar{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#0e0e0e;background-image:-moz-linear-gradient(top, #151515, #040404);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404));background-image:-webkit-linear-gradient(top, #151515, #040404);background-image:-o-linear-gradient(top, #151515, #040404);background-image:linear-gradient(to bottom, #151515, #040404);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0);border-color:#040404 #040404 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);*background-color:#040404;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#ffffff;background-color:#040404;*background-color:#000000;} +.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000000 \9;} +.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.breadcrumb>li{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 0 #ffffff;}.breadcrumb>li>.divider{padding:0 5px;color:#ccc;} +.breadcrumb>.active{color:#999999;} +.pagination{margin:20px 0;} +.pagination ul{display:inline-block;*display:inline;*zoom:1;margin-left:0;margin-bottom:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);} +.pagination ul>li{display:inline;} +.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#ffffff;border:1px solid #dddddd;border-left-width:0;} +.pagination ul>li>a:hover,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5;} +.pagination ul>.active>a,.pagination ul>.active>span{color:#999999;cursor:default;} +.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover{color:#999999;background-color:transparent;cursor:default;} +.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;} +.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;} +.pagination-centered{text-align:center;} +.pagination-right{text-align:right;} +.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px;} +.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;} +.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius:6px;} +.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-top-left-radius:3px;-moz-border-radius-topleft:3px;border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-bottomleft:3px;border-bottom-left-radius:3px;} +.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;-moz-border-radius-topright:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;-moz-border-radius-bottomright:3px;border-bottom-right-radius:3px;} +.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px;} +.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px;} +.pager{margin:20px 0;list-style:none;text-align:center;*zoom:1;}.pager:before,.pager:after{display:table;content:"";line-height:0;} +.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;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;} +.pager li>a:hover{text-decoration:none;background-color:#f5f5f5;} +.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>span{color:#999999;background-color:#fff;cursor:default;} +.thumbnails{margin-left:-20px;list-style:none;*zoom:1;}.thumbnails:before,.thumbnails:after{display:table;content:"";line-height:0;} +.thumbnails:after{clear:both;} +.row-fluid .thumbnails{margin-left:0;} +.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px;} +.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0, 0, 0, 0.055);-moz-box-shadow:0 1px 3px rgba(0, 0, 0, 0.055);box-shadow:0 1px 3px rgba(0, 0, 0, 0.055);-webkit-transition:all 0.2s ease-in-out;-moz-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;} +a.thumbnail:hover{border-color:#0088cc;-webkit-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);-moz-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);} +.thumbnail>img{display:block;max-width:100%;margin-left:auto;margin-right:auto;} +.thumbnail .caption{padding:9px;color:#555555;} +.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} +.alert,.alert h4{color:#c09853;} +.alert h4{margin:0;} +.alert .close{position:relative;top:-2px;right:-21px;line-height:20px;} +.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#468847;} +.alert-success h4{color:#468847;} +.alert-danger,.alert-error{background-color:#f2dede;border-color:#eed3d7;color:#b94a48;} +.alert-danger h4,.alert-error h4{color:#b94a48;} +.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#3a87ad;} +.alert-info h4{color:#3a87ad;} +.alert-block{padding-top:14px;padding-bottom:14px;} +.alert-block>p,.alert-block>ul{margin-bottom:0;} +.alert-block p+p{margin-top:5px;} +@-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;}}@-ms-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{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f7f7f7;background-image:-moz-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));background-image:-webkit-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-o-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:linear-gradient(to bottom, #f5f5f5, #f9f9f9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} +.progress .bar{width:0%;height:100%;color:#ffffff;float:left;font-size:12px;text-align:center;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top, #149bdf, #0480be);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));background-image:-webkit-linear-gradient(top, #149bdf, #0480be);background-image:-o-linear-gradient(top, #149bdf, #0480be);background-image:linear-gradient(to bottom, #149bdf, #0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-moz-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-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width 0.6s ease;-moz-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease;} +.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15);} +.progress-striped .bar{background-color:#149bdf;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:-o-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);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px;} +.progress.active .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-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top, #ee5f5b, #c43c35);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));background-image:-webkit-linear-gradient(top, #ee5f5b, #c43c35);background-image:-o-linear-gradient(top, #ee5f5b, #c43c35);background-image:linear-gradient(to bottom, #ee5f5b, #c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0);} +.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;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:-o-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-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top, #62c462, #57a957);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));background-image:-webkit-linear-gradient(top, #62c462, #57a957);background-image:-o-linear-gradient(top, #62c462, #57a957);background-image:linear-gradient(to bottom, #62c462, #57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0);} +.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;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:-o-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-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top, #5bc0de, #339bb9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));background-image:-webkit-linear-gradient(top, #5bc0de, #339bb9);background-image:-o-linear-gradient(top, #5bc0de, #339bb9);background-image:linear-gradient(to bottom, #5bc0de, #339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0);} +.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;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:-o-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-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(to bottom, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);} +.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;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:-o-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);} +.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eeeeee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;color:inherit;letter-spacing:-1px;} +.hero-unit li{line-height:30px;} +.media,.media-body{overflow:hidden;*overflow:visible;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{margin-left:0;list-style:none;} +.tooltip{position:absolute;z-index:1030;display:block;visibility:visible;padding:5px;font-size:11px;opacity:0;filter:alpha(opacity=0);}.tooltip.in{opacity:0.8;filter:alpha(opacity=80);} +.tooltip.top{margin-top:-3px;} +.tooltip.right{margin-left:3px;} +.tooltip.bottom{margin-top:3px;} +.tooltip.left{margin-left:-3px;} +.tooltip-inner{max-width:200px;padding:3px 8px;color:#ffffff;text-align:center;text-decoration:none;background-color:#000000;-webkit-border-radius:4px;-moz-border-radius:4px;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-width:5px 5px 0;border-top-color:#000000;} +.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000000;} +.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000000;} +.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000000;} +.popover{position:absolute;top:0;left:0;z-index:1010;display:none;width:236px;padding:1px;text-align:left;background-color:#ffffff;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);white-space:normal;}.popover.top{margin-top:-10px;} +.popover.right{margin-left:10px;} +.popover.bottom{margin-top:10px;} +.popover.left{margin-left:-10px;} +.popover-title{margin:0;padding:8px 14px;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;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{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0, 0, 0, 0.25);bottom:-11px;}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#ffffff;} +.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0, 0, 0, 0.25);}.popover.right .arrow:after{left:1px;bottom:-10px;border-left-width:0;border-right-color:#ffffff;} +.popover.bottom .arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0, 0, 0, 0.25);top:-11px;}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#ffffff;} +.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0, 0, 0, 0.25);}.popover.left .arrow:after{right:1px;border-right-width:0;border-left-color:#ffffff;bottom:-10px;} +.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000000;}.modal-backdrop.fade{opacity:0;} +.modal-backdrop,.modal-backdrop.fade.in{opacity:0.8;filter:alpha(opacity=80);} +.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#ffffff;border:1px solid #999;border:1px solid rgba(0, 0, 0, 0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;outline:none;}.modal.fade{-webkit-transition:opacity .3s linear, top .3s ease-out;-moz-transition:opacity .3s linear, top .3s ease-out;-o-transition:opacity .3s linear, top .3s ease-out;transition:opacity .3s linear, top .3s ease-out;top:-25%;} +.modal.fade.in{top:10%;} +.modal-header{padding:9px 15px;border-bottom:1px solid #eee;}.modal-header .close{margin-top:2px;} +.modal-header h3{margin:0;line-height:30px;} +.modal-body{position:relative;overflow-y:auto;max-height:400px;padding:15px;} +.modal-form{margin-bottom:0;} +.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;*zoom:1;}.modal-footer:before,.modal-footer:after{display:table;content:"";line-height:0;} +.modal-footer:after{clear:both;} +.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0;} +.modal-footer .btn-group .btn+.btn{margin-left:-1px;} +.modal-footer .btn-block+.btn-block{margin-left:0;} +.dropup,.dropdown{position:relative;} +.dropdown-toggle{*margin-bottom:-3px;} +.dropdown-toggle:active,.open .dropdown-toggle{outline:0;} +.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000000;border-right:4px solid transparent;border-left:4px solid transparent;content:"";} +.dropdown .caret{margin-top:8px;margin-left:2px;} +.dropdown-menu1{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#ffffff;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;}.dropdown-menu.pull-right{right:0;left:auto;} +.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;} +.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#ffffff;text-decoration:none;outline:0;background-color:#0081c2;background-image:-moz-linear-gradient(top, #0088cc, #0077b3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3));background-image:-webkit-linear-gradient(top, #0088cc, #0077b3);background-image:-o-linear-gradient(top, #0088cc, #0077b3);background-image:linear-gradient(to bottom, #0088cc, #0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);} +.dropdown-menu .disabled>a,.dropdown-menu .disabled>a:hover{color:#999999;} +.dropdown-menu .disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:default;} +.open{*z-index:1000;}.open >.dropdown-menu{display:block;} +.pull-right>.dropdown-menu{right:0;left:auto;} +.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000000;content:"";} +.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px;} +.dropdown-submenu{position:relative;} +.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px;} +.dropdown-submenu:hover>.dropdown-menu{display:block;} +.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0;} +.dropdown-submenu>a:after{display:block;content:" ";float:right;width:0;height:0;border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#cccccc;margin-top:5px;margin-right:-10px;} +.dropdown-submenu:hover>a:after{border-left-color:#ffffff;} +.dropdown-submenu.pull-left{float:none;}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px;} +.dropdown .dropdown-menu .nav-header{padding-left:20px;padding-right:20px;} +.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} +.accordion{margin-bottom:20px;} +.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} +.accordion-heading{border-bottom:0;} +.accordion-heading .accordion-toggle{display:block;padding:8px 15px;} +.accordion-toggle{cursor:pointer;} +.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5;} +.carousel{position:relative;margin-bottom:20px;line-height:1;} +.carousel-inner{overflow:hidden;width:100%;position:relative;} +.carousel-inner>.item{display:none;position:relative;-webkit-transition:0.6s ease-in-out left;-moz-transition:0.6s ease-in-out left;-o-transition:0.6s ease-in-out left;transition:0.6s ease-in-out left;} +.carousel-inner>.item>img{display:block;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:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#ffffff;text-align:center;background:#222222;border:3px solid #ffffff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:0.5;filter:alpha(opacity=50);}.carousel-control.right{left:auto;right:15px;} +.carousel-control:hover{color:#ffffff;text-decoration:none;opacity:0.9;filter:alpha(opacity=90);} +.carousel-caption{position:absolute;left:0;right:0;bottom:0;padding:15px;background:#333333;background:rgba(0, 0, 0, 0.75);} +.carousel-caption h4,.carousel-caption p{color:#ffffff;line-height:20px;} +.carousel-caption h4{margin:0 0 5px;} +.carousel-caption p{margin-bottom:0;} +.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);-moz-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-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} +.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} +.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000000;text-shadow:0 1px 0 #ffffff;opacity:0.2;filter:alpha(opacity=20);}.close:hover{color:#000000;text-decoration:none;cursor:pointer;opacity:0.4;filter:alpha(opacity=40);} +button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none;} +.pull-right{float:right;} +.pull-left{float:left;} +.hide{display:none;} +.show{display:block;} +.invisible{visibility:hidden;} +.affix{position:fixed;} +.fade{opacity:0;-webkit-transition:opacity 0.15s linear;-moz-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear;}.fade.in{opacity:1;} +.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height 0.35s ease;-moz-transition:height 0.35s ease;-o-transition:height 0.35s ease;transition:height 0.35s ease;}.collapse.in{height:auto;} +.hidden{display:none;visibility:hidden;} +.visible-phone{display:none !important;} +.visible-tablet{display:none !important;} +.hidden-desktop{display:none !important;} +.visible-desktop{display:inherit !important;} +@media (min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit !important;} .visible-desktop{display:none !important ;} .visible-tablet{display:inherit !important;} .hidden-tablet{display:none !important;}}@media (max-width:767px){.hidden-desktop{display:inherit !important;} .visible-desktop{display:none !important;} .visible-phone{display:inherit !important;} .hidden-phone{display:none !important;}}@media (max-width:767px){body{padding-left:20px;padding-right:20px;} .navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-left:-20px;margin-right:-20px;} .container-fluid{padding:0;} .dl-horizontal dt{float:none;clear:none;width:auto;text-align:left;} .dl-horizontal dd{margin-left:0;} .container{width:auto;} .row-fluid{width:100%;} .row,.thumbnails{margin-left:0;} .thumbnails>li{float:none;margin-left:0;} [class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{float:none;display:block;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} .span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} .row-fluid [class*="offset"]:first-child{margin-left:0;} .input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} .input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto;} .controls-row [class*="span"]+[class*="span"]{margin-left:0;} .modal{position:fixed;top:20px;left:20px;right:20px;width:auto;margin:0;}.modal.fade{top:-100px;} .modal.fade.in{top:20px;}}@media (max-width:480px){.nav-collapse{-webkit-transform:translate3d(0, 0, 0);} .page-header h1 small{display:block;line-height:20px;} input[type="checkbox"],input[type="radio"]{border:1px solid #ccc;} .form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left;} .form-horizontal .controls{margin-left:0;} .form-horizontal .control-list{padding-top:0;} .form-horizontal .form-actions{padding-left:10px;padding-right:10px;} .media .pull-left,.media .pull-right{float:none;display:block;margin-bottom:10px;} .media-object{margin-right:0;margin-left:0;} .modal{top:10px;left:10px;right:10px;} .modal-header .close{padding:10px;margin:-10px;} .carousel-caption{position:static;}}@media (min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1;}.row:before,.row:after{display:table;content:"";line-height:0;} .row:after{clear:both;} [class*="span"]{float:left;min-height:1px;margin-left:20px;} .container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px;} .span12{width:724px;} .span11{width:662px;} .span10{width:600px;} .span9{width:538px;} .span8{width:476px;} .span7{width:414px;} .span6{width:352px;} .span5{width:290px;} .span4{width:228px;} .span3{width:166px;} .span2{width:104px;} .span1{width:42px;} .offset12{margin-left:764px;} .offset11{margin-left:702px;} .offset10{margin-left:640px;} .offset9{margin-left:578px;} .offset8{margin-left:516px;} .offset7{margin-left:454px;} .offset6{margin-left:392px;} .offset5{margin-left:330px;} .offset4{margin-left:268px;} .offset3{margin-left:206px;} .offset2{margin-left:144px;} .offset1{margin-left:82px;} .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";line-height:0;} .row-fluid:after{clear:both;} .row-fluid [class*="span"]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;} .row-fluid [class*="span"]:first-child{margin-left:0;} .row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.7624309392265194%;} .row-fluid .span12{width:100%;*width:99.94680851063829%;} .row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%;} .row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%;} .row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%;} .row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%;} .row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%;} .row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%;} .row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%;} .row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%;} .row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%;} .row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%;} .row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%;} .row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%;} .row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%;} .row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%;} .row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%;} .row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%;} .row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%;} .row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%;} .row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%;} .row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%;} .row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%;} .row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%;} .row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%;} .row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%;} .row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%;} .row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%;} .row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%;} .row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%;} .row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%;} .row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%;} .row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%;} .row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%;} .row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%;} .row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%;} .row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%;} input,textarea,.uneditable-input{margin-left:0;} .controls-row [class*="span"]+[class*="span"]{margin-left:20px;} input.span12, textarea.span12, .uneditable-input.span12{width:710px;} input.span11, textarea.span11, .uneditable-input.span11{width:648px;} input.span10, textarea.span10, .uneditable-input.span10{width:586px;} input.span9, textarea.span9, .uneditable-input.span9{width:524px;} input.span8, textarea.span8, .uneditable-input.span8{width:462px;} input.span7, textarea.span7, .uneditable-input.span7{width:400px;} input.span6, textarea.span6, .uneditable-input.span6{width:338px;} input.span5, textarea.span5, .uneditable-input.span5{width:276px;} input.span4, textarea.span4, .uneditable-input.span4{width:214px;} input.span3, textarea.span3, .uneditable-input.span3{width:152px;} input.span2, textarea.span2, .uneditable-input.span2{width:90px;} input.span1, textarea.span1, .uneditable-input.span1{width:28px;}}@media (min-width:1200px){.row{margin-left:-30px;*zoom:1;}.row:before,.row:after{display:table;content:"";line-height:0;} .row:after{clear:both;} [class*="span"]{float:left;min-height:1px;margin-left:30px;} .container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px;} .span12{width:1170px;} .span11{width:1070px;} .span10{width:970px;} .span9{width:870px;} .span8{width:770px;} .span7{width:670px;} .span6{width:570px;} .span5{width:470px;} .span4{width:370px;} .span3{width:270px;} .span2{width:170px;} .span1{width:70px;} .offset12{margin-left:1230px;} .offset11{margin-left:1130px;} .offset10{margin-left:1030px;} .offset9{margin-left:930px;} .offset8{margin-left:830px;} .offset7{margin-left:730px;} .offset6{margin-left:630px;} .offset5{margin-left:530px;} .offset4{margin-left:430px;} .offset3{margin-left:330px;} .offset2{margin-left:230px;} .offset1{margin-left:130px;} .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";line-height:0;} .row-fluid:after{clear:both;} .row-fluid [class*="span"]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;} .row-fluid [class*="span"]:first-child{margin-left:0;} .row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.564102564102564%;} .row-fluid .span12{width:100%;*width:99.94680851063829%;} .row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%;} .row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%;} .row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%;} .row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%;} .row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%;} .row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%;} .row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%;} .row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%;} .row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%;} .row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%;} .row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%;} .row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%;} .row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%;} .row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%;} .row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%;} .row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%;} .row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%;} .row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%;} .row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%;} .row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%;} .row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%;} .row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%;} .row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%;} .row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%;} .row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%;} .row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%;} .row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%;} .row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%;} .row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%;} .row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%;} .row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%;} .row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%;} .row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%;} .row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%;} .row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%;} input,textarea,.uneditable-input{margin-left:0;} .controls-row [class*="span"]+[class*="span"]{margin-left:30px;} input.span12, textarea.span12, .uneditable-input.span12{width:1156px;} input.span11, textarea.span11, .uneditable-input.span11{width:1056px;} input.span10, textarea.span10, .uneditable-input.span10{width:956px;} input.span9, textarea.span9, .uneditable-input.span9{width:856px;} input.span8, textarea.span8, .uneditable-input.span8{width:756px;} input.span7, textarea.span7, .uneditable-input.span7{width:656px;} input.span6, textarea.span6, .uneditable-input.span6{width:556px;} input.span5, textarea.span5, .uneditable-input.span5{width:456px;} input.span4, textarea.span4, .uneditable-input.span4{width:356px;} input.span3, textarea.span3, .uneditable-input.span3{width:256px;} input.span2, textarea.span2, .uneditable-input.span2{width:156px;} input.span1, textarea.span1, .uneditable-input.span1{width:56px;} .thumbnails{margin-left:-30px;} .thumbnails>li{margin-left:30px;} .row-fluid .thumbnails{margin-left:0;}}@media (max-width:979px){body{padding-top:0;} .navbar-fixed-top,.navbar-fixed-bottom{position:static;} .navbar-fixed-top{margin-bottom:20px;} .navbar-fixed-bottom{margin-top:20px;} .navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px;} .navbar .container{width:auto;padding:0;} .navbar .brand{padding-left:10px;padding-right:10px;margin:0 0 0 -5px;} .nav-collapse{clear:both;} .nav-collapse .nav{float:none;margin:0 0 10px;} .nav-collapse .nav>li{float:none;} .nav-collapse .nav>li>a{margin-bottom:2px;} .nav-collapse .nav>.divider-vertical{display:none;} .nav-collapse .nav .nav-header{color:#777777;text-shadow:none;} .nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} .nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} .nav-collapse .dropdown-menu li+li a{margin-bottom:2px;} .nav-collapse .nav>li>a:hover,.nav-collapse .dropdown-menu a:hover{background-color:#f2f2f2;} .navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999999;} .navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:hover{background-color:#111111;} .nav-collapse.in .btn-group{margin-top:5px;padding:0;} .nav-collapse .dropdown-menu{position:static;top:auto;left:auto;float:none;display:none;max-width:none;margin:0 15px;padding:0;background-color:transparent;border:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} .nav-collapse .open>.dropdown-menu{display:block;} .nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none;} .nav-collapse .dropdown-menu .divider{display:none;} .nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none;} .nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);} .navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111111;border-bottom-color:#111111;} .navbar .nav-collapse .nav.pull-right{float:none;margin-left:0;} .nav-collapse,.nav-collapse.collapse{overflow:hidden;height:0;} .navbar .btn-navbar{display:block;} .navbar-static .navbar-inner{padding-left:10px;padding-right:10px;}}@media (min-width:980px){.nav-collapse.collapse{height:auto !important;overflow:visible !important;}} diff --git a/doc/design/css/font-awesome-ie7.min.css b/doc/design/css/font-awesome-ie7.min.css index 504350e6c..8fd29724d 100644 --- a/doc/design/css/font-awesome-ie7.min.css +++ b/doc/design/css/font-awesome-ie7.min.css @@ -1,23 +1,23 @@ -/* Font Awesome 3.0 - the iconic font designed for use with Twitter Bootstrap - ------------------------------------------------------- - The full suite of pictographic icons, examples, and documentation - can be found at: http://fortawesome.github.com/Font-Awesome/ - - License - ------------------------------------------------------- - • The Font Awesome font is licensed under the SIL Open Font License - http://scripts.sil.org/OFL - • Font Awesome CSS, LESS, and SASS files are licensed under the MIT License - - http://opensource.org/licenses/mit-license.html - • The Font Awesome pictograms are licensed under the CC BY 3.0 License - http://creativecommons.org/licenses/by/3.0/ - • Attribution is no longer required in Font Awesome 3.0, but much appreciated: - "Font Awesome by Dave Gandy - http://fortawesome.github.com/Font-Awesome" - - Contact - ------------------------------------------------------- - Email: dave@davegandy.com - Twitter: http://twitter.com/fortaweso_me - Work: Lead Product Designer @ http://kyruus.com - - */ +/* Font Awesome 3.0 + the iconic font designed for use with Twitter Bootstrap + ------------------------------------------------------- + The full suite of pictographic icons, examples, and documentation + can be found at: http://fortawesome.github.com/Font-Awesome/ + + License + ------------------------------------------------------- + • The Font Awesome font is licensed under the SIL Open Font License - http://scripts.sil.org/OFL + • Font Awesome CSS, LESS, and SASS files are licensed under the MIT License - + http://opensource.org/licenses/mit-license.html + • The Font Awesome pictograms are licensed under the CC BY 3.0 License - http://creativecommons.org/licenses/by/3.0/ + • Attribution is no longer required in Font Awesome 3.0, but much appreciated: + "Font Awesome by Dave Gandy - http://fortawesome.github.com/Font-Awesome" + + Contact + ------------------------------------------------------- + Email: dave@davegandy.com + Twitter: http://twitter.com/fortaweso_me + Work: Lead Product Designer @ http://kyruus.com + + */ [class^="icon-"],[class*=" icon-"]{padding-right:.3em}.icon-large{font-size:1.3333333333333333em;margin-top:-4px;padding-top:3px;margin-bottom:-4px;padding-bottom:3px;vertical-align:-20%}.btn [class^="icon-"],.nav [class^="icon-"],.btn [class*=" icon-"],.nav [class*=" icon-"]{vertical-align:inherit;margin-top:-4px;padding-top:3px;margin-bottom:-4px;padding-bottom:3px;line-height:.9em}a [class^="icon-"],a [class*=" icon-"]{cursor:pointer}ul.icons{text-indent:-1.5em;margin-left:3em}.icon-glass{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-music{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-search{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-envelope{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-heart{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-star{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-star-empty{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-user{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-film{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-th-large{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-th{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-th-list{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-ok{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-remove{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-zoom-in{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-zoom-out{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-off{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-signal{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-cog{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-trash{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-home{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-file{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-time{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-road{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-download-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-download{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-upload{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-inbox{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-play-circle{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-repeat{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-refresh{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-list-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-lock{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-flag{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-headphones{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-volume-off{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-volume-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-volume-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-qrcode{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-barcode{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-tag{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-tags{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-book{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-bookmark{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-print{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-camera{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-font{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-bold{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-italic{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-text-height{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-text-width{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-align-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-align-center{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-align-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-align-justify{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-list{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-indent-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-indent-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-facetime-video{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-picture{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-pencil{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-map-marker{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-adjust{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-tint{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-edit{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-share{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-check{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-move{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-step-backward{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-fast-backward{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-backward{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-play{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-pause{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-stop{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-forward{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-fast-forward{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-step-forward{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-eject{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-chevron-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-chevron-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-plus-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-minus-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-remove-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-ok-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-question-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-info-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-screenshot{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-remove-circle{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-ok-circle{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-ban-circle{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-arrow-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-arrow-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-arrow-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-arrow-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-share-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-resize-full{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-resize-small{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-plus{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-minus{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-asterisk{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-exclamation-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-gift{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-leaf{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-fire{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-eye-open{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-eye-close{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-warning-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-plane{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-calendar{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-random{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-comment{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-magnet{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-chevron-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-chevron-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-retweet{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-shopping-cart{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-folder-close{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-folder-open{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-resize-vertical{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-resize-horizontal{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-bar-chart{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-twitter-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-facebook-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-camera-retro{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-key{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-cogs{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-comments{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-thumbs-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-thumbs-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-star-half{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-heart-empty{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-signout{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-linkedin-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-pushpin{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-external-link{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-signin{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-trophy{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-github-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-upload-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-lemon{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-phone{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-check-empty{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-bookmark-empty{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-phone-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-twitter{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-facebook{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-github{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-unlock{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-credit-card{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-rss{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-hdd{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-bullhorn{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-bell{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-certificate{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-hand-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-hand-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-hand-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-hand-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-circle-arrow-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-circle-arrow-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-circle-arrow-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-circle-arrow-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-globe{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-wrench{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-tasks{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-filter{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-briefcase{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-fullscreen{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-group{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-link{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-cloud{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-beaker{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-cut{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-copy{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-paper-clip{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-save{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-sign-blank{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-reorder{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-list-ul{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-list-ol{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-strikethrough{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-underline{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-table{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-magic{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-truck{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-pinterest{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-pinterest-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-google-plus-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-google-plus{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-money{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-caret-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-caret-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-caret-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-caret-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-columns{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-sort{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-sort-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-sort-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-envelope-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-linkedin{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-undo{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-legal{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-dashboard{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-comment-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-comments-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-bolt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-sitemap{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-umbrella{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-paste{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-lightbulb{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-exchange{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-cloud-download{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-cloud-upload{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-user-md{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-stethoscope{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-suitcase{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-bell-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-coffee{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-food{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-file-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-building{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-hospital{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-ambulance{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-medkit{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-fighter-jet{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-beer{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-h-sign{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-plus-sign-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-double-angle-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-double-angle-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-double-angle-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-double-angle-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-angle-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-angle-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-angle-up{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-angle-down{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-desktop{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-laptop{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-tablet{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-mobile-phone{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-circle-blank{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-quote-left{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-quote-right{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-spinner{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-circle{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-reply{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-github-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-folder-close-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')}.icon-folder-open-alt{*zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '')} \ No newline at end of file diff --git a/doc/design/css/font-awesome.css b/doc/design/css/font-awesome.css index 1c8d725df..549728b8e 100644 --- a/doc/design/css/font-awesome.css +++ b/doc/design/css/font-awesome.css @@ -1,469 +1,469 @@ -/* Font Awesome 3.0 - the iconic font designed for use with Twitter Bootstrap - ------------------------------------------------------- - The full suite of pictographic icons, examples, and documentation - can be found at: http://fortawesome.github.com/Font-Awesome/ - - License - ------------------------------------------------------- - • The Font Awesome font is licensed under the SIL Open Font License - http://scripts.sil.org/OFL - • Font Awesome CSS, LESS, and SASS files are licensed under the MIT License - - http://opensource.org/licenses/mit-license.html - • The Font Awesome pictograms are licensed under the CC BY 3.0 License - http://creativecommons.org/licenses/by/3.0/ - • Attribution is no longer required in Font Awesome 3.0, but much appreciated: - "Font Awesome by Dave Gandy - http://fortawesome.github.com/Font-Awesome" - - Contact - ------------------------------------------------------- - Email: dave@davegandy.com - Twitter: http://twitter.com/fortaweso_me - Work: Lead Product Designer @ http://kyruus.com - - */ -@font-face { - font-family: 'FontAwesome'; - src: url('../font/fontawesome-webfont.eot'); - src: url('../font/fontawesome-webfont.eot?#iefix') format('embedded-opentype'), - url('../font/fontawesome-webfont.woff') format('woff'), - url('../font/fontawesome-webfont.ttf') format('truetype'); - font-weight: normal; - font-style: normal; -} -/* Font Awesome styles - ------------------------------------------------------- */ -/* includes sprites.less reset */ -[class^="icon-"], -[class*=" icon-"] { - font-family: FontAwesome; - font-weight: normal; - font-style: normal; - text-decoration: inherit; - display: inline; - width: auto; - height: auto; - line-height: normal; - vertical-align: baseline; - background-image: none !important; - background-position: 0% 0%; - background-repeat: repeat; -} -[class^="icon-"]:before, -[class*=" icon-"]:before { - text-decoration: inherit; - display: inline-block; - speak: none; -} -/* makes sure icons active on rollover in links */ -a [class^="icon-"], -a [class*=" icon-"] { - display: inline-block; -} -/* makes the font 33% larger relative to the icon container */ -.icon-large:before { - vertical-align: -10%; - font-size: 1.3333333333333333em; -} -.btn [class^="icon-"], -.nav [class^="icon-"], -.btn [class*=" icon-"], -.nav [class*=" icon-"] { - display: inline; - /* keeps button heights with and without icons the same */ - - line-height: .6em; -} -.btn [class^="icon-"].icon-spin, -.nav [class^="icon-"].icon-spin, -.btn [class*=" icon-"].icon-spin, -.nav [class*=" icon-"].icon-spin { - display: inline-block; -} -li [class^="icon-"], -li [class*=" icon-"] { - display: inline-block; - width: 1.25em; - text-align: center; -} -li [class^="icon-"].icon-large, -li [class*=" icon-"].icon-large { - /* increased font size for icon-large */ - - width: 1.5625em; -} -ul.icons { - list-style-type: none; - text-indent: -0.75em; -} -ul.icons li [class^="icon-"], -ul.icons li [class*=" icon-"] { - width: .75em; -} -.icon-muted { - color: #eeeeee; -} -.icon-border { - border: solid 1px #eeeeee; - padding: .2em .25em .15em; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.icon-2x { - font-size: 2em; -} -.icon-2x.icon-border { - border-width: 2px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.icon-3x { - font-size: 3em; -} -.icon-3x.icon-border { - border-width: 3px; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; -} -.icon-4x { - font-size: 4em; -} -.icon-4x.icon-border { - border-width: 4px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} -.pull-right { - float: right; -} -.pull-left { - float: left; -} -[class^="icon-"].pull-left, -[class*=" icon-"].pull-left { - margin-right: .35em; -} -[class^="icon-"].pull-right, -[class*=" icon-"].pull-right { - margin-left: .35em; -} -.btn [class^="icon-"].pull-left.icon-2x, -.btn [class*=" icon-"].pull-left.icon-2x, -.btn [class^="icon-"].pull-right.icon-2x, -.btn [class*=" icon-"].pull-right.icon-2x { - margin-top: .35em; -} -.btn [class^="icon-"].icon-spin.icon-large, -.btn [class*=" icon-"].icon-spin.icon-large { - height: .75em; -} -.btn.btn-small [class^="icon-"].pull-left.icon-2x, -.btn.btn-small [class*=" icon-"].pull-left.icon-2x, -.btn.btn-small [class^="icon-"].pull-right.icon-2x, -.btn.btn-small [class*=" icon-"].pull-right.icon-2x { - margin-top: .45em; -} -.btn.btn-large [class^="icon-"].pull-left.icon-2x, -.btn.btn-large [class*=" icon-"].pull-left.icon-2x, -.btn.btn-large [class^="icon-"].pull-right.icon-2x, -.btn.btn-large [class*=" icon-"].pull-right.icon-2x { - margin-top: .2em; -} -.icon-spin { - display: inline-block; - -moz-animation: spin 2s infinite linear; - -o-animation: spin 2s infinite linear; - -webkit-animation: spin 2s infinite linear; - animation: spin 2s infinite linear; -} -@-moz-keyframes spin { - 0% { -moz-transform: rotate(0deg); } - 100% { -moz-transform: rotate(359deg); } -} -@-webkit-keyframes spin { - 0% { -webkit-transform: rotate(0deg); } - 100% { -webkit-transform: rotate(359deg); } -} -@-o-keyframes spin { - 0% { -o-transform: rotate(0deg); } - 100% { -o-transform: rotate(359deg); } -} -@-ms-keyframes spin { - 0% { -ms-transform: rotate(0deg); } - 100% { -ms-transform: rotate(359deg); } -} -@keyframes spin { - 0% { transform: rotate(0deg); } - 100% { transform: rotate(359deg); } -} -/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen - readers do not read off random characters that represent icons */ -.icon-glass:before { content: "\f000"; } -.icon-music:before { content: "\f001"; } -.icon-search:before { content: "\f002"; } -.icon-envelope:before { content: "\f003"; } -.icon-heart:before { content: "\f004"; } -.icon-star:before { content: "\f005"; } -.icon-star-empty:before { content: "\f006"; } -.icon-user:before { content: "\f007"; } -.icon-film:before { content: "\f008"; } -.icon-th-large:before { content: "\f009"; } -.icon-th:before { content: "\f00a"; } -.icon-th-list:before { content: "\f00b"; } -.icon-ok:before { content: "\f00c"; } -.icon-remove:before { content: "\f00d"; } -.icon-zoom-in:before { content: "\f00e"; } - -.icon-zoom-out:before { content: "\f010"; } -.icon-off:before { content: "\f011"; } -.icon-signal:before { content: "\f012"; } -.icon-cog:before { content: "\f013"; } -.icon-trash:before { content: "\f014"; } -.icon-home:before { content: "\f015"; } -.icon-file:before { content: "\f016"; } -.icon-time:before { content: "\f017"; } -.icon-road:before { content: "\f018"; } -.icon-download-alt:before { content: "\f019"; } -.icon-download:before { content: "\f01a"; } -.icon-upload:before { content: "\f01b"; } -.icon-inbox:before { content: "\f01c"; } -.icon-play-circle:before { content: "\f01d"; } -.icon-repeat:before { content: "\f01e"; } - -/* \f020 doesn't work in Safari. all shifted one down */ -.icon-refresh:before { content: "\f021"; } -.icon-list-alt:before { content: "\f022"; } -.icon-lock:before { content: "\f023"; } -.icon-flag:before { content: "\f024"; } -.icon-headphones:before { content: "\f025"; } -.icon-volume-off:before { content: "\f026"; } -.icon-volume-down:before { content: "\f027"; } -.icon-volume-up:before { content: "\f028"; } -.icon-qrcode:before { content: "\f029"; } -.icon-barcode:before { content: "\f02a"; } -.icon-tag:before { content: "\f02b"; } -.icon-tags:before { content: "\f02c"; } -.icon-book:before { content: "\f02d"; } -.icon-bookmark:before { content: "\f02e"; } -.icon-print:before { content: "\f02f"; } - -.icon-camera:before { content: "\f030"; } -.icon-font:before { content: "\f031"; } -.icon-bold:before { content: "\f032"; } -.icon-italic:before { content: "\f033"; } -.icon-text-height:before { content: "\f034"; } -.icon-text-width:before { content: "\f035"; } -.icon-align-left:before { content: "\f036"; } -.icon-align-center:before { content: "\f037"; } -.icon-align-right:before { content: "\f038"; } -.icon-align-justify:before { content: "\f039"; } -.icon-list:before { content: "\f03a"; } -.icon-indent-left:before { content: "\f03b"; } -.icon-indent-right:before { content: "\f03c"; } -.icon-facetime-video:before { content: "\f03d"; } -.icon-picture:before { content: "\f03e"; } - -.icon-pencil:before { content: "\f040"; } -.icon-map-marker:before { content: "\f041"; } -.icon-adjust:before { content: "\f042"; } -.icon-tint:before { content: "\f043"; } -.icon-edit:before { content: "\f044"; } -.icon-share:before { content: "\f045"; } -.icon-check:before { content: "\f046"; } -.icon-move:before { content: "\f047"; } -.icon-step-backward:before { content: "\f048"; } -.icon-fast-backward:before { content: "\f049"; } -.icon-backward:before { content: "\f04a"; } -.icon-play:before { content: "\f04b"; } -.icon-pause:before { content: "\f04c"; } -.icon-stop:before { content: "\f04d"; } -.icon-forward:before { content: "\f04e"; } - -.icon-fast-forward:before { content: "\f050"; } -.icon-step-forward:before { content: "\f051"; } -.icon-eject:before { content: "\f052"; } -.icon-chevron-left:before { content: "\f053"; } -.icon-chevron-right:before { content: "\f054"; } -.icon-plus-sign:before { content: "\f055"; } -.icon-minus-sign:before { content: "\f056"; } -.icon-remove-sign:before { content: "\f057"; } -.icon-ok-sign:before { content: "\f058"; } -.icon-question-sign:before { content: "\f059"; } -.icon-info-sign:before { content: "\f05a"; } -.icon-screenshot:before { content: "\f05b"; } -.icon-remove-circle:before { content: "\f05c"; } -.icon-ok-circle:before { content: "\f05d"; } -.icon-ban-circle:before { content: "\f05e"; } - -.icon-arrow-left:before { content: "\f060"; } -.icon-arrow-right:before { content: "\f061"; } -.icon-arrow-up:before { content: "\f062"; } -.icon-arrow-down:before { content: "\f063"; } -.icon-share-alt:before { content: "\f064"; } -.icon-resize-full:before { content: "\f065"; } -.icon-resize-small:before { content: "\f066"; } -.icon-plus:before { content: "\f067"; } -.icon-minus:before { content: "\f068"; } -.icon-asterisk:before { content: "\f069"; } -.icon-exclamation-sign:before { content: "\f06a"; } -.icon-gift:before { content: "\f06b"; } -.icon-leaf:before { content: "\f06c"; } -.icon-fire:before { content: "\f06d"; } -.icon-eye-open:before { content: "\f06e"; } - -.icon-eye-close:before { content: "\f070"; } -.icon-warning-sign:before { content: "\f071"; } -.icon-plane:before { content: "\f072"; } -.icon-calendar:before { content: "\f073"; } -.icon-random:before { content: "\f074"; } -.icon-comment:before { content: "\f075"; } -.icon-magnet:before { content: "\f076"; } -.icon-chevron-up:before { content: "\f077"; } -.icon-chevron-down:before { content: "\f078"; } -.icon-retweet:before { content: "\f079"; } -.icon-shopping-cart:before { content: "\f07a"; } -.icon-folder-close:before { content: "\f07b"; } -.icon-folder-open:before { content: "\f07c"; } -.icon-resize-vertical:before { content: "\f07d"; } -.icon-resize-horizontal:before { content: "\f07e"; } - -.icon-bar-chart:before { content: "\f080"; } -.icon-twitter-sign:before { content: "\f081"; } -.icon-facebook-sign:before { content: "\f082"; } -.icon-camera-retro:before { content: "\f083"; } -.icon-key:before { content: "\f084"; } -.icon-cogs:before { content: "\f085"; } -.icon-comments:before { content: "\f086"; } -.icon-thumbs-up:before { content: "\f087"; } -.icon-thumbs-down:before { content: "\f088"; } -.icon-star-half:before { content: "\f089"; } -.icon-heart-empty:before { content: "\f08a"; } -.icon-signout:before { content: "\f08b"; } -.icon-linkedin-sign:before { content: "\f08c"; } -.icon-pushpin:before { content: "\f08d"; } -.icon-external-link:before { content: "\f08e"; } - -.icon-signin:before { content: "\f090"; } -.icon-trophy:before { content: "\f091"; } -.icon-github-sign:before { content: "\f092"; } -.icon-upload-alt:before { content: "\f093"; } -.icon-lemon:before { content: "\f094"; } -.icon-phone:before { content: "\f095"; } -.icon-check-empty:before { content: "\f096"; } -.icon-bookmark-empty:before { content: "\f097"; } -.icon-phone-sign:before { content: "\f098"; } -.icon-twitter:before { content: "\f099"; } -.icon-facebook:before { content: "\f09a"; } -.icon-github:before { content: "\f09b"; } -.icon-unlock:before { content: "\f09c"; } -.icon-credit-card:before { content: "\f09d"; } -.icon-rss:before { content: "\f09e"; } - -.icon-hdd:before { content: "\f0a0"; } -.icon-bullhorn:before { content: "\f0a1"; } -.icon-bell:before { content: "\f0a2"; } -.icon-certificate:before { content: "\f0a3"; } -.icon-hand-right:before { content: "\f0a4"; } -.icon-hand-left:before { content: "\f0a5"; } -.icon-hand-up:before { content: "\f0a6"; } -.icon-hand-down:before { content: "\f0a7"; } -.icon-circle-arrow-left:before { content: "\f0a8"; } -.icon-circle-arrow-right:before { content: "\f0a9"; } -.icon-circle-arrow-up:before { content: "\f0aa"; } -.icon-circle-arrow-down:before { content: "\f0ab"; } -.icon-globe:before { content: "\f0ac"; } -.icon-wrench:before { content: "\f0ad"; } -.icon-tasks:before { content: "\f0ae"; } - -.icon-filter:before { content: "\f0b0"; } -.icon-briefcase:before { content: "\f0b1"; } -.icon-fullscreen:before { content: "\f0b2"; } - -.icon-group:before { content: "\f0c0"; } -.icon-link:before { content: "\f0c1"; } -.icon-cloud:before { content: "\f0c2"; } -.icon-beaker:before { content: "\f0c3"; } -.icon-cut:before { content: "\f0c4"; } -.icon-copy:before { content: "\f0c5"; } -.icon-paper-clip:before { content: "\f0c6"; } -.icon-save:before { content: "\f0c7"; } -.icon-sign-blank:before { content: "\f0c8"; } -.icon-reorder:before { content: "\f0c9"; } -.icon-list-ul:before { content: "\f0ca"; } -.icon-list-ol:before { content: "\f0cb"; } -.icon-strikethrough:before { content: "\f0cc"; } -.icon-underline:before { content: "\f0cd"; } -.icon-table:before { content: "\f0ce"; } - -.icon-magic:before { content: "\f0d0"; } -.icon-truck:before { content: "\f0d1"; } -.icon-pinterest:before { content: "\f0d2"; } -.icon-pinterest-sign:before { content: "\f0d3"; } -.icon-google-plus-sign:before { content: "\f0d4"; } -.icon-google-plus:before { content: "\f0d5"; } -.icon-money:before { content: "\f0d6"; } -.icon-caret-down:before { content: "\f0d7"; } -.icon-caret-up:before { content: "\f0d8"; } -.icon-caret-left:before { content: "\f0d9"; } -.icon-caret-right:before { content: "\f0da"; } -.icon-columns:before { content: "\f0db"; } -.icon-sort:before { content: "\f0dc"; } -.icon-sort-down:before { content: "\f0dd"; } -.icon-sort-up:before { content: "\f0de"; } - -.icon-envelope-alt:before { content: "\f0e0"; } -.icon-linkedin:before { content: "\f0e1"; } -.icon-undo:before { content: "\f0e2"; } -.icon-legal:before { content: "\f0e3"; } -.icon-dashboard:before { content: "\f0e4"; } -.icon-comment-alt:before { content: "\f0e5"; } -.icon-comments-alt:before { content: "\f0e6"; } -.icon-bolt:before { content: "\f0e7"; } -.icon-sitemap:before { content: "\f0e8"; } -.icon-umbrella:before { content: "\f0e9"; } -.icon-paste:before { content: "\f0ea"; } -.icon-lightbulb:before { content: "\f0eb"; } -.icon-exchange:before { content: "\f0ec"; } -.icon-cloud-download:before { content: "\f0ed"; } -.icon-cloud-upload:before { content: "\f0ee"; } - -.icon-user-md:before { content: "\f0f0"; } -.icon-stethoscope:before { content: "\f0f1"; } -.icon-suitcase:before { content: "\f0f2"; } -.icon-bell-alt:before { content: "\f0f3"; } -.icon-coffee:before { content: "\f0f4"; } -.icon-food:before { content: "\f0f5"; } -.icon-file-alt:before { content: "\f0f6"; } -.icon-building:before { content: "\f0f7"; } -.icon-hospital:before { content: "\f0f8"; } -.icon-ambulance:before { content: "\f0f9"; } -.icon-medkit:before { content: "\f0fa"; } -.icon-fighter-jet:before { content: "\f0fb"; } -.icon-beer:before { content: "\f0fc"; } -.icon-h-sign:before { content: "\f0fd"; } -.icon-plus-sign-alt:before { content: "\f0fe"; } - -.icon-double-angle-left:before { content: "\f100"; } -.icon-double-angle-right:before { content: "\f101"; } -.icon-double-angle-up:before { content: "\f102"; } -.icon-double-angle-down:before { content: "\f103"; } -.icon-angle-left:before { content: "\f104"; } -.icon-angle-right:before { content: "\f105"; } -.icon-angle-up:before { content: "\f106"; } -.icon-angle-down:before { content: "\f107"; } -.icon-desktop:before { content: "\f108"; } -.icon-laptop:before { content: "\f109"; } -.icon-tablet:before { content: "\f10a"; } -.icon-mobile-phone:before { content: "\f10b"; } -.icon-circle-blank:before { content: "\f10c"; } -.icon-quote-left:before { content: "\f10d"; } -.icon-quote-right:before { content: "\f10e"; } - -.icon-spinner:before { content: "\f110"; } -.icon-circle:before { content: "\f111"; } -.icon-reply:before { content: "\f112"; } -.icon-github-alt:before { content: "\f113"; } -.icon-folder-close-alt:before { content: "\f114"; } -.icon-folder-open-alt:before { content: "\f115"; } +/* Font Awesome 3.0 + the iconic font designed for use with Twitter Bootstrap + ------------------------------------------------------- + The full suite of pictographic icons, examples, and documentation + can be found at: http://fortawesome.github.com/Font-Awesome/ + + License + ------------------------------------------------------- + • The Font Awesome font is licensed under the SIL Open Font License - http://scripts.sil.org/OFL + • Font Awesome CSS, LESS, and SASS files are licensed under the MIT License - + http://opensource.org/licenses/mit-license.html + • The Font Awesome pictograms are licensed under the CC BY 3.0 License - http://creativecommons.org/licenses/by/3.0/ + • Attribution is no longer required in Font Awesome 3.0, but much appreciated: + "Font Awesome by Dave Gandy - http://fortawesome.github.com/Font-Awesome" + + Contact + ------------------------------------------------------- + Email: dave@davegandy.com + Twitter: http://twitter.com/fortaweso_me + Work: Lead Product Designer @ http://kyruus.com + + */ +@font-face { + font-family: 'FontAwesome'; + src: url('../font/fontawesome-webfont.eot'); + src: url('../font/fontawesome-webfont.eot?#iefix') format('embedded-opentype'), + url('../font/fontawesome-webfont.woff') format('woff'), + url('../font/fontawesome-webfont.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} +/* Font Awesome styles + ------------------------------------------------------- */ +/* includes sprites.less reset */ +[class^="icon-"], +[class*=" icon-"] { + font-family: FontAwesome; + font-weight: normal; + font-style: normal; + text-decoration: inherit; + display: inline; + width: auto; + height: auto; + line-height: normal; + vertical-align: baseline; + background-image: none !important; + background-position: 0% 0%; + background-repeat: repeat; +} +[class^="icon-"]:before, +[class*=" icon-"]:before { + text-decoration: inherit; + display: inline-block; + speak: none; +} +/* makes sure icons active on rollover in links */ +a [class^="icon-"], +a [class*=" icon-"] { + display: inline-block; +} +/* makes the font 33% larger relative to the icon container */ +.icon-large:before { + vertical-align: -10%; + font-size: 1.3333333333333333em; +} +.btn [class^="icon-"], +.nav [class^="icon-"], +.btn [class*=" icon-"], +.nav [class*=" icon-"] { + display: inline; + /* keeps button heights with and without icons the same */ + + line-height: .6em; +} +.btn [class^="icon-"].icon-spin, +.nav [class^="icon-"].icon-spin, +.btn [class*=" icon-"].icon-spin, +.nav [class*=" icon-"].icon-spin { + display: inline-block; +} +li [class^="icon-"], +li [class*=" icon-"] { + display: inline-block; + width: 1.25em; + text-align: center; +} +li [class^="icon-"].icon-large, +li [class*=" icon-"].icon-large { + /* increased font size for icon-large */ + + width: 1.5625em; +} +ul.icons { + list-style-type: none; + text-indent: -0.75em; +} +ul.icons li [class^="icon-"], +ul.icons li [class*=" icon-"] { + width: .75em; +} +.icon-muted { + color: #eeeeee; +} +.icon-border { + border: solid 1px #eeeeee; + padding: .2em .25em .15em; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.icon-2x { + font-size: 2em; +} +.icon-2x.icon-border { + border-width: 2px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.icon-3x { + font-size: 3em; +} +.icon-3x.icon-border { + border-width: 3px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} +.icon-4x { + font-size: 4em; +} +.icon-4x.icon-border { + border-width: 4px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} +.pull-right { + float: right; +} +.pull-left { + float: left; +} +[class^="icon-"].pull-left, +[class*=" icon-"].pull-left { + margin-right: .35em; +} +[class^="icon-"].pull-right, +[class*=" icon-"].pull-right { + margin-left: .35em; +} +.btn [class^="icon-"].pull-left.icon-2x, +.btn [class*=" icon-"].pull-left.icon-2x, +.btn [class^="icon-"].pull-right.icon-2x, +.btn [class*=" icon-"].pull-right.icon-2x { + margin-top: .35em; +} +.btn [class^="icon-"].icon-spin.icon-large, +.btn [class*=" icon-"].icon-spin.icon-large { + height: .75em; +} +.btn.btn-small [class^="icon-"].pull-left.icon-2x, +.btn.btn-small [class*=" icon-"].pull-left.icon-2x, +.btn.btn-small [class^="icon-"].pull-right.icon-2x, +.btn.btn-small [class*=" icon-"].pull-right.icon-2x { + margin-top: .45em; +} +.btn.btn-large [class^="icon-"].pull-left.icon-2x, +.btn.btn-large [class*=" icon-"].pull-left.icon-2x, +.btn.btn-large [class^="icon-"].pull-right.icon-2x, +.btn.btn-large [class*=" icon-"].pull-right.icon-2x { + margin-top: .2em; +} +.icon-spin { + display: inline-block; + -moz-animation: spin 2s infinite linear; + -o-animation: spin 2s infinite linear; + -webkit-animation: spin 2s infinite linear; + animation: spin 2s infinite linear; +} +@-moz-keyframes spin { + 0% { -moz-transform: rotate(0deg); } + 100% { -moz-transform: rotate(359deg); } +} +@-webkit-keyframes spin { + 0% { -webkit-transform: rotate(0deg); } + 100% { -webkit-transform: rotate(359deg); } +} +@-o-keyframes spin { + 0% { -o-transform: rotate(0deg); } + 100% { -o-transform: rotate(359deg); } +} +@-ms-keyframes spin { + 0% { -ms-transform: rotate(0deg); } + 100% { -ms-transform: rotate(359deg); } +} +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(359deg); } +} +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ +.icon-glass:before { content: "\f000"; } +.icon-music:before { content: "\f001"; } +.icon-search:before { content: "\f002"; } +.icon-envelope:before { content: "\f003"; } +.icon-heart:before { content: "\f004"; } +.icon-star:before { content: "\f005"; } +.icon-star-empty:before { content: "\f006"; } +.icon-user:before { content: "\f007"; } +.icon-film:before { content: "\f008"; } +.icon-th-large:before { content: "\f009"; } +.icon-th:before { content: "\f00a"; } +.icon-th-list:before { content: "\f00b"; } +.icon-ok:before { content: "\f00c"; } +.icon-remove:before { content: "\f00d"; } +.icon-zoom-in:before { content: "\f00e"; } + +.icon-zoom-out:before { content: "\f010"; } +.icon-off:before { content: "\f011"; } +.icon-signal:before { content: "\f012"; } +.icon-cog:before { content: "\f013"; } +.icon-trash:before { content: "\f014"; } +.icon-home:before { content: "\f015"; } +.icon-file:before { content: "\f016"; } +.icon-time:before { content: "\f017"; } +.icon-road:before { content: "\f018"; } +.icon-download-alt:before { content: "\f019"; } +.icon-download:before { content: "\f01a"; } +.icon-upload:before { content: "\f01b"; } +.icon-inbox:before { content: "\f01c"; } +.icon-play-circle:before { content: "\f01d"; } +.icon-repeat:before { content: "\f01e"; } + +/* \f020 doesn't work in Safari. all shifted one down */ +.icon-refresh:before { content: "\f021"; } +.icon-list-alt:before { content: "\f022"; } +.icon-lock:before { content: "\f023"; } +.icon-flag:before { content: "\f024"; } +.icon-headphones:before { content: "\f025"; } +.icon-volume-off:before { content: "\f026"; } +.icon-volume-down:before { content: "\f027"; } +.icon-volume-up:before { content: "\f028"; } +.icon-qrcode:before { content: "\f029"; } +.icon-barcode:before { content: "\f02a"; } +.icon-tag:before { content: "\f02b"; } +.icon-tags:before { content: "\f02c"; } +.icon-book:before { content: "\f02d"; } +.icon-bookmark:before { content: "\f02e"; } +.icon-print:before { content: "\f02f"; } + +.icon-camera:before { content: "\f030"; } +.icon-font:before { content: "\f031"; } +.icon-bold:before { content: "\f032"; } +.icon-italic:before { content: "\f033"; } +.icon-text-height:before { content: "\f034"; } +.icon-text-width:before { content: "\f035"; } +.icon-align-left:before { content: "\f036"; } +.icon-align-center:before { content: "\f037"; } +.icon-align-right:before { content: "\f038"; } +.icon-align-justify:before { content: "\f039"; } +.icon-list:before { content: "\f03a"; } +.icon-indent-left:before { content: "\f03b"; } +.icon-indent-right:before { content: "\f03c"; } +.icon-facetime-video:before { content: "\f03d"; } +.icon-picture:before { content: "\f03e"; } + +.icon-pencil:before { content: "\f040"; } +.icon-map-marker:before { content: "\f041"; } +.icon-adjust:before { content: "\f042"; } +.icon-tint:before { content: "\f043"; } +.icon-edit:before { content: "\f044"; } +.icon-share:before { content: "\f045"; } +.icon-check:before { content: "\f046"; } +.icon-move:before { content: "\f047"; } +.icon-step-backward:before { content: "\f048"; } +.icon-fast-backward:before { content: "\f049"; } +.icon-backward:before { content: "\f04a"; } +.icon-play:before { content: "\f04b"; } +.icon-pause:before { content: "\f04c"; } +.icon-stop:before { content: "\f04d"; } +.icon-forward:before { content: "\f04e"; } + +.icon-fast-forward:before { content: "\f050"; } +.icon-step-forward:before { content: "\f051"; } +.icon-eject:before { content: "\f052"; } +.icon-chevron-left:before { content: "\f053"; } +.icon-chevron-right:before { content: "\f054"; } +.icon-plus-sign:before { content: "\f055"; } +.icon-minus-sign:before { content: "\f056"; } +.icon-remove-sign:before { content: "\f057"; } +.icon-ok-sign:before { content: "\f058"; } +.icon-question-sign:before { content: "\f059"; } +.icon-info-sign:before { content: "\f05a"; } +.icon-screenshot:before { content: "\f05b"; } +.icon-remove-circle:before { content: "\f05c"; } +.icon-ok-circle:before { content: "\f05d"; } +.icon-ban-circle:before { content: "\f05e"; } + +.icon-arrow-left:before { content: "\f060"; } +.icon-arrow-right:before { content: "\f061"; } +.icon-arrow-up:before { content: "\f062"; } +.icon-arrow-down:before { content: "\f063"; } +.icon-share-alt:before { content: "\f064"; } +.icon-resize-full:before { content: "\f065"; } +.icon-resize-small:before { content: "\f066"; } +.icon-plus:before { content: "\f067"; } +.icon-minus:before { content: "\f068"; } +.icon-asterisk:before { content: "\f069"; } +.icon-exclamation-sign:before { content: "\f06a"; } +.icon-gift:before { content: "\f06b"; } +.icon-leaf:before { content: "\f06c"; } +.icon-fire:before { content: "\f06d"; } +.icon-eye-open:before { content: "\f06e"; } + +.icon-eye-close:before { content: "\f070"; } +.icon-warning-sign:before { content: "\f071"; } +.icon-plane:before { content: "\f072"; } +.icon-calendar:before { content: "\f073"; } +.icon-random:before { content: "\f074"; } +.icon-comment:before { content: "\f075"; } +.icon-magnet:before { content: "\f076"; } +.icon-chevron-up:before { content: "\f077"; } +.icon-chevron-down:before { content: "\f078"; } +.icon-retweet:before { content: "\f079"; } +.icon-shopping-cart:before { content: "\f07a"; } +.icon-folder-close:before { content: "\f07b"; } +.icon-folder-open:before { content: "\f07c"; } +.icon-resize-vertical:before { content: "\f07d"; } +.icon-resize-horizontal:before { content: "\f07e"; } + +.icon-bar-chart:before { content: "\f080"; } +.icon-twitter-sign:before { content: "\f081"; } +.icon-facebook-sign:before { content: "\f082"; } +.icon-camera-retro:before { content: "\f083"; } +.icon-key:before { content: "\f084"; } +.icon-cogs:before { content: "\f085"; } +.icon-comments:before { content: "\f086"; } +.icon-thumbs-up:before { content: "\f087"; } +.icon-thumbs-down:before { content: "\f088"; } +.icon-star-half:before { content: "\f089"; } +.icon-heart-empty:before { content: "\f08a"; } +.icon-signout:before { content: "\f08b"; } +.icon-linkedin-sign:before { content: "\f08c"; } +.icon-pushpin:before { content: "\f08d"; } +.icon-external-link:before { content: "\f08e"; } + +.icon-signin:before { content: "\f090"; } +.icon-trophy:before { content: "\f091"; } +.icon-github-sign:before { content: "\f092"; } +.icon-upload-alt:before { content: "\f093"; } +.icon-lemon:before { content: "\f094"; } +.icon-phone:before { content: "\f095"; } +.icon-check-empty:before { content: "\f096"; } +.icon-bookmark-empty:before { content: "\f097"; } +.icon-phone-sign:before { content: "\f098"; } +.icon-twitter:before { content: "\f099"; } +.icon-facebook:before { content: "\f09a"; } +.icon-github:before { content: "\f09b"; } +.icon-unlock:before { content: "\f09c"; } +.icon-credit-card:before { content: "\f09d"; } +.icon-rss:before { content: "\f09e"; } + +.icon-hdd:before { content: "\f0a0"; } +.icon-bullhorn:before { content: "\f0a1"; } +.icon-bell:before { content: "\f0a2"; } +.icon-certificate:before { content: "\f0a3"; } +.icon-hand-right:before { content: "\f0a4"; } +.icon-hand-left:before { content: "\f0a5"; } +.icon-hand-up:before { content: "\f0a6"; } +.icon-hand-down:before { content: "\f0a7"; } +.icon-circle-arrow-left:before { content: "\f0a8"; } +.icon-circle-arrow-right:before { content: "\f0a9"; } +.icon-circle-arrow-up:before { content: "\f0aa"; } +.icon-circle-arrow-down:before { content: "\f0ab"; } +.icon-globe:before { content: "\f0ac"; } +.icon-wrench:before { content: "\f0ad"; } +.icon-tasks:before { content: "\f0ae"; } + +.icon-filter:before { content: "\f0b0"; } +.icon-briefcase:before { content: "\f0b1"; } +.icon-fullscreen:before { content: "\f0b2"; } + +.icon-group:before { content: "\f0c0"; } +.icon-link:before { content: "\f0c1"; } +.icon-cloud:before { content: "\f0c2"; } +.icon-beaker:before { content: "\f0c3"; } +.icon-cut:before { content: "\f0c4"; } +.icon-copy:before { content: "\f0c5"; } +.icon-paper-clip:before { content: "\f0c6"; } +.icon-save:before { content: "\f0c7"; } +.icon-sign-blank:before { content: "\f0c8"; } +.icon-reorder:before { content: "\f0c9"; } +.icon-list-ul:before { content: "\f0ca"; } +.icon-list-ol:before { content: "\f0cb"; } +.icon-strikethrough:before { content: "\f0cc"; } +.icon-underline:before { content: "\f0cd"; } +.icon-table:before { content: "\f0ce"; } + +.icon-magic:before { content: "\f0d0"; } +.icon-truck:before { content: "\f0d1"; } +.icon-pinterest:before { content: "\f0d2"; } +.icon-pinterest-sign:before { content: "\f0d3"; } +.icon-google-plus-sign:before { content: "\f0d4"; } +.icon-google-plus:before { content: "\f0d5"; } +.icon-money:before { content: "\f0d6"; } +.icon-caret-down:before { content: "\f0d7"; } +.icon-caret-up:before { content: "\f0d8"; } +.icon-caret-left:before { content: "\f0d9"; } +.icon-caret-right:before { content: "\f0da"; } +.icon-columns:before { content: "\f0db"; } +.icon-sort:before { content: "\f0dc"; } +.icon-sort-down:before { content: "\f0dd"; } +.icon-sort-up:before { content: "\f0de"; } + +.icon-envelope-alt:before { content: "\f0e0"; } +.icon-linkedin:before { content: "\f0e1"; } +.icon-undo:before { content: "\f0e2"; } +.icon-legal:before { content: "\f0e3"; } +.icon-dashboard:before { content: "\f0e4"; } +.icon-comment-alt:before { content: "\f0e5"; } +.icon-comments-alt:before { content: "\f0e6"; } +.icon-bolt:before { content: "\f0e7"; } +.icon-sitemap:before { content: "\f0e8"; } +.icon-umbrella:before { content: "\f0e9"; } +.icon-paste:before { content: "\f0ea"; } +.icon-lightbulb:before { content: "\f0eb"; } +.icon-exchange:before { content: "\f0ec"; } +.icon-cloud-download:before { content: "\f0ed"; } +.icon-cloud-upload:before { content: "\f0ee"; } + +.icon-user-md:before { content: "\f0f0"; } +.icon-stethoscope:before { content: "\f0f1"; } +.icon-suitcase:before { content: "\f0f2"; } +.icon-bell-alt:before { content: "\f0f3"; } +.icon-coffee:before { content: "\f0f4"; } +.icon-food:before { content: "\f0f5"; } +.icon-file-alt:before { content: "\f0f6"; } +.icon-building:before { content: "\f0f7"; } +.icon-hospital:before { content: "\f0f8"; } +.icon-ambulance:before { content: "\f0f9"; } +.icon-medkit:before { content: "\f0fa"; } +.icon-fighter-jet:before { content: "\f0fb"; } +.icon-beer:before { content: "\f0fc"; } +.icon-h-sign:before { content: "\f0fd"; } +.icon-plus-sign-alt:before { content: "\f0fe"; } + +.icon-double-angle-left:before { content: "\f100"; } +.icon-double-angle-right:before { content: "\f101"; } +.icon-double-angle-up:before { content: "\f102"; } +.icon-double-angle-down:before { content: "\f103"; } +.icon-angle-left:before { content: "\f104"; } +.icon-angle-right:before { content: "\f105"; } +.icon-angle-up:before { content: "\f106"; } +.icon-angle-down:before { content: "\f107"; } +.icon-desktop:before { content: "\f108"; } +.icon-laptop:before { content: "\f109"; } +.icon-tablet:before { content: "\f10a"; } +.icon-mobile-phone:before { content: "\f10b"; } +.icon-circle-blank:before { content: "\f10c"; } +.icon-quote-left:before { content: "\f10d"; } +.icon-quote-right:before { content: "\f10e"; } + +.icon-spinner:before { content: "\f110"; } +.icon-circle:before { content: "\f111"; } +.icon-reply:before { content: "\f112"; } +.icon-github-alt:before { content: "\f113"; } +.icon-folder-close-alt:before { content: "\f114"; } +.icon-folder-open-alt:before { content: "\f115"; } diff --git a/doc/design/css/font-awesome.min.css b/doc/design/css/font-awesome.min.css index 6e9f69b9a..cdc67dcbe 100644 --- a/doc/design/css/font-awesome.min.css +++ b/doc/design/css/font-awesome.min.css @@ -1,34 +1,34 @@ -/* Font Awesome 3.0 - the iconic font designed for use with Twitter Bootstrap - ------------------------------------------------------- - The full suite of pictographic icons, examples, and documentation - can be found at: http://fortawesome.github.com/Font-Awesome/ - - License - ------------------------------------------------------- - • The Font Awesome font is licensed under the SIL Open Font License - http://scripts.sil.org/OFL - • Font Awesome CSS, LESS, and SASS files are licensed under the MIT License - - http://opensource.org/licenses/mit-license.html - • The Font Awesome pictograms are licensed under the CC BY 3.0 License - http://creativecommons.org/licenses/by/3.0/ - • Attribution is no longer required in Font Awesome 3.0, but much appreciated: - "Font Awesome by Dave Gandy - http://fortawesome.github.com/Font-Awesome" - - Contact - ------------------------------------------------------- - Email: dave@davegandy.com - Twitter: http://twitter.com/fortaweso_me - Work: Lead Product Designer @ http://kyruus.com - - */ - -@font-face { - font-family:'FontAwesome'; - src:url('../font/fontawesome-webfont.eot'); - src:url('../font/fontawesome-webfont.eot?#iefix') format('embedded-opentype'), - url('../font/fontawesome-webfont.woff') format('woff'), - url('../font/fontawesome-webfont.ttf') format('truetype'); - font-weight:normal; - font-style:normal -} - +/* Font Awesome 3.0 + the iconic font designed for use with Twitter Bootstrap + ------------------------------------------------------- + The full suite of pictographic icons, examples, and documentation + can be found at: http://fortawesome.github.com/Font-Awesome/ + + License + ------------------------------------------------------- + • The Font Awesome font is licensed under the SIL Open Font License - http://scripts.sil.org/OFL + • Font Awesome CSS, LESS, and SASS files are licensed under the MIT License - + http://opensource.org/licenses/mit-license.html + • The Font Awesome pictograms are licensed under the CC BY 3.0 License - http://creativecommons.org/licenses/by/3.0/ + • Attribution is no longer required in Font Awesome 3.0, but much appreciated: + "Font Awesome by Dave Gandy - http://fortawesome.github.com/Font-Awesome" + + Contact + ------------------------------------------------------- + Email: dave@davegandy.com + Twitter: http://twitter.com/fortaweso_me + Work: Lead Product Designer @ http://kyruus.com + + */ + +@font-face { + font-family:'FontAwesome'; + src:url('../font/fontawesome-webfont.eot'); + src:url('../font/fontawesome-webfont.eot?#iefix') format('embedded-opentype'), + url('../font/fontawesome-webfont.woff') format('woff'), + url('../font/fontawesome-webfont.ttf') format('truetype'); + font-weight:normal; + font-style:normal +} + [class^="icon-"],[class*=" icon-"]{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;display:inline;width:auto;height:auto;line-height:normal;vertical-align:baseline;background-image:none!important;background-position:0 0;background-repeat:repeat}[class^="icon-"]:before,[class*=" icon-"]:before{text-decoration:inherit;display:inline-block;speak:none}a [class^="icon-"],a [class*=" icon-"]{display:inline-block}.icon-large:before{vertical-align:-10%;font-size:1.3333333333333333em}.btn [class^="icon-"],.nav [class^="icon-"],.btn [class*=" icon-"],.nav [class*=" icon-"]{display:inline;line-height:.6em}.btn [class^="icon-"].icon-spin,.nav [class^="icon-"].icon-spin,.btn [class*=" icon-"].icon-spin,.nav [class*=" icon-"].icon-spin{display:inline-block}li [class^="icon-"],li [class*=" icon-"]{display:inline-block;width:1.25em;text-align:center}li [class^="icon-"].icon-large,li [class*=" icon-"].icon-large{width:1.5625em}ul.icons{list-style-type:none;text-indent:-0.75em}ul.icons li [class^="icon-"],ul.icons li [class*=" icon-"]{width:.75em}.icon-muted{color:#eee}.icon-border{border:solid 1px #eee;padding:.2em .25em .15em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.icon-2x{font-size:2em}.icon-2x.icon-border{border-width:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.icon-3x{font-size:3em}.icon-3x.icon-border{border-width:3px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.icon-4x{font-size:4em}.icon-4x.icon-border{border-width:4px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.pull-right{float:right}.pull-left{float:left}[class^="icon-"].pull-left,[class*=" icon-"].pull-left{margin-right:.35em}[class^="icon-"].pull-right,[class*=" icon-"].pull-right{margin-left:.35em}.btn [class^="icon-"].pull-left.icon-2x,.btn [class*=" icon-"].pull-left.icon-2x,.btn [class^="icon-"].pull-right.icon-2x,.btn [class*=" icon-"].pull-right.icon-2x{margin-top:.35em}.btn [class^="icon-"].icon-spin.icon-large,.btn [class*=" icon-"].icon-spin.icon-large{height:.75em}.btn.btn-small [class^="icon-"].pull-left.icon-2x,.btn.btn-small [class*=" icon-"].pull-left.icon-2x,.btn.btn-small [class^="icon-"].pull-right.icon-2x,.btn.btn-small [class*=" icon-"].pull-right.icon-2x{margin-top:.45em}.btn.btn-large [class^="icon-"].pull-left.icon-2x,.btn.btn-large [class*=" icon-"].pull-left.icon-2x,.btn.btn-large [class^="icon-"].pull-right.icon-2x,.btn.btn-large [class*=" icon-"].pull-right.icon-2x{margin-top:.2em}.icon-spin{display:inline-block;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.icon-glass:before{content:"\f000"}.icon-music:before{content:"\f001"}.icon-search:before{content:"\f002"}.icon-envelope:before{content:"\f003"}.icon-heart:before{content:"\f004"}.icon-star:before{content:"\f005"}.icon-star-empty:before{content:"\f006"}.icon-user:before{content:"\f007"}.icon-film:before{content:"\f008"}.icon-th-large:before{content:"\f009"}.icon-th:before{content:"\f00a"}.icon-th-list:before{content:"\f00b"}.icon-ok:before{content:"\f00c"}.icon-remove:before{content:"\f00d"}.icon-zoom-in:before{content:"\f00e"}.icon-zoom-out:before{content:"\f010"}.icon-off:before{content:"\f011"}.icon-signal:before{content:"\f012"}.icon-cog:before{content:"\f013"}.icon-trash:before{content:"\f014"}.icon-home:before{content:"\f015"}.icon-file:before{content:"\f016"}.icon-time:before{content:"\f017"}.icon-road:before{content:"\f018"}.icon-download-alt:before{content:"\f019"}.icon-download:before{content:"\f01a"}.icon-upload:before{content:"\f01b"}.icon-inbox:before{content:"\f01c"}.icon-play-circle:before{content:"\f01d"}.icon-repeat:before{content:"\f01e"}.icon-refresh:before{content:"\f021"}.icon-list-alt:before{content:"\f022"}.icon-lock:before{content:"\f023"}.icon-flag:before{content:"\f024"}.icon-headphones:before{content:"\f025"}.icon-volume-off:before{content:"\f026"}.icon-volume-down:before{content:"\f027"}.icon-volume-up:before{content:"\f028"}.icon-qrcode:before{content:"\f029"}.icon-barcode:before{content:"\f02a"}.icon-tag:before{content:"\f02b"}.icon-tags:before{content:"\f02c"}.icon-book:before{content:"\f02d"}.icon-bookmark:before{content:"\f02e"}.icon-print:before{content:"\f02f"}.icon-camera:before{content:"\f030"}.icon-font:before{content:"\f031"}.icon-bold:before{content:"\f032"}.icon-italic:before{content:"\f033"}.icon-text-height:before{content:"\f034"}.icon-text-width:before{content:"\f035"}.icon-align-left:before{content:"\f036"}.icon-align-center:before{content:"\f037"}.icon-align-right:before{content:"\f038"}.icon-align-justify:before{content:"\f039"}.icon-list:before{content:"\f03a"}.icon-indent-left:before{content:"\f03b"}.icon-indent-right:before{content:"\f03c"}.icon-facetime-video:before{content:"\f03d"}.icon-picture:before{content:"\f03e"}.icon-pencil:before{content:"\f040"}.icon-map-marker:before{content:"\f041"}.icon-adjust:before{content:"\f042"}.icon-tint:before{content:"\f043"}.icon-edit:before{content:"\f044"}.icon-share:before{content:"\f045"}.icon-check:before{content:"\f046"}.icon-move:before{content:"\f047"}.icon-step-backward:before{content:"\f048"}.icon-fast-backward:before{content:"\f049"}.icon-backward:before{content:"\f04a"}.icon-play:before{content:"\f04b"}.icon-pause:before{content:"\f04c"}.icon-stop:before{content:"\f04d"}.icon-forward:before{content:"\f04e"}.icon-fast-forward:before{content:"\f050"}.icon-step-forward:before{content:"\f051"}.icon-eject:before{content:"\f052"}.icon-chevron-left:before{content:"\f053"}.icon-chevron-right:before{content:"\f054"}.icon-plus-sign:before{content:"\f055"}.icon-minus-sign:before{content:"\f056"}.icon-remove-sign:before{content:"\f057"}.icon-ok-sign:before{content:"\f058"}.icon-question-sign:before{content:"\f059"}.icon-info-sign:before{content:"\f05a"}.icon-screenshot:before{content:"\f05b"}.icon-remove-circle:before{content:"\f05c"}.icon-ok-circle:before{content:"\f05d"}.icon-ban-circle:before{content:"\f05e"}.icon-arrow-left:before{content:"\f060"}.icon-arrow-right:before{content:"\f061"}.icon-arrow-up:before{content:"\f062"}.icon-arrow-down:before{content:"\f063"}.icon-share-alt:before{content:"\f064"}.icon-resize-full:before{content:"\f065"}.icon-resize-small:before{content:"\f066"}.icon-plus:before{content:"\f067"}.icon-minus:before{content:"\f068"}.icon-asterisk:before{content:"\f069"}.icon-exclamation-sign:before{content:"\f06a"}.icon-gift:before{content:"\f06b"}.icon-leaf:before{content:"\f06c"}.icon-fire:before{content:"\f06d"}.icon-eye-open:before{content:"\f06e"}.icon-eye-close:before{content:"\f070"}.icon-warning-sign:before{content:"\f071"}.icon-plane:before{content:"\f072"}.icon-calendar:before{content:"\f073"}.icon-random:before{content:"\f074"}.icon-comment:before{content:"\f075"}.icon-magnet:before{content:"\f076"}.icon-chevron-up:before{content:"\f077"}.icon-chevron-down:before{content:"\f078"}.icon-retweet:before{content:"\f079"}.icon-shopping-cart:before{content:"\f07a"}.icon-folder-close:before{content:"\f07b"}.icon-folder-open:before{content:"\f07c"}.icon-resize-vertical:before{content:"\f07d"}.icon-resize-horizontal:before{content:"\f07e"}.icon-bar-chart:before{content:"\f080"}.icon-twitter-sign:before{content:"\f081"}.icon-facebook-sign:before{content:"\f082"}.icon-camera-retro:before{content:"\f083"}.icon-key:before{content:"\f084"}.icon-cogs:before{content:"\f085"}.icon-comments:before{content:"\f086"}.icon-thumbs-up:before{content:"\f087"}.icon-thumbs-down:before{content:"\f088"}.icon-star-half:before{content:"\f089"}.icon-heart-empty:before{content:"\f08a"}.icon-signout:before{content:"\f08b"}.icon-linkedin-sign:before{content:"\f08c"}.icon-pushpin:before{content:"\f08d"}.icon-external-link:before{content:"\f08e"}.icon-signin:before{content:"\f090"}.icon-trophy:before{content:"\f091"}.icon-github-sign:before{content:"\f092"}.icon-upload-alt:before{content:"\f093"}.icon-lemon:before{content:"\f094"}.icon-phone:before{content:"\f095"}.icon-check-empty:before{content:"\f096"}.icon-bookmark-empty:before{content:"\f097"}.icon-phone-sign:before{content:"\f098"}.icon-twitter:before{content:"\f099"}.icon-facebook:before{content:"\f09a"}.icon-github:before{content:"\f09b"}.icon-unlock:before{content:"\f09c"}.icon-credit-card:before{content:"\f09d"}.icon-rss:before{content:"\f09e"}.icon-hdd:before{content:"\f0a0"}.icon-bullhorn:before{content:"\f0a1"}.icon-bell:before{content:"\f0a2"}.icon-certificate:before{content:"\f0a3"}.icon-hand-right:before{content:"\f0a4"}.icon-hand-left:before{content:"\f0a5"}.icon-hand-up:before{content:"\f0a6"}.icon-hand-down:before{content:"\f0a7"}.icon-circle-arrow-left:before{content:"\f0a8"}.icon-circle-arrow-right:before{content:"\f0a9"}.icon-circle-arrow-up:before{content:"\f0aa"}.icon-circle-arrow-down:before{content:"\f0ab"}.icon-globe:before{content:"\f0ac"}.icon-wrench:before{content:"\f0ad"}.icon-tasks:before{content:"\f0ae"}.icon-filter:before{content:"\f0b0"}.icon-briefcase:before{content:"\f0b1"}.icon-fullscreen:before{content:"\f0b2"}.icon-group:before{content:"\f0c0"}.icon-link:before{content:"\f0c1"}.icon-cloud:before{content:"\f0c2"}.icon-beaker:before{content:"\f0c3"}.icon-cut:before{content:"\f0c4"}.icon-copy:before{content:"\f0c5"}.icon-paper-clip:before{content:"\f0c6"}.icon-save:before{content:"\f0c7"}.icon-sign-blank:before{content:"\f0c8"}.icon-reorder:before{content:"\f0c9"}.icon-list-ul:before{content:"\f0ca"}.icon-list-ol:before{content:"\f0cb"}.icon-strikethrough:before{content:"\f0cc"}.icon-underline:before{content:"\f0cd"}.icon-table:before{content:"\f0ce"}.icon-magic:before{content:"\f0d0"}.icon-truck:before{content:"\f0d1"}.icon-pinterest:before{content:"\f0d2"}.icon-pinterest-sign:before{content:"\f0d3"}.icon-google-plus-sign:before{content:"\f0d4"}.icon-google-plus:before{content:"\f0d5"}.icon-money:before{content:"\f0d6"}.icon-caret-down:before{content:"\f0d7"}.icon-caret-up:before{content:"\f0d8"}.icon-caret-left:before{content:"\f0d9"}.icon-caret-right:before{content:"\f0da"}.icon-columns:before{content:"\f0db"}.icon-sort:before{content:"\f0dc"}.icon-sort-down:before{content:"\f0dd"}.icon-sort-up:before{content:"\f0de"}.icon-envelope-alt:before{content:"\f0e0"}.icon-linkedin:before{content:"\f0e1"}.icon-undo:before{content:"\f0e2"}.icon-legal:before{content:"\f0e3"}.icon-dashboard:before{content:"\f0e4"}.icon-comment-alt:before{content:"\f0e5"}.icon-comments-alt:before{content:"\f0e6"}.icon-bolt:before{content:"\f0e7"}.icon-sitemap:before{content:"\f0e8"}.icon-umbrella:before{content:"\f0e9"}.icon-paste:before{content:"\f0ea"}.icon-lightbulb:before{content:"\f0eb"}.icon-exchange:before{content:"\f0ec"}.icon-cloud-download:before{content:"\f0ed"}.icon-cloud-upload:before{content:"\f0ee"}.icon-user-md:before{content:"\f0f0"}.icon-stethoscope:before{content:"\f0f1"}.icon-suitcase:before{content:"\f0f2"}.icon-bell-alt:before{content:"\f0f3"}.icon-coffee:before{content:"\f0f4"}.icon-food:before{content:"\f0f5"}.icon-file-alt:before{content:"\f0f6"}.icon-building:before{content:"\f0f7"}.icon-hospital:before{content:"\f0f8"}.icon-ambulance:before{content:"\f0f9"}.icon-medkit:before{content:"\f0fa"}.icon-fighter-jet:before{content:"\f0fb"}.icon-beer:before{content:"\f0fc"}.icon-h-sign:before{content:"\f0fd"}.icon-plus-sign-alt:before{content:"\f0fe"}.icon-double-angle-left:before{content:"\f100"}.icon-double-angle-right:before{content:"\f101"}.icon-double-angle-up:before{content:"\f102"}.icon-double-angle-down:before{content:"\f103"}.icon-angle-left:before{content:"\f104"}.icon-angle-right:before{content:"\f105"}.icon-angle-up:before{content:"\f106"}.icon-angle-down:before{content:"\f107"}.icon-desktop:before{content:"\f108"}.icon-laptop:before{content:"\f109"}.icon-tablet:before{content:"\f10a"}.icon-mobile-phone:before{content:"\f10b"}.icon-circle-blank:before{content:"\f10c"}.icon-quote-left:before{content:"\f10d"}.icon-quote-right:before{content:"\f10e"}.icon-spinner:before{content:"\f110"}.icon-circle:before{content:"\f111"}.icon-reply:before{content:"\f112"}.icon-github-alt:before{content:"\f113"}.icon-folder-close-alt:before{content:"\f114"}.icon-folder-open-alt:before{content:"\f115"} \ No newline at end of file diff --git a/doc/design/css/theme.css b/doc/design/css/theme.css index 603566c4d..a28e74ed6 100644 --- a/doc/design/css/theme.css +++ b/doc/design/css/theme.css @@ -1,152 +1,152 @@ -body{color:#666;font-family:'Open Sans',Arial,sans-serif}body a{color:#2db2ea}h1,h2,h3,h4,h5,h6{color:#2f353e;font-weight:300}h1{font-weight:bold}ul{margin-left:0}ul li{list-style:none}.centered{text-align:center}.decorative-shadow{-webkit-box-shadow:0 0 0 4px rgba(0,0,0,0.2);-moz-box-shadow:0 0 0 4px rgba(0,0,0,0.2);box-shadow:0 0 0 4px rgba(0,0,0,0.2)}.teaser{height:200px;margin-top:-10px;background:url(../assets/slide-01.jpg);-webkit-background-size:cover;-moz-background-size:cover;background-size:cover}.teaser h1{margin-top:110px;color:#fff;text-shadow:0 0 5px #000}.middle-bar{width:auto;min-width:100%;height:auto;margin-bottom:25px;padding-top:10px;padding-bottom:10px;text-align:center;border-top:1px solid black;border-bottom:1px solid black;background:#222}.middle-bar h2{color:#fff}.middle-bar .btn{margin-left:15px}article h2 a{color:#000}article h2 a:hover{color:#2db2ea;text-decoration:none}article h2 a:hover:hover:after{float:right;font-family:"FontAwesome";content:"\f064"}.navbar-wrapper{position:absolute;top:0;left:0;right:0;z-index:10;margin-bottom:-90px}.navbar .navbar-inner{background-color:#000;background-image:none;border:0;-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;-webkit-box-shadow:0 0 0 4px rgba(0,0,0,0.2);-moz-box-shadow:0 0 0 4px rgba(0,0,0,0.2);box-shadow:0 0 0 4px rgba(0,0,0,0.2)}.navbar .brand{padding:14px 20px 16px;font-size:16px;font-weight:bold;text-shadow:0}.navbar .nav>li>a{padding:15px 20px}.navbar .btn-navbar{margin-top:7px}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{background-color:#2db2ea;color:#fff}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#fff;background-color:#2db2ea;box-shadow:none}.navbar .nav li.dropdown>.dropdown-toggle .caret,.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff}.navbar .nav>li>.dropdown-menu::before,.navbar .nav>li>.dropdown-menu::after{display:none}.carousel{margin-bottom:0}.carousel .item{height:500px}.carousel .item>img{position:absolute;top:0;left:0;min-width:100%;height:500px}.carousel .item .container{position:relative;text-align:center;z-index:9}.carousel-caption{background-color:transparent;position:static;max-width:1100px;padding:0 20px;margin-top:150px;margin-left:auto;margin-right:auto}.carousel-caption h1{font-size:60px;font-weight:800}.carousel-caption h1,.carousel-caption .lead{margin:0;margin-bottom:30px;line-height:1.25;color:#fff;text-shadow:0 0 5px #000}.carousel-caption .btn{-webkit-box-shadow:0 0 0 4px rgba(0,0,0,0.2);-moz-box-shadow:0 0 0 4px rgba(0,0,0,0.2);box-shadow:0 0 0 4px rgba(0,0,0,0.2)}.carousel-control{height:80px;margin-top:0;font-size:120px;text-shadow:0 1px 1px rgba(0,0,0,0.5);background-color:transparent;border:0;z-index:9}.btn{background-color:none;background-image:none;background:#5d6468;color:#fff;cursor:pointer;text-shadow:0 -1px 0 #2d3032;border:1px solid #51575a;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;-webkit-box-shadow:inset 0 0 0 rgba(0,0,0,0);-moz-box-shadow:inset 0 0 0 rgba(0,0,0,0);box-shadow:inset 0 0 0 rgba(0,0,0,0)}.btn:hover{color:#fff;background:#757d83;-webkit-transition:all .3s ease-in-out;-moz-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out;border-color:#5d6468}.btn.btn-primary{background:#2db2ea;text-shadow:0 -1px 0 #1076a1;border:1px solid #17a9e6}.btn.btn-primary:hover{background:#44baec;border:1px solid #2db2ea}footer{margin-top:30px;margin-bottom:0;padding-top:15px;color:#aaa;border-top:5px solid #212325;background:#2d3032}footer h1,footer h2,footer h3,footer h4,footer h5,footer h6{color:#fff;font-size:14px}footer a{color:#2db2ea;border-bottom:1px dotted #aaa}footer a:hover{color:#fff;text-decoration:none}footer .footer-bottom{width:auto;padding:20px;background:#212325}footer .footer-bottom p{margin:0}footer hr{border-top:0;border-bottom:1px solid #454a4d}.well{border-color:#ccc;background-color:#f5f6f6;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#f5f6f6),color-stop(100% #e0e0e0));background-image:-webkit-linear-gradient(top,#f5f6f6 0,#e0e0e0 100%);background-image:-moz-linear-gradient(top,#f5f6f6 0,#e0e0e0 100%);background-image:-ms-linear-gradient(top,#f5f6f6 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#f5f6f6 0,#e0e0e0 100%);background-image:linear-gradient(top,#f5f6f6 0,#e0e0e0 100%);box-shadow:inset 0 0 0 rgba(0,0,0,0);box-shadow:0 2px 5px 1px rgba(0,0,0,0.1)}.well input{margin-bottom:5px}.ribbon-left:before{content:"";float:left;border:24px solid #212325}.ribbon-left:before{border-left-color:transparent}.ribbon-left h2{margin-right:5px;line-height:48px;color:#fff;background:#212325;overflow:hidden}.ribbon-right:before{content:"";float:right;border:24px solid #2db2ea}.ribbon-right:before{border-right-color:transparent}.ribbon-right h2{padding-left:10px;line-height:48px;color:#fff;background:#2db2ea;overflow:hidden}.tag-cloud{margin-left:0;padding:0;list-style:none}.tag-cloud li{display:inline-block;margin-bottom:15px;position:relative}.tag-cloud a{padding:4px 10px;border:0;background:#454a4d;color:#fff;text-decoration:none;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.tag-cloud a:hover{background:#2db2ea}@media(min-width:979px) and (max-width:1200px){.tour-image{max-width:400px}}@media(max-width:979px){.navbar-wrapper{top:20px}.container.navbar-wrapper{margin-bottom:0;width:auto}.navbar-inner{border-radius:0;margin:-20px 0}.navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#fff;font-weight:normal}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:hover{background-color:#2db2ea;color:#fff}.carousel .item,.carousel img{height:450px}.tour-image{display:block;float:none;max-width:50%;margin:0 auto}}@media(max-width:767px){.navbar .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.carousel{margin-left:-20px;margin-right:-20px}.carousel .item,.carousel img{height:330px}.carousel-caption{padding:0 70px;margin-top:100px;text-align:center}.carousel-caption h1{font-size:30px}.carousel-caption .lead,.carousel-caption .btn{font-size:18px}.teaser,.middle-bar,footer,.footer-bottom{margin-left:-20px;margin-right:-20px;padding-left:20px;padding-right:20px}} -.closedlist ul -{ - display: none; -} -.bs-docs-sidebar -{ - position: relative; -} -.bs-docs-sidenav { - background-color: #FFFFFF; - border-radius: 6px; - box-shadow: 0px 1px 4px rgba(0, 0, 0, 0.063); - margin: 30px 0px 0px; - padding: 0px; -} - -.bs-docs-sidenav > li:first-child > a { - border-radius: 6px 6px 0px 0px; -} -.bs-docs-sidenav > .active > a { - border: 0px none currentColor; - box-shadow: inset 1px 0px 0px rgba(0, 0, 0, 0.102), inset -1px 0px 0px rgba(0, 0, 0, 0.102); - padding: 9px 15px; - position: relative; - text-shadow: 0px 1px 0px rgba(0, 0, 0, 0.149); - z-index: 2; -} - -.bs-docs-sidenav > li > a { - border: 1px solid #E5E5E5; - background-color: #EEEEEE; - display: block; - margin: 0px 0px -1px; - padding: 8px 14px; -} - -.bs-docs-sidenav > li > ul > li > a{ - border: 1px solid #E5E5E5; - display: block; - margin: 0px 0px -1px; - padding: 8px 14px 8px 25px; - -} - -.fixed-bar -{ - background: white; - width: 100%; -} - -#tab1 -{ - padding-top: 70px; -} -#contents -{ - padding-right: 15px; - padding-bottom: 50px; - height: 80%; - position: fixed; - overflow-y: scroll; -} -#contents.affix { - top: 0; -} - -section h1, #contents h1 -{ - font-size: 23px; -} - -#contents li > a -{ - font-size: 14px; - word-break: break-all; - word-wrap: break-word; -} - -@media (min-width:900px) and (max-width: 1075px) { - #contents li > a - { - font-size: 12px; - } -} -@media (min-width:768px) and (max-width: 899px) { - #contents li > a - { - font-size: 11px; - } -} -@media (max-width: 767px) { - #contents, #contents.affix { - position: static; - width: auto; - top: 0; - overflow: visible; - } -} -section -{ - margin-bottom: 40px; - padding-bottom: 40px; - border-bottom: 1px solid grey; -} - -.table th -{ - background-color: #EEEEEE; -} - -.bs-docs-sidenav .icon-chevron-right { - float: right; - margin-right: -6px; - margin-top: 5px; - opacity: 1; -} - -@media (max-width: 480px) { - #contents li > a - { - font-size: 11px; - } -} -.middle-bar -{ - margin: 0; -} -.navbar .navbar-inner -{ - border: none; - padding: 0; - min-height: 0; -} -.middle-bar .brand -{ - margin-left: 20px; - margin-top: -5px; - line-height: 40px; -} -.list li -{ - margin-bottom: 10px; -} -.intext -{ - margin: 10px; -} -.container -{ - width: 100%; +body{color:#666;font-family:'Open Sans',Arial,sans-serif}body a{color:#2db2ea}h1,h2,h3,h4,h5,h6{color:#2f353e;font-weight:300}h1{font-weight:bold}ul{margin-left:0}ul li{list-style:none}.centered{text-align:center}.decorative-shadow{-webkit-box-shadow:0 0 0 4px rgba(0,0,0,0.2);-moz-box-shadow:0 0 0 4px rgba(0,0,0,0.2);box-shadow:0 0 0 4px rgba(0,0,0,0.2)}.teaser{height:200px;margin-top:-10px;background:url(../assets/slide-01.jpg);-webkit-background-size:cover;-moz-background-size:cover;background-size:cover}.teaser h1{margin-top:110px;color:#fff;text-shadow:0 0 5px #000}.middle-bar{width:auto;min-width:100%;height:auto;margin-bottom:25px;padding-top:10px;padding-bottom:10px;text-align:center;border-top:1px solid black;border-bottom:1px solid black;background:#222}.middle-bar h2{color:#fff}.middle-bar .btn{margin-left:15px}article h2 a{color:#000}article h2 a:hover{color:#2db2ea;text-decoration:none}article h2 a:hover:hover:after{float:right;font-family:"FontAwesome";content:"\f064"}.navbar-wrapper{position:absolute;top:0;left:0;right:0;z-index:10;margin-bottom:-90px}.navbar .navbar-inner{background-color:#000;background-image:none;border:0;-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;-webkit-box-shadow:0 0 0 4px rgba(0,0,0,0.2);-moz-box-shadow:0 0 0 4px rgba(0,0,0,0.2);box-shadow:0 0 0 4px rgba(0,0,0,0.2)}.navbar .brand{padding:14px 20px 16px;font-size:16px;font-weight:bold;text-shadow:0}.navbar .nav>li>a{padding:15px 20px}.navbar .btn-navbar{margin-top:7px}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{background-color:#2db2ea;color:#fff}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#fff;background-color:#2db2ea;box-shadow:none}.navbar .nav li.dropdown>.dropdown-toggle .caret,.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff}.navbar .nav>li>.dropdown-menu::before,.navbar .nav>li>.dropdown-menu::after{display:none}.carousel{margin-bottom:0}.carousel .item{height:500px}.carousel .item>img{position:absolute;top:0;left:0;min-width:100%;height:500px}.carousel .item .container{position:relative;text-align:center;z-index:9}.carousel-caption{background-color:transparent;position:static;max-width:1100px;padding:0 20px;margin-top:150px;margin-left:auto;margin-right:auto}.carousel-caption h1{font-size:60px;font-weight:800}.carousel-caption h1,.carousel-caption .lead{margin:0;margin-bottom:30px;line-height:1.25;color:#fff;text-shadow:0 0 5px #000}.carousel-caption .btn{-webkit-box-shadow:0 0 0 4px rgba(0,0,0,0.2);-moz-box-shadow:0 0 0 4px rgba(0,0,0,0.2);box-shadow:0 0 0 4px rgba(0,0,0,0.2)}.carousel-control{height:80px;margin-top:0;font-size:120px;text-shadow:0 1px 1px rgba(0,0,0,0.5);background-color:transparent;border:0;z-index:9}.btn{background-color:none;background-image:none;background:#5d6468;color:#fff;cursor:pointer;text-shadow:0 -1px 0 #2d3032;border:1px solid #51575a;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;-webkit-box-shadow:inset 0 0 0 rgba(0,0,0,0);-moz-box-shadow:inset 0 0 0 rgba(0,0,0,0);box-shadow:inset 0 0 0 rgba(0,0,0,0)}.btn:hover{color:#fff;background:#757d83;-webkit-transition:all .3s ease-in-out;-moz-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out;border-color:#5d6468}.btn.btn-primary{background:#2db2ea;text-shadow:0 -1px 0 #1076a1;border:1px solid #17a9e6}.btn.btn-primary:hover{background:#44baec;border:1px solid #2db2ea}footer{margin-top:30px;margin-bottom:0;padding-top:15px;color:#aaa;border-top:5px solid #212325;background:#2d3032}footer h1,footer h2,footer h3,footer h4,footer h5,footer h6{color:#fff;font-size:14px}footer a{color:#2db2ea;border-bottom:1px dotted #aaa}footer a:hover{color:#fff;text-decoration:none}footer .footer-bottom{width:auto;padding:20px;background:#212325}footer .footer-bottom p{margin:0}footer hr{border-top:0;border-bottom:1px solid #454a4d}.well{border-color:#ccc;background-color:#f5f6f6;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#f5f6f6),color-stop(100% #e0e0e0));background-image:-webkit-linear-gradient(top,#f5f6f6 0,#e0e0e0 100%);background-image:-moz-linear-gradient(top,#f5f6f6 0,#e0e0e0 100%);background-image:-ms-linear-gradient(top,#f5f6f6 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#f5f6f6 0,#e0e0e0 100%);background-image:linear-gradient(top,#f5f6f6 0,#e0e0e0 100%);box-shadow:inset 0 0 0 rgba(0,0,0,0);box-shadow:0 2px 5px 1px rgba(0,0,0,0.1)}.well input{margin-bottom:5px}.ribbon-left:before{content:"";float:left;border:24px solid #212325}.ribbon-left:before{border-left-color:transparent}.ribbon-left h2{margin-right:5px;line-height:48px;color:#fff;background:#212325;overflow:hidden}.ribbon-right:before{content:"";float:right;border:24px solid #2db2ea}.ribbon-right:before{border-right-color:transparent}.ribbon-right h2{padding-left:10px;line-height:48px;color:#fff;background:#2db2ea;overflow:hidden}.tag-cloud{margin-left:0;padding:0;list-style:none}.tag-cloud li{display:inline-block;margin-bottom:15px;position:relative}.tag-cloud a{padding:4px 10px;border:0;background:#454a4d;color:#fff;text-decoration:none;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.tag-cloud a:hover{background:#2db2ea}@media(min-width:979px) and (max-width:1200px){.tour-image{max-width:400px}}@media(max-width:979px){.navbar-wrapper{top:20px}.container.navbar-wrapper{margin-bottom:0;width:auto}.navbar-inner{border-radius:0;margin:-20px 0}.navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#fff;font-weight:normal}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:hover{background-color:#2db2ea;color:#fff}.carousel .item,.carousel img{height:450px}.tour-image{display:block;float:none;max-width:50%;margin:0 auto}}@media(max-width:767px){.navbar .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.carousel{margin-left:-20px;margin-right:-20px}.carousel .item,.carousel img{height:330px}.carousel-caption{padding:0 70px;margin-top:100px;text-align:center}.carousel-caption h1{font-size:30px}.carousel-caption .lead,.carousel-caption .btn{font-size:18px}.teaser,.middle-bar,footer,.footer-bottom{margin-left:-20px;margin-right:-20px;padding-left:20px;padding-right:20px}} +.closedlist ul +{ + display: none; +} +.bs-docs-sidebar +{ + position: relative; +} +.bs-docs-sidenav { + background-color: #FFFFFF; + border-radius: 6px; + box-shadow: 0px 1px 4px rgba(0, 0, 0, 0.063); + margin: 30px 0px 0px; + padding: 0px; +} + +.bs-docs-sidenav > li:first-child > a { + border-radius: 6px 6px 0px 0px; +} +.bs-docs-sidenav > .active > a { + border: 0px none currentColor; + box-shadow: inset 1px 0px 0px rgba(0, 0, 0, 0.102), inset -1px 0px 0px rgba(0, 0, 0, 0.102); + padding: 9px 15px; + position: relative; + text-shadow: 0px 1px 0px rgba(0, 0, 0, 0.149); + z-index: 2; +} + +.bs-docs-sidenav > li > a { + border: 1px solid #E5E5E5; + background-color: #EEEEEE; + display: block; + margin: 0px 0px -1px; + padding: 8px 14px; +} + +.bs-docs-sidenav > li > ul > li > a{ + border: 1px solid #E5E5E5; + display: block; + margin: 0px 0px -1px; + padding: 8px 14px 8px 25px; + +} + +.fixed-bar +{ + background: white; + width: 100%; +} + +#tab1 +{ + padding-top: 70px; +} +#contents +{ + padding-right: 15px; + padding-bottom: 50px; + height: 80%; + position: fixed; + overflow-y: scroll; +} +#contents.affix { + top: 0; +} + +section h1, #contents h1 +{ + font-size: 23px; +} + +#contents li > a +{ + font-size: 14px; + word-break: break-all; + word-wrap: break-word; +} + +@media (min-width:900px) and (max-width: 1075px) { + #contents li > a + { + font-size: 12px; + } +} +@media (min-width:768px) and (max-width: 899px) { + #contents li > a + { + font-size: 11px; + } +} +@media (max-width: 767px) { + #contents, #contents.affix { + position: static; + width: auto; + top: 0; + overflow: visible; + } +} +section +{ + margin-bottom: 40px; + padding-bottom: 40px; + border-bottom: 1px solid grey; +} + +.table th +{ + background-color: #EEEEEE; +} + +.bs-docs-sidenav .icon-chevron-right { + float: right; + margin-right: -6px; + margin-top: 5px; + opacity: 1; +} + +@media (max-width: 480px) { + #contents li > a + { + font-size: 11px; + } +} +.middle-bar +{ + margin: 0; +} +.navbar .navbar-inner +{ + border: none; + padding: 0; + min-height: 0; +} +.middle-bar .brand +{ + margin-left: 20px; + margin-top: -5px; + line-height: 40px; +} +.list li +{ + margin-bottom: 10px; +} +.intext +{ + margin: 10px; +} +.container +{ + width: 100%; } \ No newline at end of file diff --git a/doc/design/event.html b/doc/design/event.html index 12b03ebe3..8146d32fb 100644 --- a/doc/design/event.html +++ b/doc/design/event.html @@ -1,39 +1,39 @@ -
-

{$contents.name}

- -

Available since version: {$contents.version}

- -

Description:

-
-{$contents.description} -
- -

Value:

-

{$contents.name} = "{$contents.value}"

- -{if isset($contents.params)} -

Event properties:

-
    - {foreach item=item from=$contents.params} -
  • {$item.name}: {if $item.type != "any"}({$item.type}){/if} {$item.description}
  • - {/foreach} -
-{/if} - -{if isset($contents.examples)} -

Examples:

- {foreach item=item from=$contents.examples} -

{$item.name}

-
{$item.code}
- {/foreach} -{/if} - -{if isset($contents.related) and !empty($contents.related)} -

See Also:

-
    - {foreach item=item from=$contents.related} -
  • {$item.name}
  • - {/foreach} -
-{/if} +
+

{$contents.name}

+ +

Available since version: {$contents.version}

+ +

Description:

+
+{$contents.description} +
+ +

Value:

+

{$contents.name} = "{$contents.value}"

+ +{if isset($contents.params)} +

Event properties:

+
    + {foreach item=item from=$contents.params} +
  • {$item.name}: {if $item.type != "any"}({$item.type}){/if} {$item.description}
  • + {/foreach} +
+{/if} + +{if isset($contents.examples)} +

Examples:

+ {foreach item=item from=$contents.examples} +

{$item.name}

+
{$item.code}
+ {/foreach} +{/if} + +{if isset($contents.related) and !empty($contents.related)} +

See Also:

+
    + {foreach item=item from=$contents.related} +
  • {$item.name}
  • + {/foreach} +
+{/if}
\ No newline at end of file diff --git a/doc/design/index.html b/doc/design/index.html index 3a2b4f5c9..ee58507ba 100644 --- a/doc/design/index.html +++ b/doc/design/index.html @@ -1,143 +1,143 @@ - - - - - Gideros Reference Manual - - - - - - - - - - - - - - - - - - - - -
- - - -
- - -
-
-
-

Table of Contents

- -
-
-
- {if $template != ''} - {include file="$template.html"} - {/if} -
-
- -
- - -
- -
- -
- - - - - - - - - - - - - - + + + + + Gideros Reference Manual + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + +
+
+
+

Table of Contents

+ +
+
+
+ {if $template != ''} + {include file="$template.html"} + {/if} +
+
+ +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + diff --git a/doc/design/js/bootstrap.js b/doc/design/js/bootstrap.js index a3b2a180f..6b1d3fb69 100644 --- a/doc/design/js/bootstrap.js +++ b/doc/design/js/bootstrap.js @@ -1,2170 +1,2170 @@ -/* =================================================== - * bootstrap-transition.js v2.2.2 - * http://twitter.github.com/bootstrap/javascript.html#transitions - * =================================================== - * 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"; // jshint ;_; - - - /* CSS TRANSITION SUPPORT (http://www.modernizr.com/) - * ======================================================= */ - - $(function () { - - $.support.transition = (function () { - - var transitionEnd = (function () { - - var el = document.createElement('bootstrap') - , transEndEventNames = { - 'WebkitTransition' : 'webkitTransitionEnd' - , 'MozTransition' : 'transitionend' - , 'OTransition' : 'oTransitionEnd otransitionend' - , 'transition' : 'transitionend' - } - , name - - for (name in transEndEventNames){ - if (el.style[name] !== undefined) { - return transEndEventNames[name] - } - } - - }()) - - return transitionEnd && { - end: transitionEnd - } - - })() - - }) - -}(window.jQuery); -/* ========================================================= - * bootstrap-modal.js v2.2.2 - * http://twitter.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"; // jshint ;_; - - - /* MODAL CLASS DEFINITION - * ====================== */ - - var Modal = function (element, options) { - this.options = options - this.$element = $(element) - .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this)) - this.options.remote && this.$element.find('.modal-body').load(this.options.remote) - } - - Modal.prototype = { - - constructor: Modal - - , toggle: function () { - return this[!this.isShown ? 'show' : 'hide']() - } - - , show: function () { - var that = this - , e = $.Event('show') - - this.$element.trigger(e) - - if (this.isShown || e.isDefaultPrevented()) return - - this.isShown = true - - this.escape() - - 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() - - transition ? - that.$element.one($.support.transition.end, function () { that.$element.focus().trigger('shown') }) : - that.$element.focus().trigger('shown') - - }) - } - - , hide: function (e) { - e && e.preventDefault() - - var that = this - - e = $.Event('hide') - - this.$element.trigger(e) - - if (!this.isShown || e.isDefaultPrevented()) return - - this.isShown = false - - this.escape() - - $(document).off('focusin.modal') - - this.$element - .removeClass('in') - .attr('aria-hidden', true) - - $.support.transition && this.$element.hasClass('fade') ? - this.hideWithTransition() : - this.hideModal() - } - - , enforceFocus: function () { - var that = this - $(document).on('focusin.modal', function (e) { - if (that.$element[0] !== e.target && !that.$element.has(e.target).length) { - that.$element.focus() - } - }) - } - - , escape: function () { - var that = this - if (this.isShown && this.options.keyboard) { - this.$element.on('keyup.dismiss.modal', function ( e ) { - e.which == 27 && that.hide() - }) - } else if (!this.isShown) { - this.$element.off('keyup.dismiss.modal') - } - } - - , hideWithTransition: function () { - var that = this - , timeout = setTimeout(function () { - that.$element.off($.support.transition.end) - that.hideModal() - }, 500) - - this.$element.one($.support.transition.end, function () { - clearTimeout(timeout) - that.hideModal() - }) - } - - , hideModal: function (that) { - this.$element - .hide() - .trigger('hidden') - - this.backdrop() - } - - , removeBackdrop: function () { - this.$backdrop.remove() - this.$backdrop = null - } - - , backdrop: function (callback) { - var that = this - , animate = this.$element.hasClass('fade') ? 'fade' : '' - - if (this.isShown && this.options.backdrop) { - var doAnimate = $.support.transition && animate - - this.$backdrop = $('