From 538d015663dd75b77768feb9d1f92699099507f9 Mon Sep 17 00:00:00 2001 From: Julien Moutinho Date: Sun, 22 Mar 2015 23:49:38 +0100 Subject: [PATCH 1/1] init --- .gitignore | 3 + cli/.gitignore | 3 + cli/Hcompta.hs | 1 + cli/Hcompta/Cli.hs | 1 + cli/Hcompta/Cli/Balance.hs | 1 + cli/Test/Main.hs | 16 + cli/hcompta-cli.cabal | 67 + lib/.gitignore | 3 + lib/Hcompta.hs | 1 + lib/Hcompta/Calc.hs | 1 + lib/Hcompta/Input.hs | 1 + lib/Hcompta/Model.hs | 1 + lib/Hcompta/Output.hs | 1 + lib/Hcompta/Util.hs | 1 + lib/Test/Main.hs | 16 + lib/hcompta-lib.cabal | 71 + web/.dir-locals.el | 4 + web/.ghci | 18 + web/.gitignore | 14 + web/Application.hs | 171 + web/Foundation.hs | 154 + web/Handler/Common.hs | 16 + web/Handler/Home.hs | 40 + web/Import.hs | 6 + web/Import/NoFoundation.hs | 11 + web/Model.hs | 11 + web/Settings.hs | 134 + web/Settings/StaticFiles.hs | 18 + web/app/DevelMain.hs | 99 + web/app/devel.hs | 6 + web/app/main.hs | 5 + web/config/favicon.ico | Bin 0 -> 1342 bytes web/config/keter.yml | 60 + web/config/models | 12 + web/config/robots.txt | 1 + web/config/routes | 7 + web/config/settings.yml | 25 + web/config/sqlite.yml | 20 + web/config/test-settings.yml | 2 + web/hcompta-web.cabal | 130 + web/static/css/bootstrap.css | 6202 +++++++++++++++++ .../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20335 bytes .../fonts/glyphicons-halflings-regular.svg | 229 + .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 41280 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23320 bytes web/templates/default-layout-wrapper.hamlet | 42 + web/templates/default-layout.hamlet | 3 + web/templates/homepage.hamlet | 41 + web/templates/homepage.julius | 1 + web/templates/homepage.lucius | 20 + web/test/Handler/CommonSpec.hs | 17 + web/test/Handler/HomeSpec.hs | 32 + web/test/Spec.hs | 1 + web/test/TestImport.hs | 74 + 54 files changed, 7814 insertions(+) create mode 100644 .gitignore create mode 100644 cli/.gitignore create mode 100644 cli/Hcompta.hs create mode 100644 cli/Hcompta/Cli.hs create mode 100644 cli/Hcompta/Cli/Balance.hs create mode 100644 cli/Test/Main.hs create mode 100644 cli/hcompta-cli.cabal create mode 100644 lib/.gitignore create mode 100644 lib/Hcompta.hs create mode 100644 lib/Hcompta/Calc.hs create mode 100644 lib/Hcompta/Input.hs create mode 100644 lib/Hcompta/Model.hs create mode 100644 lib/Hcompta/Output.hs create mode 100644 lib/Hcompta/Util.hs create mode 100644 lib/Test/Main.hs create mode 100644 lib/hcompta-lib.cabal create mode 100644 web/.dir-locals.el create mode 100644 web/.ghci create mode 100644 web/.gitignore create mode 100644 web/Application.hs create mode 100644 web/Foundation.hs create mode 100644 web/Handler/Common.hs create mode 100644 web/Handler/Home.hs create mode 100644 web/Import.hs create mode 100644 web/Import/NoFoundation.hs create mode 100644 web/Model.hs create mode 100644 web/Settings.hs create mode 100644 web/Settings/StaticFiles.hs create mode 100644 web/app/DevelMain.hs create mode 100644 web/app/devel.hs create mode 100644 web/app/main.hs create mode 100644 web/config/favicon.ico create mode 100644 web/config/keter.yml create mode 100644 web/config/models create mode 100644 web/config/robots.txt create mode 100644 web/config/routes create mode 100644 web/config/settings.yml create mode 100644 web/config/sqlite.yml create mode 100644 web/config/test-settings.yml create mode 100644 web/hcompta-web.cabal create mode 100644 web/static/css/bootstrap.css create mode 100644 web/static/fonts/glyphicons-halflings-regular.eot create mode 100644 web/static/fonts/glyphicons-halflings-regular.svg create mode 100644 web/static/fonts/glyphicons-halflings-regular.ttf create mode 100644 web/static/fonts/glyphicons-halflings-regular.woff create mode 100644 web/templates/default-layout-wrapper.hamlet create mode 100644 web/templates/default-layout.hamlet create mode 100644 web/templates/homepage.hamlet create mode 100644 web/templates/homepage.julius create mode 100644 web/templates/homepage.lucius create mode 100644 web/test/Handler/CommonSpec.hs create mode 100644 web/test/Handler/HomeSpec.hs create mode 100644 web/test/Spec.hs create mode 100644 web/test/TestImport.hs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..05d4d64 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.cabal-sandbox/ +cabal.sandbox.config +dist/ diff --git a/cli/.gitignore b/cli/.gitignore new file mode 100644 index 0000000..05d4d64 --- /dev/null +++ b/cli/.gitignore @@ -0,0 +1,3 @@ +.cabal-sandbox/ +cabal.sandbox.config +dist/ diff --git a/cli/Hcompta.hs b/cli/Hcompta.hs new file mode 100644 index 0000000..be7a7ad --- /dev/null +++ b/cli/Hcompta.hs @@ -0,0 +1 @@ +module Hcompta where diff --git a/cli/Hcompta/Cli.hs b/cli/Hcompta/Cli.hs new file mode 100644 index 0000000..5631c47 --- /dev/null +++ b/cli/Hcompta/Cli.hs @@ -0,0 +1 @@ +module Hcompta.Cli where diff --git a/cli/Hcompta/Cli/Balance.hs b/cli/Hcompta/Cli/Balance.hs new file mode 100644 index 0000000..b7981f5 --- /dev/null +++ b/cli/Hcompta/Cli/Balance.hs @@ -0,0 +1 @@ +module Hcompta.Cli.Balance where diff --git a/cli/Test/Main.hs b/cli/Test/Main.hs new file mode 100644 index 0000000..a7849de --- /dev/null +++ b/cli/Test/Main.hs @@ -0,0 +1,16 @@ +import Prelude +import Test.HUnit +import Test.Framework.Providers.HUnit (hUnitTestToTests) +import Test.Framework.Runners.Console (defaultMain) + +import Hcompta.Cli + +main :: IO () +main = defaultMain $ hUnitTestToTests test_Hcompta_Cli + +test_Hcompta_Cli :: Test +test_Hcompta_Cli = + TestList + [ "dummy test" ~: + assertBool "" $ True + ] diff --git a/cli/hcompta-cli.cabal b/cli/hcompta-cli.cabal new file mode 100644 index 0000000..2036113 --- /dev/null +++ b/cli/hcompta-cli.cabal @@ -0,0 +1,67 @@ +author: Julien Moutinho +bug-reports: http://doc.autogeree.net/hcompta/bugs +build-type: Simple +cabal-version: >= 1.8 +category: Finance +-- data-dir: data +-- data-files: +description: +extra-source-files: Test.hs +extra-tmp-files: +homepage: http://doc.autogeree.net/hcompta +license: GPL +-- license-file: LICENSE +maintainer: Julien Moutinho +name: hcompta-cli +stability: experimental +synopsis: hcompta +tested-with: GHC==7.8.4 +version: 0.0.0 + +source-repository head + type: git + location: git://git.autogeree.net/hcompta + +Flag dev + Description: Turn on development settings. + Default: False + +Flag double + Description: Use old Double number representation (instead of Decimal), for testing/benchmarking. + Default: False + +Library + -- should set patchlevel here as in Makefile + cpp-options: -DPATCHLEVEL=0 + if flag(dev) + cpp-options: -DDEVELOPMENT + ghc-options: -Wall -fno-warn-tabs -O0 -ddump-splices + -- -fno-warn-unused-do-bind -fno-warn-name-shadowing -fno-warn-missing-signatures + -- -fno-warn-type-defaults -fno-warn-orphans + else + ghc-options: -Wall -fno-warn-tabs -O2 + if flag(double) + cpp-options: -DDOUBLE + -- default-language: Haskell2010 + exposed-modules: + Hcompta + Hcompta.Cli + build-depends: + base >= 4.3 && < 5 + , safe >= 0.2 + , HUnit + +test-suite Test + type: exitcode-stdio-1.0 + main-is: Main.hs + hs-source-dirs: Test + ghc-options: -Wall -fno-warn-unused-do-bind -fno-warn-name-shadowing -fno-warn-missing-signatures + ghc-options: -fno-warn-type-defaults -fno-warn-orphans + -- default-language: Haskell2010 + build-depends: + hcompta-cli + , base >= 4.3 && < 5 + , HUnit + , safe + , test-framework + , test-framework-hunit diff --git a/lib/.gitignore b/lib/.gitignore new file mode 100644 index 0000000..05d4d64 --- /dev/null +++ b/lib/.gitignore @@ -0,0 +1,3 @@ +.cabal-sandbox/ +cabal.sandbox.config +dist/ diff --git a/lib/Hcompta.hs b/lib/Hcompta.hs new file mode 100644 index 0000000..be7a7ad --- /dev/null +++ b/lib/Hcompta.hs @@ -0,0 +1 @@ +module Hcompta where diff --git a/lib/Hcompta/Calc.hs b/lib/Hcompta/Calc.hs new file mode 100644 index 0000000..c979004 --- /dev/null +++ b/lib/Hcompta/Calc.hs @@ -0,0 +1 @@ +module Hcompta.Calc where diff --git a/lib/Hcompta/Input.hs b/lib/Hcompta/Input.hs new file mode 100644 index 0000000..af20902 --- /dev/null +++ b/lib/Hcompta/Input.hs @@ -0,0 +1 @@ +module Hcompta.Input where diff --git a/lib/Hcompta/Model.hs b/lib/Hcompta/Model.hs new file mode 100644 index 0000000..07ddaab --- /dev/null +++ b/lib/Hcompta/Model.hs @@ -0,0 +1 @@ +module Hcompta.Model where diff --git a/lib/Hcompta/Output.hs b/lib/Hcompta/Output.hs new file mode 100644 index 0000000..a6e5586 --- /dev/null +++ b/lib/Hcompta/Output.hs @@ -0,0 +1 @@ +module Hcompta.Output where diff --git a/lib/Hcompta/Util.hs b/lib/Hcompta/Util.hs new file mode 100644 index 0000000..7b15375 --- /dev/null +++ b/lib/Hcompta/Util.hs @@ -0,0 +1 @@ +module Hcompta.Util where diff --git a/lib/Test/Main.hs b/lib/Test/Main.hs new file mode 100644 index 0000000..67dda27 --- /dev/null +++ b/lib/Test/Main.hs @@ -0,0 +1,16 @@ +import Prelude +import Test.HUnit +import Test.Framework.Providers.HUnit (hUnitTestToTests) +import Test.Framework.Runners.Console (defaultMain) + +import Hcompta + +main :: IO () +main = defaultMain $ hUnitTestToTests test_Hcompta + +test_Hcompta :: Test +test_Hcompta = + TestList + [ "dummy test" ~: + assertBool "" $ True + ] diff --git a/lib/hcompta-lib.cabal b/lib/hcompta-lib.cabal new file mode 100644 index 0000000..ab8f507 --- /dev/null +++ b/lib/hcompta-lib.cabal @@ -0,0 +1,71 @@ +author: Julien Moutinho +bug-reports: http://doc.autogeree.net/hcompta/bugs +build-type: Simple +cabal-version: >= 1.8 +category: Finance +-- data-dir: data +-- data-files: +description: +extra-source-files: Test.hs +extra-tmp-files: +homepage: http://doc.autogeree.net/hcompta +license: GPL +-- license-file: LICENSE +maintainer: Julien Moutinho +name: hcompta-lib +stability: experimental +synopsis: hcompta +tested-with: GHC==7.8.4 +version: 0.0.0 + +source-repository head + type: git + location: git://git.autogeree.net/hcompta + +Flag dev + Description: Turn on development settings. + Default: False + +Flag double + Description: Use old Double number representation (instead of Decimal), for testing/benchmarking. + Default: False + +Library + -- should set patchlevel here as in Makefile + cpp-options: -DPATCHLEVEL=0 + if flag(dev) + cpp-options: -DDEVELOPMENT + ghc-options: -Wall -fno-warn-tabs -O0 -ddump-splices + -- -fno-warn-unused-do-bind -fno-warn-name-shadowing -fno-warn-missing-signatures + -- -fno-warn-type-defaults -fno-warn-orphans + else + ghc-options: -Wall -fno-warn-tabs -O2 + if flag(double) + cpp-options: -DDOUBLE + -- default-language: Haskell2010 + exposed-modules: + Hcompta + Hcompta.Input + Hcompta.Output + Hcompta.Model + Hcompta.Util + Hcompta.Calc + build-depends: + base >= 4.3 && < 5 + , safe >= 0.2 + , HUnit + +test-suite Test + type: exitcode-stdio-1.0 + main-is: Main.hs + hs-source-dirs: Test + ghc-options: -Wall -fno-warn-unused-do-bind -fno-warn-name-shadowing -fno-warn-missing-signatures + ghc-options: -fno-warn-type-defaults -fno-warn-orphans + -- default-language: Haskell2010 + build-depends: + hcompta-lib + , base >= 4.3 && < 5 + , HUnit + , safe + , test-framework + , test-framework-hunit diff --git a/web/.dir-locals.el b/web/.dir-locals.el new file mode 100644 index 0000000..a44395f --- /dev/null +++ b/web/.dir-locals.el @@ -0,0 +1,4 @@ +((haskell-mode . ((haskell-indent-spaces . 4) + (haskell-process-use-ghci . t))) + (hamlet-mode . ((hamlet/basic-offset . 4) + (haskell-process-use-ghci . t)))) diff --git a/web/.ghci b/web/.ghci new file mode 100644 index 0000000..4c43c9d --- /dev/null +++ b/web/.ghci @@ -0,0 +1,18 @@ +:set -i.:config:dist/build/autogen +:set -DDEVELOPMENT +:set -XCPP +:set -XDeriveDataTypeable +:set -XEmptyDataDecls +:set -XFlexibleContexts +:set -XGADTs +:set -XGeneralizedNewtypeDeriving +:set -XMultiParamTypeClasses +:set -XNoImplicitPrelude +:set -XNoMonomorphismRestriction +:set -XOverloadedStrings +:set -XQuasiQuotes +:set -XRecordWildCards +:set -XTemplateHaskell +:set -XTupleSections +:set -XTypeFamilies +:set -XViewPatterns diff --git a/web/.gitignore b/web/.gitignore new file mode 100644 index 0000000..5c48818 --- /dev/null +++ b/web/.gitignore @@ -0,0 +1,14 @@ +dist* +static/tmp/ +static/combined/ +config/client_session_key.aes +*.hi +*.o +*.sqlite3 +.hsenv* +cabal-dev/ +yesod-devel/ +.cabal-sandbox +cabal.sandbox.config +.DS_Store +*.swp diff --git a/web/Application.hs b/web/Application.hs new file mode 100644 index 0000000..f0294a6 --- /dev/null +++ b/web/Application.hs @@ -0,0 +1,171 @@ +{-# OPTIONS_GHC -fno-warn-orphans #-} +module Application + ( getApplicationDev + , appMain + , develMain + , makeFoundation + -- * for DevelMain + , getApplicationRepl + , shutdownApp + -- * for GHCI + , handler + , db + ) where + +import Control.Monad.Logger (liftLoc, runLoggingT) +import Database.Persist.Sqlite (createSqlitePool, runSqlPool, + sqlDatabase, sqlPoolSize) +import Import +import Language.Haskell.TH.Syntax (qLocation) +import Network.Wai.Handler.Warp (Settings, defaultSettings, + defaultShouldDisplayException, + runSettings, setHost, + setOnException, setPort, getPort) +import Network.Wai.Middleware.RequestLogger (Destination (Logger), + IPAddrSource (..), + OutputFormat (..), destination, + mkRequestLogger, outputFormat) +import System.Log.FastLogger (defaultBufSize, newStdoutLoggerSet, + toLogStr) + +-- Import all relevant handler modules here. +-- Don't forget to add new modules to your cabal file! +import Handler.Common +import Handler.Home + +-- This line actually creates our YesodDispatch instance. It is the second half +-- of the call to mkYesodData which occurs in Foundation.hs. Please see the +-- comments there for more details. +mkYesodDispatch "App" resourcesApp + +-- | This function allocates resources (such as a database connection pool), +-- performs initialization and return a foundation datatype value. This is also +-- the place to put your migrate statements to have automatic database +-- migrations handled by Yesod. +makeFoundation :: AppSettings -> IO App +makeFoundation appSettings = do + -- Some basic initializations: HTTP connection manager, logger, and static + -- subsite. + appHttpManager <- newManager + appLogger <- newStdoutLoggerSet defaultBufSize >>= makeYesodLogger + appStatic <- + (if appMutableStatic appSettings then staticDevel else static) + (appStaticDir appSettings) + + -- We need a log function to create a connection pool. We need a connection + -- pool to create our foundation. And we need our foundation to get a + -- logging function. To get out of this loop, we initially create a + -- temporary foundation without a real connection pool, get a log function + -- from there, and then create the real foundation. + let mkFoundation appConnPool = App {..} + tempFoundation = mkFoundation $ error "connPool forced in tempFoundation" + logFunc = messageLoggerSource tempFoundation appLogger + + -- Create the database connection pool + pool <- flip runLoggingT logFunc $ createSqlitePool + (sqlDatabase $ appDatabaseConf appSettings) + (sqlPoolSize $ appDatabaseConf appSettings) + + -- Perform database migration using our application's logging settings. + runLoggingT (runSqlPool (runMigration migrateAll) pool) logFunc + + -- Return the foundation + return $ mkFoundation pool + +-- | Convert our foundation to a WAI Application by calling @toWaiAppPlain@ and +-- applyng some additional middlewares. +makeApplication :: App -> IO Application +makeApplication foundation = do + logWare <- mkRequestLogger def + { outputFormat = + if appDetailedRequestLogging $ appSettings foundation + then Detailed True + else Apache + (if appIpFromHeader $ appSettings foundation + then FromFallback + else FromSocket) + , destination = Logger $ loggerSet $ appLogger foundation + } + + -- Create the WAI application and apply middlewares + appPlain <- toWaiAppPlain foundation + return $ logWare $ defaultMiddlewaresNoLogging appPlain + +-- | Warp settings for the given foundation value. +warpSettings :: App -> Settings +warpSettings foundation = + setPort (appPort $ appSettings foundation) + $ setHost (appHost $ appSettings foundation) + $ setOnException (\_req e -> + when (defaultShouldDisplayException e) $ messageLoggerSource + foundation + (appLogger foundation) + $(qLocation >>= liftLoc) + "yesod" + LevelError + (toLogStr $ "Exception from Warp: " ++ show e)) + defaultSettings + +-- | For yesod devel, return the Warp settings and WAI Application. +getApplicationDev :: IO (Settings, Application) +getApplicationDev = do + settings <- getAppSettings + foundation <- makeFoundation settings + wsettings <- getDevSettings $ warpSettings foundation + app <- makeApplication foundation + return (wsettings, app) + +getAppSettings :: IO AppSettings +getAppSettings = loadAppSettings [configSettingsYml] [] useEnv + +-- | main function for use by yesod devel +develMain :: IO () +develMain = develMainHelper getApplicationDev + +-- | The @main@ function for an executable running this site. +appMain :: IO () +appMain = do + -- Get the settings from all relevant sources + settings <- loadAppSettingsArgs + -- fall back to compile-time values, set to [] to require values at runtime + [configSettingsYmlValue] + + -- allow environment variables to override + useEnv + + -- Generate the foundation from the settings + foundation <- makeFoundation settings + + -- Generate a WAI Application from the foundation + app <- makeApplication foundation + + -- Run the application with Warp + runSettings (warpSettings foundation) app + + +-------------------------------------------------------------- +-- Functions for DevelMain.hs (a way to run the app from GHCi) +-------------------------------------------------------------- +getApplicationRepl :: IO (Int, App, Application) +getApplicationRepl = do + settings <- getAppSettings + foundation <- makeFoundation settings + wsettings <- getDevSettings $ warpSettings foundation + app1 <- makeApplication foundation + return (getPort wsettings, foundation, app1) + +shutdownApp :: App -> IO () +shutdownApp _ = return () + + +--------------------------------------------- +-- Functions for use in development with GHCi +--------------------------------------------- + +-- | Run a handler +handler :: Handler a -> IO a +handler h = getAppSettings >>= makeFoundation >>= flip unsafeHandler h + +-- | Run DB queries +db :: ReaderT SqlBackend (HandlerT App IO) a -> IO a +db = handler . runDB diff --git a/web/Foundation.hs b/web/Foundation.hs new file mode 100644 index 0000000..f9ff583 --- /dev/null +++ b/web/Foundation.hs @@ -0,0 +1,154 @@ +module Foundation where + +import Import.NoFoundation +import Database.Persist.Sql (ConnectionPool, runSqlPool) +import Text.Hamlet (hamletFile) +import Text.Jasmine (minifym) +import Yesod.Auth.BrowserId (authBrowserId) +import Yesod.Default.Util (addStaticContentExternal) +import Yesod.Core.Types (Logger) +import qualified Yesod.Core.Unsafe as Unsafe + +-- | The foundation datatype for your application. This can be a good place to +-- keep settings and values requiring initialization before your application +-- starts running, such as database connections. Every handler will have +-- access to the data present here. +data App = App + { appSettings :: AppSettings + , appStatic :: Static -- ^ Settings for static file serving. + , appConnPool :: ConnectionPool -- ^ Database connection pool. + , appHttpManager :: Manager + , appLogger :: Logger + } + +instance HasHttpManager App where + getHttpManager = appHttpManager + +-- This is where we define all of the routes in our application. For a full +-- explanation of the syntax, please see: +-- http://www.yesodweb.com/book/routing-and-handlers +-- +-- Note that this is really half the story; in Application.hs, mkYesodDispatch +-- generates the rest of the code. Please see the linked documentation for an +-- explanation for this split. +mkYesodData "App" $(parseRoutesFile "config/routes") + +-- | A convenient synonym for creating forms. +type Form x = Html -> MForm (HandlerT App IO) (FormResult x, Widget) + +-- Please see the documentation for the Yesod typeclass. There are a number +-- of settings which can be configured by overriding methods here. +instance Yesod App where + -- Controls the base of generated URLs. For more information on modifying, + -- see: https://github.com/yesodweb/yesod/wiki/Overriding-approot + approot = ApprootMaster $ appRoot . appSettings + + -- Store session data on the client in encrypted cookies, + -- default session idle timeout is 120 minutes + makeSessionBackend _ = Just <$> defaultClientSessionBackend + 120 -- timeout in minutes + "config/client_session_key.aes" + + defaultLayout widget = do + master <- getYesod + mmsg <- getMessage + + -- We break up the default layout into two components: + -- default-layout is the contents of the body tag, and + -- default-layout-wrapper is the entire page. Since the final + -- value passed to hamletToRepHtml cannot be a widget, this allows + -- you to use normal widget features in default-layout. + + pc <- widgetToPageContent $ do + addStylesheet $ StaticR css_bootstrap_css + $(widgetFile "default-layout") + withUrlRenderer $(hamletFile "templates/default-layout-wrapper.hamlet") + + -- The page to be redirected to when authentication is required. + authRoute _ = Just $ AuthR LoginR + + -- Routes not requiring authentication. + isAuthorized (AuthR _) _ = return Authorized + isAuthorized FaviconR _ = return Authorized + isAuthorized RobotsR _ = return Authorized + -- Default to Authorized for now. + isAuthorized _ _ = return Authorized + + -- This function creates static content files in the static folder + -- and names them based on a hash of their content. This allows + -- expiration dates to be set far in the future without worry of + -- users receiving stale content. + addStaticContent ext mime content = do + master <- getYesod + let staticDir = appStaticDir $ appSettings master + addStaticContentExternal + minifym + genFileName + staticDir + (StaticR . flip StaticRoute []) + ext + mime + content + where + -- Generate a unique filename based on the content itself + genFileName lbs = "autogen-" ++ base64md5 lbs + + -- What messages should be logged. The following includes all messages when + -- in development, and warnings and errors in production. + shouldLog app _source level = + appShouldLogAll (appSettings app) + || level == LevelWarn + || level == LevelError + + makeLogger = return . appLogger + +-- How to run database actions. +instance YesodPersist App where + type YesodPersistBackend App = SqlBackend + runDB action = do + master <- getYesod + runSqlPool action $ appConnPool master +instance YesodPersistRunner App where + getDBRunner = defaultGetDBRunner appConnPool + +instance YesodAuth App where + type AuthId App = UserId + + -- Where to send a user after successful login + loginDest _ = HomeR + -- Where to send a user after logout + logoutDest _ = HomeR + -- Override the above two destinations when a Referer: header is present + redirectToReferer _ = True + + getAuthId creds = runDB $ do + x <- getBy $ UniqueUser $ credsIdent creds + case x of + Just (Entity uid _) -> return $ Just uid + Nothing -> Just <$> insert User + { userIdent = credsIdent creds + , userPassword = Nothing + } + + -- You can add other plugins like BrowserID, email or OAuth here + authPlugins _ = [authBrowserId def] + + authHttpManager = getHttpManager + +instance YesodAuthPersist App + +-- This instance is required to use forms. You can modify renderMessage to +-- achieve customized and internationalized form validation messages. +instance RenderMessage App FormMessage where + renderMessage _ _ = defaultFormMessage + +unsafeHandler :: App -> Handler a -> IO a +unsafeHandler = Unsafe.fakeHandlerGetLogger appLogger + +-- Note: Some functionality previously present in the scaffolding has been +-- moved to documentation in the Wiki. Following are some hopefully helpful +-- links: +-- +-- https://github.com/yesodweb/yesod/wiki/Sending-email +-- https://github.com/yesodweb/yesod/wiki/Serve-static-files-from-a-separate-domain +-- https://github.com/yesodweb/yesod/wiki/i18n-messages-in-the-scaffolding diff --git a/web/Handler/Common.hs b/web/Handler/Common.hs new file mode 100644 index 0000000..eadd206 --- /dev/null +++ b/web/Handler/Common.hs @@ -0,0 +1,16 @@ +-- | Common handler functions. +module Handler.Common where + +import Data.FileEmbed (embedFile) +import Import + +-- These handlers embed files in the executable at compile time to avoid a +-- runtime dependency, and for efficiency. + +getFaviconR :: Handler TypedContent +getFaviconR = return $ TypedContent "image/x-icon" + $ toContent $(embedFile "config/favicon.ico") + +getRobotsR :: Handler TypedContent +getRobotsR = return $ TypedContent typePlain + $ toContent $(embedFile "config/robots.txt") diff --git a/web/Handler/Home.hs b/web/Handler/Home.hs new file mode 100644 index 0000000..86e3039 --- /dev/null +++ b/web/Handler/Home.hs @@ -0,0 +1,40 @@ +module Handler.Home where + +import Import +import Yesod.Form.Bootstrap3 (BootstrapFormLayout (..), renderBootstrap3, + withSmallInput) + +-- This is a handler function for the GET request method on the HomeR +-- resource pattern. All of your resource patterns are defined in +-- config/routes +-- +-- The majority of the code you will write in Yesod lives in these handler +-- functions. You can spread them across multiple files if you are so +-- inclined, or create a single monolithic file. +getHomeR :: Handler Html +getHomeR = do + (formWidget, formEnctype) <- generateFormPost sampleForm + let submission = Nothing :: Maybe (FileInfo, Text) + handlerName = "getHomeR" :: Text + defaultLayout $ do + aDomId <- newIdent + setTitle "Welcome To Yesod!" + $(widgetFile "homepage") + +postHomeR :: Handler Html +postHomeR = do + ((result, formWidget), formEnctype) <- runFormPost sampleForm + let handlerName = "postHomeR" :: Text + submission = case result of + FormSuccess res -> Just res + _ -> Nothing + + defaultLayout $ do + aDomId <- newIdent + setTitle "Welcome To Yesod!" + $(widgetFile "homepage") + +sampleForm :: Form (FileInfo, Text) +sampleForm = renderBootstrap3 BootstrapBasicForm $ (,) + <$> fileAFormReq "Choose a file" + <*> areq textField (withSmallInput "What's on the file?") Nothing diff --git a/web/Import.hs b/web/Import.hs new file mode 100644 index 0000000..a102001 --- /dev/null +++ b/web/Import.hs @@ -0,0 +1,6 @@ +module Import + ( module Import + ) where + +import Foundation as Import +import Import.NoFoundation as Import diff --git a/web/Import/NoFoundation.hs b/web/Import/NoFoundation.hs new file mode 100644 index 0000000..15bf2dc --- /dev/null +++ b/web/Import/NoFoundation.hs @@ -0,0 +1,11 @@ +module Import.NoFoundation + ( module Import + ) where + +import ClassyPrelude.Yesod as Import +import Model as Import +import Settings as Import +import Settings.StaticFiles as Import +import Yesod.Auth as Import +import Yesod.Core.Types as Import (loggerSet) +import Yesod.Default.Config2 as Import diff --git a/web/Model.hs b/web/Model.hs new file mode 100644 index 0000000..353bafb --- /dev/null +++ b/web/Model.hs @@ -0,0 +1,11 @@ +module Model where + +import ClassyPrelude.Yesod +import Database.Persist.Quasi + +-- You can define all of your database entities in the entities file. +-- You can find more information on persistent and how to declare entities +-- at: +-- http://www.yesodweb.com/book/persistent/ +share [mkPersist sqlSettings, mkMigrate "migrateAll"] + $(persistFileWith lowerCaseSettings "config/models") diff --git a/web/Settings.hs b/web/Settings.hs new file mode 100644 index 0000000..fb4310e --- /dev/null +++ b/web/Settings.hs @@ -0,0 +1,134 @@ +-- | Settings are centralized, as much as possible, into this file. This +-- includes database connection settings, static file locations, etc. +-- In addition, you can configure a number of different aspects of Yesod +-- by overriding methods in the Yesod typeclass. That instance is +-- declared in the Foundation.hs file. +module Settings where + +import ClassyPrelude.Yesod +import Control.Exception (throw) +import Data.Aeson (Result (..), fromJSON, withObject, (.!=), + (.:?)) +import Data.FileEmbed (embedFile) +import Data.Yaml (decodeEither') +import Database.Persist.Sqlite (SqliteConf) +import Language.Haskell.TH.Syntax (Exp, Name, Q) +import Network.Wai.Handler.Warp (HostPreference) +import Yesod.Default.Config2 (applyEnvValue, configSettingsYml) +import Yesod.Default.Util (WidgetFileSettings, widgetFileNoReload, + widgetFileReload) + +-- | Runtime settings to configure this application. These settings can be +-- loaded from various sources: defaults, environment variables, config files, +-- theoretically even a database. +data AppSettings = AppSettings + { appStaticDir :: String + -- ^ Directory from which to serve static files. + , appDatabaseConf :: SqliteConf + -- ^ Configuration settings for accessing the database. + , appRoot :: Text + -- ^ Base for all generated URLs. + , appHost :: HostPreference + -- ^ Host/interface the server should bind to. + , appPort :: Int + -- ^ Port to listen on + , appIpFromHeader :: Bool + -- ^ Get the IP address from the header when logging. Useful when sitting + -- behind a reverse proxy. + + , appDetailedRequestLogging :: Bool + -- ^ Use detailed request logging system + , appShouldLogAll :: Bool + -- ^ Should all log messages be displayed? + , appReloadTemplates :: Bool + -- ^ Use the reload version of templates + , appMutableStatic :: Bool + -- ^ Assume that files in the static dir may change after compilation + , appSkipCombining :: Bool + -- ^ Perform no stylesheet/script combining + + -- Example app-specific configuration values. + , appCopyright :: Text + -- ^ Copyright text to appear in the footer of the page + , appAnalytics :: Maybe Text + -- ^ Google Analytics code + } + +instance FromJSON AppSettings where + parseJSON = withObject "AppSettings" $ \o -> do + let defaultDev = +#if DEVELOPMENT + True +#else + False +#endif + appStaticDir <- o .: "static-dir" + appDatabaseConf <- o .: "database" + appRoot <- o .: "approot" + appHost <- fromString <$> o .: "host" + appPort <- o .: "port" + appIpFromHeader <- o .: "ip-from-header" + + appDetailedRequestLogging <- o .:? "detailed-logging" .!= defaultDev + appShouldLogAll <- o .:? "should-log-all" .!= defaultDev + appReloadTemplates <- o .:? "reload-templates" .!= defaultDev + appMutableStatic <- o .:? "mutable-static" .!= defaultDev + appSkipCombining <- o .:? "skip-combining" .!= defaultDev + + appCopyright <- o .: "copyright" + appAnalytics <- o .:? "analytics" + + return AppSettings {..} + +-- | Settings for 'widgetFile', such as which template languages to support and +-- default Hamlet settings. +-- +-- For more information on modifying behavior, see: +-- +-- https://github.com/yesodweb/yesod/wiki/Overriding-widgetFile +widgetFileSettings :: WidgetFileSettings +widgetFileSettings = def + +-- | How static files should be combined. +combineSettings :: CombineSettings +combineSettings = def + +-- The rest of this file contains settings which rarely need changing by a +-- user. + +widgetFile :: String -> Q Exp +widgetFile = (if appReloadTemplates compileTimeAppSettings + then widgetFileReload + else widgetFileNoReload) + widgetFileSettings + +-- | Raw bytes at compile time of @config/settings.yml@ +configSettingsYmlBS :: ByteString +configSettingsYmlBS = $(embedFile configSettingsYml) + +-- | @config/settings.yml@, parsed to a @Value@. +configSettingsYmlValue :: Value +configSettingsYmlValue = either throw id $ decodeEither' configSettingsYmlBS + +-- | A version of @AppSettings@ parsed at compile time from @config/settings.yml@. +compileTimeAppSettings :: AppSettings +compileTimeAppSettings = + case fromJSON $ applyEnvValue False mempty configSettingsYmlValue of + Error e -> error e + Success settings -> settings + +-- The following two functions can be used to combine multiple CSS or JS files +-- at compile time to decrease the number of http requests. +-- Sample usage (inside a Widget): +-- +-- > $(combineStylesheets 'StaticR [style1_css, style2_css]) + +combineStylesheets :: Name -> [Route Static] -> Q Exp +combineStylesheets = combineStylesheets' + (appSkipCombining compileTimeAppSettings) + combineSettings + +combineScripts :: Name -> [Route Static] -> Q Exp +combineScripts = combineScripts' + (appSkipCombining compileTimeAppSettings) + combineSettings diff --git a/web/Settings/StaticFiles.hs b/web/Settings/StaticFiles.hs new file mode 100644 index 0000000..c8021d3 --- /dev/null +++ b/web/Settings/StaticFiles.hs @@ -0,0 +1,18 @@ +module Settings.StaticFiles where + +import Settings (appStaticDir, compileTimeAppSettings) +import Yesod.Static (staticFiles) + +-- This generates easy references to files in the static directory at compile time, +-- giving you compile-time verification that referenced files exist. +-- Warning: any files added to your static directory during run-time can't be +-- accessed this way. You'll have to use their FilePath or URL to access them. +-- +-- For example, to refer to @static/js/script.js@ via an identifier, you'd use: +-- +-- js_script_js +-- +-- If the identifier is not available, you may use: +-- +-- StaticFile ["js", "script.js"] [] +staticFiles (appStaticDir compileTimeAppSettings) diff --git a/web/app/DevelMain.hs b/web/app/DevelMain.hs new file mode 100644 index 0000000..b327943 --- /dev/null +++ b/web/app/DevelMain.hs @@ -0,0 +1,99 @@ +-- | Running your app inside GHCi. +-- +-- To start up GHCi for usage with Yesod, first make sure you are in dev mode: +-- +-- > cabal configure -fdev +-- +-- Note that @yesod devel@ automatically sets the dev flag. +-- Now launch the repl: +-- +-- > cabal repl --ghc-options="-O0 -fobject-code" +-- +-- To start your app, run: +-- +-- > :l DevelMain +-- > DevelMain.update +-- +-- You can also call @DevelMain.shutdown@ to stop the app +-- +-- You will need to add the foreign-store package to your .cabal file. +-- It is very light-weight. +-- +-- If you don't use cabal repl, you will need +-- to run the following in GHCi or to add it to +-- your .ghci file. +-- +-- :set -DDEVELOPMENT +-- +-- There is more information about this approach, +-- on the wiki: https://github.com/yesodweb/yesod/wiki/ghci + +module DevelMain where + +import Prelude +import Application (getApplicationRepl, shutdownApp) + +import Control.Exception (finally) +import Control.Monad ((>=>)) +import Control.Concurrent +import Data.IORef +import Foreign.Store +import Network.Wai.Handler.Warp +import GHC.Word + +-- | Start or restart the server. +-- newStore is from foreign-store. +-- A Store holds onto some data across ghci reloads +update :: IO () +update = do + mtidStore <- lookupStore tidStoreNum + case mtidStore of + -- no server running + Nothing -> do + done <- storeAction doneStore newEmptyMVar + tid <- start done + _ <- storeAction (Store tidStoreNum) (newIORef tid) + return () + -- server is already running + Just tidStore -> restartAppInNewThread tidStore + where + doneStore :: Store (MVar ()) + doneStore = Store 0 + + -- shut the server down with killThread and wait for the done signal + restartAppInNewThread :: Store (IORef ThreadId) -> IO () + restartAppInNewThread tidStore = modifyStoredIORef tidStore $ \tid -> do + killThread tid + withStore doneStore takeMVar + readStore doneStore >>= start + + + -- | Start the server in a separate thread. + start :: MVar () -- ^ Written to when the thread is killed. + -> IO ThreadId + start done = do + (port, site, app) <- getApplicationRepl + forkIO (finally (runSettings (setPort port defaultSettings) app) + -- Note that this implies concurrency + -- between shutdownApp and the next app that is starting. + -- Normally this should be fine + (putMVar done () >> shutdownApp site)) + +-- | kill the server +shutdown :: IO () +shutdown = do + mtidStore <- lookupStore tidStoreNum + case mtidStore of + -- no server running + Nothing -> putStrLn "no Yesod app running" + Just tidStore -> do + withStore tidStore $ readIORef >=> killThread + putStrLn "Yesod app is shutdown" + +tidStoreNum :: Word32 +tidStoreNum = 1 + +modifyStoredIORef :: Store (IORef a) -> (a -> IO a) -> IO () +modifyStoredIORef store f = withStore store $ \ref -> do + v <- readIORef ref + f v >>= writeIORef ref diff --git a/web/app/devel.hs b/web/app/devel.hs new file mode 100644 index 0000000..3e27a36 --- /dev/null +++ b/web/app/devel.hs @@ -0,0 +1,6 @@ +{-# LANGUAGE PackageImports #-} +import "hcompta-web" Application (develMain) +import Prelude (IO) + +main :: IO () +main = develMain diff --git a/web/app/main.hs b/web/app/main.hs new file mode 100644 index 0000000..4ffa93d --- /dev/null +++ b/web/app/main.hs @@ -0,0 +1,5 @@ +import Prelude (IO) +import Application (appMain) + +main :: IO () +main = appMain diff --git a/web/config/favicon.ico b/web/config/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..9dd5f356d4119b9f50f2cfc370d84b975688ca3f GIT binary patch literal 1342 zcmZQzU}Ruo5D);-3Je)63=C=v3=9GSObm<+j0_tX7#R9k7#K7_Vhjun3Jef+3^>5D zI2~jeMn_F))n-lUQe@!lq{ok7#{OiVkpDfI!T)Y*;sO{xAD@9{RX+|cPUIPhsrXWM#oK3QRUDX-IQLW{RGRFk(kOoQ`5j27p=7%i^<&hl&l2?l~^ zZG;*4eKiD<+r!Ntou6B?w>jMMVYQF$>yy*V_D@c6xtnGw^*_yA@_(9z)cHis4 zGXK*prT&;munI=%3Ye-1FsM}c=wCfKt>nIbVZ2G)!wY2|D9?6 z|3K*!l5T_lf#~jxpnu(&LH~NQL;m$;hyLr&4gX&gW;-X@N{$U=KN}MRL%O?>L2HWN zty$IS|7TXE{hwKx`fp}c8VLWNRh9OCR(1NnSv8p;`hRW!B zFmG-{?*HXI)&G}uSN&hsQw3(P=&kubyDsZ= 1.8 +build-type: Simple + +Flag dev + Description: Turn on development settings, like auto-reload templates. + Default: False + +Flag library-only + Description: Build for use with "yesod devel" + Default: False + +library + hs-source-dirs: ., app + exposed-modules: Application + Foundation + Import + Import.NoFoundation + Model + Settings + Settings.StaticFiles + Handler.Common + Handler.Home + + if flag(dev) || flag(library-only) + cpp-options: -DDEVELOPMENT + ghc-options: -Wall -fwarn-tabs -O0 + else + ghc-options: -Wall -fwarn-tabs -O2 + + extensions: TemplateHaskell + QuasiQuotes + OverloadedStrings + NoImplicitPrelude + CPP + MultiParamTypeClasses + TypeFamilies + GADTs + GeneralizedNewtypeDeriving + FlexibleContexts + EmptyDataDecls + NoMonomorphismRestriction + DeriveDataTypeable + ViewPatterns + TupleSections + RecordWildCards + + build-depends: base >= 4 && < 5 + , yesod >= 1.4.1 && < 1.5 + , yesod-core >= 1.4.6 && < 1.5 + , yesod-auth >= 1.4.0 && < 1.5 + , yesod-static >= 1.4.0.3 && < 1.5 + , yesod-form >= 1.4.0 && < 1.5 + , classy-prelude >= 0.10.2 + , classy-prelude-conduit >= 0.10.2 + , classy-prelude-yesod >= 0.10.2 + , bytestring >= 0.9 && < 0.11 + , text >= 0.11 && < 2.0 + , persistent >= 2.0 && < 2.2 + , persistent-sqlite >= 2.1.1 && < 2.2 + , persistent-template >= 2.0 && < 2.2 + , template-haskell + , shakespeare >= 2.0 && < 2.1 + , hjsmin >= 0.1 && < 0.2 + , monad-control >= 0.3 && < 1.1 + , wai-extra >= 3.0 && < 3.1 + , yaml >= 0.8 && < 0.9 + , http-conduit >= 2.1 && < 2.2 + , directory >= 1.1 && < 1.3 + , warp >= 3.0 && < 3.1 + , data-default + , aeson >= 0.6 && < 0.9 + , conduit >= 1.0 && < 2.0 + , monad-logger >= 0.3 && < 0.4 + , fast-logger >= 2.2 && < 2.4 + , wai-logger >= 2.2 && < 2.3 + , file-embed + , safe + , unordered-containers + , containers + , vector + , time + +executable hcompta-web + if flag(library-only) + Buildable: False + + main-is: main.hs + hs-source-dirs: app + build-depends: base, hcompta-web + + ghc-options: -threaded -O2 -rtsopts -with-rtsopts=-N + +test-suite test + type: exitcode-stdio-1.0 + main-is: Spec.hs + hs-source-dirs: test + ghc-options: -Wall + + extensions: TemplateHaskell + QuasiQuotes + OverloadedStrings + NoImplicitPrelude + CPP + MultiParamTypeClasses + TypeFamilies + GADTs + GeneralizedNewtypeDeriving + FlexibleContexts + EmptyDataDecls + NoMonomorphismRestriction + DeriveDataTypeable + ViewPatterns + TupleSections + + build-depends: base + , hcompta-web + , yesod-test >= 1.4.3 && < 1.5 + , yesod-core + , yesod + , persistent + , persistent-sqlite + , resourcet + , monad-logger + , shakespeare + , transformers + , hspec >= 2.0.0 + , classy-prelude + , classy-prelude-yesod diff --git a/web/static/css/bootstrap.css b/web/static/css/bootstrap.css new file mode 100644 index 0000000..88123dc --- /dev/null +++ b/web/static/css/bootstrap.css @@ -0,0 +1,6202 @@ +/*! + * Bootstrap v3.2.0 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +/*! normalize.css v3.0.1 | MIT License | git.io/normalize */ +html { + font-family: sans-serif; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} +body { + margin: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +summary { + display: block; +} +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} +audio:not([controls]) { + display: none; + height: 0; +} +[hidden], +template { + display: none; +} +a { + background: transparent; +} +a:active, +a:hover { + outline: 0; +} +abbr[title] { + border-bottom: 1px dotted; +} +b, +strong { + font-weight: bold; +} +dfn { + font-style: italic; +} +h1 { + margin: .67em 0; + font-size: 2em; +} +mark { + color: #000; + background: #ff0; +} +small { + font-size: 80%; +} +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} +sup { + top: -.5em; +} +sub { + bottom: -.25em; +} +img { + border: 0; +} +svg:not(:root) { + overflow: hidden; +} +figure { + margin: 1em 40px; +} +hr { + height: 0; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +pre { + overflow: auto; +} +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +button, +input, +optgroup, +select, +textarea { + margin: 0; + font: inherit; + color: inherit; +} +button { + overflow: visible; +} +button, +select { + text-transform: none; +} +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} +button[disabled], +html input[disabled] { + cursor: default; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} +input { + line-height: normal; +} +input[type="checkbox"], +input[type="radio"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 0; +} +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} +input[type="search"] { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield; +} +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +fieldset { + padding: .35em .625em .75em; + margin: 0 2px; + border: 1px solid #c0c0c0; +} +legend { + padding: 0; + border: 0; +} +textarea { + overflow: auto; +} +optgroup { + font-weight: bold; +} +table { + border-spacing: 0; + border-collapse: collapse; +} +td, +th { + padding: 0; +} +@media print { + * { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + 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; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + select { + background: #fff !important; + } + .navbar { + display: none; + } + .table td, + .table th { + background-color: #fff !important; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} +@font-face { + font-family: 'Glyphicons Halflings'; + + src: url('../fonts/glyphicons-halflings-regular.eot'); + src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); +} +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.glyphicon-asterisk:before { + content: "\2a"; +} +.glyphicon-plus:before { + content: "\2b"; +} +.glyphicon-euro:before { + content: "\20ac"; +} +.glyphicon-minus:before { + content: "\2212"; +} +.glyphicon-cloud:before { + content: "\2601"; +} +.glyphicon-envelope:before { + content: "\2709"; +} +.glyphicon-pencil:before { + content: "\270f"; +} +.glyphicon-glass:before { + content: "\e001"; +} +.glyphicon-music:before { + content: "\e002"; +} +.glyphicon-search:before { + content: "\e003"; +} +.glyphicon-heart:before { + content: "\e005"; +} +.glyphicon-star:before { + content: "\e006"; +} +.glyphicon-star-empty:before { + content: "\e007"; +} +.glyphicon-user:before { + content: "\e008"; +} +.glyphicon-film:before { + content: "\e009"; +} +.glyphicon-th-large:before { + content: "\e010"; +} +.glyphicon-th:before { + content: "\e011"; +} +.glyphicon-th-list:before { + content: "\e012"; +} +.glyphicon-ok:before { + content: "\e013"; +} +.glyphicon-remove:before { + content: "\e014"; +} +.glyphicon-zoom-in:before { + content: "\e015"; +} +.glyphicon-zoom-out:before { + content: "\e016"; +} +.glyphicon-off:before { + content: "\e017"; +} +.glyphicon-signal:before { + content: "\e018"; +} +.glyphicon-cog:before { + content: "\e019"; +} +.glyphicon-trash:before { + content: "\e020"; +} +.glyphicon-home:before { + content: "\e021"; +} +.glyphicon-file:before { + content: "\e022"; +} +.glyphicon-time:before { + content: "\e023"; +} +.glyphicon-road:before { + content: "\e024"; +} +.glyphicon-download-alt:before { + content: "\e025"; +} +.glyphicon-download:before { + content: "\e026"; +} +.glyphicon-upload:before { + content: "\e027"; +} +.glyphicon-inbox:before { + content: "\e028"; +} +.glyphicon-play-circle:before { + content: "\e029"; +} +.glyphicon-repeat:before { + content: "\e030"; +} +.glyphicon-refresh:before { + content: "\e031"; +} +.glyphicon-list-alt:before { + content: "\e032"; +} +.glyphicon-lock:before { + content: "\e033"; +} +.glyphicon-flag:before { + content: "\e034"; +} +.glyphicon-headphones:before { + content: "\e035"; +} +.glyphicon-volume-off:before { + content: "\e036"; +} +.glyphicon-volume-down:before { + content: "\e037"; +} +.glyphicon-volume-up:before { + content: "\e038"; +} +.glyphicon-qrcode:before { + content: "\e039"; +} +.glyphicon-barcode:before { + content: "\e040"; +} +.glyphicon-tag:before { + content: "\e041"; +} +.glyphicon-tags:before { + content: "\e042"; +} +.glyphicon-book:before { + content: "\e043"; +} +.glyphicon-bookmark:before { + content: "\e044"; +} +.glyphicon-print:before { + content: "\e045"; +} +.glyphicon-camera:before { + content: "\e046"; +} +.glyphicon-font:before { + content: "\e047"; +} +.glyphicon-bold:before { + content: "\e048"; +} +.glyphicon-italic:before { + content: "\e049"; +} +.glyphicon-text-height:before { + content: "\e050"; +} +.glyphicon-text-width:before { + content: "\e051"; +} +.glyphicon-align-left:before { + content: "\e052"; +} +.glyphicon-align-center:before { + content: "\e053"; +} +.glyphicon-align-right:before { + content: "\e054"; +} +.glyphicon-align-justify:before { + content: "\e055"; +} +.glyphicon-list:before { + content: "\e056"; +} +.glyphicon-indent-left:before { + content: "\e057"; +} +.glyphicon-indent-right:before { + content: "\e058"; +} +.glyphicon-facetime-video:before { + content: "\e059"; +} +.glyphicon-picture:before { + content: "\e060"; +} +.glyphicon-map-marker:before { + content: "\e062"; +} +.glyphicon-adjust:before { + content: "\e063"; +} +.glyphicon-tint:before { + content: "\e064"; +} +.glyphicon-edit:before { + content: "\e065"; +} +.glyphicon-share:before { + content: "\e066"; +} +.glyphicon-check:before { + content: "\e067"; +} +.glyphicon-move:before { + content: "\e068"; +} +.glyphicon-step-backward:before { + content: "\e069"; +} +.glyphicon-fast-backward:before { + content: "\e070"; +} +.glyphicon-backward:before { + content: "\e071"; +} +.glyphicon-play:before { + content: "\e072"; +} +.glyphicon-pause:before { + content: "\e073"; +} +.glyphicon-stop:before { + content: "\e074"; +} +.glyphicon-forward:before { + content: "\e075"; +} +.glyphicon-fast-forward:before { + content: "\e076"; +} +.glyphicon-step-forward:before { + content: "\e077"; +} +.glyphicon-eject:before { + content: "\e078"; +} +.glyphicon-chevron-left:before { + content: "\e079"; +} +.glyphicon-chevron-right:before { + content: "\e080"; +} +.glyphicon-plus-sign:before { + content: "\e081"; +} +.glyphicon-minus-sign:before { + content: "\e082"; +} +.glyphicon-remove-sign:before { + content: "\e083"; +} +.glyphicon-ok-sign:before { + content: "\e084"; +} +.glyphicon-question-sign:before { + content: "\e085"; +} +.glyphicon-info-sign:before { + content: "\e086"; +} +.glyphicon-screenshot:before { + content: "\e087"; +} +.glyphicon-remove-circle:before { + content: "\e088"; +} +.glyphicon-ok-circle:before { + content: "\e089"; +} +.glyphicon-ban-circle:before { + content: "\e090"; +} +.glyphicon-arrow-left:before { + content: "\e091"; +} +.glyphicon-arrow-right:before { + content: "\e092"; +} +.glyphicon-arrow-up:before { + content: "\e093"; +} +.glyphicon-arrow-down:before { + content: "\e094"; +} +.glyphicon-share-alt:before { + content: "\e095"; +} +.glyphicon-resize-full:before { + content: "\e096"; +} +.glyphicon-resize-small:before { + content: "\e097"; +} +.glyphicon-exclamation-sign:before { + content: "\e101"; +} +.glyphicon-gift:before { + content: "\e102"; +} +.glyphicon-leaf:before { + content: "\e103"; +} +.glyphicon-fire:before { + content: "\e104"; +} +.glyphicon-eye-open:before { + content: "\e105"; +} +.glyphicon-eye-close:before { + content: "\e106"; +} +.glyphicon-warning-sign:before { + content: "\e107"; +} +.glyphicon-plane:before { + content: "\e108"; +} +.glyphicon-calendar:before { + content: "\e109"; +} +.glyphicon-random:before { + content: "\e110"; +} +.glyphicon-comment:before { + content: "\e111"; +} +.glyphicon-magnet:before { + content: "\e112"; +} +.glyphicon-chevron-up:before { + content: "\e113"; +} +.glyphicon-chevron-down:before { + content: "\e114"; +} +.glyphicon-retweet:before { + content: "\e115"; +} +.glyphicon-shopping-cart:before { + content: "\e116"; +} +.glyphicon-folder-close:before { + content: "\e117"; +} +.glyphicon-folder-open:before { + content: "\e118"; +} +.glyphicon-resize-vertical:before { + content: "\e119"; +} +.glyphicon-resize-horizontal:before { + content: "\e120"; +} +.glyphicon-hdd:before { + content: "\e121"; +} +.glyphicon-bullhorn:before { + content: "\e122"; +} +.glyphicon-bell:before { + content: "\e123"; +} +.glyphicon-certificate:before { + content: "\e124"; +} +.glyphicon-thumbs-up:before { + content: "\e125"; +} +.glyphicon-thumbs-down:before { + content: "\e126"; +} +.glyphicon-hand-right:before { + content: "\e127"; +} +.glyphicon-hand-left:before { + content: "\e128"; +} +.glyphicon-hand-up:before { + content: "\e129"; +} +.glyphicon-hand-down:before { + content: "\e130"; +} +.glyphicon-circle-arrow-right:before { + content: "\e131"; +} +.glyphicon-circle-arrow-left:before { + content: "\e132"; +} +.glyphicon-circle-arrow-up:before { + content: "\e133"; +} +.glyphicon-circle-arrow-down:before { + content: "\e134"; +} +.glyphicon-globe:before { + content: "\e135"; +} +.glyphicon-wrench:before { + content: "\e136"; +} +.glyphicon-tasks:before { + content: "\e137"; +} +.glyphicon-filter:before { + content: "\e138"; +} +.glyphicon-briefcase:before { + content: "\e139"; +} +.glyphicon-fullscreen:before { + content: "\e140"; +} +.glyphicon-dashboard:before { + content: "\e141"; +} +.glyphicon-paperclip:before { + content: "\e142"; +} +.glyphicon-heart-empty:before { + content: "\e143"; +} +.glyphicon-link:before { + content: "\e144"; +} +.glyphicon-phone:before { + content: "\e145"; +} +.glyphicon-pushpin:before { + content: "\e146"; +} +.glyphicon-usd:before { + content: "\e148"; +} +.glyphicon-gbp:before { + content: "\e149"; +} +.glyphicon-sort:before { + content: "\e150"; +} +.glyphicon-sort-by-alphabet:before { + content: "\e151"; +} +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152"; +} +.glyphicon-sort-by-order:before { + content: "\e153"; +} +.glyphicon-sort-by-order-alt:before { + content: "\e154"; +} +.glyphicon-sort-by-attributes:before { + content: "\e155"; +} +.glyphicon-sort-by-attributes-alt:before { + content: "\e156"; +} +.glyphicon-unchecked:before { + content: "\e157"; +} +.glyphicon-expand:before { + content: "\e158"; +} +.glyphicon-collapse-down:before { + content: "\e159"; +} +.glyphicon-collapse-up:before { + content: "\e160"; +} +.glyphicon-log-in:before { + content: "\e161"; +} +.glyphicon-flash:before { + content: "\e162"; +} +.glyphicon-log-out:before { + content: "\e163"; +} +.glyphicon-new-window:before { + content: "\e164"; +} +.glyphicon-record:before { + content: "\e165"; +} +.glyphicon-save:before { + content: "\e166"; +} +.glyphicon-open:before { + content: "\e167"; +} +.glyphicon-saved:before { + content: "\e168"; +} +.glyphicon-import:before { + content: "\e169"; +} +.glyphicon-export:before { + content: "\e170"; +} +.glyphicon-send:before { + content: "\e171"; +} +.glyphicon-floppy-disk:before { + content: "\e172"; +} +.glyphicon-floppy-saved:before { + content: "\e173"; +} +.glyphicon-floppy-remove:before { + content: "\e174"; +} +.glyphicon-floppy-save:before { + content: "\e175"; +} +.glyphicon-floppy-open:before { + content: "\e176"; +} +.glyphicon-credit-card:before { + content: "\e177"; +} +.glyphicon-transfer:before { + content: "\e178"; +} +.glyphicon-cutlery:before { + content: "\e179"; +} +.glyphicon-header:before { + content: "\e180"; +} +.glyphicon-compressed:before { + content: "\e181"; +} +.glyphicon-earphone:before { + content: "\e182"; +} +.glyphicon-phone-alt:before { + content: "\e183"; +} +.glyphicon-tower:before { + content: "\e184"; +} +.glyphicon-stats:before { + content: "\e185"; +} +.glyphicon-sd-video:before { + content: "\e186"; +} +.glyphicon-hd-video:before { + content: "\e187"; +} +.glyphicon-subtitles:before { + content: "\e188"; +} +.glyphicon-sound-stereo:before { + content: "\e189"; +} +.glyphicon-sound-dolby:before { + content: "\e190"; +} +.glyphicon-sound-5-1:before { + content: "\e191"; +} +.glyphicon-sound-6-1:before { + content: "\e192"; +} +.glyphicon-sound-7-1:before { + content: "\e193"; +} +.glyphicon-copyright-mark:before { + content: "\e194"; +} +.glyphicon-registration-mark:before { + content: "\e195"; +} +.glyphicon-cloud-download:before { + content: "\e197"; +} +.glyphicon-cloud-upload:before { + content: "\e198"; +} +.glyphicon-tree-conifer:before { + content: "\e199"; +} +.glyphicon-tree-deciduous:before { + content: "\e200"; +} +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +html { + font-size: 10px; + + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.42857143; + color: #333; + background-color: #fff; +} +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} +a { + color: #428bca; + text-decoration: none; +} +a:hover, +a:focus { + color: #2a6496; + text-decoration: underline; +} +a:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +figure { + margin: 0; +} +img { + vertical-align: middle; +} +.img-responsive, +.thumbnail > img, +.thumbnail a > img, +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + width: 100% \9; + max-width: 100%; + height: auto; +} +.img-rounded { + border-radius: 6px; +} +.img-thumbnail { + display: inline-block; + width: 100% \9; + max-width: 100%; + height: auto; + padding: 4px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; +} +.img-circle { + border-radius: 50%; +} +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eee; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small, +.h1 small, +.h2 small, +.h3 small, +.h4 small, +.h5 small, +.h6 small, +h1 .small, +h2 .small, +h3 .small, +h4 .small, +h5 .small, +h6 .small, +.h1 .small, +.h2 .small, +.h3 .small, +.h4 .small, +.h5 .small, +.h6 .small { + font-weight: normal; + line-height: 1; + color: #777; +} +h1, +.h1, +h2, +.h2, +h3, +.h3 { + margin-top: 20px; + margin-bottom: 10px; +} +h1 small, +.h1 small, +h2 small, +.h2 small, +h3 small, +.h3 small, +h1 .small, +.h1 .small, +h2 .small, +.h2 .small, +h3 .small, +.h3 .small { + font-size: 65%; +} +h4, +.h4, +h5, +.h5, +h6, +.h6 { + margin-top: 10px; + margin-bottom: 10px; +} +h4 small, +.h4 small, +h5 small, +.h5 small, +h6 small, +.h6 small, +h4 .small, +.h4 .small, +h5 .small, +.h5 .small, +h6 .small, +.h6 .small { + font-size: 75%; +} +h1, +.h1 { + font-size: 36px; +} +h2, +.h2 { + font-size: 30px; +} +h3, +.h3 { + font-size: 24px; +} +h4, +.h4 { + font-size: 18px; +} +h5, +.h5 { + font-size: 14px; +} +h6, +.h6 { + font-size: 12px; +} +p { + margin: 0 0 10px; +} +.lead { + margin-bottom: 20px; + font-size: 16px; + font-weight: 300; + line-height: 1.4; +} +@media (min-width: 768px) { + .lead { + font-size: 21px; + } +} +small, +.small { + font-size: 85%; +} +cite { + font-style: normal; +} +mark, +.mark { + padding: .2em; + background-color: #fcf8e3; +} +.text-left { + text-align: left; +} +.text-right { + text-align: right; +} +.text-center { + text-align: center; +} +.text-justify { + text-align: justify; +} +.text-nowrap { + white-space: nowrap; +} +.text-lowercase { + text-transform: lowercase; +} +.text-uppercase { + text-transform: uppercase; +} +.text-capitalize { + text-transform: capitalize; +} +.text-muted { + color: #777; +} +.text-primary { + color: #428bca; +} +a.text-primary:hover { + color: #3071a9; +} +.text-success { + color: #3c763d; +} +a.text-success:hover { + color: #2b542c; +} +.text-info { + color: #31708f; +} +a.text-info:hover { + color: #245269; +} +.text-warning { + color: #8a6d3b; +} +a.text-warning:hover { + color: #66512c; +} +.text-danger { + color: #a94442; +} +a.text-danger:hover { + color: #843534; +} +.bg-primary { + color: #fff; + background-color: #428bca; +} +a.bg-primary:hover { + background-color: #3071a9; +} +.bg-success { + background-color: #dff0d8; +} +a.bg-success:hover { + background-color: #c1e2b3; +} +.bg-info { + background-color: #d9edf7; +} +a.bg-info:hover { + background-color: #afd9ee; +} +.bg-warning { + background-color: #fcf8e3; +} +a.bg-warning:hover { + background-color: #f7ecb5; +} +.bg-danger { + background-color: #f2dede; +} +a.bg-danger:hover { + background-color: #e4b9b9; +} +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #eee; +} +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0; +} +.list-unstyled { + padding-left: 0; + list-style: none; +} +.list-inline { + padding-left: 0; + margin-left: -5px; + list-style: none; +} +.list-inline > li { + display: inline-block; + padding-right: 5px; + padding-left: 5px; +} +dl { + margin-top: 0; + margin-bottom: 20px; +} +dt, +dd { + line-height: 1.42857143; +} +dt { + font-weight: bold; +} +dd { + margin-left: 0; +} +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; + } + .dl-horizontal dd { + margin-left: 180px; + } +} +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #777; +} +.initialism { + font-size: 90%; + text-transform: uppercase; +} +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + font-size: 17.5px; + border-left: 5px solid #eee; +} +blockquote p:last-child, +blockquote ul:last-child, +blockquote ol:last-child { + margin-bottom: 0; +} +blockquote footer, +blockquote small, +blockquote .small { + display: block; + font-size: 80%; + line-height: 1.42857143; + color: #777; +} +blockquote footer:before, +blockquote small:before, +blockquote .small:before { + content: '\2014 \00A0'; +} +.blockquote-reverse, +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + text-align: right; + border-right: 5px solid #eee; + border-left: 0; +} +.blockquote-reverse footer:before, +blockquote.pull-right footer:before, +.blockquote-reverse small:before, +blockquote.pull-right small:before, +.blockquote-reverse .small:before, +blockquote.pull-right .small:before { + content: ''; +} +.blockquote-reverse footer:after, +blockquote.pull-right footer:after, +.blockquote-reverse small:after, +blockquote.pull-right small:after, +.blockquote-reverse .small:after, +blockquote.pull-right .small:after { + content: '\00A0 \2014'; +} +blockquote:before, +blockquote:after { + content: ""; +} +address { + margin-bottom: 20px; + font-style: normal; + line-height: 1.42857143; +} +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + background-color: #f9f2f4; + border-radius: 4px; +} +kbd { + padding: 2px 4px; + font-size: 90%; + color: #fff; + background-color: #333; + border-radius: 3px; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); +} +kbd kbd { + padding: 0; + font-size: 100%; + -webkit-box-shadow: none; + box-shadow: none; +} +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.42857143; + color: #333; + word-break: break-all; + word-wrap: break-word; + background-color: #f5f5f5; + border: 1px solid #ccc; + border-radius: 4px; +} +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; +} +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} +.container { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +@media (min-width: 768px) { + .container { + width: 750px; + } +} +@media (min-width: 992px) { + .container { + width: 970px; + } +} +@media (min-width: 1200px) { + .container { + width: 1170px; + } +} +.container-fluid { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +.row { + margin-right: -15px; + margin-left: -15px; +} +.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { + position: relative; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { + float: left; +} +.col-xs-12 { + width: 100%; +} +.col-xs-11 { + width: 91.66666667%; +} +.col-xs-10 { + width: 83.33333333%; +} +.col-xs-9 { + width: 75%; +} +.col-xs-8 { + width: 66.66666667%; +} +.col-xs-7 { + width: 58.33333333%; +} +.col-xs-6 { + width: 50%; +} +.col-xs-5 { + width: 41.66666667%; +} +.col-xs-4 { + width: 33.33333333%; +} +.col-xs-3 { + width: 25%; +} +.col-xs-2 { + width: 16.66666667%; +} +.col-xs-1 { + width: 8.33333333%; +} +.col-xs-pull-12 { + right: 100%; +} +.col-xs-pull-11 { + right: 91.66666667%; +} +.col-xs-pull-10 { + right: 83.33333333%; +} +.col-xs-pull-9 { + right: 75%; +} +.col-xs-pull-8 { + right: 66.66666667%; +} +.col-xs-pull-7 { + right: 58.33333333%; +} +.col-xs-pull-6 { + right: 50%; +} +.col-xs-pull-5 { + right: 41.66666667%; +} +.col-xs-pull-4 { + right: 33.33333333%; +} +.col-xs-pull-3 { + right: 25%; +} +.col-xs-pull-2 { + right: 16.66666667%; +} +.col-xs-pull-1 { + right: 8.33333333%; +} +.col-xs-pull-0 { + right: auto; +} +.col-xs-push-12 { + left: 100%; +} +.col-xs-push-11 { + left: 91.66666667%; +} +.col-xs-push-10 { + left: 83.33333333%; +} +.col-xs-push-9 { + left: 75%; +} +.col-xs-push-8 { + left: 66.66666667%; +} +.col-xs-push-7 { + left: 58.33333333%; +} +.col-xs-push-6 { + left: 50%; +} +.col-xs-push-5 { + left: 41.66666667%; +} +.col-xs-push-4 { + left: 33.33333333%; +} +.col-xs-push-3 { + left: 25%; +} +.col-xs-push-2 { + left: 16.66666667%; +} +.col-xs-push-1 { + left: 8.33333333%; +} +.col-xs-push-0 { + left: auto; +} +.col-xs-offset-12 { + margin-left: 100%; +} +.col-xs-offset-11 { + margin-left: 91.66666667%; +} +.col-xs-offset-10 { + margin-left: 83.33333333%; +} +.col-xs-offset-9 { + margin-left: 75%; +} +.col-xs-offset-8 { + margin-left: 66.66666667%; +} +.col-xs-offset-7 { + margin-left: 58.33333333%; +} +.col-xs-offset-6 { + margin-left: 50%; +} +.col-xs-offset-5 { + margin-left: 41.66666667%; +} +.col-xs-offset-4 { + margin-left: 33.33333333%; +} +.col-xs-offset-3 { + margin-left: 25%; +} +.col-xs-offset-2 { + margin-left: 16.66666667%; +} +.col-xs-offset-1 { + margin-left: 8.33333333%; +} +.col-xs-offset-0 { + margin-left: 0; +} +@media (min-width: 768px) { + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { + float: left; + } + .col-sm-12 { + width: 100%; + } + .col-sm-11 { + width: 91.66666667%; + } + .col-sm-10 { + width: 83.33333333%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-8 { + width: 66.66666667%; + } + .col-sm-7 { + width: 58.33333333%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-5 { + width: 41.66666667%; + } + .col-sm-4 { + width: 33.33333333%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-2 { + width: 16.66666667%; + } + .col-sm-1 { + width: 8.33333333%; + } + .col-sm-pull-12 { + right: 100%; + } + .col-sm-pull-11 { + right: 91.66666667%; + } + .col-sm-pull-10 { + right: 83.33333333%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-8 { + right: 66.66666667%; + } + .col-sm-pull-7 { + right: 58.33333333%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-5 { + right: 41.66666667%; + } + .col-sm-pull-4 { + right: 33.33333333%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-2 { + right: 16.66666667%; + } + .col-sm-pull-1 { + right: 8.33333333%; + } + .col-sm-pull-0 { + right: auto; + } + .col-sm-push-12 { + left: 100%; + } + .col-sm-push-11 { + left: 91.66666667%; + } + .col-sm-push-10 { + left: 83.33333333%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-8 { + left: 66.66666667%; + } + .col-sm-push-7 { + left: 58.33333333%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-5 { + left: 41.66666667%; + } + .col-sm-push-4 { + left: 33.33333333%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-2 { + left: 16.66666667%; + } + .col-sm-push-1 { + left: 8.33333333%; + } + .col-sm-push-0 { + left: auto; + } + .col-sm-offset-12 { + margin-left: 100%; + } + .col-sm-offset-11 { + margin-left: 91.66666667%; + } + .col-sm-offset-10 { + margin-left: 83.33333333%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-8 { + margin-left: 66.66666667%; + } + .col-sm-offset-7 { + margin-left: 58.33333333%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-5 { + margin-left: 41.66666667%; + } + .col-sm-offset-4 { + margin-left: 33.33333333%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-2 { + margin-left: 16.66666667%; + } + .col-sm-offset-1 { + margin-left: 8.33333333%; + } + .col-sm-offset-0 { + margin-left: 0; + } +} +@media (min-width: 992px) { + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { + float: left; + } + .col-md-12 { + width: 100%; + } + .col-md-11 { + width: 91.66666667%; + } + .col-md-10 { + width: 83.33333333%; + } + .col-md-9 { + width: 75%; + } + .col-md-8 { + width: 66.66666667%; + } + .col-md-7 { + width: 58.33333333%; + } + .col-md-6 { + width: 50%; + } + .col-md-5 { + width: 41.66666667%; + } + .col-md-4 { + width: 33.33333333%; + } + .col-md-3 { + width: 25%; + } + .col-md-2 { + width: 16.66666667%; + } + .col-md-1 { + width: 8.33333333%; + } + .col-md-pull-12 { + right: 100%; + } + .col-md-pull-11 { + right: 91.66666667%; + } + .col-md-pull-10 { + right: 83.33333333%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-8 { + right: 66.66666667%; + } + .col-md-pull-7 { + right: 58.33333333%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-5 { + right: 41.66666667%; + } + .col-md-pull-4 { + right: 33.33333333%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-2 { + right: 16.66666667%; + } + .col-md-pull-1 { + right: 8.33333333%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-push-12 { + left: 100%; + } + .col-md-push-11 { + left: 91.66666667%; + } + .col-md-push-10 { + left: 83.33333333%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-8 { + left: 66.66666667%; + } + .col-md-push-7 { + left: 58.33333333%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-5 { + left: 41.66666667%; + } + .col-md-push-4 { + left: 33.33333333%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-2 { + left: 16.66666667%; + } + .col-md-push-1 { + left: 8.33333333%; + } + .col-md-push-0 { + left: auto; + } + .col-md-offset-12 { + margin-left: 100%; + } + .col-md-offset-11 { + margin-left: 91.66666667%; + } + .col-md-offset-10 { + margin-left: 83.33333333%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-8 { + margin-left: 66.66666667%; + } + .col-md-offset-7 { + margin-left: 58.33333333%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-5 { + margin-left: 41.66666667%; + } + .col-md-offset-4 { + margin-left: 33.33333333%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-2 { + margin-left: 16.66666667%; + } + .col-md-offset-1 { + margin-left: 8.33333333%; + } + .col-md-offset-0 { + margin-left: 0; + } +} +@media (min-width: 1200px) { + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { + float: left; + } + .col-lg-12 { + width: 100%; + } + .col-lg-11 { + width: 91.66666667%; + } + .col-lg-10 { + width: 83.33333333%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-8 { + width: 66.66666667%; + } + .col-lg-7 { + width: 58.33333333%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-5 { + width: 41.66666667%; + } + .col-lg-4 { + width: 33.33333333%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-2 { + width: 16.66666667%; + } + .col-lg-1 { + width: 8.33333333%; + } + .col-lg-pull-12 { + right: 100%; + } + .col-lg-pull-11 { + right: 91.66666667%; + } + .col-lg-pull-10 { + right: 83.33333333%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-8 { + right: 66.66666667%; + } + .col-lg-pull-7 { + right: 58.33333333%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-5 { + right: 41.66666667%; + } + .col-lg-pull-4 { + right: 33.33333333%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-2 { + right: 16.66666667%; + } + .col-lg-pull-1 { + right: 8.33333333%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-push-12 { + left: 100%; + } + .col-lg-push-11 { + left: 91.66666667%; + } + .col-lg-push-10 { + left: 83.33333333%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-8 { + left: 66.66666667%; + } + .col-lg-push-7 { + left: 58.33333333%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-5 { + left: 41.66666667%; + } + .col-lg-push-4 { + left: 33.33333333%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-2 { + left: 16.66666667%; + } + .col-lg-push-1 { + left: 8.33333333%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-offset-12 { + margin-left: 100%; + } + .col-lg-offset-11 { + margin-left: 91.66666667%; + } + .col-lg-offset-10 { + margin-left: 83.33333333%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-8 { + margin-left: 66.66666667%; + } + .col-lg-offset-7 { + margin-left: 58.33333333%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-5 { + margin-left: 41.66666667%; + } + .col-lg-offset-4 { + margin-left: 33.33333333%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-2 { + margin-left: 16.66666667%; + } + .col-lg-offset-1 { + margin-left: 8.33333333%; + } + .col-lg-offset-0 { + margin-left: 0; + } +} +table { + background-color: transparent; +} +th { + text-align: left; +} +.table { + width: 100%; + max-width: 100%; + margin-bottom: 20px; +} +.table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th, +.table > thead > tr > td, +.table > tbody > tr > td, +.table > tfoot > tr > td { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid #ddd; +} +.table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #ddd; +} +.table > caption + thead > tr:first-child > th, +.table > colgroup + thead > tr:first-child > th, +.table > thead:first-child > tr:first-child > th, +.table > caption + thead > tr:first-child > td, +.table > colgroup + thead > tr:first-child > td, +.table > thead:first-child > tr:first-child > td { + border-top: 0; +} +.table > tbody + tbody { + border-top: 2px solid #ddd; +} +.table .table { + background-color: #fff; +} +.table-condensed > thead > tr > th, +.table-condensed > tbody > tr > th, +.table-condensed > tfoot > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > tbody > tr > td, +.table-condensed > tfoot > tr > td { + padding: 5px; +} +.table-bordered { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} +.table-striped > tbody > tr:nth-child(odd) > td, +.table-striped > tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; +} +.table-hover > tbody > tr:hover > td, +.table-hover > tbody > tr:hover > th { + background-color: #f5f5f5; +} +table col[class*="col-"] { + position: static; + display: table-column; + float: none; +} +table td[class*="col-"], +table th[class*="col-"] { + position: static; + display: table-cell; + float: none; +} +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #f5f5f5; +} +.table-hover > tbody > tr > td.active:hover, +.table-hover > tbody > tr > th.active:hover, +.table-hover > tbody > tr.active:hover > td, +.table-hover > tbody > tr:hover > .active, +.table-hover > tbody > tr.active:hover > th { + background-color: #e8e8e8; +} +.table > thead > tr > td.success, +.table > tbody > tr > td.success, +.table > tfoot > tr > td.success, +.table > thead > tr > th.success, +.table > tbody > tr > th.success, +.table > tfoot > tr > th.success, +.table > thead > tr.success > td, +.table > tbody > tr.success > td, +.table > tfoot > tr.success > td, +.table > thead > tr.success > th, +.table > tbody > tr.success > th, +.table > tfoot > tr.success > th { + background-color: #dff0d8; +} +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td, +.table-hover > tbody > tr:hover > .success, +.table-hover > tbody > tr.success:hover > th { + background-color: #d0e9c6; +} +.table > thead > tr > td.info, +.table > tbody > tr > td.info, +.table > tfoot > tr > td.info, +.table > thead > tr > th.info, +.table > tbody > tr > th.info, +.table > tfoot > tr > th.info, +.table > thead > tr.info > td, +.table > tbody > tr.info > td, +.table > tfoot > tr.info > td, +.table > thead > tr.info > th, +.table > tbody > tr.info > th, +.table > tfoot > tr.info > th { + background-color: #d9edf7; +} +.table-hover > tbody > tr > td.info:hover, +.table-hover > tbody > tr > th.info:hover, +.table-hover > tbody > tr.info:hover > td, +.table-hover > tbody > tr:hover > .info, +.table-hover > tbody > tr.info:hover > th { + background-color: #c4e3f3; +} +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; +} +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td, +.table-hover > tbody > tr:hover > .warning, +.table-hover > tbody > tr.warning:hover > th { + background-color: #faf2cc; +} +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background-color: #f2dede; +} +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td, +.table-hover > tbody > tr:hover > .danger, +.table-hover > tbody > tr.danger:hover > th { + background-color: #ebcccc; +} +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-x: auto; + overflow-y: hidden; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #ddd; + } + .table-responsive > .table { + margin-bottom: 0; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: bold; +} +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + line-height: normal; +} +input[type="file"] { + display: block; +} +input[type="range"] { + display: block; + width: 100%; +} +select[multiple], +select[size] { + height: auto; +} +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +output { + display: block; + padding-top: 7px; + font-size: 14px; + line-height: 1.42857143; + color: #555; +} +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); +} +.form-control::-moz-placeholder { + color: #777; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #777; +} +.form-control::-webkit-input-placeholder { + color: #777; +} +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + cursor: not-allowed; + background-color: #eee; + opacity: 1; +} +textarea.form-control { + height: auto; +} +input[type="search"] { + -webkit-appearance: none; +} +input[type="date"], +input[type="time"], +input[type="datetime-local"], +input[type="month"] { + line-height: 34px; + line-height: 1.42857143 \0; +} +input[type="date"].input-sm, +input[type="time"].input-sm, +input[type="datetime-local"].input-sm, +input[type="month"].input-sm { + line-height: 30px; +} +input[type="date"].input-lg, +input[type="time"].input-lg, +input[type="datetime-local"].input-lg, +input[type="month"].input-lg { + line-height: 46px; +} +.form-group { + margin-bottom: 15px; +} +.radio, +.checkbox { + position: relative; + display: block; + min-height: 20px; + margin-top: 10px; + margin-bottom: 10px; +} +.radio label, +.checkbox label { + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-top: 4px \9; + margin-left: -20px; +} +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} +.radio-inline, +.checkbox-inline { + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + vertical-align: middle; + cursor: pointer; +} +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"].disabled, +input[type="checkbox"].disabled, +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed; +} +.radio-inline.disabled, +.checkbox-inline.disabled, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} +.radio.disabled label, +.checkbox.disabled label, +fieldset[disabled] .radio label, +fieldset[disabled] .checkbox label { + cursor: not-allowed; +} +.form-control-static { + padding-top: 7px; + padding-bottom: 7px; + margin-bottom: 0; +} +.form-control-static.input-lg, +.form-control-static.input-sm { + padding-right: 0; + padding-left: 0; +} +.input-sm, +.form-horizontal .form-group-sm .form-control { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-sm { + height: 30px; + line-height: 30px; +} +textarea.input-sm, +select[multiple].input-sm { + height: auto; +} +.input-lg, +.form-horizontal .form-group-lg .form-control { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} +select.input-lg { + height: 46px; + line-height: 46px; +} +textarea.input-lg, +select[multiple].input-lg { + height: auto; +} +.has-feedback { + position: relative; +} +.has-feedback .form-control { + padding-right: 42.5px; +} +.form-control-feedback { + position: absolute; + top: 25px; + right: 0; + z-index: 2; + display: block; + width: 34px; + height: 34px; + line-height: 34px; + text-align: center; +} +.input-lg + .form-control-feedback { + width: 46px; + height: 46px; + line-height: 46px; +} +.input-sm + .form-control-feedback { + width: 30px; + height: 30px; + line-height: 30px; +} +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline { + color: #3c763d; +} +.has-success .form-control { + border-color: #3c763d; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-success .form-control:focus { + border-color: #2b542c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; +} +.has-success .input-group-addon { + color: #3c763d; + background-color: #dff0d8; + border-color: #3c763d; +} +.has-success .form-control-feedback { + color: #3c763d; +} +.has-warning .help-block, +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline { + color: #8a6d3b; +} +.has-warning .form-control { + border-color: #8a6d3b; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-warning .form-control:focus { + border-color: #66512c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; +} +.has-warning .input-group-addon { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #8a6d3b; +} +.has-warning .form-control-feedback { + color: #8a6d3b; +} +.has-error .help-block, +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline { + color: #a94442; +} +.has-error .form-control { + border-color: #a94442; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-error .form-control:focus { + border-color: #843534; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; +} +.has-error .input-group-addon { + color: #a94442; + background-color: #f2dede; + border-color: #a94442; +} +.has-error .form-control-feedback { + color: #a94442; +} +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; +} +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; +} +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto; + } + .form-inline .input-group > .form-control { + width: 100%; + } + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio label, + .form-inline .checkbox label { + padding-left: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + padding-top: 7px; + margin-top: 0; + margin-bottom: 0; +} +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 27px; +} +.form-horizontal .form-group { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .form-horizontal .control-label { + padding-top: 7px; + margin-bottom: 0; + text-align: right; + } +} +.form-horizontal .has-feedback .form-control-feedback { + top: 0; + right: 15px; +} +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 14.3px; + } +} +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 6px; + } +} +.btn { + display: inline-block; + padding: 6px 12px; + margin-bottom: 0; + font-size: 14px; + font-weight: normal; + line-height: 1.42857143; + text-align: center; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.btn:focus, +.btn:active:focus, +.btn.active:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn:hover, +.btn:focus { + color: #333; + text-decoration: none; +} +.btn:active, +.btn.active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + pointer-events: none; + cursor: not-allowed; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; + opacity: .65; +} +.btn-default { + color: #333; + background-color: #fff; + border-color: #ccc; +} +.btn-default:hover, +.btn-default:focus, +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + background-image: none; +} +.btn-default.disabled, +.btn-default[disabled], +fieldset[disabled] .btn-default, +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled:active, +.btn-default[disabled]:active, +fieldset[disabled] .btn-default:active, +.btn-default.disabled.active, +.btn-default[disabled].active, +fieldset[disabled] .btn-default.active { + background-color: #fff; + border-color: #ccc; +} +.btn-default .badge { + color: #fff; + background-color: #333; +} +.btn-primary { + color: #fff; + background-color: #428bca; + border-color: #357ebd; +} +.btn-primary:hover, +.btn-primary:focus, +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + color: #fff; + background-color: #3071a9; + border-color: #285e8e; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + background-image: none; +} +.btn-primary.disabled, +.btn-primary[disabled], +fieldset[disabled] .btn-primary, +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled:active, +.btn-primary[disabled]:active, +fieldset[disabled] .btn-primary:active, +.btn-primary.disabled.active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #428bca; + border-color: #357ebd; +} +.btn-primary .badge { + color: #428bca; + background-color: #fff; +} +.btn-success { + color: #fff; + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success:hover, +.btn-success:focus, +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + color: #fff; + background-color: #449d44; + border-color: #398439; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + background-image: none; +} +.btn-success.disabled, +.btn-success[disabled], +fieldset[disabled] .btn-success, +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled:active, +.btn-success[disabled]:active, +fieldset[disabled] .btn-success:active, +.btn-success.disabled.active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success.active { + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success .badge { + color: #5cb85c; + background-color: #fff; +} +.btn-info { + color: #fff; + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info:hover, +.btn-info:focus, +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + color: #fff; + background-color: #31b0d5; + border-color: #269abc; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + background-image: none; +} +.btn-info.disabled, +.btn-info[disabled], +fieldset[disabled] .btn-info, +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled:active, +.btn-info[disabled]:active, +fieldset[disabled] .btn-info:active, +.btn-info.disabled.active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info.active { + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info .badge { + color: #5bc0de; + background-color: #fff; +} +.btn-warning { + color: #fff; + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning:hover, +.btn-warning:focus, +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + color: #fff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + background-image: none; +} +.btn-warning.disabled, +.btn-warning[disabled], +fieldset[disabled] .btn-warning, +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled:active, +.btn-warning[disabled]:active, +fieldset[disabled] .btn-warning:active, +.btn-warning.disabled.active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning.active { + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning .badge { + color: #f0ad4e; + background-color: #fff; +} +.btn-danger { + color: #fff; + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger:hover, +.btn-danger:focus, +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + color: #fff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + background-image: none; +} +.btn-danger.disabled, +.btn-danger[disabled], +fieldset[disabled] .btn-danger, +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled:active, +.btn-danger[disabled]:active, +fieldset[disabled] .btn-danger:active, +.btn-danger.disabled.active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger.active { + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger .badge { + color: #d9534f; + background-color: #fff; +} +.btn-link { + font-weight: normal; + color: #428bca; + cursor: pointer; + border-radius: 0; +} +.btn-link, +.btn-link:active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent; +} +.btn-link:hover, +.btn-link:focus { + color: #2a6496; + text-decoration: underline; + background-color: transparent; +} +.btn-link[disabled]:hover, +fieldset[disabled] .btn-link:hover, +.btn-link[disabled]:focus, +fieldset[disabled] .btn-link:focus { + color: #777; + text-decoration: none; +} +.btn-lg, +.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} +.btn-sm, +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-xs, +.btn-group-xs > .btn { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-block { + display: block; + width: 100%; +} +.btn-block + .btn-block { + margin-top: 5px; +} +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} +.fade { + opacity: 0; + -webkit-transition: opacity .15s linear; + -o-transition: opacity .15s linear; + transition: opacity .15s linear; +} +.fade.in { + opacity: 1; +} +.collapse { + display: none; +} +.collapse.in { + display: block; +} +tr.collapse.in { + display: table-row; +} +tbody.collapse.in { + display: table-row-group; +} +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height .35s ease; + -o-transition: height .35s ease; + transition: height .35s ease; +} +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px solid; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} +.dropdown { + position: relative; +} +.dropdown-toggle:focus { + outline: 0; +} +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + font-size: 14px; + text-align: left; + list-style: none; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); + box-shadow: 0 6px 12px rgba(0, 0, 0, .175); +} +.dropdown-menu.pull-right { + right: 0; + left: auto; +} +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.42857143; + color: #333; + white-space: nowrap; +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + color: #262626; + text-decoration: none; + background-color: #f5f5f5; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #fff; + text-decoration: none; + background-color: #428bca; + outline: 0; +} +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #777; +} +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: not-allowed; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.open > .dropdown-menu { + display: block; +} +.open > a { + outline: 0; +} +.dropdown-menu-right { + right: 0; + left: auto; +} +.dropdown-menu-left { + right: auto; + left: 0; +} +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.42857143; + color: #777; + white-space: nowrap; +} +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; +} +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + content: ""; + border-top: 0; + border-bottom: 4px solid; +} +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; +} +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + right: 0; + left: auto; + } + .navbar-right .dropdown-menu-left { + right: auto; + left: 0; + } +} +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn.active { + z-index: 2; +} +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus { + outline: 0; +} +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} +.btn-toolbar { + margin-left: -5px; +} +.btn-toolbar .btn-group, +.btn-toolbar .input-group { + float: left; +} +.btn-toolbar > .btn, +.btn-toolbar > .btn-group, +.btn-toolbar > .input-group { + margin-left: 5px; +} +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} +.btn-group > .btn:first-child { + margin-left: 0; +} +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group > .btn-group { + float: left; +} +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group > .btn-group:first-child > .btn:last-child, +.btn-group > .btn-group:first-child > .dropdown-toggle { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn-group:last-child > .btn:first-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} +.btn-group > .btn + .dropdown-toggle { + padding-right: 8px; + padding-left: 8px; +} +.btn-group > .btn-lg + .dropdown-toggle { + padding-right: 12px; + padding-left: 12px; +} +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn .caret { + margin-left: 0; +} +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} +.dropup .btn-lg .caret { + border-width: 0 5px 5px; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} +.btn-group-vertical > .btn-group > .btn { + float: none; +} +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-left-radius: 4px; +} +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; +} +.btn-group-justified > .btn, +.btn-group-justified > .btn-group { + display: table-cell; + float: none; + width: 1%; +} +.btn-group-justified > .btn-group .btn { + width: 100%; +} +.btn-group-justified > .btn-group .dropdown-menu { + left: auto; +} +[data-toggle="buttons"] > .btn > input[type="radio"], +[data-toggle="buttons"] > .btn > input[type="checkbox"] { + position: absolute; + z-index: -1; + filter: alpha(opacity=0); + opacity: 0; +} +.input-group { + position: relative; + display: table; + border-collapse: separate; +} +.input-group[class*="col-"] { + float: none; + padding-right: 0; + padding-left: 0; +} +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} +select.input-group-lg > .form-control, +select.input-group-lg > .input-group-addon, +select.input-group-lg > .input-group-btn > .btn { + height: 46px; + line-height: 46px; +} +textarea.input-group-lg > .form-control, +textarea.input-group-lg > .input-group-addon, +textarea.input-group-lg > .input-group-btn > .btn, +select[multiple].input-group-lg > .form-control, +select[multiple].input-group-lg > .input-group-addon, +select[multiple].input-group-lg > .input-group-btn > .btn { + height: auto; +} +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-group-sm > .form-control, +select.input-group-sm > .input-group-addon, +select.input-group-sm > .input-group-btn > .btn { + height: 30px; + line-height: 30px; +} +textarea.input-group-sm > .form-control, +textarea.input-group-sm > .input-group-addon, +textarea.input-group-sm > .input-group-btn > .btn, +select[multiple].input-group-sm > .form-control, +select[multiple].input-group-sm > .input-group-addon, +select[multiple].input-group-sm > .input-group-btn > .btn { + height: auto; +} +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: normal; + line-height: 1; + color: #555; + text-align: center; + background-color: #eee; + border: 1px solid #ccc; + border-radius: 4px; +} +.input-group-addon.input-sm { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; +} +.input-group-addon.input-lg { + padding: 10px 16px; + font-size: 18px; + border-radius: 6px; +} +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.input-group-addon:first-child { + border-right: 0; +} +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.input-group-addon:last-child { + border-left: 0; +} +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} +.input-group-btn > .btn { + position: relative; +} +.input-group-btn > .btn + .btn { + margin-left: -1px; +} +.input-group-btn > .btn:hover, +.input-group-btn > .btn:focus, +.input-group-btn > .btn:active { + z-index: 2; +} +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group { + margin-right: -1px; +} +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group { + margin-left: -1px; +} +.nav { + padding-left: 0; + margin-bottom: 0; + list-style: none; +} +.nav > li { + position: relative; + display: block; +} +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eee; +} +.nav > li.disabled > a { + color: #777; +} +.nav > li.disabled > a:hover, +.nav > li.disabled > a:focus { + color: #777; + text-decoration: none; + cursor: not-allowed; + background-color: transparent; +} +.nav .open > a, +.nav .open > a:hover, +.nav .open > a:focus { + background-color: #eee; + border-color: #428bca; +} +.nav .nav-divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.nav > li > a > img { + max-width: none; +} +.nav-tabs { + border-bottom: 1px solid #ddd; +} +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.42857143; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} +.nav-tabs > li > a:hover { + border-color: #eee #eee #ddd; +} +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: #555; + cursor: default; + background-color: #fff; + border: 1px solid #ddd; + border-bottom-color: transparent; +} +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0; +} +.nav-tabs.nav-justified > li { + float: none; +} +.nav-tabs.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} +.nav-tabs.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-tabs.nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs.nav-justified > .active > a, +.nav-tabs.nav-justified > .active > a:hover, +.nav-tabs.nav-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs.nav-justified > .active > a, + .nav-tabs.nav-justified > .active > a:hover, + .nav-tabs.nav-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.nav-pills > li { + float: left; +} +.nav-pills > li > a { + border-radius: 4px; +} +.nav-pills > li + li { + margin-left: 2px; +} +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + color: #fff; + background-color: #428bca; +} +.nav-stacked > li { + float: none; +} +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; +} +.nav-justified { + width: 100%; +} +.nav-justified > li { + float: none; +} +.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} +.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs-justified { + border-bottom: 0; +} +.nav-tabs-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs-justified > .active > a, +.nav-tabs-justified > .active > a:hover, +.nav-tabs-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs-justified > .active > a, + .nav-tabs-justified > .active > a:hover, + .nav-tabs-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.tab-content > .tab-pane { + display: none; +} +.tab-content > .active { + display: block; +} +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.navbar { + position: relative; + min-height: 50px; + margin-bottom: 20px; + border: 1px solid transparent; +} +@media (min-width: 768px) { + .navbar { + border-radius: 4px; + } +} +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} +.navbar-collapse { + padding-right: 15px; + padding-left: 15px; + overflow-x: visible; + -webkit-overflow-scrolling: touch; + border-top: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); +} +.navbar-collapse.in { + overflow-y: auto; +} +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + .navbar-collapse.in { + overflow-y: visible; + } + .navbar-fixed-top .navbar-collapse, + .navbar-static-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + padding-right: 0; + padding-left: 0; + } +} +.navbar-fixed-top .navbar-collapse, +.navbar-fixed-bottom .navbar-collapse { + max-height: 340px; +} +@media (max-width: 480px) and (orientation: landscape) { + .navbar-fixed-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + max-height: 200px; + } +} +.container > .navbar-header, +.container-fluid > .navbar-header, +.container > .navbar-collapse, +.container-fluid > .navbar-collapse { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .container > .navbar-header, + .container-fluid > .navbar-header, + .container > .navbar-collapse, + .container-fluid > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} +.navbar-static-top { + z-index: 1000; + border-width: 0 0 1px; +} +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } +} +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; + -webkit-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} +@media (min-width: 768px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px; +} +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; + border-width: 1px 0 0; +} +.navbar-brand { + float: left; + height: 50px; + padding: 15px 15px; + font-size: 18px; + line-height: 20px; +} +.navbar-brand:hover, +.navbar-brand:focus { + text-decoration: none; +} +@media (min-width: 768px) { + .navbar > .container .navbar-brand, + .navbar > .container-fluid .navbar-brand { + margin-left: -15px; + } +} +.navbar-toggle { + position: relative; + float: right; + padding: 9px 10px; + margin-top: 8px; + margin-right: 15px; + margin-bottom: 8px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.navbar-toggle:focus { + outline: 0; +} +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; +} +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } +} +.navbar-nav { + margin: 7.5px -15px; +} +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 20px; +} +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + .navbar-nav .open .dropdown-menu > li > a { + line-height: 20px; + } + .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } +} +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0; + } + .navbar-nav > li { + float: left; + } + .navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px; + } + .navbar-nav.navbar-right:last-child { + margin-right: -15px; + } +} +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + } +} +.navbar-form { + padding: 10px 15px; + margin-top: 8px; + margin-right: -15px; + margin-bottom: 8px; + margin-left: -15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .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); +} +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .navbar-form .input-group { + display: inline-table; + vertical-align: middle; + } + .navbar-form .input-group .input-group-addon, + .navbar-form .input-group .input-group-btn, + .navbar-form .input-group .form-control { + width: auto; + } + .navbar-form .input-group > .form-control { + width: 100%; + } + .navbar-form .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio, + .navbar-form .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio label, + .navbar-form .checkbox label { + padding-left: 0; + } + .navbar-form .radio input[type="radio"], + .navbar-form .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .navbar-form .has-feedback .form-control-feedback { + top: 0; + } +} +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px; + } +} +@media (min-width: 768px) { + .navbar-form { + width: auto; + padding-top: 0; + padding-bottom: 0; + margin-right: 0; + margin-left: 0; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-form.navbar-right:last-child { + margin-right: -15px; + } +} +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.navbar-btn { + margin-top: 8px; + margin-bottom: 8px; +} +.navbar-btn.btn-sm { + margin-top: 10px; + margin-bottom: 10px; +} +.navbar-btn.btn-xs { + margin-top: 14px; + margin-bottom: 14px; +} +.navbar-text { + margin-top: 15px; + margin-bottom: 15px; +} +@media (min-width: 768px) { + .navbar-text { + float: left; + margin-right: 15px; + margin-left: 15px; + } + .navbar-text.navbar-right:last-child { + margin-right: 0; + } +} +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7; +} +.navbar-default .navbar-brand { + color: #777; +} +.navbar-default .navbar-brand:hover, +.navbar-default .navbar-brand:focus { + color: #5e5e5e; + background-color: transparent; +} +.navbar-default .navbar-text { + color: #777; +} +.navbar-default .navbar-nav > li > a { + color: #777; +} +.navbar-default .navbar-nav > li > a:hover, +.navbar-default .navbar-nav > li > a:focus { + color: #333; + background-color: transparent; +} +.navbar-default .navbar-nav > .active > a, +.navbar-default .navbar-nav > .active > a:hover, +.navbar-default .navbar-nav > .active > a:focus { + color: #555; + background-color: #e7e7e7; +} +.navbar-default .navbar-nav > .disabled > a, +.navbar-default .navbar-nav > .disabled > a:hover, +.navbar-default .navbar-nav > .disabled > a:focus { + color: #ccc; + background-color: transparent; +} +.navbar-default .navbar-toggle { + border-color: #ddd; +} +.navbar-default .navbar-toggle:hover, +.navbar-default .navbar-toggle:focus { + background-color: #ddd; +} +.navbar-default .navbar-toggle .icon-bar { + background-color: #888; +} +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #e7e7e7; +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .open > a:hover, +.navbar-default .navbar-nav > .open > a:focus { + color: #555; + background-color: #e7e7e7; +} +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777; + } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #333; + background-color: transparent; + } + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #555; + background-color: #e7e7e7; + } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #ccc; + background-color: transparent; + } +} +.navbar-default .navbar-link { + color: #777; +} +.navbar-default .navbar-link:hover { + color: #333; +} +.navbar-default .btn-link { + color: #777; +} +.navbar-default .btn-link:hover, +.navbar-default .btn-link:focus { + color: #333; +} +.navbar-default .btn-link[disabled]:hover, +fieldset[disabled] .navbar-default .btn-link:hover, +.navbar-default .btn-link[disabled]:focus, +fieldset[disabled] .navbar-default .btn-link:focus { + color: #ccc; +} +.navbar-inverse { + background-color: #222; + border-color: #080808; +} +.navbar-inverse .navbar-brand { + color: #777; +} +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-text { + color: #777; +} +.navbar-inverse .navbar-nav > li > a { + color: #777; +} +.navbar-inverse .navbar-nav > li > a:hover, +.navbar-inverse .navbar-nav > li > a:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-nav > .active > a, +.navbar-inverse .navbar-nav > .active > a:hover, +.navbar-inverse .navbar-nav > .active > a:focus { + color: #fff; + background-color: #080808; +} +.navbar-inverse .navbar-nav > .disabled > a, +.navbar-inverse .navbar-nav > .disabled > a:hover, +.navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444; + background-color: transparent; +} +.navbar-inverse .navbar-toggle { + border-color: #333; +} +.navbar-inverse .navbar-toggle:hover, +.navbar-inverse .navbar-toggle:focus { + background-color: #333; +} +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #fff; +} +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #101010; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .open > a:hover, +.navbar-inverse .navbar-nav > .open > a:focus { + color: #fff; + background-color: #080808; +} +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #777; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #fff; + background-color: transparent; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444; + background-color: transparent; + } +} +.navbar-inverse .navbar-link { + color: #777; +} +.navbar-inverse .navbar-link:hover { + color: #fff; +} +.navbar-inverse .btn-link { + color: #777; +} +.navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link:focus { + color: #fff; +} +.navbar-inverse .btn-link[disabled]:hover, +fieldset[disabled] .navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link[disabled]:focus, +fieldset[disabled] .navbar-inverse .btn-link:focus { + color: #444; +} +.breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px; +} +.breadcrumb > li { + display: inline-block; +} +.breadcrumb > li + li:before { + padding: 0 5px; + color: #ccc; + content: "/\00a0"; +} +.breadcrumb > .active { + color: #777; +} +.pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px; +} +.pagination > li { + display: inline; +} +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + margin-left: -1px; + line-height: 1.42857143; + color: #428bca; + text-decoration: none; + background-color: #fff; + border: 1px solid #ddd; +} +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +.pagination > li > a:hover, +.pagination > li > span:hover, +.pagination > li > a:focus, +.pagination > li > span:focus { + color: #2a6496; + background-color: #eee; + border-color: #ddd; +} +.pagination > .active > a, +.pagination > .active > span, +.pagination > .active > a:hover, +.pagination > .active > span:hover, +.pagination > .active > a:focus, +.pagination > .active > span:focus { + z-index: 2; + color: #fff; + cursor: default; + background-color: #428bca; + border-color: #428bca; +} +.pagination > .disabled > span, +.pagination > .disabled > span:hover, +.pagination > .disabled > span:focus, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #777; + cursor: not-allowed; + background-color: #fff; + border-color: #ddd; +} +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 10px 16px; + font-size: 18px; +} +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-top-left-radius: 6px; + border-bottom-left-radius: 6px; +} +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 5px 10px; + font-size: 12px; +} +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; +} +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +.pager { + padding-left: 0; + margin: 20px 0; + text-align: center; + list-style: none; +} +.pager li { + display: inline; +} +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 15px; +} +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #eee; +} +.pager .next > a, +.pager .next > span { + float: right; +} +.pager .previous > a, +.pager .previous > span { + float: left; +} +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #777; + cursor: not-allowed; + background-color: #fff; +} +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} +a.label:hover, +a.label:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.label:empty { + display: none; +} +.btn .label { + position: relative; + top: -1px; +} +.label-default { + background-color: #777; +} +.label-default[href]:hover, +.label-default[href]:focus { + background-color: #5e5e5e; +} +.label-primary { + background-color: #428bca; +} +.label-primary[href]:hover, +.label-primary[href]:focus { + background-color: #3071a9; +} +.label-success { + background-color: #5cb85c; +} +.label-success[href]:hover, +.label-success[href]:focus { + background-color: #449d44; +} +.label-info { + background-color: #5bc0de; +} +.label-info[href]:hover, +.label-info[href]:focus { + background-color: #31b0d5; +} +.label-warning { + background-color: #f0ad4e; +} +.label-warning[href]:hover, +.label-warning[href]:focus { + background-color: #ec971f; +} +.label-danger { + background-color: #d9534f; +} +.label-danger[href]:hover, +.label-danger[href]:focus { + background-color: #c9302c; +} +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + background-color: #777; + border-radius: 10px; +} +.badge:empty { + display: none; +} +.btn .badge { + position: relative; + top: -1px; +} +.btn-xs .badge { + top: 0; + padding: 1px 5px; +} +a.badge:hover, +a.badge:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +a.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: #428bca; + background-color: #fff; +} +.nav-pills > li > a > .badge { + margin-left: 3px; +} +.jumbotron { + padding: 30px; + margin-bottom: 30px; + color: inherit; + background-color: #eee; +} +.jumbotron h1, +.jumbotron .h1 { + color: inherit; +} +.jumbotron p { + margin-bottom: 15px; + font-size: 21px; + font-weight: 200; +} +.jumbotron > hr { + border-top-color: #d5d5d5; +} +.container .jumbotron { + border-radius: 6px; +} +.jumbotron .container { + max-width: 100%; +} +@media screen and (min-width: 768px) { + .jumbotron { + padding-top: 48px; + padding-bottom: 48px; + } + .container .jumbotron { + padding-right: 60px; + padding-left: 60px; + } + .jumbotron h1, + .jumbotron .h1 { + font-size: 63px; + } +} +.thumbnail { + display: block; + padding: 4px; + margin-bottom: 20px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; +} +.thumbnail > img, +.thumbnail a > img { + margin-right: auto; + margin-left: auto; +} +a.thumbnail:hover, +a.thumbnail:focus, +a.thumbnail.active { + border-color: #428bca; +} +.thumbnail .caption { + padding: 9px; + color: #333; +} +.alert { + padding: 15px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px; +} +.alert h4 { + margin-top: 0; + color: inherit; +} +.alert .alert-link { + font-weight: bold; +} +.alert > p, +.alert > ul { + margin-bottom: 0; +} +.alert > p + p { + margin-top: 5px; +} +.alert-dismissable, +.alert-dismissible { + padding-right: 35px; +} +.alert-dismissable .close, +.alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} +.alert-success { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.alert-success hr { + border-top-color: #c9e2b3; +} +.alert-success .alert-link { + color: #2b542c; +} +.alert-info { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.alert-info hr { + border-top-color: #a6e1ec; +} +.alert-info .alert-link { + color: #245269; +} +.alert-warning { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.alert-warning hr { + border-top-color: #f7e1b5; +} +.alert-warning .alert-link { + color: #66512c; +} +.alert-danger { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.alert-danger hr { + border-top-color: #e4b9c0; +} +.alert-danger .alert-link { + color: #843534; +} +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@-o-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #f5f5f5; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); +} +.progress-bar { + float: left; + width: 0; + height: 100%; + font-size: 12px; + line-height: 20px; + color: #fff; + text-align: center; + background-color: #428bca; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); + -webkit-transition: width .6s ease; + -o-transition: width .6s ease; + transition: width .6s ease; +} +.progress-striped .progress-bar, +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + -webkit-background-size: 40px 40px; + background-size: 40px 40px; +} +.progress.active .progress-bar, +.progress-bar.active { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} +.progress-bar[aria-valuenow="1"], +.progress-bar[aria-valuenow="2"] { + min-width: 30px; +} +.progress-bar[aria-valuenow="0"] { + min-width: 30px; + color: #777; + background-color: transparent; + background-image: none; + -webkit-box-shadow: none; + box-shadow: none; +} +.progress-bar-success { + background-color: #5cb85c; +} +.progress-striped .progress-bar-success { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-info { + background-color: #5bc0de; +} +.progress-striped .progress-bar-info { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-warning { + background-color: #f0ad4e; +} +.progress-striped .progress-bar-warning { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-danger { + background-color: #d9534f; +} +.progress-striped .progress-bar-danger { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.media, +.media-body { + overflow: hidden; + zoom: 1; +} +.media, +.media .media { + margin-top: 15px; +} +.media:first-child { + margin-top: 0; +} +.media-object { + display: block; +} +.media-heading { + margin: 0 0 5px; +} +.media > .pull-left { + margin-right: 10px; +} +.media > .pull-right { + margin-left: 10px; +} +.media-list { + padding-left: 0; + list-style: none; +} +.list-group { + padding-left: 0; + margin-bottom: 20px; +} +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid #ddd; +} +.list-group-item:first-child { + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +.list-group-item > .badge { + float: right; +} +.list-group-item > .badge + .badge { + margin-right: 5px; +} +a.list-group-item { + color: #555; +} +a.list-group-item .list-group-item-heading { + color: #333; +} +a.list-group-item:hover, +a.list-group-item:focus { + color: #555; + text-decoration: none; + background-color: #f5f5f5; +} +.list-group-item.disabled, +.list-group-item.disabled:hover, +.list-group-item.disabled:focus { + color: #777; + background-color: #eee; +} +.list-group-item.disabled .list-group-item-heading, +.list-group-item.disabled:hover .list-group-item-heading, +.list-group-item.disabled:focus .list-group-item-heading { + color: inherit; +} +.list-group-item.disabled .list-group-item-text, +.list-group-item.disabled:hover .list-group-item-text, +.list-group-item.disabled:focus .list-group-item-text { + color: #777; +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + z-index: 2; + color: #fff; + background-color: #428bca; + border-color: #428bca; +} +.list-group-item.active .list-group-item-heading, +.list-group-item.active:hover .list-group-item-heading, +.list-group-item.active:focus .list-group-item-heading, +.list-group-item.active .list-group-item-heading > small, +.list-group-item.active:hover .list-group-item-heading > small, +.list-group-item.active:focus .list-group-item-heading > small, +.list-group-item.active .list-group-item-heading > .small, +.list-group-item.active:hover .list-group-item-heading > .small, +.list-group-item.active:focus .list-group-item-heading > .small { + color: inherit; +} +.list-group-item.active .list-group-item-text, +.list-group-item.active:hover .list-group-item-text, +.list-group-item.active:focus .list-group-item-text { + color: #e1edf7; +} +.list-group-item-success { + color: #3c763d; + background-color: #dff0d8; +} +a.list-group-item-success { + color: #3c763d; +} +a.list-group-item-success .list-group-item-heading { + color: inherit; +} +a.list-group-item-success:hover, +a.list-group-item-success:focus { + color: #3c763d; + background-color: #d0e9c6; +} +a.list-group-item-success.active, +a.list-group-item-success.active:hover, +a.list-group-item-success.active:focus { + color: #fff; + background-color: #3c763d; + border-color: #3c763d; +} +.list-group-item-info { + color: #31708f; + background-color: #d9edf7; +} +a.list-group-item-info { + color: #31708f; +} +a.list-group-item-info .list-group-item-heading { + color: inherit; +} +a.list-group-item-info:hover, +a.list-group-item-info:focus { + color: #31708f; + background-color: #c4e3f3; +} +a.list-group-item-info.active, +a.list-group-item-info.active:hover, +a.list-group-item-info.active:focus { + color: #fff; + background-color: #31708f; + border-color: #31708f; +} +.list-group-item-warning { + color: #8a6d3b; + background-color: #fcf8e3; +} +a.list-group-item-warning { + color: #8a6d3b; +} +a.list-group-item-warning .list-group-item-heading { + color: inherit; +} +a.list-group-item-warning:hover, +a.list-group-item-warning:focus { + color: #8a6d3b; + background-color: #faf2cc; +} +a.list-group-item-warning.active, +a.list-group-item-warning.active:hover, +a.list-group-item-warning.active:focus { + color: #fff; + background-color: #8a6d3b; + border-color: #8a6d3b; +} +.list-group-item-danger { + color: #a94442; + background-color: #f2dede; +} +a.list-group-item-danger { + color: #a94442; +} +a.list-group-item-danger .list-group-item-heading { + color: inherit; +} +a.list-group-item-danger:hover, +a.list-group-item-danger:focus { + color: #a94442; + background-color: #ebcccc; +} +a.list-group-item-danger.active, +a.list-group-item-danger.active:hover, +a.list-group-item-danger.active:focus { + color: #fff; + background-color: #a94442; + border-color: #a94442; +} +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} +.panel { + margin-bottom: 20px; + background-color: #fff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: 0 1px 1px rgba(0, 0, 0, .05); +} +.panel-body { + padding: 15px; +} +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel-heading > .dropdown .dropdown-toggle { + color: inherit; +} +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; + color: inherit; +} +.panel-title > a { + color: inherit; +} +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .list-group { + margin-bottom: 0; +} +.panel > .list-group .list-group-item { + border-width: 1px 0; + border-radius: 0; +} +.panel > .list-group:first-child .list-group-item:first-child { + border-top: 0; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .list-group:last-child .list-group-item:last-child { + border-bottom: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} +.list-group + .panel-footer { + border-top-width: 0; +} +.panel > .table, +.panel > .table-responsive > .table, +.panel > .panel-collapse > .table { + margin-bottom: 0; +} +.panel > .table:first-child, +.panel > .table-responsive:first-child > .table:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { + border-top-left-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { + border-top-right-radius: 3px; +} +.panel > .table:last-child, +.panel > .table-responsive:last-child > .table:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { + border-bottom-right-radius: 3px; +} +.panel > .panel-body + .table, +.panel > .panel-body + .table-responsive { + border-top: 1px solid #ddd; +} +.panel > .table > tbody:first-child > tr:first-child th, +.panel > .table > tbody:first-child > tr:first-child td { + border-top: 0; +} +.panel > .table-bordered, +.panel > .table-responsive > .table-bordered { + border: 0; +} +.panel > .table-bordered > thead > tr > th:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, +.panel > .table-bordered > tbody > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, +.panel > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-bordered > thead > tr > td:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, +.panel > .table-bordered > tbody > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, +.panel > .table-bordered > tfoot > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; +} +.panel > .table-bordered > thead > tr > th:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, +.panel > .table-bordered > tbody > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, +.panel > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-bordered > thead > tr > td:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, +.panel > .table-bordered > tbody > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, +.panel > .table-bordered > tfoot > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; +} +.panel > .table-bordered > thead > tr:first-child > td, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, +.panel > .table-bordered > tbody > tr:first-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, +.panel > .table-bordered > thead > tr:first-child > th, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, +.panel > .table-bordered > tbody > tr:first-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0; +} +.panel > .table-bordered > tbody > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, +.panel > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-bordered > tbody > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, +.panel > .table-bordered > tfoot > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { + border-bottom: 0; +} +.panel > .table-responsive { + margin-bottom: 0; + border: 0; +} +.panel-group { + margin-bottom: 20px; +} +.panel-group .panel { + margin-bottom: 0; + border-radius: 4px; +} +.panel-group .panel + .panel { + margin-top: 5px; +} +.panel-group .panel-heading { + border-bottom: 0; +} +.panel-group .panel-heading + .panel-collapse > .panel-body { + border-top: 1px solid #ddd; +} +.panel-group .panel-footer { + border-top: 0; +} +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #ddd; +} +.panel-default { + border-color: #ddd; +} +.panel-default > .panel-heading { + color: #333; + background-color: #f5f5f5; + border-color: #ddd; +} +.panel-default > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ddd; +} +.panel-default > .panel-heading .badge { + color: #f5f5f5; + background-color: #333; +} +.panel-default > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ddd; +} +.panel-primary { + border-color: #428bca; +} +.panel-primary > .panel-heading { + color: #fff; + background-color: #428bca; + border-color: #428bca; +} +.panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #428bca; +} +.panel-primary > .panel-heading .badge { + color: #428bca; + background-color: #fff; +} +.panel-primary > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #428bca; +} +.panel-success { + border-color: #d6e9c6; +} +.panel-success > .panel-heading { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.panel-success > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d6e9c6; +} +.panel-success > .panel-heading .badge { + color: #dff0d8; + background-color: #3c763d; +} +.panel-success > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d6e9c6; +} +.panel-info { + border-color: #bce8f1; +} +.panel-info > .panel-heading { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.panel-info > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #bce8f1; +} +.panel-info > .panel-heading .badge { + color: #d9edf7; + background-color: #31708f; +} +.panel-info > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #bce8f1; +} +.panel-warning { + border-color: #faebcc; +} +.panel-warning > .panel-heading { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.panel-warning > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #faebcc; +} +.panel-warning > .panel-heading .badge { + color: #fcf8e3; + background-color: #8a6d3b; +} +.panel-warning > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #faebcc; +} +.panel-danger { + border-color: #ebccd1; +} +.panel-danger > .panel-heading { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.panel-danger > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ebccd1; +} +.panel-danger > .panel-heading .badge { + color: #f2dede; + background-color: #a94442; +} +.panel-danger > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ebccd1; +} +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; +} +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; +} +.embed-responsive.embed-responsive-16by9 { + padding-bottom: 56.25%; +} +.embed-responsive.embed-responsive-4by3 { + padding-bottom: 75%; +} +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); +} +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, .15); +} +.well-lg { + padding: 24px; + border-radius: 6px; +} +.well-sm { + padding: 9px; + border-radius: 3px; +} +.close { + float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + filter: alpha(opacity=20); + opacity: .2; +} +.close:hover, +.close:focus { + color: #000; + text-decoration: none; + cursor: pointer; + filter: alpha(opacity=50); + opacity: .5; +} +button.close { + -webkit-appearance: none; + padding: 0; + cursor: pointer; + background: transparent; + border: 0; +} +.modal-open { + overflow: hidden; +} +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + display: none; + overflow: hidden; + -webkit-overflow-scrolling: touch; + outline: 0; +} +.modal.fade .modal-dialog { + -webkit-transition: -webkit-transform .3s ease-out; + -o-transition: -o-transform .3s ease-out; + transition: transform .3s ease-out; + -webkit-transform: translate3d(0, -25%, 0); + -o-transform: translate3d(0, -25%, 0); + transform: translate3d(0, -25%, 0); +} +.modal.in .modal-dialog { + -webkit-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} +.modal-content { + position: relative; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: 6px; + outline: 0; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5); + box-shadow: 0 3px 9px rgba(0, 0, 0, .5); +} +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000; +} +.modal-backdrop.fade { + filter: alpha(opacity=0); + opacity: 0; +} +.modal-backdrop.in { + filter: alpha(opacity=50); + opacity: .5; +} +.modal-header { + min-height: 16.42857143px; + padding: 15px; + border-bottom: 1px solid #e5e5e5; +} +.modal-header .close { + margin-top: -2px; +} +.modal-title { + margin: 0; + line-height: 1.42857143; +} +.modal-body { + position: relative; + padding: 15px; +} +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} +@media (min-width: 768px) { + .modal-dialog { + width: 600px; + margin: 30px auto; + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + } + .modal-sm { + width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg { + width: 900px; + } +} +.tooltip { + position: absolute; + z-index: 1070; + display: block; + font-size: 12px; + line-height: 1.4; + visibility: visible; + filter: alpha(opacity=0); + opacity: 0; +} +.tooltip.in { + filter: alpha(opacity=90); + opacity: .9; +} +.tooltip.top { + padding: 5px 0; + margin-top: -3px; +} +.tooltip.right { + padding: 0 5px; + margin-left: 3px; +} +.tooltip.bottom { + padding: 5px 0; + margin-top: 3px; +} +.tooltip.left { + padding: 0 5px; + margin-left: -3px; +} +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + text-decoration: none; + background-color: #000; + border-radius: 4px; +} +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-left .tooltip-arrow { + bottom: 0; + left: 5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-right .tooltip-arrow { + right: 5px; + bottom: 0; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000; +} +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000; +} +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-left .tooltip-arrow { + top: 0; + left: 5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-right .tooltip-arrow { + top: 0; + right: 5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 276px; + padding: 1px; + text-align: left; + white-space: normal; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + box-shadow: 0 5px 10px rgba(0, 0, 0, .2); +} +.popover.top { + margin-top: -10px; +} +.popover.right { + margin-left: 10px; +} +.popover.bottom { + margin-top: 10px; +} +.popover.left { + margin-left: -10px; +} +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + font-weight: normal; + line-height: 18px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; +} +.popover-content { + padding: 9px 14px; +} +.popover > .arrow, +.popover > .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.popover > .arrow { + border-width: 11px; +} +.popover > .arrow:after { + content: ""; + border-width: 10px; +} +.popover.top > .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999; + border-top-color: rgba(0, 0, 0, .25); + border-bottom-width: 0; +} +.popover.top > .arrow:after { + bottom: 1px; + margin-left: -10px; + content: " "; + border-top-color: #fff; + border-bottom-width: 0; +} +.popover.right > .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999; + border-right-color: rgba(0, 0, 0, .25); + border-left-width: 0; +} +.popover.right > .arrow:after { + bottom: -10px; + left: 1px; + content: " "; + border-right-color: #fff; + border-left-width: 0; +} +.popover.bottom > .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, .25); +} +.popover.bottom > .arrow:after { + top: 1px; + margin-left: -10px; + content: " "; + border-top-width: 0; + border-bottom-color: #fff; +} +.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, .25); +} +.popover.left > .arrow:after { + right: 1px; + bottom: -10px; + content: " "; + border-right-width: 0; + border-left-color: #fff; +} +.carousel { + position: relative; +} +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: .6s ease-in-out left; + -o-transition: .6s ease-in-out left; + transition: .6s ease-in-out left; +} +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + line-height: 1; +} +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} +.carousel-inner > .active { + left: 0; +} +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} +.carousel-inner > .next { + left: 100%; +} +.carousel-inner > .prev { + left: -100%; +} +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} +.carousel-inner > .active.left { + left: -100%; +} +.carousel-inner > .active.right { + left: 100%; +} +.carousel-control { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 15%; + font-size: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); + filter: alpha(opacity=50); + opacity: .5; +} +.carousel-control.left { + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001))); + background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); + background-repeat: repeat-x; +} +.carousel-control.right { + right: 0; + left: auto; + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5))); + background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); + background-repeat: repeat-x; +} +.carousel-control:hover, +.carousel-control:focus { + color: #fff; + text-decoration: none; + filter: alpha(opacity=90); + outline: 0; + opacity: .9; +} +.carousel-control .icon-prev, +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-left, +.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; +} +.carousel-control .icon-prev, +.carousel-control .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; +} +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; +} +.carousel-control .icon-prev, +.carousel-control .icon-next { + width: 20px; + height: 20px; + margin-top: -10px; + font-family: serif; +} +.carousel-control .icon-prev:before { + content: '\2039'; +} +.carousel-control .icon-next:before { + content: '\203a'; +} +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + padding-left: 0; + margin-left: -30%; + text-align: center; + list-style: none; +} +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + cursor: pointer; + background-color: #000 \9; + background-color: rgba(0, 0, 0, 0); + border: 1px solid #fff; + border-radius: 10px; +} +.carousel-indicators .active { + width: 12px; + height: 12px; + margin: 0; + background-color: #fff; +} +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); +} +.carousel-caption .btn { + text-shadow: none; +} +@media screen and (min-width: 768px) { + .carousel-control .glyphicon-chevron-left, + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -15px; + font-size: 30px; + } + .carousel-control .glyphicon-chevron-left, + .carousel-control .icon-prev { + margin-left: -15px; + } + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-next { + margin-right: -15px; + } + .carousel-caption { + right: 20%; + left: 20%; + padding-bottom: 30px; + } + .carousel-indicators { + bottom: 20px; + } +} +.clearfix:before, +.clearfix:after, +.dl-horizontal dd:before, +.dl-horizontal dd:after, +.container:before, +.container:after, +.container-fluid:before, +.container-fluid:after, +.row:before, +.row:after, +.form-horizontal .form-group:before, +.form-horizontal .form-group:after, +.btn-toolbar:before, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after, +.nav:before, +.nav:after, +.navbar:before, +.navbar:after, +.navbar-header:before, +.navbar-header:after, +.navbar-collapse:before, +.navbar-collapse:after, +.pager:before, +.pager:after, +.panel-body:before, +.panel-body:after, +.modal-footer:before, +.modal-footer:after { + display: table; + content: " "; +} +.clearfix:after, +.dl-horizontal dd:after, +.container:after, +.container-fluid:after, +.row:after, +.form-horizontal .form-group:after, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:after, +.nav:after, +.navbar:after, +.navbar-header:after, +.navbar-collapse:after, +.pager:after, +.panel-body:after, +.modal-footer:after { + clear: both; +} +.center-block { + display: block; + margin-right: auto; + margin-left: auto; +} +.pull-right { + float: right !important; +} +.pull-left { + float: left !important; +} +.hide { + display: none !important; +} +.show { + display: block !important; +} +.invisible { + visibility: hidden; +} +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +.hidden { + display: none !important; + visibility: hidden !important; +} +.affix { + position: fixed; + -webkit-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} +@-ms-viewport { + width: device-width; +} +.visible-xs, +.visible-sm, +.visible-md, +.visible-lg { + display: none !important; +} +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; +} +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + table.visible-xs { + display: table; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} +@media (max-width: 767px) { + .visible-xs-block { + display: block !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline { + display: inline !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline-block { + display: inline-block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + table.visible-sm { + display: table; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { + display: block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { + display: inline !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { + display: inline-block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + table.visible-md { + display: table; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { + display: block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { + display: inline !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { + display: inline-block !important; + } +} +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + table.visible-lg { + display: table; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} +@media (min-width: 1200px) { + .visible-lg-block { + display: block !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline { + display: inline !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline-block { + display: inline-block !important; + } +} +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } +} +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } +} +.visible-print { + display: none !important; +} +@media print { + .visible-print { + display: block !important; + } + table.visible-print { + display: table; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } +} +.visible-print-block { + display: none !important; +} +@media print { + .visible-print-block { + display: block !important; + } +} +.visible-print-inline { + display: none !important; +} +@media print { + .visible-print-inline { + display: inline !important; + } +} +.visible-print-inline-block { + display: none !important; +} +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} +@media print { + .hidden-print { + display: none !important; + } +} diff --git a/web/static/fonts/glyphicons-halflings-regular.eot b/web/static/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..4a4ca865d67e86f961bc6e2ef00bffa4e34bb9ed GIT binary patch literal 20335 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/web/static/fonts/glyphicons-halflings-regular.ttf b/web/static/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..67fa00bf83801d2fa568546b982c80d27f6ef74e GIT binary patch literal 41280 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 literal 0 HcmV?d00001 diff --git a/web/static/fonts/glyphicons-halflings-regular.woff b/web/static/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..8c54182aa5d4d1ab3c9171976b615c1dcb1dc187 GIT binary patch literal 23320 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 +\ +\ +\ +\ + + + + + #{pageTitle pc} + <meta name="description" content=""> + <meta name="author" content=""> + + <meta name="viewport" content="width=device-width,initial-scale=1"> + + ^{pageHead pc} + + \<!--[if lt IE 9]> + \<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> + \<![endif]--> + + <script> + document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/,'js'); + <body> + <div class="container"> + <header> + <div id="main" role="main"> + ^{pageBody pc} + <footer> + #{appCopyright $ appSettings master} + + $maybe analytics <- appAnalytics $ appSettings master + <script> + if(!window.location.href.match(/localhost/)){ + window._gaq = [['_setAccount','#{analytics}'],['_trackPageview'],['_trackPageLoadTime']]; + (function() { + \ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; + \ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; + \ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); + })(); + } diff --git a/web/templates/default-layout.hamlet b/web/templates/default-layout.hamlet new file mode 100644 index 0000000..3701e3c --- /dev/null +++ b/web/templates/default-layout.hamlet @@ -0,0 +1,3 @@ +$maybe msg <- mmsg + <div #message>#{msg} +^{widget} diff --git a/web/templates/homepage.hamlet b/web/templates/homepage.hamlet new file mode 100644 index 0000000..08a45ab --- /dev/null +++ b/web/templates/homepage.hamlet @@ -0,0 +1,41 @@ +<h1>Welcome to Yesod! + +<ol> + <li>Now that you have a working project you should use the # + \<a href="http://www.yesodweb.com/book/">Yesod book<span class="glyphicon glyphicon-book"></span></a> to learn more. # + You can also use this scaffolded site to explore some basic concepts. + + <li> This page was generated by the #{handlerName} handler in # + \<em>Handler/Home.hs</em>. + + <li> The #{handlerName} handler is set to generate your site's home screen in Routes file # + <em>config/routes + + <li> The HTML you are seeing now is actually composed by a number of <em>widgets</em>, # + most of them are brought together by the <em>defaultLayout</em> function which # + is defined in the <em>Foundation.hs</em> module, and used by <em>#{handlerName}</em>. # + All the files for templates and wigdets are in <em>templates</em>. + + <li> + A Widget's Html, Css and Javascript are separated in three files with the # + \<em>.hamlet</em>, <em>.lucius</em> and <em>.julius</em> extensions. + + <li ##{aDomId}>If you had javascript enabled then you wouldn't be seeing this. + + <hr /> + <li #form> + This is an example trivial Form. Read the # + \<a href="http://www.yesodweb.com/book/forms">Forms chapter<span class="glyphicon glyphicon-bookmark"></span></a> # + on the yesod book to learn more about them. + $maybe (info,con) <- submission + <div .message .alert .alert-success> + Your file's type was <em>#{fileContentType info}</em>. You say it has: <em>#{con}</em> + <form method=post action=@{HomeR}#form enctype=#{formEnctype}> + ^{formWidget} + <button .btn .btn-primary type="submit"> + Send it! <span class="glyphicon glyphicon-upload"></span> + <hr /> + + <li> And last but not least, Testing. In <em>tests/main.hs</em> you will find a # + test suite that performs tests on this page. # + You can run your tests by doing: <pre>yesod test</pre> diff --git a/web/templates/homepage.julius b/web/templates/homepage.julius new file mode 100644 index 0000000..22920d4 --- /dev/null +++ b/web/templates/homepage.julius @@ -0,0 +1 @@ +document.getElementById(#{toJSON aDomId}).innerHTML = "This text was added by the Javascript part of the homepage widget."; diff --git a/web/templates/homepage.lucius b/web/templates/homepage.lucius new file mode 100644 index 0000000..43f2bcc --- /dev/null +++ b/web/templates/homepage.lucius @@ -0,0 +1,20 @@ +h1 { + text-align: center; + margin-bottom: 30px +} +h2##{aDomId} { + color: #990 +} +li { + line-height: 2em; + font-size: 16px +} +ol { + margin-bottom: 30px +} +footer { + text-align: center +} +.input-sm { + margin-left: 20px +} diff --git a/web/test/Handler/CommonSpec.hs b/web/test/Handler/CommonSpec.hs new file mode 100644 index 0000000..e1920fb --- /dev/null +++ b/web/test/Handler/CommonSpec.hs @@ -0,0 +1,17 @@ +module Handler.CommonSpec (spec) where + +import TestImport + +spec :: Spec +spec = withApp $ do + describe "robots.txt" $ do + it "gives a 200" $ do + get RobotsR + statusIs 200 + it "has correct User-agent" $ do + get RobotsR + bodyContains "User-agent: *" + describe "favicon.ico" $ do + it "gives a 200" $ do + get FaviconR + statusIs 200 diff --git a/web/test/Handler/HomeSpec.hs b/web/test/Handler/HomeSpec.hs new file mode 100644 index 0000000..e0102f6 --- /dev/null +++ b/web/test/Handler/HomeSpec.hs @@ -0,0 +1,32 @@ +module Handler.HomeSpec (spec) where + +import TestImport + +spec :: Spec +spec = withApp $ do + it "loads the index and checks it looks right" $ do + get HomeR + statusIs 200 + htmlAllContain "h1" "Welcome to Yesod" + + request $ do + setMethod "POST" + setUrl HomeR + addToken + fileByLabel "Choose a file" "test/Spec.hs" "text/plain" -- talk about self-reference + byLabel "What's on the file?" "Some Content" + + statusIs 200 + -- more debugging printBody + htmlCount ".message" 1 + htmlAllContain ".message" "Some Content" + htmlAllContain ".message" "text/plain" + + -- This is a simple example of using a database access in a test. The + -- test will succeed for a fresh scaffolded site with an empty database, + -- but will fail on an existing database with a non-empty user table. + it "leaves the user table empty" $ do + get HomeR + statusIs 200 + users <- runDB $ selectList ([] :: [Filter User]) [] + assertEqual "user table empty" 0 $ length users diff --git a/web/test/Spec.hs b/web/test/Spec.hs new file mode 100644 index 0000000..a824f8c --- /dev/null +++ b/web/test/Spec.hs @@ -0,0 +1 @@ +{-# OPTIONS_GHC -F -pgmF hspec-discover #-} diff --git a/web/test/TestImport.hs b/web/test/TestImport.hs new file mode 100644 index 0000000..69b18ed --- /dev/null +++ b/web/test/TestImport.hs @@ -0,0 +1,74 @@ +module TestImport + ( module TestImport + , module X + ) where + +import Application (makeFoundation) +import ClassyPrelude as X +import Database.Persist as X hiding (get) +import Database.Persist.Sql (SqlPersistM, SqlBackend, runSqlPersistMPool, rawExecute, rawSql, unSingle, connEscapeName) +import Foundation as X +import Model as X +import Test.Hspec as X +import Text.Shakespeare.Text (st) +import Yesod.Default.Config2 (ignoreEnv, loadAppSettings) +import Yesod.Test as X + +-- Wiping the database +import Database.Persist.Sqlite (sqlDatabase, wrapConnection, createSqlPool) +import qualified Database.Sqlite as Sqlite +import Control.Monad.Logger (runLoggingT) +import Settings (appDatabaseConf) +import Yesod.Core (messageLoggerSource) + +runDB :: SqlPersistM a -> YesodExample App a +runDB query = do + pool <- fmap appConnPool getTestYesod + liftIO $ runSqlPersistMPool query pool + +withApp :: SpecWith App -> Spec +withApp = before $ do + settings <- loadAppSettings + ["config/test-settings.yml", "config/settings.yml"] + [] + ignoreEnv + foundation <- makeFoundation settings + wipeDB foundation + return foundation + +-- This function will truncate all of the tables in your database. +-- 'withApp' calls it before each test, creating a clean environment for each +-- spec to run in. +wipeDB :: App -> IO () +wipeDB app = do + -- In order to wipe the database, we need to temporarily disable foreign key checks. + -- Unfortunately, disabling FK checks in a transaction is a noop in SQLite. + -- Normal Persistent functions will wrap your SQL in a transaction, + -- so we create a raw SQLite connection to disable foreign keys. + -- Foreign key checks are per-connection, so this won't effect queries outside this function. + + -- Aside: SQLite by default *does not enable foreign key checks* + -- (disabling foreign keys is only necessary for those who specifically enable them). + let settings = appSettings app + sqliteConn <- rawConnection (sqlDatabase $ appDatabaseConf settings) + disableForeignKeys sqliteConn + + let logFunc = messageLoggerSource app (appLogger app) + pool <- runLoggingT (createSqlPool (wrapConnection sqliteConn) 1) logFunc + + flip runSqlPersistMPool pool $ do + tables <- getTables + sqlBackend <- ask + let queries = map (\t -> "DELETE FROM " ++ (connEscapeName sqlBackend $ DBName t)) tables + forM_ queries (\q -> rawExecute q []) + +rawConnection :: Text -> IO Sqlite.Connection +rawConnection t = Sqlite.open t + +disableForeignKeys :: Sqlite.Connection -> IO () +disableForeignKeys conn = Sqlite.prepare conn "PRAGMA foreign_keys = OFF;" >>= void . Sqlite.step + +getTables :: MonadIO m => ReaderT SqlBackend m [Text] +getTables = do + tables <- rawSql "SELECT name FROM sqlite_master WHERE type = 'table';" [] + return (fmap unSingle tables) -- 2.49.0