yesod 0.10.2 → 1.0.0
raw patch · 38 files changed
+4467/−652 lines, 38 filesdep ~hamletdep ~shakespeare-cssdep ~shakespeare-js
Dependency ranges changed: hamlet, shakespeare-css, shakespeare-js, shakespeare-text, transformers, wai, wai-extra, warp, yesod-auth, yesod-core, yesod-form, yesod-json, yesod-persistent
Files
- Build.hs +55/−45
- Devel.hs +75/−59
- Scaffolding/Scaffolder.hs +38/−48
- input/database.cg +0/−4
- input/site-arg.cg +0/−5
- input/use-tests.cg +6/−0
- main.hs +1/−1
- scaffold/Application.hs.cg +16/−12
- scaffold/Foundation.hs.cg +16/−21
- scaffold/Handler/Home.hs.cg +39/−0
- scaffold/Handler/Root.hs.cg +0/−17
- scaffold/Import.hs.cg +2/−2
- scaffold/Settings.hs.cg +1/−1
- scaffold/cabal_test_suite.cg +19/−0
- scaffold/config/favicon.ico.cg binary
- scaffold/config/mongoDB.yml.cg +1/−1
- scaffold/config/postgresql.yml.cg +1/−1
- scaffold/config/routes.cg +1/−1
- scaffold/config/settings.yml.cg +2/−0
- scaffold/config/sqlite.yml.cg +1/−1
- scaffold/deploy/Procfile.cg +44/−45
- scaffold/main.hs.cg +2/−2
- scaffold/project.cabal.cg +22/−17
- scaffold/static/css/bootstrap.css.cg +3990/−0
- scaffold/static/js/modernizr.js.cg +0/−4
- scaffold/templates/boilerplate-wrapper.hamlet.cg +42/−0
- scaffold/templates/default-layout.lucius.cg +0/−3
- scaffold/templates/homepage.hamlet.cg +37/−1
- scaffold/templates/homepage.julius.cg +1/−1
- scaffold/templates/homepage.lucius.cg +1/−1
- scaffold/tests/main.hs.cg +20/−0
- scaffold/tiny/Application.hs.cg +0/−57
- scaffold/tiny/Foundation.hs.cg +0/−99
- scaffold/tiny/Import.hs.cg +0/−18
- scaffold/tiny/Settings.hs.cg +0/−60
- scaffold/tiny/config/routes.cg +0/−7
- scaffold/tiny/project.cabal.cg +0/−83
- yesod.cabal +34/−35
Build.hs view
@@ -1,46 +1,50 @@ {-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE CPP #-} module Build ( getDeps , touchDeps , touch , recompDeps- , findHaskellFiles ) where -- FIXME there's a bug when getFileStatus applies to a file -- temporary deleted (e.g., Vim saving a file) import Control.Applicative ((<|>), many)+import qualified Data.Attoparsec.Text.Lazy as A+import Data.Char (isSpace, isUpper)+import qualified Data.Text.Lazy.IO as TIO+ import Control.Exception (SomeException, try)-import Control.Monad (when, filterM, forM, forM_)+import Control.Monad (when, filterM, forM, forM_, (>=>)) -import qualified Data.Attoparsec.Text.Lazy as A-import Data.Char (isSpace) import Data.Monoid (mappend)-import Data.List (isSuffixOf) import qualified Data.Map as Map import qualified Data.Set as Set-import qualified Data.Text.Lazy.IO as TIO import qualified System.Posix.Types import System.Directory-import System.FilePath (replaceExtension, (</>))+import System.FilePath (takeExtension, replaceExtension, (</>)) import System.PosixCompat.Files (getFileStatus, setFileTimes, accessTime, modificationTime) + touch :: IO ()-touch = touchDeps id updateFileTime =<< getDeps+touch = touchDeps id updateFileTime =<< fmap snd (getDeps []) -recompDeps :: IO ()-recompDeps = touchDeps hiFile removeHi =<< getDeps+recompDeps :: [FilePath] -> IO ()+recompDeps = getDeps >=> touchDeps hiFile removeHi . snd type Deps = Map.Map FilePath (Set.Set FilePath) -getDeps :: IO Deps-getDeps = do- hss <- findHaskellFiles "."- deps' <- mapM determineHamletDeps hss- return $ fixDeps $ zip hss deps'+getDeps :: [FilePath] -> IO ([FilePath], Deps)+getDeps hsSourceDirs = do+ let defSrcDirs = case hsSourceDirs of+ [] -> ["."]+ ds -> ds+ hss <- fmap concat $ mapM findHaskellFiles defSrcDirs+ deps' <- mapM determineDeps hss+ return $ (hss, fixDeps $ zip hss deps') touchDeps :: (FilePath -> FilePath) -> (FilePath -> FilePath -> IO ()) ->@@ -103,42 +107,52 @@ fmap concat $ mapM go contents where go ('.':_) = return []- go ('c':"abal-dev") = return []- go ('d':"ist") = return []- go x = do- let y = path </> x- d <- doesDirectoryExist y- if d- then findHaskellFiles y- else if ".hs" `isSuffixOf` x || ".lhs" `isSuffixOf` x- then return [y]- else return []+ go filename = do+ d <- doesDirectoryExist full+ if not d+ then if isHaskellFile+ then return [full]+ else return []+ else if isHaskellDir+ then findHaskellFiles full+ else return []+ where+ -- this could fail on unicode+ isHaskellDir = isUpper (head filename)+ isHaskellFile = takeExtension filename `elem` watch_files+ full = path </> filename+ watch_files = [".hs", ".lhs"] -data TempType = Hamlet | Verbatim | Messages FilePath | StaticFiles FilePath+data TempType = StaticFiles FilePath+ | Verbatim | Messages FilePath | Hamlet deriving Show -determineHamletDeps :: FilePath -> IO [FilePath]-determineHamletDeps x = do+determineDeps :: FilePath -> IO [FilePath]+determineDeps x = do y <- TIO.readFile x -- FIXME catch IO exceptions let z = A.parse (many $ (parser <|> (A.anyChar >> return Nothing))) y case z of A.Fail{} -> return [] A.Done _ r -> mapM go r >>= filterM doesFileExist . concat where+ go (Just (StaticFiles fp, _)) = getFolderContents fp go (Just (Hamlet, f)) = return [f, "templates/" ++ f ++ ".hamlet"] go (Just (Verbatim, f)) = return [f] go (Just (Messages f, _)) = return [f]- go (Just (StaticFiles fp, _)) = getFolderContents fp go Nothing = return []+ parser = do- ty <- (A.string "$(hamletFile " >> return Hamlet)+ ty <- (do _ <- A.string "\nstaticFiles \""+ x' <- A.many1 $ A.satisfy (/= '"')+ return $ StaticFiles x')+ <|> (A.string "$(parseRoutesFile " >> return Verbatim)+ <|> (A.string "$(hamletFile " >> return Hamlet) <|> (A.string "$(ihamletFile " >> return Hamlet) <|> (A.string "$(whamletFile " >> return Hamlet) <|> (A.string "$(html " >> return Hamlet) <|> (A.string "$(widgetFile " >> return Hamlet) <|> (A.string "$(Settings.hamletFile " >> return Hamlet) <|> (A.string "$(Settings.widgetFile " >> return Hamlet)- <|> (A.string "$(parseRoutesFile " >> return Verbatim) <|> (A.string "$(persistFile " >> return Verbatim) <|> ( A.string "$(persistFileWith " >>@@ -153,10 +167,6 @@ y <- A.many1 $ A.satisfy (/= '"') _ <- A.string "\"" return $ Messages $ concat [x', "/", y, ".msg"])- <|> (do- _ <- A.string "\nstaticFiles \""- x' <- A.many1 $ A.satisfy (/= '"')- return $ StaticFiles x') case ty of Messages{} -> return $ Just (ty, "") StaticFiles{} -> return $ Just (ty, "")@@ -169,13 +179,13 @@ _ <- A.char ')' return $ Just (ty, y) -getFolderContents :: FilePath -> IO [FilePath]-getFolderContents fp = do- cs <- getDirectoryContents fp- let notHidden ('.':_) = False- notHidden ('t':"mp") = False- notHidden _ = True- fmap concat $ forM (filter notHidden cs) $ \c -> do- let f = fp ++ '/' : c- isFile <- doesFileExist f- if isFile then return [f] else getFolderContents f+ getFolderContents :: FilePath -> IO [FilePath]+ getFolderContents fp = do+ cs <- getDirectoryContents fp+ let notHidden ('.':_) = False+ notHidden ('t':"mp") = False+ notHidden _ = True+ fmap concat $ forM (filter notHidden cs) $ \c -> do+ let f = fp ++ '/' : c+ isFile <- doesFileExist f+ if isFile then return [f] else getFolderContents f
Devel.hs view
@@ -1,6 +1,4 @@ {-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE QuasiQuotes #-}-{-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE CPP #-} module Devel@@ -16,7 +14,7 @@ import Control.Concurrent (forkIO, threadDelay) import qualified Control.Exception as Ex-import Control.Monad (forever, when)+import Control.Monad (forever, when, unless) import Data.Char (isUpper, isNumber) import qualified Data.List as L@@ -29,9 +27,10 @@ import System.Posix.Types (EpochTime) import System.PosixCompat.Files (modificationTime, getFileStatus) import System.Process (createProcess, proc, terminateProcess, readProcess,- waitForProcess, rawSystem)+ waitForProcess, rawSystem, runInteractiveProcess)+import System.IO (hClose, hIsEOF, hGetLine, stdout, stderr, hPutStrLn) -import Build (recompDeps, getDeps,findHaskellFiles)+import Build (recompDeps, getDeps) lockFile :: FilePath lockFile = "dist/devel-terminate"@@ -46,9 +45,7 @@ devel :: Bool -> [String] -> IO () devel isCabalDev passThroughArgs = do- checkDevelFile- writeLock putStrLn "Yesod devel server. Press ENTER to quit"@@ -56,20 +53,20 @@ cabal <- D.findPackageDesc "." gpd <- D.readPackageDescription D.normal cabal - checkCabalFile gpd+ hsSourceDirs <- checkCabalFile gpd _<- rawSystem cmd args - mainLoop+ mainLoop hsSourceDirs _ <- getLine writeLock exitSuccess where- cmd | isCabalDev == True = "cabal-dev"+ cmd | isCabalDev = "cabal-dev" | otherwise = "cabal" - diffArgs | isCabalDev == True = [+ diffArgs | isCabalDev = [ "--cabal-install-arg=-fdevel" -- legacy , "--cabal-install-arg=-flibrary-only" ]@@ -79,27 +76,28 @@ ] args = "configure":diffArgs ++ ["--disable-library-profiling" ] - mainLoop :: IO ()- mainLoop = do+ mainLoop :: [FilePath] -> IO ()+ mainLoop hsSourceDirs = do ghcVer <- ghcVersion+ when isCabalDev (rawSystemFilter cmd ["build"] >> return ()) -- cabal-dev fails with strange errors sometimes if we cabal-dev buildinfo before cabal-dev build+ pkgArgs <- ghcPackageArgs isCabalDev ghcVer+ let devArgs = pkgArgs ++ ["devel.hs"] ++ passThroughArgs forever $ do putStrLn "Rebuilding application..." - recompDeps+ recompDeps hsSourceDirs - list <- getFileList- exit <- rawSystem cmd ["build"]+ list <- getFileList hsSourceDirs+ exit <- rawSystemFilter cmd ["build"] case exit of ExitFailure _ -> putStrLn "Build failure, pausing..." _ -> do removeLock- let pkg = pkgConfigs isCabalDev ghcVer- let dev_args = pkg ++ ["devel.hs"] ++ passThroughArgs- putStrLn $ "Starting development server: runghc " ++ L.intercalate " " dev_args- (_,_,_,ph) <- createProcess $ proc "runghc" dev_args+ putStrLn $ "Starting development server: runghc " ++ L.unwords devArgs+ (_,_,_,ph) <- createProcess $ proc "runghc" devArgs watchTid <- forkIO . try_ $ do- watchForChanges list+ watchForChanges hsSourceDirs list putStrLn "Stopping development server..." writeLock threadDelay 1000000@@ -108,43 +106,36 @@ ec <- waitForProcess ph putStrLn $ "Exit code: " ++ show ec Ex.throwTo watchTid (userError "process finished")- watchForChanges list+ watchForChanges hsSourceDirs list try_ :: forall a. IO a -> IO () try_ x = (Ex.try x :: IO (Either Ex.SomeException a)) >> return () -pkgConfigs :: Bool -> String -> [String]-pkgConfigs isCabalDev ghcVer- | isCabalDev = ["-package-confcabal-dev/packages-" ++ ghcVer ++ ".conf", inplacePkg]- | otherwise = [inplacePkg]- where- inplacePkg = "-package-confdist/package.conf.inplace"-- type FileList = Map.Map FilePath EpochTime -getFileList :: IO FileList-getFileList = do- files <- findHaskellFiles "."- deps <- getDeps+getFileList :: [FilePath] -> IO FileList+getFileList hsSourceDirs = do+ (files, deps) <- getDeps hsSourceDirs let files' = files ++ map fst (Map.toList deps) fmap Map.fromList $ flip mapM files' $ \f -> do- fs <- getFileStatus f- return (f, modificationTime fs)+ efs <- Ex.try $ getFileStatus f+ return $ case efs of+ Left (_ :: Ex.SomeException) -> (f, 0)+ Right fs -> (f, modificationTime fs) -watchForChanges :: FileList -> IO ()-watchForChanges list = do- newList <- getFileList+watchForChanges :: [FilePath] -> FileList -> IO ()+watchForChanges hsSourceDirs list = do+ newList <- getFileList hsSourceDirs if list /= newList then return ()- else threadDelay 1000000 >> watchForChanges list+ else threadDelay 1000000 >> watchForChanges hsSourceDirs list checkDevelFile :: IO () checkDevelFile = do e <- doesFileExist "devel.hs"- when (not e) $ failWith "file devel.hs not found"+ unless e $ failWith "file devel.hs not found" -checkCabalFile :: D.GenericPackageDescription -> IO ()+checkCabalFile :: D.GenericPackageDescription -> IO [FilePath] checkCabalFile gpd = case D.condLibrary gpd of Nothing -> failWith "incorrect cabal file, no library" Just ct ->@@ -152,19 +143,15 @@ Nothing -> failWith "no development flag found in your configuration file. Expected a 'library-only' flag or the older 'devel' flag" Just dLib -> do- case (D.hsSourceDirs . D.libBuildInfo) dLib of- [] -> return ()- ["."] -> return ()- _ ->- putStrLn $ "WARNING: yesod devel may not work correctly with " ++- "custom hs-source-dirs"- fl <- getFileList- let unlisted = checkFileList fl dLib- when (not . null $ unlisted) $ do- putStrLn "WARNING: the following source files are not listed in exposed-modules or other-modules:"- mapM_ putStrLn unlisted- when (D.fromString "Application" `notElem` D.exposedModules dLib) $ do- putStrLn "WARNING: no exposed module Application"+ let hsSourceDirs = D.hsSourceDirs . D.libBuildInfo $ dLib+ fl <- getFileList hsSourceDirs+ let unlisted = checkFileList fl dLib+ unless (null unlisted) $ do+ putStrLn "WARNING: the following source files are not listed in exposed-modules or other-modules:"+ mapM_ putStrLn unlisted+ when (D.fromString "Application" `notElem` D.exposedModules dLib) $+ putStrLn "WARNING: no exposed module Application"+ return hsSourceDirs failWith :: String -> IO a failWith msg = do@@ -192,6 +179,22 @@ where getNumber = filter (\x -> isNumber x || x == '.') +ghcPackageArgs :: Bool -> String -> IO [String]+ghcPackageArgs isCabalDev ghcVer+ | isCabalDev = do+ r <- readProcess "cabal-dev" ["buildopts"] []+ let opts = L.lines r+ return $ "-hide-all-packages" : "-no-user-package-conf" : inplacePkg : cabaldevConf : pkgid opts : depPkgIds opts+ | otherwise = return [inplacePkg]+ where+ pkgid opts = let (_,p) = head (selectOpts ["-package-name"] opts) in "-package-id" ++ p ++ "-inplace"+ depPkgIds opts = map (uncurry (++)) (selectOpts ["-package-id"] opts)+ inplacePkg = "-package-confdist/package.conf.inplace"+ cabaldevConf = "-package-confcabal-dev/packages-" ++ ghcVer ++ ".conf"+ selectOpts opts (x1:x2:xs)+ | x1 `elem` opts = (x1,x2):selectOpts opts xs+ | otherwise = selectOpts opts (x2:xs)+ selectOpts _ _ = [] lookupDevelLib :: D.CondTree D.ConfVar c a -> Maybe a lookupDevelLib ct | found = Just (D.condTreeData ct)@@ -199,9 +202,22 @@ where found = not . null . map (\(_,x,_) -> D.condTreeData x) . filter isDevelLib . D.condTreeComponents $ ct- isDevelLib ((D.Var (D.Flag (D.FlagName f))), _, _) = f `elem` ["library-only", "devel"]+ isDevelLib (D.Var (D.Flag (D.FlagName f)), _, _) = f `elem` ["library-only", "devel"] isDevelLib _ = False ---+-- | Acts like @rawSystem@, but filters out lines from the output that we're not interested in seeing.+rawSystemFilter :: String -> [String] -> IO ExitCode+rawSystemFilter command args = do+ (inh, outh, errh, ph) <- runInteractiveProcess command args Nothing Nothing+ hClose inh+ let go handlein handleout = do+ isEof <- hIsEOF handlein+ if isEof+ then hClose handlein+ else do+ line <- hGetLine handlein+ unless ("Loading package " `L.isPrefixOf` line) $ hPutStrLn handleout line+ go handlein handleout+ _ <- forkIO $ go outh stdout+ _ <- forkIO $ go errh stderr+ waitForProcess ph
Scaffolding/Scaffolder.hs view
@@ -5,7 +5,7 @@ import Scaffolding.CodeGen import Language.Haskell.TH.Syntax-import Control.Monad (unless)+import Control.Monad (when) import qualified Data.Text.Lazy as LT import qualified Data.Text.Lazy.Encoding as LT import qualified Data.ByteString.Lazy as L@@ -26,14 +26,7 @@ hFlush stdout prompt f -qq :: String-#if __GLASGOW_HASKELL__ >= 700-qq = ""-#else-qq = "$"-#endif--data Backend = Sqlite | Postgresql | Mysql | MongoDB | Tiny+data Backend = Sqlite | Postgresql | Mysql | MongoDB deriving (Eq, Read, Show, Enum, Bounded) puts :: String -> IO ()@@ -58,9 +51,7 @@ project <- prompt $ \s -> all validPN s && not (null s) let dir = project - puts $(codegenDir "input" "site-arg")- let isUpperAZ c = 'A' <= c && c <= 'Z'- sitearg <- prompt $ \s -> not (null s) && all validPN s && isUpperAZ (head s) && s /= "Main"+ let sitearg = "App" puts $(codegenDir "input" "database") @@ -71,18 +62,19 @@ "p" -> (Postgresql, "GenericSql", "SqlPersist", "Postgresql", "sqlSettings") "mysql" -> (Mysql, "GenericSql", "SqlPersist", "MySQL", "sqlSettings") "mongo" -> (MongoDB, "MongoDB", "Action", "MongoDB", "MkPersistSettings { mpsBackend = ConT ''Action }")- "t" -> (Tiny, "","","",undefined) _ -> error $ "Invalid backend: " ++ backendC (modelImports) = case backend of MongoDB -> "import Database.Persist." ++ importGenericDB ++ "\nimport Language.Haskell.TH.Syntax" Sqlite -> "" Postgresql -> "" Mysql -> ""- Tiny -> undefined uncapitalize s = toLower (head s) : tail s backendLower = uncapitalize $ show backend upper = show backend+ + let useTests = True+ let testsDep = if useTests then ", yesod-test" else "" let runMigration = case backend of@@ -100,7 +92,6 @@ Sqlite -> "sqlite" Postgresql -> "postgresql" Mysql -> "mysql"- Tiny -> error "Accessing dbConfigFile for Tiny" let configPersist = case backend of@@ -108,16 +99,14 @@ Sqlite -> "SqliteConf" Postgresql -> "PostgresConf" Mysql -> "MySQLConf"- Tiny -> error "Accessing configPersist for Tiny" putStrLn "That's it! I'm creating your files now..." let withConnectionPool = case backend of- Sqlite -> $(codegen $ "sqliteConnPool")- Postgresql -> $(codegen $ "postgresqlConnPool")+ Sqlite -> $(codegen "sqliteConnPool")+ Postgresql -> $(codegen "postgresqlConnPool") Mysql -> ""- MongoDB -> $(codegen $ "mongoDBConnPool")- Tiny -> ""+ MongoDB -> $(codegen "mongoDBConnPool") packages = if backend == MongoDB@@ -130,10 +119,12 @@ let fst3 (x, _, _) = x year <- show . fst3 . toGregorian . utctDay <$> getCurrentTime - let writeFile' fp s = do+ let changeFile fileFunc fp s = do putStrLn $ "Generating " ++ fp- L.writeFile (dir ++ '/' : fp) $ LT.encodeUtf8 $ LT.pack s+ fileFunc (dir ++ '/' : fp) $ LT.encodeUtf8 $ LT.pack s mkDir fp = createDirectoryIfMissing True $ dir ++ '/' : fp+ writeFile' = changeFile L.writeFile+ appendFile' = changeFile L.appendFile mkDir "Handler" mkDir "templates"@@ -146,33 +137,32 @@ mkDir "Settings" mkDir "messages" - writeFile' ("deploy/Procfile") $(codegen "deploy/Procfile")+ writeFile' "deploy/Procfile" $(codegen "deploy/Procfile") case backend of- Sqlite -> writeFile' ("config/" ++ backendLower ++ ".yml") $(codegen ("config/sqlite.yml"))- Postgresql -> writeFile' ("config/" ++ backendLower ++ ".yml") $(codegen ("config/postgresql.yml"))- MongoDB -> writeFile' ("config/" ++ backendLower ++ ".yml") $(codegen ("config/mongoDB.yml"))- Mysql -> writeFile' ("config/" ++ backendLower ++ ".yml") $(codegen ("config/mysql.yml"))- Tiny -> return ()+ Sqlite -> writeFile' ("config/" ++ backendLower ++ ".yml") $(codegen "config/sqlite.yml")+ Postgresql -> writeFile' ("config/" ++ backendLower ++ ".yml") $(codegen "config/postgresql.yml")+ MongoDB -> writeFile' ("config/" ++ backendLower ++ ".yml") $(codegen "config/mongoDB.yml")+ Mysql -> writeFile' ("config/" ++ backendLower ++ ".yml") $(codegen "config/mysql.yml") - let isTiny = backend == Tiny- ifTiny a b = if isTiny then a else b+ writeFile' "config/settings.yml" $(codegen "config/settings.yml")+ writeFile' "main.hs" $(codegen "main.hs")+ writeFile' "devel.hs" $(codegen "devel.hs")+ writeFile' (project ++ ".cabal") $(codegen "project.cabal")+ when useTests $+ appendFile' (project ++ ".cabal") $(codegen "cabal_test_suite") - writeFile' ("config/settings.yml") $(codegen "config/settings.yml")- writeFile' ("main.hs") $(codegen "main.hs")- writeFile' ("devel.hs") $(codegen "devel.hs")- writeFile' (project ++ ".cabal") $ ifTiny $(codegen "tiny/project.cabal") $(codegen "project.cabal") writeFile' ".ghci" $(codegen ".ghci") writeFile' "LICENSE" $(codegen "LICENSE")- writeFile' ("Foundation.hs") $ ifTiny $(codegen "tiny/Foundation.hs") $(codegen "Foundation.hs")- writeFile' ("Import.hs") $ ifTiny $(codegen "tiny/Import.hs") $(codegen "Import.hs")- writeFile' "Application.hs" $ ifTiny $(codegen "tiny/Application.hs") $(codegen "Application.hs")- writeFile' "Handler/Root.hs" $(codegen "Handler/Root.hs")- unless isTiny $ writeFile' "Model.hs" $(codegen "Model.hs")- writeFile' "Settings.hs" $ ifTiny $(codegen "tiny/Settings.hs") $(codegen "Settings.hs")+ writeFile' "Foundation.hs" $(codegen "Foundation.hs")+ writeFile' "Import.hs" $(codegen "Import.hs")+ writeFile' "Application.hs" $(codegen "Application.hs")+ writeFile' "Handler/Home.hs" $(codegen "Handler/Home.hs")+ writeFile' "Model.hs" $(codegen "Model.hs")+ writeFile' "Settings.hs" $(codegen "Settings.hs") writeFile' "Settings/StaticFiles.hs" $(codegen "Settings/StaticFiles.hs")- writeFile' "templates/default-layout.lucius"- $(codegen "templates/default-layout.lucius")+ writeFile' "static/css/bootstrap.css"+ $(codegen "static/css/bootstrap.css") writeFile' "templates/default-layout.hamlet" $(codegen "templates/default-layout.hamlet") writeFile' "templates/default-layout-wrapper.hamlet"@@ -181,17 +171,17 @@ $(codegen "templates/normalize.lucius") writeFile' "templates/homepage.hamlet" $(codegen "templates/homepage.hamlet")- writeFile' "config/routes" $ ifTiny $(codegen "tiny/config/routes") $(codegen "config/routes")+ writeFile' "config/routes" $(codegen "config/routes") writeFile' "templates/homepage.lucius" $(codegen "templates/homepage.lucius") writeFile' "templates/homepage.julius" $(codegen "templates/homepage.julius")- unless isTiny $ writeFile' "config/models" $(codegen "config/models")+ writeFile' "config/models" $(codegen "config/models") writeFile' "messages/en.msg" $(codegen "messages/en.msg") - S.writeFile (dir ++ "/static/js/modernizr.js")- $(runIO (S.readFile "scaffold/static/js/modernizr.js.cg") >>= \bs ->- [|S.pack $(return $ LitE $ StringL $ S.unpack bs)|])+ when useTests $ do+ mkDir "tests"+ writeFile' "tests/main.hs" $(codegen "tests/main.hs") S.writeFile (dir ++ "/config/favicon.ico") $(runIO (S.readFile "scaffold/config/favicon.ico.cg") >>= \bs -> do@@ -199,7 +189,7 @@ return $ pack `AppE` LitE (StringL $ S.unpack bs)) S.writeFile (dir ++ "/config/robots.txt")- $(runIO (S.readFile "scaffold/config/robots.txt.cg") >>= \bs -> do+ $(runIO (S.readFile "scaffold/config/robots.txt.cg") >>= \bs -> [|S.pack $(return $ LitE $ StringL $ S.unpack bs)|]) putStr $(codegenDir "input" "done")
input/database.cg view
@@ -2,13 +2,9 @@ This tool will build in either SQLite or PostgreSQL or MongoDB support for you. We recommend starting with SQLite: it has no dependencies. -We have another option: a tiny project with minimal dependencies.-Mostly this means no database and no authentication.- s = sqlite p = postgresql mongo = mongodb- t = tiny mysql = MySQL (experimental) So, what'll it be?
− input/site-arg.cg
@@ -1,5 +0,0 @@-Great, we'll be creating ~project~ today, and placing it in ~dir~.-What's going to be the name of your foundation datatype? This name must-start with a capital letter.--Foundation:
+ input/use-tests.cg view
@@ -0,0 +1,6 @@+Yesod also comes with an optional integration tests tool.+You should always test your application, the only reason+not to use the yesod testing facilities is because you+already have some other testing tool that you like better.++Include tests?:
main.hs view
@@ -36,7 +36,7 @@ ["touch"] -> touch #endif "devel":rest -> devel isDev rest- ["version"] -> putStrLn yesodVersion+ ["version"] -> putStrLn $ "yesod-core version:" ++ yesodVersion "configure":rest -> rawSystem cmd ("configure":rest) >>= exitWith _ -> do putStrLn "Usage: yesod <command>"
scaffold/Application.hs.cg view
@@ -1,6 +1,6 @@ {-# OPTIONS_GHC -fno-warn-orphans #-} module Application- ( getApplication+ ( makeApplication , getApplicationDev ) where @@ -21,7 +21,7 @@ import Network.HTTP.Conduit (newManager, def) -- Import all relevant handler modules here.-import Handler.Root+import Handler.Home -- This line actually creates our YesodSite instance. It is the second half -- of the call to mkYesodData which occurs in Foundation.hs. Please see@@ -32,15 +32,9 @@ -- performs initialization and creates a WAI application. This is also the -- place to put your migrate statements to have automatic database -- migrations handled by Yesod.-getApplication :: AppConfig DefaultEnv Extra -> Logger -> IO Application-getApplication conf logger = do- manager <- newManager def- s <- staticSite- dbconf <- withYamlEnvironment "config/~dbConfigFile~.yml" (appEnv conf)- Database.Persist.Store.loadConfig >>=- Database.Persist.Store.applyEnv- p <- Database.Persist.Store.createPoolConfig (dbconf :: Settings.PersistConfig)~runMigration~- let foundation = ~sitearg~ conf setLogger s p manager dbconf+makeApplication :: AppConfig DefaultEnv Extra -> Logger -> IO Application+makeApplication conf logger = do+ foundation <- makeFoundation conf setLogger app <- toWaiAppPlain foundation return $ logWare app where@@ -52,10 +46,20 @@ logWare = logCallback (logBS setLogger) #endif +makeFoundation :: AppConfig DefaultEnv Extra -> Logger -> IO ~sitearg~+makeFoundation conf setLogger = do+ manager <- newManager def+ s <- staticSite+ dbconf <- withYamlEnvironment "config/~dbConfigFile~.yml" (appEnv conf)+ Database.Persist.Store.loadConfig >>=+ Database.Persist.Store.applyEnv+ p <- Database.Persist.Store.createPoolConfig (dbconf :: Settings.PersistConfig)~runMigration~+ return $ ~sitearg~ conf setLogger s p manager dbconf+ -- for yesod devel getApplicationDev :: IO (Int, Application) getApplicationDev =- defaultDevelApp loader getApplication+ defaultDevelApp loader makeApplication where loader = loadConfig (configSettings Development) { csParseExtra = parseExtra
scaffold/Foundation.hs.cg view
@@ -22,23 +22,15 @@ import Yesod.Default.Util (addStaticContentExternal) import Yesod.Logger (Logger, logMsg, formatLogText) import Network.HTTP.Conduit (Manager)-#ifdef DEVELOPMENT-import Yesod.Logger (logLazyText)-#endif import qualified Settings-import qualified Data.ByteString.Lazy as L import qualified Database.Persist.Store+import Settings.StaticFiles import Database.Persist.~importGenericDB~ import Settings (widgetFile, Extra (..)) import Model import Text.Jasmine (minifym) import Web.ClientSession (getKey) import Text.Hamlet (hamletFile)-#if DEVELOPMENT-import qualified Data.Text.Lazy.Encoding-#else-import Network.Mail.Mime (sendmail)-#endif -- | The site argument for your application. This can be a good place to -- keep settings and values requiring initialization before your application@@ -84,8 +76,11 @@ instance Yesod ~sitearg~ where approot = ApprootMaster $ appRoot . settings - -- Place the session key file in the config folder- encryptKey _ = fmap Just $ getKey "config/client_session_key.aes"+ -- Store session data on the client in encrypted cookies,+ -- default session idle timeout is 120 minutes+ makeSessionBackend _ = do+ key <- getKey "config/client_session_key.aes"+ return . Just $ clientSessionBackend key 120 defaultLayout widget = do master <- getYesod@@ -99,6 +94,7 @@ pc <- widgetToPageContent $ do $(widgetFile "normalize")+ addStylesheet $ StaticR css_bootstrap_css $(widgetFile "default-layout") hamletToRepHtml $(hamletFile "templates/default-layout-wrapper.hamlet") @@ -137,9 +133,9 @@ type AuthId ~sitearg~ = UserId -- Where to send a user after successful login- loginDest _ = RootR+ loginDest _ = HomeR -- Where to send a user after logout- logoutDest _ = RootR+ logoutDest _ = HomeR getAuthId creds = runDB $ do x <- getBy $ UniqueUser $ credsIdent creds@@ -153,15 +149,14 @@ authHttpManager = httpManager --- Sends off your mail. Requires sendmail in production!-deliver :: ~sitearg~ -> L.ByteString -> IO ()-#ifdef DEVELOPMENT-deliver y = logLazyText (getLogger y) . Data.Text.Lazy.Encoding.decodeUtf8-#else-deliver _ = sendmail-#endif- -- This instance is required to use forms. You can modify renderMessage to -- achieve customized and internationalized form validation messages. instance RenderMessage ~sitearg~ FormMessage where renderMessage _ _ = defaultFormMessage++-- Note: previous versions of the scaffolding included a deliver function to+-- send emails. Unfortunately, there are too many different options for us to+-- give a reasonable default. Instead, the information is available on the+-- wiki:+--+-- https://github.com/yesodweb/yesod/wiki/Sending-email
+ scaffold/Handler/Home.hs.cg view
@@ -0,0 +1,39 @@+{-# LANGUAGE TupleSections, OverloadedStrings #-}+module Handler.Home where++import Import++-- 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 RepHtml+getHomeR = do+ (formWidget, formEnctype) <- generateFormPost sampleForm+ let submission = Nothing :: Maybe (FileInfo, Text)+ handlerName = "getHomeR" :: Text+ defaultLayout $ do+ aDomId <- lift newIdent+ setTitle "Welcome To Yesod!"+ $(widgetFile "homepage")++postHomeR :: Handler RepHtml+postHomeR = do+ ((result, formWidget), formEnctype) <- runFormPost sampleForm+ let handlerName = "postHomeR" :: Text+ submission = case result of+ FormSuccess res -> Just res+ _ -> Nothing++ defaultLayout $ do+ aDomId <- lift newIdent+ setTitle "Welcome To Yesod!"+ $(widgetFile "homepage")++sampleForm :: Form (FileInfo, Text)+sampleForm = renderDivs $ (,)+ <$> fileAFormReq "Choose a file"+ <*> areq textField "What's on the file?" Nothing
− scaffold/Handler/Root.hs.cg
@@ -1,17 +0,0 @@-module Handler.Root where--import Import---- This is a handler function for the GET request method on the RootR--- 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.-getRootR :: Handler RepHtml-getRootR = do- defaultLayout $ do- h2id <- lift newIdent- setTitle "~project~ homepage"- $(widgetFile "homepage")
scaffold/Import.hs.cg view
@@ -6,7 +6,7 @@ , module Data.Monoid , module Control.Applicative , Text-#if __GLASGOW_HASKELL__ < 740+#if __GLASGOW_HASKELL__ < 704 , (<>) #endif ) where@@ -19,7 +19,7 @@ import Data.Text (Text) import Settings.StaticFiles -#if __GLASGOW_HASKELL__ < 740+#if __GLASGOW_HASKELL__ < 704 infixr 5 <> (<>) :: Monoid m => m -> m -> m (<>) = mappend
scaffold/Settings.hs.cg view
@@ -46,7 +46,7 @@ -- -- To see how this value is used, see urlRenderOverride in Foundation.hs staticRoot :: AppConfig DefaultEnv x -> Text-staticRoot conf = [~qq~st|#{appRoot conf}/static|]+staticRoot conf = [st|#{appRoot conf}/static|] -- The rest of this file contains settings which rarely need changing by a
+ scaffold/cabal_test_suite.cg view
@@ -0,0 +1,19 @@+test-suite integration-tests+ type: exitcode-stdio-1.0+ main-is: main.hs+ hs-source-dirs: tests .+ ghc-options: -Wall+ extensions: TemplateHaskell+ QuasiQuotes+ OverloadedStrings+ NoImplicitPrelude+ CPP+ OverloadedStrings+ MultiParamTypeClasses+ TypeFamilies+ GADTs+ GeneralizedNewtypeDeriving+ FlexibleContexts++ build-depends: base >= 4 && < 5+ , yesod-test >= 0.1 && < 0.2
scaffold/config/favicon.ico.cg view
binary file changed (1150 → 1342 bytes)
scaffold/config/mongoDB.yml.cg view
@@ -9,7 +9,7 @@ Development: <<: *defaults -Test:+Testing: database: ~project~_test <<: *defaults
scaffold/config/postgresql.yml.cg view
@@ -9,7 +9,7 @@ Development: <<: *defaults -Test:+Testing: database: ~project~_test <<: *defaults
scaffold/config/routes.cg view
@@ -4,4 +4,4 @@ /favicon.ico FaviconR GET /robots.txt RobotsR GET -/ RootR GET+/ HomeR GET POST
scaffold/config/settings.yml.cg view
@@ -14,5 +14,7 @@ <<: *defaults Production:+ host: "*4" # any IPv4 host+ port: 3000 approot: "http://www.example.com" <<: *defaults
scaffold/config/sqlite.yml.cg view
@@ -5,7 +5,7 @@ Development: <<: *defaults -Test:+Testing: database: ~project~_test.sqlite3 <<: *defaults
scaffold/deploy/Procfile.cg view
@@ -12,62 +12,61 @@ # # * Create an empty package.json # echo '{ "name": "~project~", "version": "0.0.1", "dependencies": {} }' >> package.json-# -# Postgresql Yesod setup: #-# * add code to read the DATABASE_URL environment variable.-# -# import System.Environment-# main = do-# # parse env variable-# durl <- getEnv "DATABASE_URL"-# # pass settings to withConnectionPool instead of directly using loadConnStr-# defaultMain (fromArgsExtra loadExtra) withYesodHeroku+# Postgresql Yesod setup: # # * add a dependency on the "heroku" package in your cabal file-# -# * add code in Application.hs to turn the url into connection parameters. The below works for Postgresql. #-# #ifdef !DEVELOPMENT-# import qualified Web.Heroku-# #endif+# * add code in Application.hs to use the heroku package and load the connection parameters.+# The below works for Postgresql. #+# #ifndef DEVELOPMENT+# import qualified Web.Heroku+# #endif #-# canonicalizeKey :: (Text, val) -> (Text, val)-# canonicalizeKey ("dbname", val) = ("database", val)-# canonicalizeKey pair = pair #-# toMapping :: [(key, val)] -> DO.Object key val-# toMapping = DO.Mapping . map (\(key, val) -> (key, DO.Scalar val))+# makeApplication :: AppConfig DefaultEnv Extra -> Logger -> IO Application+# makeApplication conf logger = do+# manager <- newManager def+# s <- staticSite+# hconfig <- loadHerokuConfig+# dbconf <- withYamlEnvironment "config/postgresql.yml" (appEnv conf)+# (Database.Persist.Store.loadConfig . combineMappings hconfig) >>=+# Database.Persist.Store.applyEnv+# p <- Database.Persist.Store.createPoolConfig (dbconf :: Settings.PersistConfig)+# Database.Persist.Store.runPool dbconf (runMigration migrateAll) p+# let foundation = ~sitearg~ conf setLogger s p manager dbconf+# app <- toWaiAppPlain foundation+# return $ logWare app+# where+##ifdef DEVELOPMENT+# logWare = logCallbackDev (logBS setLogger)+# setLogger = logger+##else+# setLogger = toProduction logger -- by default the logger is set for development+# logWare = logCallback (logBS setLogger)+##endif #-# combineMappings :: DO.Object key val -> DO.Object key val -> DO.Object key val-# combineMappings (DO.Mapping m1) (DO.Mapping m2) = DO.Mapping $ m1 ++ m2-# combineMappings _ _ = error "Data.Object is not a Mapping."+# #ifndef DEVELOPMENT+# canonicalizeKey :: (Text, val) -> (Text, val)+# canonicalizeKey ("dbname", val) = ("database", val)+# canonicalizeKey pair = pair #-# loadHerokuConfig :: DO.TextObject -> IO Settings.PersistConfig-# loadHerokuConfig ymlenv = do-# #if DEVELOPMENT-# let urlMap = DO.Mapping []-# #else-# urlMap <- Web.Heroku.dbConnParams >>= return . toMapping . map canonicalizeKey-# #endif-# either error return $ Database.Persist.Base.loadConfig (combineMappings urlMap ymlenv)+# toMapping :: [(Text, Text)] -> AT.Value+# toMapping xs = AT.Object $ M.fromList $ map (\(key, val) -> (key, AT.String val)) xs+# #endif #+# combineMappings :: AT.Value -> AT.Value -> AT.Value+# combineMappings (AT.Object m1) (AT.Object m2) = AT.Object $ m1 `M.union` m2+# combineMappings _ _ = error "Data.Object is not a Mapping." #-# withYesodHeroku :: AppConfig DefaultEnv () -> Logger -> (Application -> IO ()) -> IO ()-# withYesodHeroku conf logger f = do-# s <- staticSite-# dbconf <- withYamlEnvironment "config/postgresql.yml" (appEnv conf) loadHerokuConfig-# Database.Persist.Base.withPool (dbconf :: Settings.PersistConfig) $ \p -> do-# Database.Persist.Base.runPool dbconf (runMigration migrateAll) p-# let h = YesodHeroku conf logger s p-# defaultRunner (f . logWare) h-# where-# #ifdef DEVELOPMENT-# logWare = logStdoutDev-# #else-# logWare = logStdout-# #endif+# loadHerokuConfig :: IO AT.Value+# loadHerokuConfig = do+# #ifdef DEVELOPMENT+# return $ AT.Object M.empty+# #else+# Web.Heroku.dbConnParams >>= return . toMapping . map canonicalizeKey+# #endif
scaffold/main.hs.cg view
@@ -2,7 +2,7 @@ import Yesod.Default.Config (fromArgs) import Yesod.Default.Main (defaultMain) import Settings (parseExtra)-import Application (getApplication)+import Application (makeApplication) main :: IO ()-main = defaultMain (fromArgs parseExtra) getApplication+main = defaultMain (fromArgs parseExtra) makeApplication
scaffold/project.cabal.cg view
@@ -32,7 +32,7 @@ Model Settings Settings.StaticFiles- Handler.Root+ Handler.Home ghc-options: -Wall -threaded -O0 cpp-options: -DDEVELOPMENT@@ -48,6 +48,7 @@ GeneralizedNewtypeDeriving FlexibleContexts EmptyDataDecls+ NoMonomorphismRestriction executable ~project~ if flag(library-only)@@ -73,28 +74,32 @@ GeneralizedNewtypeDeriving FlexibleContexts EmptyDataDecls+ NoMonomorphismRestriction build-depends: base >= 4 && < 5- , yesod >= 0.10 && < 0.11- , yesod-core >= 0.10 && < 0.11- , yesod-auth >= 0.8 && < 0.9- , yesod-static >= 0.10 && < 0.11- , yesod-default >= 0.6 && < 0.7- , yesod-form >= 0.4 && < 0.5- , mime-mail >= 0.3.0.3 && < 0.5+ , yesod >= 1.0 && < 1.1+ , yesod-core >= 1.0 && < 1.1+ , yesod-auth >= 1.0 && < 1.1+ , yesod-static >= 1.0 && < 1.1+ , yesod-default >= 1.0 && < 1.1+ , yesod-form >= 1.0 && < 1.1+ , yesod-test >= 0.2 && < 0.3 , clientsession >= 0.7.3 && < 0.8 , bytestring >= 0.9 && < 0.10 , text >= 0.11 && < 0.12- , persistent >= 0.8 && < 0.9- , persistent-~backendLower~ >= 0.8 && < 0.9+ , persistent >= 0.9 && < 0.10+ , persistent-~backendLower~ >= 0.9 && < 0.10 , template-haskell- , hamlet >= 0.10 && < 0.11- , shakespeare-css >= 0.10 && < 0.11- , shakespeare-js >= 0.11 && < 0.12- , shakespeare-text >= 0.11 && < 0.12+ , hamlet >= 1.0 && < 1.1+ , shakespeare-css >= 1.0 && < 1.1+ , shakespeare-js >= 1.0 && < 1.1+ , shakespeare-text >= 1.0 && < 1.1 , hjsmin >= 0.0.14 && < 0.1 , monad-control >= 0.3 && < 0.4- , wai-extra >= 1.0 && < 1.2- , yaml >= 0.5 && < 0.6- , http-conduit >= 1.2 && < 1.3+ , wai-extra >= 1.2 && < 1.3+ , yaml >= 0.7 && < 0.8+ , http-conduit >= 1.4 && < 1.5+ , directory >= 1.1 && < 1.2+ , warp >= 1.2 && < 1.3 + ~testsDep~
+ scaffold/static/css/bootstrap.css.cg view
@@ -0,0 +1,3990 @@+/*!+ * Bootstrap v2.0.2+ *+ * Copyright 2012 Twitter, Inc+ * Licensed under the Apache License v2.0+ * http://www.apache.org/licenses/LICENSE-2.0+ *+ * Designed and built with all the love in the world @twitter by @mdo and @fat.+ */+article,+aside,+details,+figcaption,+figure,+footer,+header,+hgroup,+nav,+section {+ display: block;+}+audio,+canvas,+video {+ display: inline-block;+ *display: inline;+ *zoom: 1;+}+audio:not([controls]) {+ display: none;+}+html {+ font-size: 100%;+ -webkit-text-size-adjust: 100%;+ -ms-text-size-adjust: 100%;+}+a:focus {+ outline: thin dotted #333;+ outline: 5px auto -webkit-focus-ring-color;+ outline-offset: -2px;+}+a:hover,+a:active {+ outline: 0;+}+sub,+sup {+ position: relative;+ font-size: 75%;+ line-height: 0;+ vertical-align: baseline;+}+sup {+ top: -0.5em;+}+sub {+ bottom: -0.25em;+}+img {+ height: auto;+ border: 0;+ -ms-interpolation-mode: bicubic;+ vertical-align: middle;+}+button,+input,+select,+textarea {+ margin: 0;+ font-size: 100%;+ vertical-align: middle;+}+button,+input {+ *overflow: visible;+ line-height: normal;+}+button::-moz-focus-inner,+input::-moz-focus-inner {+ padding: 0;+ border: 0;+}+button,+input[type="button"],+input[type="reset"],+input[type="submit"] {+ cursor: pointer;+ -webkit-appearance: button;+}+input[type="search"] {+ -webkit-appearance: textfield;+ -webkit-box-sizing: content-box;+ -moz-box-sizing: content-box;+ box-sizing: content-box;+}+input[type="search"]::-webkit-search-decoration,+input[type="search"]::-webkit-search-cancel-button {+ -webkit-appearance: none;+}+textarea {+ overflow: auto;+ vertical-align: top;+}+.clearfix {+ *zoom: 1;+}+.clearfix:before,+.clearfix:after {+ display: table;+ content: "";+}+.clearfix:after {+ clear: both;+}+.hide-text {+ overflow: hidden;+ text-indent: 100%;+ white-space: nowrap;+}+.input-block-level {+ display: block;+ width: 100%;+ min-height: 28px;+ /* Make inputs at least the height of their button counterpart */++ /* Makes inputs behave like true block-level elements */++ -webkit-box-sizing: border-box;+ -moz-box-sizing: border-box;+ -ms-box-sizing: border-box;+ box-sizing: border-box;+}+body {+ margin: 0;+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;+ font-size: 13px;+ line-height: 18px;+ color: #333333;+ background-color: #ffffff;+}+a {+ color: #0088cc;+ text-decoration: none;+}+a:hover {+ color: #005580;+ text-decoration: underline;+}+.row {+ margin-left: -20px;+ *zoom: 1;+}+.row:before,+.row:after {+ display: table;+ content: "";+}+.row:after {+ clear: both;+}+[class*="span"] {+ float: left;+ margin-left: 20px;+}+.container,+.navbar-fixed-top .container,+.navbar-fixed-bottom .container {+ width: 940px;+}+.span12 {+ width: 940px;+}+.span11 {+ width: 860px;+}+.span10 {+ width: 780px;+}+.span9 {+ width: 700px;+}+.span8 {+ width: 620px;+}+.span7 {+ width: 540px;+}+.span6 {+ width: 460px;+}+.span5 {+ width: 380px;+}+.span4 {+ width: 300px;+}+.span3 {+ width: 220px;+}+.span2 {+ width: 140px;+}+.span1 {+ width: 60px;+}+.offset12 {+ margin-left: 980px;+}+.offset11 {+ margin-left: 900px;+}+.offset10 {+ margin-left: 820px;+}+.offset9 {+ margin-left: 740px;+}+.offset8 {+ margin-left: 660px;+}+.offset7 {+ margin-left: 580px;+}+.offset6 {+ margin-left: 500px;+}+.offset5 {+ margin-left: 420px;+}+.offset4 {+ margin-left: 340px;+}+.offset3 {+ margin-left: 260px;+}+.offset2 {+ margin-left: 180px;+}+.offset1 {+ margin-left: 100px;+}+.row-fluid {+ width: 100%;+ *zoom: 1;+}+.row-fluid:before,+.row-fluid:after {+ display: table;+ content: "";+}+.row-fluid:after {+ clear: both;+}+.row-fluid > [class*="span"] {+ float: left;+ margin-left: 2.127659574%;+}+.row-fluid > [class*="span"]:first-child {+ margin-left: 0;+}+.row-fluid > .span12 {+ width: 99.99999998999999%;+}+.row-fluid > .span11 {+ width: 91.489361693%;+}+.row-fluid > .span10 {+ width: 82.97872339599999%;+}+.row-fluid > .span9 {+ width: 74.468085099%;+}+.row-fluid > .span8 {+ width: 65.95744680199999%;+}+.row-fluid > .span7 {+ width: 57.446808505%;+}+.row-fluid > .span6 {+ width: 48.93617020799999%;+}+.row-fluid > .span5 {+ width: 40.425531911%;+}+.row-fluid > .span4 {+ width: 31.914893614%;+}+.row-fluid > .span3 {+ width: 23.404255317%;+}+.row-fluid > .span2 {+ width: 14.89361702%;+}+.row-fluid > .span1 {+ width: 6.382978723%;+}+.container {+ margin-left: auto;+ margin-right: auto;+ *zoom: 1;+}+.container:before,+.container:after {+ display: table;+ content: "";+}+.container:after {+ clear: both;+}+.container-fluid {+ padding-left: 20px;+ padding-right: 20px;+ *zoom: 1;+}+.container-fluid:before,+.container-fluid:after {+ display: table;+ content: "";+}+.container-fluid:after {+ clear: both;+}+p {+ margin: 0 0 9px;+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;+ font-size: 13px;+ line-height: 18px;+}+p small {+ font-size: 11px;+ color: #999999;+}+.lead {+ margin-bottom: 18px;+ font-size: 20px;+ font-weight: 200;+ line-height: 27px;+}+h1,+h2,+h3,+h4,+h5,+h6 {+ margin: 0;+ font-family: inherit;+ font-weight: bold;+ color: inherit;+ text-rendering: optimizelegibility;+}+h1 small,+h2 small,+h3 small,+h4 small,+h5 small,+h6 small {+ font-weight: normal;+ color: #999999;+}+h1 {+ font-size: 30px;+ line-height: 36px;+}+h1 small {+ font-size: 18px;+}+h2 {+ font-size: 24px;+ line-height: 36px;+}+h2 small {+ font-size: 18px;+}+h3 {+ line-height: 27px;+ font-size: 18px;+}+h3 small {+ font-size: 14px;+}+h4,+h5,+h6 {+ line-height: 18px;+}+h4 {+ font-size: 14px;+}+h4 small {+ font-size: 12px;+}+h5 {+ font-size: 12px;+}+h6 {+ font-size: 11px;+ color: #999999;+ text-transform: uppercase;+}+.page-header {+ padding-bottom: 17px;+ margin: 18px 0;+ border-bottom: 1px solid #eeeeee;+}+.page-header h1 {+ line-height: 1;+}+ul,+ol {+ padding: 0;+ margin: 0 0 9px 25px;+}+ul ul,+ul ol,+ol ol,+ol ul {+ margin-bottom: 0;+}+ul {+ list-style: disc;+}+ol {+ list-style: decimal;+}+li {+ line-height: 18px;+}+ul.unstyled,+ol.unstyled {+ margin-left: 0;+ list-style: none;+}+dl {+ margin-bottom: 18px;+}+dt,+dd {+ line-height: 18px;+}+dt {+ font-weight: bold;+ line-height: 17px;+}+dd {+ margin-left: 9px;+}+.dl-horizontal dt {+ float: left;+ clear: left;+ width: 120px;+ text-align: right;+}+.dl-horizontal dd {+ margin-left: 130px;+}+hr {+ margin: 18px 0;+ border: 0;+ border-top: 1px solid #eeeeee;+ border-bottom: 1px solid #ffffff;+}+strong {+ font-weight: bold;+}+em {+ font-style: italic;+}+.muted {+ color: #999999;+}+abbr[title] {+ border-bottom: 1px dotted #ddd;+ cursor: help;+}+abbr.initialism {+ font-size: 90%;+ text-transform: uppercase;+}+blockquote {+ padding: 0 0 0 15px;+ margin: 0 0 18px;+ border-left: 5px solid #eeeeee;+}+blockquote p {+ margin-bottom: 0;+ font-size: 16px;+ font-weight: 300;+ line-height: 22.5px;+}+blockquote small {+ display: block;+ line-height: 18px;+ color: #999999;+}+blockquote small:before {+ content: '\2014 \00A0';+}+blockquote.pull-right {+ float: right;+ padding-left: 0;+ padding-right: 15px;+ border-left: 0;+ border-right: 5px solid #eeeeee;+}+blockquote.pull-right p,+blockquote.pull-right small {+ text-align: right;+}+q:before,+q:after,+blockquote:before,+blockquote:after {+ content: "";+}+address {+ display: block;+ margin-bottom: 18px;+ line-height: 18px;+ font-style: normal;+}+small {+ font-size: 100%;+}+cite {+ font-style: normal;+}+code,+pre {+ padding: 0 3px 2px;+ font-family: Menlo, Monaco, "Courier New", monospace;+ font-size: 12px;+ color: #333333;+ -webkit-border-radius: 3px;+ -moz-border-radius: 3px;+ border-radius: 3px;+}+code {+ padding: 2px 4px;+ color: #d14;+ background-color: #f7f7f9;+ border: 1px solid #e1e1e8;+}+pre {+ display: block;+ padding: 8.5px;+ margin: 0 0 9px;+ font-size: 12.025px;+ line-height: 18px;+ background-color: #f5f5f5;+ border: 1px solid #ccc;+ border: 1px solid rgba(0, 0, 0, 0.15);+ -webkit-border-radius: 4px;+ -moz-border-radius: 4px;+ border-radius: 4px;+ white-space: pre;+ white-space: pre-wrap;+ word-break: break-all;+ word-wrap: break-word;+}+pre.prettyprint {+ margin-bottom: 18px;+}+pre code {+ padding: 0;+ color: inherit;+ background-color: transparent;+ border: 0;+}+.pre-scrollable {+ max-height: 340px;+ overflow-y: scroll;+}+form {+ margin: 0 0 18px;+}+fieldset {+ padding: 0;+ margin: 0;+ border: 0;+}+legend {+ display: block;+ width: 100%;+ padding: 0;+ margin-bottom: 27px;+ font-size: 19.5px;+ line-height: 36px;+ color: #333333;+ border: 0;+ border-bottom: 1px solid #eee;+}+legend small {+ font-size: 13.5px;+ color: #999999;+}+label,+input,+button,+select,+textarea {+ font-size: 13px;+ font-weight: normal;+ line-height: 18px;+}+input,+button,+select,+textarea {+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;+}+label {+ display: block;+ margin-bottom: 5px;+ color: #333333;+}+input,+textarea,+select,+.uneditable-input {+ display: inline-block;+ width: 210px;+ height: 18px;+ padding: 4px;+ margin-bottom: 9px;+ font-size: 13px;+ line-height: 18px;+ color: #555555;+ border: 1px solid #cccccc;+ -webkit-border-radius: 3px;+ -moz-border-radius: 3px;+ border-radius: 3px;+}+.uneditable-textarea {+ width: auto;+ height: auto;+}+label input,+label textarea,+label select {+ display: block;+}+input[type="image"],+input[type="checkbox"],+input[type="radio"] {+ width: auto;+ height: auto;+ padding: 0;+ margin: 3px 0;+ *margin-top: 0;+ /* IE7 */++ line-height: normal;+ cursor: pointer;+ -webkit-border-radius: 0;+ -moz-border-radius: 0;+ border-radius: 0;+ border: 0 \9;+ /* IE9 and down */++}+input[type="image"] {+ border: 0;+}+input[type="file"] {+ width: auto;+ padding: initial;+ line-height: initial;+ border: initial;+ background-color: #ffffff;+ background-color: initial;+ -webkit-box-shadow: none;+ -moz-box-shadow: none;+ box-shadow: none;+}+input[type="button"],+input[type="reset"],+input[type="submit"] {+ width: auto;+ height: auto;+}+select,+input[type="file"] {+ height: 28px;+ /* In IE7, the height of the select element cannot be changed by height, only font-size */++ *margin-top: 4px;+ /* For IE7, add top margin to align select with labels */++ line-height: 28px;+}+input[type="file"] {+ line-height: 18px \9;+}+select {+ width: 220px;+ background-color: #ffffff;+}+select[multiple],+select[size] {+ height: auto;+}+input[type="image"] {+ -webkit-box-shadow: none;+ -moz-box-shadow: none;+ box-shadow: none;+}+textarea {+ height: auto;+}+input[type="hidden"] {+ display: none;+}+.radio,+.checkbox {+ padding-left: 18px;+}+.radio input[type="radio"],+.checkbox input[type="checkbox"] {+ float: left;+ margin-left: -18px;+}+.controls > .radio:first-child,+.controls > .checkbox:first-child {+ padding-top: 5px;+}+.radio.inline,+.checkbox.inline {+ display: inline-block;+ padding-top: 5px;+ margin-bottom: 0;+ vertical-align: middle;+}+.radio.inline + .radio.inline,+.checkbox.inline + .checkbox.inline {+ margin-left: 10px;+}+input,+textarea {+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);+ -webkit-transition: border linear 0.2s, box-shadow linear 0.2s;+ -moz-transition: border linear 0.2s, box-shadow linear 0.2s;+ -ms-transition: border linear 0.2s, box-shadow linear 0.2s;+ -o-transition: border linear 0.2s, box-shadow linear 0.2s;+ transition: border linear 0.2s, box-shadow linear 0.2s;+}+input:focus,+textarea:focus {+ border-color: rgba(82, 168, 236, 0.8);+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);+ outline: 0;+ outline: thin dotted \9;+ /* IE6-9 */++}+input[type="file"]:focus,+input[type="radio"]:focus,+input[type="checkbox"]:focus,+select:focus {+ -webkit-box-shadow: none;+ -moz-box-shadow: none;+ box-shadow: none;+ outline: thin dotted #333;+ outline: 5px auto -webkit-focus-ring-color;+ outline-offset: -2px;+}+.input-mini {+ width: 60px;+}+.input-small {+ width: 90px;+}+.input-medium {+ width: 150px;+}+.input-large {+ width: 210px;+}+.input-xlarge {+ width: 270px;+}+.input-xxlarge {+ width: 530px;+}+input[class*="span"],+select[class*="span"],+textarea[class*="span"],+.uneditable-input {+ float: none;+ margin-left: 0;+}+input,+textarea,+.uneditable-input {+ margin-left: 0;+}+input.span12, textarea.span12, .uneditable-input.span12 {+ width: 930px;+}+input.span11, textarea.span11, .uneditable-input.span11 {+ width: 850px;+}+input.span10, textarea.span10, .uneditable-input.span10 {+ width: 770px;+}+input.span9, textarea.span9, .uneditable-input.span9 {+ width: 690px;+}+input.span8, textarea.span8, .uneditable-input.span8 {+ width: 610px;+}+input.span7, textarea.span7, .uneditable-input.span7 {+ width: 530px;+}+input.span6, textarea.span6, .uneditable-input.span6 {+ width: 450px;+}+input.span5, textarea.span5, .uneditable-input.span5 {+ width: 370px;+}+input.span4, textarea.span4, .uneditable-input.span4 {+ width: 290px;+}+input.span3, textarea.span3, .uneditable-input.span3 {+ width: 210px;+}+input.span2, textarea.span2, .uneditable-input.span2 {+ width: 130px;+}+input.span1, textarea.span1, .uneditable-input.span1 {+ width: 50px;+}+input[disabled],+select[disabled],+textarea[disabled],+input[readonly],+select[readonly],+textarea[readonly] {+ background-color: #eeeeee;+ border-color: #ddd;+ cursor: not-allowed;+}+.control-group.warning > label,+.control-group.warning .help-block,+.control-group.warning .help-inline {+ color: #c09853;+}+.control-group.warning input,+.control-group.warning select,+.control-group.warning textarea {+ color: #c09853;+ border-color: #c09853;+}+.control-group.warning input:focus,+.control-group.warning select:focus,+.control-group.warning textarea:focus {+ border-color: #a47e3c;+ -webkit-box-shadow: 0 0 6px #dbc59e;+ -moz-box-shadow: 0 0 6px #dbc59e;+ box-shadow: 0 0 6px #dbc59e;+}+.control-group.warning .input-prepend .add-on,+.control-group.warning .input-append .add-on {+ color: #c09853;+ background-color: #fcf8e3;+ border-color: #c09853;+}+.control-group.error > label,+.control-group.error .help-block,+.control-group.error .help-inline {+ color: #b94a48;+}+.control-group.error input,+.control-group.error select,+.control-group.error textarea {+ color: #b94a48;+ border-color: #b94a48;+}+.control-group.error input:focus,+.control-group.error select:focus,+.control-group.error textarea:focus {+ border-color: #953b39;+ -webkit-box-shadow: 0 0 6px #d59392;+ -moz-box-shadow: 0 0 6px #d59392;+ box-shadow: 0 0 6px #d59392;+}+.control-group.error .input-prepend .add-on,+.control-group.error .input-append .add-on {+ color: #b94a48;+ background-color: #f2dede;+ border-color: #b94a48;+}+.control-group.success > label,+.control-group.success .help-block,+.control-group.success .help-inline {+ color: #468847;+}+.control-group.success input,+.control-group.success select,+.control-group.success textarea {+ color: #468847;+ border-color: #468847;+}+.control-group.success input:focus,+.control-group.success select:focus,+.control-group.success textarea:focus {+ border-color: #356635;+ -webkit-box-shadow: 0 0 6px #7aba7b;+ -moz-box-shadow: 0 0 6px #7aba7b;+ box-shadow: 0 0 6px #7aba7b;+}+.control-group.success .input-prepend .add-on,+.control-group.success .input-append .add-on {+ color: #468847;+ background-color: #dff0d8;+ border-color: #468847;+}+input:focus:required:invalid,+textarea:focus:required:invalid,+select:focus:required:invalid {+ color: #b94a48;+ border-color: #ee5f5b;+}+input:focus:required:invalid:focus,+textarea:focus:required:invalid:focus,+select:focus:required:invalid:focus {+ border-color: #e9322d;+ -webkit-box-shadow: 0 0 6px #f8b9b7;+ -moz-box-shadow: 0 0 6px #f8b9b7;+ box-shadow: 0 0 6px #f8b9b7;+}+.form-actions {+ padding: 17px 20px 18px;+ margin-top: 18px;+ margin-bottom: 18px;+ background-color: #eeeeee;+ border-top: 1px solid #ddd;+ *zoom: 1;+}+.form-actions:before,+.form-actions:after {+ display: table;+ content: "";+}+.form-actions:after {+ clear: both;+}+.uneditable-input {+ display: block;+ background-color: #ffffff;+ border-color: #eee;+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);+ -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);+ cursor: not-allowed;+}+:-moz-placeholder {+ color: #999999;+}+::-webkit-input-placeholder {+ color: #999999;+}+.help-block,+.help-inline {+ color: #555555;+}+.help-block {+ display: block;+ margin-bottom: 9px;+}+.help-inline {+ display: inline-block;+ *display: inline;+ /* IE7 inline-block hack */++ *zoom: 1;+ vertical-align: middle;+ padding-left: 5px;+}+.input-prepend,+.input-append {+ margin-bottom: 5px;+}+.input-prepend input,+.input-append input,+.input-prepend select,+.input-append select,+.input-prepend .uneditable-input,+.input-append .uneditable-input {+ *margin-left: 0;+ -webkit-border-radius: 0 3px 3px 0;+ -moz-border-radius: 0 3px 3px 0;+ border-radius: 0 3px 3px 0;+}+.input-prepend input:focus,+.input-append input:focus,+.input-prepend select:focus,+.input-append select:focus,+.input-prepend .uneditable-input:focus,+.input-append .uneditable-input:focus {+ position: relative;+ z-index: 2;+}+.input-prepend .uneditable-input,+.input-append .uneditable-input {+ border-left-color: #ccc;+}+.input-prepend .add-on,+.input-append .add-on {+ display: inline-block;+ width: auto;+ min-width: 16px;+ height: 18px;+ padding: 4px 5px;+ font-weight: normal;+ line-height: 18px;+ text-align: center;+ text-shadow: 0 1px 0 #ffffff;+ vertical-align: middle;+ background-color: #eeeeee;+ border: 1px solid #ccc;+}+.input-prepend .add-on,+.input-append .add-on,+.input-prepend .btn,+.input-append .btn {+ -webkit-border-radius: 3px 0 0 3px;+ -moz-border-radius: 3px 0 0 3px;+ border-radius: 3px 0 0 3px;+}+.input-prepend .active,+.input-append .active {+ background-color: #a9dba9;+ border-color: #46a546;+}+.input-prepend .add-on,+.input-prepend .btn {+ margin-right: -1px;+}+.input-append input,+.input-append select .uneditable-input {+ -webkit-border-radius: 3px 0 0 3px;+ -moz-border-radius: 3px 0 0 3px;+ border-radius: 3px 0 0 3px;+}+.input-append .uneditable-input {+ border-left-color: #eee;+ border-right-color: #ccc;+}+.input-append .add-on,+.input-append .btn {+ margin-left: -1px;+ -webkit-border-radius: 0 3px 3px 0;+ -moz-border-radius: 0 3px 3px 0;+ border-radius: 0 3px 3px 0;+}+.input-prepend.input-append input,+.input-prepend.input-append select,+.input-prepend.input-append .uneditable-input {+ -webkit-border-radius: 0;+ -moz-border-radius: 0;+ border-radius: 0;+}+.input-prepend.input-append .add-on:first-child,+.input-prepend.input-append .btn:first-child {+ margin-right: -1px;+ -webkit-border-radius: 3px 0 0 3px;+ -moz-border-radius: 3px 0 0 3px;+ border-radius: 3px 0 0 3px;+}+.input-prepend.input-append .add-on:last-child,+.input-prepend.input-append .btn:last-child {+ margin-left: -1px;+ -webkit-border-radius: 0 3px 3px 0;+ -moz-border-radius: 0 3px 3px 0;+ border-radius: 0 3px 3px 0;+}+.search-query {+ padding-left: 14px;+ padding-right: 14px;+ margin-bottom: 0;+ -webkit-border-radius: 14px;+ -moz-border-radius: 14px;+ border-radius: 14px;+}+.form-search input,+.form-inline input,+.form-horizontal input,+.form-search textarea,+.form-inline textarea,+.form-horizontal textarea,+.form-search select,+.form-inline select,+.form-horizontal select,+.form-search .help-inline,+.form-inline .help-inline,+.form-horizontal .help-inline,+.form-search .uneditable-input,+.form-inline .uneditable-input,+.form-horizontal .uneditable-input,+.form-search .input-prepend,+.form-inline .input-prepend,+.form-horizontal .input-prepend,+.form-search .input-append,+.form-inline .input-append,+.form-horizontal .input-append {+ display: inline-block;+ margin-bottom: 0;+}+.form-search .hide,+.form-inline .hide,+.form-horizontal .hide {+ display: none;+}+.form-search label,+.form-inline label {+ display: inline-block;+}+.form-search .input-append,+.form-inline .input-append,+.form-search .input-prepend,+.form-inline .input-prepend {+ margin-bottom: 0;+}+.form-search .radio,+.form-search .checkbox,+.form-inline .radio,+.form-inline .checkbox {+ padding-left: 0;+ margin-bottom: 0;+ vertical-align: middle;+}+.form-search .radio input[type="radio"],+.form-search .checkbox input[type="checkbox"],+.form-inline .radio input[type="radio"],+.form-inline .checkbox input[type="checkbox"] {+ float: left;+ margin-left: 0;+ margin-right: 3px;+}+.control-group {+ margin-bottom: 9px;+}+legend + .control-group {+ margin-top: 18px;+ -webkit-margin-top-collapse: separate;+}+.form-horizontal .control-group {+ margin-bottom: 18px;+ *zoom: 1;+}+.form-horizontal .control-group:before,+.form-horizontal .control-group:after {+ display: table;+ content: "";+}+.form-horizontal .control-group:after {+ clear: both;+}+.form-horizontal .control-label {+ float: left;+ width: 140px;+ padding-top: 5px;+ text-align: right;+}+.form-horizontal .controls {+ margin-left: 160px;+ /* Super jank IE7 fix to ensure the inputs in .input-append and input-prepend don't inherit the margin of the parent, in this case .controls */++ *display: inline-block;+ *margin-left: 0;+ *padding-left: 20px;+}+.form-horizontal .help-block {+ margin-top: 9px;+ margin-bottom: 0;+}+.form-horizontal .form-actions {+ padding-left: 160px;+}+table {+ max-width: 100%;+ border-collapse: collapse;+ border-spacing: 0;+ background-color: transparent;+}+.table {+ width: 100%;+ margin-bottom: 18px;+}+.table th,+.table td {+ padding: 8px;+ line-height: 18px;+ text-align: left;+ vertical-align: top;+ border-top: 1px solid #dddddd;+}+.table th {+ font-weight: bold;+}+.table thead th {+ vertical-align: bottom;+}+.table colgroup + thead tr:first-child th,+.table colgroup + thead tr:first-child td,+.table thead:first-child tr:first-child th,+.table thead:first-child tr:first-child td {+ border-top: 0;+}+.table tbody + tbody {+ border-top: 2px solid #dddddd;+}+.table-condensed th,+.table-condensed td {+ padding: 4px 5px;+}+.table-bordered {+ border: 1px solid #dddddd;+ border-left: 0;+ border-collapse: separate;+ *border-collapse: collapsed;+ -webkit-border-radius: 4px;+ -moz-border-radius: 4px;+ border-radius: 4px;+}+.table-bordered th,+.table-bordered td {+ border-left: 1px solid #dddddd;+}+.table-bordered thead:first-child tr:first-child th,+.table-bordered tbody:first-child tr:first-child th,+.table-bordered tbody:first-child tr:first-child td {+ border-top: 0;+}+.table-bordered thead:first-child tr:first-child th:first-child,+.table-bordered tbody:first-child tr:first-child td:first-child {+ -webkit-border-radius: 4px 0 0 0;+ -moz-border-radius: 4px 0 0 0;+ border-radius: 4px 0 0 0;+}+.table-bordered thead:first-child tr:first-child th:last-child,+.table-bordered tbody:first-child tr:first-child td:last-child {+ -webkit-border-radius: 0 4px 0 0;+ -moz-border-radius: 0 4px 0 0;+ border-radius: 0 4px 0 0;+}+.table-bordered thead:last-child tr:last-child th:first-child,+.table-bordered tbody:last-child tr:last-child td:first-child {+ -webkit-border-radius: 0 0 0 4px;+ -moz-border-radius: 0 0 0 4px;+ border-radius: 0 0 0 4px;+}+.table-bordered thead:last-child tr:last-child th:last-child,+.table-bordered tbody:last-child tr:last-child td:last-child {+ -webkit-border-radius: 0 0 4px 0;+ -moz-border-radius: 0 0 4px 0;+ border-radius: 0 0 4px 0;+}+.table-striped tbody tr:nth-child(odd) td,+.table-striped tbody tr:nth-child(odd) th {+ background-color: #f9f9f9;+}+.table tbody tr:hover td,+.table tbody tr:hover th {+ background-color: #f5f5f5;+}+table .span1 {+ float: none;+ width: 44px;+ margin-left: 0;+}+table .span2 {+ float: none;+ width: 124px;+ margin-left: 0;+}+table .span3 {+ float: none;+ width: 204px;+ margin-left: 0;+}+table .span4 {+ float: none;+ width: 284px;+ margin-left: 0;+}+table .span5 {+ float: none;+ width: 364px;+ margin-left: 0;+}+table .span6 {+ float: none;+ width: 444px;+ margin-left: 0;+}+table .span7 {+ float: none;+ width: 524px;+ margin-left: 0;+}+table .span8 {+ float: none;+ width: 604px;+ margin-left: 0;+}+table .span9 {+ float: none;+ width: 684px;+ margin-left: 0;+}+table .span10 {+ float: none;+ width: 764px;+ margin-left: 0;+}+table .span11 {+ float: none;+ width: 844px;+ margin-left: 0;+}+table .span12 {+ float: none;+ width: 924px;+ margin-left: 0;+}+table .span13 {+ float: none;+ width: 1004px;+ margin-left: 0;+}+table .span14 {+ float: none;+ width: 1084px;+ margin-left: 0;+}+table .span15 {+ float: none;+ width: 1164px;+ margin-left: 0;+}+table .span16 {+ float: none;+ width: 1244px;+ margin-left: 0;+}+table .span17 {+ float: none;+ width: 1324px;+ margin-left: 0;+}+table .span18 {+ float: none;+ width: 1404px;+ margin-left: 0;+}+table .span19 {+ float: none;+ width: 1484px;+ margin-left: 0;+}+table .span20 {+ float: none;+ width: 1564px;+ margin-left: 0;+}+table .span21 {+ float: none;+ width: 1644px;+ margin-left: 0;+}+table .span22 {+ float: none;+ width: 1724px;+ margin-left: 0;+}+table .span23 {+ float: none;+ width: 1804px;+ margin-left: 0;+}+table .span24 {+ float: none;+ width: 1884px;+ margin-left: 0;+}+[class^="icon-"],+[class*=" icon-"] {+ display: inline-block;+ width: 14px;+ height: 14px;+ line-height: 14px;+ vertical-align: text-top;+ background-image: url("../img/glyphicons-halflings.png");+ background-position: 14px 14px;+ background-repeat: no-repeat;+ *margin-right: .3em;+}+[class^="icon-"]:last-child,+[class*=" icon-"]:last-child {+ *margin-left: 0;+}+.icon-white {+ background-image: url("../img/glyphicons-halflings-white.png");+}+.icon-glass {+ background-position: 0 0;+}+.icon-music {+ background-position: -24px 0;+}+.icon-search {+ background-position: -48px 0;+}+.icon-envelope {+ background-position: -72px 0;+}+.icon-heart {+ background-position: -96px 0;+}+.icon-star {+ background-position: -120px 0;+}+.icon-star-empty {+ background-position: -144px 0;+}+.icon-user {+ background-position: -168px 0;+}+.icon-film {+ background-position: -192px 0;+}+.icon-th-large {+ background-position: -216px 0;+}+.icon-th {+ background-position: -240px 0;+}+.icon-th-list {+ background-position: -264px 0;+}+.icon-ok {+ background-position: -288px 0;+}+.icon-remove {+ background-position: -312px 0;+}+.icon-zoom-in {+ background-position: -336px 0;+}+.icon-zoom-out {+ background-position: -360px 0;+}+.icon-off {+ background-position: -384px 0;+}+.icon-signal {+ background-position: -408px 0;+}+.icon-cog {+ background-position: -432px 0;+}+.icon-trash {+ background-position: -456px 0;+}+.icon-home {+ background-position: 0 -24px;+}+.icon-file {+ background-position: -24px -24px;+}+.icon-time {+ background-position: -48px -24px;+}+.icon-road {+ background-position: -72px -24px;+}+.icon-download-alt {+ background-position: -96px -24px;+}+.icon-download {+ background-position: -120px -24px;+}+.icon-upload {+ background-position: -144px -24px;+}+.icon-inbox {+ background-position: -168px -24px;+}+.icon-play-circle {+ background-position: -192px -24px;+}+.icon-repeat {+ background-position: -216px -24px;+}+.icon-refresh {+ background-position: -240px -24px;+}+.icon-list-alt {+ background-position: -264px -24px;+}+.icon-lock {+ background-position: -287px -24px;+}+.icon-flag {+ background-position: -312px -24px;+}+.icon-headphones {+ background-position: -336px -24px;+}+.icon-volume-off {+ background-position: -360px -24px;+}+.icon-volume-down {+ background-position: -384px -24px;+}+.icon-volume-up {+ background-position: -408px -24px;+}+.icon-qrcode {+ background-position: -432px -24px;+}+.icon-barcode {+ background-position: -456px -24px;+}+.icon-tag {+ background-position: 0 -48px;+}+.icon-tags {+ background-position: -25px -48px;+}+.icon-book {+ background-position: -48px -48px;+}+.icon-bookmark {+ background-position: -72px -48px;+}+.icon-print {+ background-position: -96px -48px;+}+.icon-camera {+ background-position: -120px -48px;+}+.icon-font {+ background-position: -144px -48px;+}+.icon-bold {+ background-position: -167px -48px;+}+.icon-italic {+ background-position: -192px -48px;+}+.icon-text-height {+ background-position: -216px -48px;+}+.icon-text-width {+ background-position: -240px -48px;+}+.icon-align-left {+ background-position: -264px -48px;+}+.icon-align-center {+ background-position: -288px -48px;+}+.icon-align-right {+ background-position: -312px -48px;+}+.icon-align-justify {+ background-position: -336px -48px;+}+.icon-list {+ background-position: -360px -48px;+}+.icon-indent-left {+ background-position: -384px -48px;+}+.icon-indent-right {+ background-position: -408px -48px;+}+.icon-facetime-video {+ background-position: -432px -48px;+}+.icon-picture {+ background-position: -456px -48px;+}+.icon-pencil {+ background-position: 0 -72px;+}+.icon-map-marker {+ background-position: -24px -72px;+}+.icon-adjust {+ background-position: -48px -72px;+}+.icon-tint {+ background-position: -72px -72px;+}+.icon-edit {+ background-position: -96px -72px;+}+.icon-share {+ background-position: -120px -72px;+}+.icon-check {+ background-position: -144px -72px;+}+.icon-move {+ background-position: -168px -72px;+}+.icon-step-backward {+ background-position: -192px -72px;+}+.icon-fast-backward {+ background-position: -216px -72px;+}+.icon-backward {+ background-position: -240px -72px;+}+.icon-play {+ background-position: -264px -72px;+}+.icon-pause {+ background-position: -288px -72px;+}+.icon-stop {+ background-position: -312px -72px;+}+.icon-forward {+ background-position: -336px -72px;+}+.icon-fast-forward {+ background-position: -360px -72px;+}+.icon-step-forward {+ background-position: -384px -72px;+}+.icon-eject {+ background-position: -408px -72px;+}+.icon-chevron-left {+ background-position: -432px -72px;+}+.icon-chevron-right {+ background-position: -456px -72px;+}+.icon-plus-sign {+ background-position: 0 -96px;+}+.icon-minus-sign {+ background-position: -24px -96px;+}+.icon-remove-sign {+ background-position: -48px -96px;+}+.icon-ok-sign {+ background-position: -72px -96px;+}+.icon-question-sign {+ background-position: -96px -96px;+}+.icon-info-sign {+ background-position: -120px -96px;+}+.icon-screenshot {+ background-position: -144px -96px;+}+.icon-remove-circle {+ background-position: -168px -96px;+}+.icon-ok-circle {+ background-position: -192px -96px;+}+.icon-ban-circle {+ background-position: -216px -96px;+}+.icon-arrow-left {+ background-position: -240px -96px;+}+.icon-arrow-right {+ background-position: -264px -96px;+}+.icon-arrow-up {+ background-position: -289px -96px;+}+.icon-arrow-down {+ background-position: -312px -96px;+}+.icon-share-alt {+ background-position: -336px -96px;+}+.icon-resize-full {+ background-position: -360px -96px;+}+.icon-resize-small {+ background-position: -384px -96px;+}+.icon-plus {+ background-position: -408px -96px;+}+.icon-minus {+ background-position: -433px -96px;+}+.icon-asterisk {+ background-position: -456px -96px;+}+.icon-exclamation-sign {+ background-position: 0 -120px;+}+.icon-gift {+ background-position: -24px -120px;+}+.icon-leaf {+ background-position: -48px -120px;+}+.icon-fire {+ background-position: -72px -120px;+}+.icon-eye-open {+ background-position: -96px -120px;+}+.icon-eye-close {+ background-position: -120px -120px;+}+.icon-warning-sign {+ background-position: -144px -120px;+}+.icon-plane {+ background-position: -168px -120px;+}+.icon-calendar {+ background-position: -192px -120px;+}+.icon-random {+ background-position: -216px -120px;+}+.icon-comment {+ background-position: -240px -120px;+}+.icon-magnet {+ background-position: -264px -120px;+}+.icon-chevron-up {+ background-position: -288px -120px;+}+.icon-chevron-down {+ background-position: -313px -119px;+}+.icon-retweet {+ background-position: -336px -120px;+}+.icon-shopping-cart {+ background-position: -360px -120px;+}+.icon-folder-close {+ background-position: -384px -120px;+}+.icon-folder-open {+ background-position: -408px -120px;+}+.icon-resize-vertical {+ background-position: -432px -119px;+}+.icon-resize-horizontal {+ background-position: -456px -118px;+}+.dropdown {+ position: relative;+}+.dropdown-toggle {+ *margin-bottom: -3px;+}+.dropdown-toggle:active,+.open .dropdown-toggle {+ outline: 0;+}+.caret {+ display: inline-block;+ width: 0;+ height: 0;+ vertical-align: top;+ border-left: 4px solid transparent;+ border-right: 4px solid transparent;+ border-top: 4px solid #000000;+ opacity: 0.3;+ filter: alpha(opacity=30);+ content: "";+}+.dropdown .caret {+ margin-top: 8px;+ margin-left: 2px;+}+.dropdown:hover .caret,+.open.dropdown .caret {+ opacity: 1;+ filter: alpha(opacity=100);+}+.dropdown-menu {+ position: absolute;+ top: 100%;+ left: 0;+ z-index: 1000;+ float: left;+ display: none;+ min-width: 160px;+ padding: 4px 0;+ margin: 0;+ list-style: none;+ background-color: #ffffff;+ border-color: #ccc;+ border-color: rgba(0, 0, 0, 0.2);+ border-style: solid;+ border-width: 1px;+ -webkit-border-radius: 0 0 5px 5px;+ -moz-border-radius: 0 0 5px 5px;+ border-radius: 0 0 5px 5px;+ -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);+ -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);+ box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);+ -webkit-background-clip: padding-box;+ -moz-background-clip: padding;+ background-clip: padding-box;+ *border-right-width: 2px;+ *border-bottom-width: 2px;+}+.dropdown-menu.pull-right {+ right: 0;+ left: auto;+}+.dropdown-menu .divider {+ height: 1px;+ margin: 8px 1px;+ overflow: hidden;+ background-color: #e5e5e5;+ border-bottom: 1px solid #ffffff;+ *width: 100%;+ *margin: -5px 0 5px;+}+.dropdown-menu a {+ display: block;+ padding: 3px 15px;+ clear: both;+ font-weight: normal;+ line-height: 18px;+ color: #333333;+ white-space: nowrap;+}+.dropdown-menu li > a:hover,+.dropdown-menu .active > a,+.dropdown-menu .active > a:hover {+ color: #ffffff;+ text-decoration: none;+ background-color: #0088cc;+}+.dropdown.open {+ *z-index: 1000;+}+.dropdown.open .dropdown-toggle {+ color: #ffffff;+ background: #ccc;+ background: rgba(0, 0, 0, 0.3);+}+.dropdown.open .dropdown-menu {+ display: block;+}+.pull-right .dropdown-menu {+ left: auto;+ right: 0;+}+.dropup .caret,+.navbar-fixed-bottom .dropdown .caret {+ border-top: 0;+ border-bottom: 4px solid #000000;+ content: "\2191";+}+.dropup .dropdown-menu,+.navbar-fixed-bottom .dropdown .dropdown-menu {+ top: auto;+ bottom: 100%;+ margin-bottom: 1px;+}+.typeahead {+ margin-top: 2px;+ -webkit-border-radius: 4px;+ -moz-border-radius: 4px;+ border-radius: 4px;+}+.well {+ min-height: 20px;+ padding: 19px;+ margin-bottom: 20px;+ background-color: #f5f5f5;+ border: 1px solid #eee;+ border: 1px solid rgba(0, 0, 0, 0.05);+ -webkit-border-radius: 4px;+ -moz-border-radius: 4px;+ border-radius: 4px;+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);+}+.well blockquote {+ border-color: #ddd;+ border-color: rgba(0, 0, 0, 0.15);+}+.well-large {+ padding: 24px;+ -webkit-border-radius: 6px;+ -moz-border-radius: 6px;+ border-radius: 6px;+}+.well-small {+ padding: 9px;+ -webkit-border-radius: 3px;+ -moz-border-radius: 3px;+ border-radius: 3px;+}+.fade {+ -webkit-transition: opacity 0.15s linear;+ -moz-transition: opacity 0.15s linear;+ -ms-transition: opacity 0.15s linear;+ -o-transition: opacity 0.15s linear;+ transition: opacity 0.15s linear;+ opacity: 0;+}+.fade.in {+ opacity: 1;+}+.collapse {+ -webkit-transition: height 0.35s ease;+ -moz-transition: height 0.35s ease;+ -ms-transition: height 0.35s ease;+ -o-transition: height 0.35s ease;+ transition: height 0.35s ease;+ position: relative;+ overflow: hidden;+ height: 0;+}+.collapse.in {+ height: auto;+}+.close {+ float: right;+ font-size: 20px;+ font-weight: bold;+ line-height: 18px;+ color: #000000;+ text-shadow: 0 1px 0 #ffffff;+ opacity: 0.2;+ filter: alpha(opacity=20);+}+.close:hover {+ color: #000000;+ text-decoration: none;+ opacity: 0.4;+ filter: alpha(opacity=40);+ cursor: pointer;+}+.btn {+ display: inline-block;+ *display: inline;+ /* IE7 inline-block hack */++ *zoom: 1;+ padding: 4px 10px 4px;+ margin-bottom: 0;+ font-size: 13px;+ line-height: 18px;+ color: #333333;+ text-align: center;+ text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);+ vertical-align: middle;+ background-color: #f5f5f5;+ background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);+ background-image: -ms-linear-gradient(top, #ffffff, #e6e6e6);+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));+ background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);+ background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);+ background-image: linear-gradient(top, #ffffff, #e6e6e6);+ background-repeat: repeat-x;+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);+ border-color: #e6e6e6 #e6e6e6 #bfbfbf;+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);+ filter: progid:dximagetransform.microsoft.gradient(enabled=false);+ border: 1px solid #cccccc;+ border-bottom-color: #b3b3b3;+ -webkit-border-radius: 4px;+ -moz-border-radius: 4px;+ border-radius: 4px;+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);+ -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);+ cursor: pointer;+ *margin-left: .3em;+}+.btn:hover,+.btn:active,+.btn.active,+.btn.disabled,+.btn[disabled] {+ background-color: #e6e6e6;+}+.btn:active,+.btn.active {+ background-color: #cccccc \9;+}+.btn:first-child {+ *margin-left: 0;+}+.btn:hover {+ color: #333333;+ text-decoration: none;+ background-color: #e6e6e6;+ background-position: 0 -15px;+ -webkit-transition: background-position 0.1s linear;+ -moz-transition: background-position 0.1s linear;+ -ms-transition: background-position 0.1s linear;+ -o-transition: background-position 0.1s linear;+ transition: background-position 0.1s linear;+}+.btn:focus {+ outline: thin dotted #333;+ outline: 5px auto -webkit-focus-ring-color;+ outline-offset: -2px;+}+.btn.active,+.btn:active {+ background-image: none;+ -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);+ -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);+ box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);+ background-color: #e6e6e6;+ background-color: #d9d9d9 \9;+ outline: 0;+}+.btn.disabled,+.btn[disabled] {+ cursor: default;+ background-image: none;+ background-color: #e6e6e6;+ opacity: 0.65;+ filter: alpha(opacity=65);+ -webkit-box-shadow: none;+ -moz-box-shadow: none;+ box-shadow: none;+}+.btn-large {+ padding: 9px 14px;+ font-size: 15px;+ line-height: normal;+ -webkit-border-radius: 5px;+ -moz-border-radius: 5px;+ border-radius: 5px;+}+.btn-large [class^="icon-"] {+ margin-top: 1px;+}+.btn-small {+ padding: 5px 9px;+ font-size: 11px;+ line-height: 16px;+}+.btn-small [class^="icon-"] {+ margin-top: -1px;+}+.btn-mini {+ padding: 2px 6px;+ font-size: 11px;+ line-height: 14px;+}+.btn-primary,+.btn-primary:hover,+.btn-warning,+.btn-warning:hover,+.btn-danger,+.btn-danger:hover,+.btn-success,+.btn-success:hover,+.btn-info,+.btn-info:hover,+.btn-inverse,+.btn-inverse:hover {+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);+ color: #ffffff;+}+.btn-primary.active,+.btn-warning.active,+.btn-danger.active,+.btn-success.active,+.btn-info.active,+.btn-inverse.active {+ color: rgba(255, 255, 255, 0.75);+}+.btn-primary {+ background-color: #0074cc;+ background-image: -moz-linear-gradient(top, #0088cc, #0055cc);+ background-image: -ms-linear-gradient(top, #0088cc, #0055cc);+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0055cc));+ background-image: -webkit-linear-gradient(top, #0088cc, #0055cc);+ background-image: -o-linear-gradient(top, #0088cc, #0055cc);+ background-image: linear-gradient(top, #0088cc, #0055cc);+ background-repeat: repeat-x;+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0055cc', GradientType=0);+ border-color: #0055cc #0055cc #003580;+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);+ filter: progid:dximagetransform.microsoft.gradient(enabled=false);+}+.btn-primary:hover,+.btn-primary:active,+.btn-primary.active,+.btn-primary.disabled,+.btn-primary[disabled] {+ background-color: #0055cc;+}+.btn-primary:active,+.btn-primary.active {+ background-color: #004099 \9;+}+.btn-warning {+ background-color: #faa732;+ background-image: -moz-linear-gradient(top, #fbb450, #f89406);+ background-image: -ms-linear-gradient(top, #fbb450, #f89406);+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));+ background-image: -webkit-linear-gradient(top, #fbb450, #f89406);+ background-image: -o-linear-gradient(top, #fbb450, #f89406);+ background-image: linear-gradient(top, #fbb450, #f89406);+ background-repeat: repeat-x;+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);+ border-color: #f89406 #f89406 #ad6704;+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);+ filter: progid:dximagetransform.microsoft.gradient(enabled=false);+}+.btn-warning:hover,+.btn-warning:active,+.btn-warning.active,+.btn-warning.disabled,+.btn-warning[disabled] {+ background-color: #f89406;+}+.btn-warning:active,+.btn-warning.active {+ background-color: #c67605 \9;+}+.btn-danger {+ background-color: #da4f49;+ background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f);+ background-image: -ms-linear-gradient(top, #ee5f5b, #bd362f);+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));+ background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f);+ background-image: -o-linear-gradient(top, #ee5f5b, #bd362f);+ background-image: linear-gradient(top, #ee5f5b, #bd362f);+ background-repeat: repeat-x;+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);+ border-color: #bd362f #bd362f #802420;+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);+ filter: progid:dximagetransform.microsoft.gradient(enabled=false);+}+.btn-danger:hover,+.btn-danger:active,+.btn-danger.active,+.btn-danger.disabled,+.btn-danger[disabled] {+ background-color: #bd362f;+}+.btn-danger:active,+.btn-danger.active {+ background-color: #942a25 \9;+}+.btn-success {+ background-color: #5bb75b;+ background-image: -moz-linear-gradient(top, #62c462, #51a351);+ background-image: -ms-linear-gradient(top, #62c462, #51a351);+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));+ background-image: -webkit-linear-gradient(top, #62c462, #51a351);+ background-image: -o-linear-gradient(top, #62c462, #51a351);+ background-image: linear-gradient(top, #62c462, #51a351);+ background-repeat: repeat-x;+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);+ border-color: #51a351 #51a351 #387038;+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);+ filter: progid:dximagetransform.microsoft.gradient(enabled=false);+}+.btn-success:hover,+.btn-success:active,+.btn-success.active,+.btn-success.disabled,+.btn-success[disabled] {+ background-color: #51a351;+}+.btn-success:active,+.btn-success.active {+ background-color: #408140 \9;+}+.btn-info {+ background-color: #49afcd;+ background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4);+ background-image: -ms-linear-gradient(top, #5bc0de, #2f96b4);+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));+ background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4);+ background-image: -o-linear-gradient(top, #5bc0de, #2f96b4);+ background-image: linear-gradient(top, #5bc0de, #2f96b4);+ background-repeat: repeat-x;+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);+ border-color: #2f96b4 #2f96b4 #1f6377;+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);+ filter: progid:dximagetransform.microsoft.gradient(enabled=false);+}+.btn-info:hover,+.btn-info:active,+.btn-info.active,+.btn-info.disabled,+.btn-info[disabled] {+ background-color: #2f96b4;+}+.btn-info:active,+.btn-info.active {+ background-color: #24748c \9;+}+.btn-inverse {+ background-color: #414141;+ background-image: -moz-linear-gradient(top, #555555, #222222);+ background-image: -ms-linear-gradient(top, #555555, #222222);+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#222222));+ background-image: -webkit-linear-gradient(top, #555555, #222222);+ background-image: -o-linear-gradient(top, #555555, #222222);+ background-image: linear-gradient(top, #555555, #222222);+ background-repeat: repeat-x;+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#555555', endColorstr='#222222', GradientType=0);+ border-color: #222222 #222222 #000000;+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);+ filter: progid:dximagetransform.microsoft.gradient(enabled=false);+}+.btn-inverse:hover,+.btn-inverse:active,+.btn-inverse.active,+.btn-inverse.disabled,+.btn-inverse[disabled] {+ background-color: #222222;+}+.btn-inverse:active,+.btn-inverse.active {+ background-color: #080808 \9;+}+button.btn,+input[type="submit"].btn {+ *padding-top: 2px;+ *padding-bottom: 2px;+}+button.btn::-moz-focus-inner,+input[type="submit"].btn::-moz-focus-inner {+ padding: 0;+ border: 0;+}+button.btn.btn-large,+input[type="submit"].btn.btn-large {+ *padding-top: 7px;+ *padding-bottom: 7px;+}+button.btn.btn-small,+input[type="submit"].btn.btn-small {+ *padding-top: 3px;+ *padding-bottom: 3px;+}+button.btn.btn-mini,+input[type="submit"].btn.btn-mini {+ *padding-top: 1px;+ *padding-bottom: 1px;+}+.btn-group {+ position: relative;+ *zoom: 1;+ *margin-left: .3em;+}+.btn-group:before,+.btn-group:after {+ display: table;+ content: "";+}+.btn-group:after {+ clear: both;+}+.btn-group:first-child {+ *margin-left: 0;+}+.btn-group + .btn-group {+ margin-left: 5px;+}+.btn-toolbar {+ margin-top: 9px;+ margin-bottom: 9px;+}+.btn-toolbar .btn-group {+ display: inline-block;+ *display: inline;+ /* IE7 inline-block hack */++ *zoom: 1;+}+.btn-group .btn {+ position: relative;+ float: left;+ margin-left: -1px;+ -webkit-border-radius: 0;+ -moz-border-radius: 0;+ border-radius: 0;+}+.btn-group .btn:first-child {+ margin-left: 0;+ -webkit-border-top-left-radius: 4px;+ -moz-border-radius-topleft: 4px;+ border-top-left-radius: 4px;+ -webkit-border-bottom-left-radius: 4px;+ -moz-border-radius-bottomleft: 4px;+ border-bottom-left-radius: 4px;+}+.btn-group .btn:last-child,+.btn-group .dropdown-toggle {+ -webkit-border-top-right-radius: 4px;+ -moz-border-radius-topright: 4px;+ border-top-right-radius: 4px;+ -webkit-border-bottom-right-radius: 4px;+ -moz-border-radius-bottomright: 4px;+ border-bottom-right-radius: 4px;+}+.btn-group .btn.large:first-child {+ margin-left: 0;+ -webkit-border-top-left-radius: 6px;+ -moz-border-radius-topleft: 6px;+ border-top-left-radius: 6px;+ -webkit-border-bottom-left-radius: 6px;+ -moz-border-radius-bottomleft: 6px;+ border-bottom-left-radius: 6px;+}+.btn-group .btn.large:last-child,+.btn-group .large.dropdown-toggle {+ -webkit-border-top-right-radius: 6px;+ -moz-border-radius-topright: 6px;+ border-top-right-radius: 6px;+ -webkit-border-bottom-right-radius: 6px;+ -moz-border-radius-bottomright: 6px;+ border-bottom-right-radius: 6px;+}+.btn-group .btn:hover,+.btn-group .btn:focus,+.btn-group .btn:active,+.btn-group .btn.active {+ z-index: 2;+}+.btn-group .dropdown-toggle:active,+.btn-group.open .dropdown-toggle {+ outline: 0;+}+.btn-group .dropdown-toggle {+ padding-left: 8px;+ padding-right: 8px;+ -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);+ -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);+ box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);+ *padding-top: 3px;+ *padding-bottom: 3px;+}+.btn-group .btn-mini.dropdown-toggle {+ padding-left: 5px;+ padding-right: 5px;+ *padding-top: 1px;+ *padding-bottom: 1px;+}+.btn-group .btn-small.dropdown-toggle {+ *padding-top: 4px;+ *padding-bottom: 4px;+}+.btn-group .btn-large.dropdown-toggle {+ padding-left: 12px;+ padding-right: 12px;+}+.btn-group.open {+ *z-index: 1000;+}+.btn-group.open .dropdown-menu {+ display: block;+ margin-top: 1px;+ -webkit-border-radius: 5px;+ -moz-border-radius: 5px;+ border-radius: 5px;+}+.btn-group.open .dropdown-toggle {+ background-image: none;+ -webkit-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);+ -moz-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);+ box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);+}+.btn .caret {+ margin-top: 7px;+ margin-left: 0;+}+.btn:hover .caret,+.open.btn-group .caret {+ opacity: 1;+ filter: alpha(opacity=100);+}+.btn-mini .caret {+ margin-top: 5px;+}+.btn-small .caret {+ margin-top: 6px;+}+.btn-large .caret {+ margin-top: 6px;+ border-left: 5px solid transparent;+ border-right: 5px solid transparent;+ border-top: 5px solid #000000;+}+.btn-primary .caret,+.btn-warning .caret,+.btn-danger .caret,+.btn-info .caret,+.btn-success .caret,+.btn-inverse .caret {+ border-top-color: #ffffff;+ border-bottom-color: #ffffff;+ opacity: 0.75;+ filter: alpha(opacity=75);+}+.alert {+ padding: 8px 35px 8px 14px;+ margin-bottom: 18px;+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);+ background-color: #fcf8e3;+ border: 1px solid #fbeed5;+ -webkit-border-radius: 4px;+ -moz-border-radius: 4px;+ border-radius: 4px;+ color: #c09853;+}+.alert-heading {+ color: inherit;+}+.alert .close {+ position: relative;+ top: -2px;+ right: -21px;+ line-height: 18px;+}+.alert-success {+ background-color: #dff0d8;+ border-color: #d6e9c6;+ color: #468847;+}+.alert-danger,+.alert-error {+ background-color: #f2dede;+ border-color: #eed3d7;+ color: #b94a48;+}+.alert-info {+ background-color: #d9edf7;+ border-color: #bce8f1;+ color: #3a87ad;+}+.alert-block {+ padding-top: 14px;+ padding-bottom: 14px;+}+.alert-block > p,+.alert-block > ul {+ margin-bottom: 0;+}+.alert-block p + p {+ margin-top: 5px;+}+.nav {+ margin-left: 0;+ margin-bottom: 18px;+ list-style: none;+}+.nav > li > a {+ display: block;+}+.nav > li > a:hover {+ text-decoration: none;+ background-color: #eeeeee;+}+.nav .nav-header {+ display: block;+ padding: 3px 15px;+ font-size: 11px;+ font-weight: bold;+ line-height: 18px;+ color: #999999;+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);+ text-transform: uppercase;+}+.nav li + .nav-header {+ margin-top: 9px;+}+.nav-list {+ padding-left: 15px;+ padding-right: 15px;+ margin-bottom: 0;+}+.nav-list > li > a,+.nav-list .nav-header {+ margin-left: -15px;+ margin-right: -15px;+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);+}+.nav-list > li > a {+ padding: 3px 15px;+}+.nav-list > .active > a,+.nav-list > .active > a:hover {+ color: #ffffff;+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);+ background-color: #0088cc;+}+.nav-list [class^="icon-"] {+ margin-right: 2px;+}+.nav-list .divider {+ height: 1px;+ margin: 8px 1px;+ overflow: hidden;+ background-color: #e5e5e5;+ border-bottom: 1px solid #ffffff;+ *width: 100%;+ *margin: -5px 0 5px;+}+.nav-tabs,+.nav-pills {+ *zoom: 1;+}+.nav-tabs:before,+.nav-pills:before,+.nav-tabs:after,+.nav-pills:after {+ display: table;+ content: "";+}+.nav-tabs:after,+.nav-pills:after {+ clear: both;+}+.nav-tabs > li,+.nav-pills > li {+ float: left;+}+.nav-tabs > li > a,+.nav-pills > li > a {+ padding-right: 12px;+ padding-left: 12px;+ margin-right: 2px;+ line-height: 14px;+}+.nav-tabs {+ border-bottom: 1px solid #ddd;+}+.nav-tabs > li {+ margin-bottom: -1px;+}+.nav-tabs > li > a {+ padding-top: 8px;+ padding-bottom: 8px;+ line-height: 18px;+ border: 1px solid transparent;+ -webkit-border-radius: 4px 4px 0 0;+ -moz-border-radius: 4px 4px 0 0;+ border-radius: 4px 4px 0 0;+}+.nav-tabs > li > a:hover {+ border-color: #eeeeee #eeeeee #dddddd;+}+.nav-tabs > .active > a,+.nav-tabs > .active > a:hover {+ color: #555555;+ background-color: #ffffff;+ border: 1px solid #ddd;+ border-bottom-color: transparent;+ cursor: default;+}+.nav-pills > li > a {+ padding-top: 8px;+ padding-bottom: 8px;+ margin-top: 2px;+ margin-bottom: 2px;+ -webkit-border-radius: 5px;+ -moz-border-radius: 5px;+ border-radius: 5px;+}+.nav-pills > .active > a,+.nav-pills > .active > a:hover {+ color: #ffffff;+ background-color: #0088cc;+}+.nav-stacked > li {+ float: none;+}+.nav-stacked > li > a {+ margin-right: 0;+}+.nav-tabs.nav-stacked {+ border-bottom: 0;+}+.nav-tabs.nav-stacked > li > a {+ border: 1px solid #ddd;+ -webkit-border-radius: 0;+ -moz-border-radius: 0;+ border-radius: 0;+}+.nav-tabs.nav-stacked > li:first-child > a {+ -webkit-border-radius: 4px 4px 0 0;+ -moz-border-radius: 4px 4px 0 0;+ border-radius: 4px 4px 0 0;+}+.nav-tabs.nav-stacked > li:last-child > a {+ -webkit-border-radius: 0 0 4px 4px;+ -moz-border-radius: 0 0 4px 4px;+ border-radius: 0 0 4px 4px;+}+.nav-tabs.nav-stacked > li > a:hover {+ border-color: #ddd;+ z-index: 2;+}+.nav-pills.nav-stacked > li > a {+ margin-bottom: 3px;+}+.nav-pills.nav-stacked > li:last-child > a {+ margin-bottom: 1px;+}+.nav-tabs .dropdown-menu,+.nav-pills .dropdown-menu {+ margin-top: 1px;+ border-width: 1px;+}+.nav-pills .dropdown-menu {+ -webkit-border-radius: 4px;+ -moz-border-radius: 4px;+ border-radius: 4px;+}+.nav-tabs .dropdown-toggle .caret,+.nav-pills .dropdown-toggle .caret {+ border-top-color: #0088cc;+ border-bottom-color: #0088cc;+ margin-top: 6px;+}+.nav-tabs .dropdown-toggle:hover .caret,+.nav-pills .dropdown-toggle:hover .caret {+ border-top-color: #005580;+ border-bottom-color: #005580;+}+.nav-tabs .active .dropdown-toggle .caret,+.nav-pills .active .dropdown-toggle .caret {+ border-top-color: #333333;+ border-bottom-color: #333333;+}+.nav > .dropdown.active > a:hover {+ color: #000000;+ cursor: pointer;+}+.nav-tabs .open .dropdown-toggle,+.nav-pills .open .dropdown-toggle,+.nav > .open.active > a:hover {+ color: #ffffff;+ background-color: #999999;+ border-color: #999999;+}+.nav .open .caret,+.nav .open.active .caret,+.nav .open a:hover .caret {+ border-top-color: #ffffff;+ border-bottom-color: #ffffff;+ opacity: 1;+ filter: alpha(opacity=100);+}+.tabs-stacked .open > a:hover {+ border-color: #999999;+}+.tabbable {+ *zoom: 1;+}+.tabbable:before,+.tabbable:after {+ display: table;+ content: "";+}+.tabbable:after {+ clear: both;+}+.tab-content {+ display: table;+ width: 100%;+}+.tabs-below .nav-tabs,+.tabs-right .nav-tabs,+.tabs-left .nav-tabs {+ border-bottom: 0;+}+.tab-content > .tab-pane,+.pill-content > .pill-pane {+ display: none;+}+.tab-content > .active,+.pill-content > .active {+ display: block;+}+.tabs-below .nav-tabs {+ border-top: 1px solid #ddd;+}+.tabs-below .nav-tabs > li {+ margin-top: -1px;+ margin-bottom: 0;+}+.tabs-below .nav-tabs > li > a {+ -webkit-border-radius: 0 0 4px 4px;+ -moz-border-radius: 0 0 4px 4px;+ border-radius: 0 0 4px 4px;+}+.tabs-below .nav-tabs > li > a:hover {+ border-bottom-color: transparent;+ border-top-color: #ddd;+}+.tabs-below .nav-tabs .active > a,+.tabs-below .nav-tabs .active > a:hover {+ border-color: transparent #ddd #ddd #ddd;+}+.tabs-left .nav-tabs > li,+.tabs-right .nav-tabs > li {+ float: none;+}+.tabs-left .nav-tabs > li > a,+.tabs-right .nav-tabs > li > a {+ min-width: 74px;+ margin-right: 0;+ margin-bottom: 3px;+}+.tabs-left .nav-tabs {+ float: left;+ margin-right: 19px;+ border-right: 1px solid #ddd;+}+.tabs-left .nav-tabs > li > a {+ margin-right: -1px;+ -webkit-border-radius: 4px 0 0 4px;+ -moz-border-radius: 4px 0 0 4px;+ border-radius: 4px 0 0 4px;+}+.tabs-left .nav-tabs > li > a:hover {+ border-color: #eeeeee #dddddd #eeeeee #eeeeee;+}+.tabs-left .nav-tabs .active > a,+.tabs-left .nav-tabs .active > a:hover {+ border-color: #ddd transparent #ddd #ddd;+ *border-right-color: #ffffff;+}+.tabs-right .nav-tabs {+ float: right;+ margin-left: 19px;+ border-left: 1px solid #ddd;+}+.tabs-right .nav-tabs > li > a {+ margin-left: -1px;+ -webkit-border-radius: 0 4px 4px 0;+ -moz-border-radius: 0 4px 4px 0;+ border-radius: 0 4px 4px 0;+}+.tabs-right .nav-tabs > li > a:hover {+ border-color: #eeeeee #eeeeee #eeeeee #dddddd;+}+.tabs-right .nav-tabs .active > a,+.tabs-right .nav-tabs .active > a:hover {+ border-color: #ddd #ddd #ddd transparent;+ *border-left-color: #ffffff;+}+.navbar {+ *position: relative;+ *z-index: 2;+ overflow: visible;+ margin-bottom: 18px;+}+.navbar-inner {+ padding-left: 20px;+ padding-right: 20px;+ background-color: #2c2c2c;+ background-image: -moz-linear-gradient(top, #333333, #222222);+ background-image: -ms-linear-gradient(top, #333333, #222222);+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));+ background-image: -webkit-linear-gradient(top, #333333, #222222);+ background-image: -o-linear-gradient(top, #333333, #222222);+ background-image: linear-gradient(top, #333333, #222222);+ background-repeat: repeat-x;+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);+ -webkit-border-radius: 4px;+ -moz-border-radius: 4px;+ border-radius: 4px;+ -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);+ -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);+}+.navbar .container {+ width: auto;+}+.btn-navbar {+ display: none;+ float: right;+ padding: 7px 10px;+ margin-left: 5px;+ margin-right: 5px;+ background-color: #2c2c2c;+ background-image: -moz-linear-gradient(top, #333333, #222222);+ background-image: -ms-linear-gradient(top, #333333, #222222);+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));+ background-image: -webkit-linear-gradient(top, #333333, #222222);+ background-image: -o-linear-gradient(top, #333333, #222222);+ background-image: linear-gradient(top, #333333, #222222);+ background-repeat: repeat-x;+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);+ border-color: #222222 #222222 #000000;+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);+ filter: progid:dximagetransform.microsoft.gradient(enabled=false);+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);+ -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);+}+.btn-navbar:hover,+.btn-navbar:active,+.btn-navbar.active,+.btn-navbar.disabled,+.btn-navbar[disabled] {+ background-color: #222222;+}+.btn-navbar:active,+.btn-navbar.active {+ background-color: #080808 \9;+}+.btn-navbar .icon-bar {+ display: block;+ width: 18px;+ height: 2px;+ background-color: #f5f5f5;+ -webkit-border-radius: 1px;+ -moz-border-radius: 1px;+ border-radius: 1px;+ -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);+ -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);+ box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);+}+.btn-navbar .icon-bar + .icon-bar {+ margin-top: 3px;+}+.nav-collapse.collapse {+ height: auto;+}+.navbar {+ color: #999999;+}+.navbar .brand:hover {+ text-decoration: none;+}+.navbar .brand {+ float: left;+ display: block;+ padding: 8px 20px 12px;+ margin-left: -20px;+ font-size: 20px;+ font-weight: 200;+ line-height: 1;+ color: #ffffff;+}+.navbar .navbar-text {+ margin-bottom: 0;+ line-height: 40px;+}+.navbar .btn,+.navbar .btn-group {+ margin-top: 5px;+}+.navbar .btn-group .btn {+ margin-top: 0;+}+.navbar-form {+ margin-bottom: 0;+ *zoom: 1;+}+.navbar-form:before,+.navbar-form:after {+ display: table;+ content: "";+}+.navbar-form:after {+ clear: both;+}+.navbar-form input,+.navbar-form select,+.navbar-form .radio,+.navbar-form .checkbox {+ margin-top: 5px;+}+.navbar-form input,+.navbar-form select {+ display: inline-block;+ margin-bottom: 0;+}+.navbar-form input[type="image"],+.navbar-form input[type="checkbox"],+.navbar-form input[type="radio"] {+ margin-top: 3px;+}+.navbar-form .input-append,+.navbar-form .input-prepend {+ margin-top: 6px;+ white-space: nowrap;+}+.navbar-form .input-append input,+.navbar-form .input-prepend input {+ margin-top: 0;+}+.navbar-search {+ position: relative;+ float: left;+ margin-top: 6px;+ margin-bottom: 0;+}+.navbar-search .search-query {+ padding: 4px 9px;+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;+ font-size: 13px;+ font-weight: normal;+ line-height: 1;+ color: #ffffff;+ background-color: #626262;+ border: 1px solid #151515;+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15);+ -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15);+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15);+ -webkit-transition: none;+ -moz-transition: none;+ -ms-transition: none;+ -o-transition: none;+ transition: none;+}+.navbar-search .search-query:-moz-placeholder {+ color: #cccccc;+}+.navbar-search .search-query::-webkit-input-placeholder {+ color: #cccccc;+}+.navbar-search .search-query:focus,+.navbar-search .search-query.focused {+ padding: 5px 10px;+ color: #333333;+ text-shadow: 0 1px 0 #ffffff;+ background-color: #ffffff;+ border: 0;+ -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);+ -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);+ box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);+ outline: 0;+}+.navbar-fixed-top,+.navbar-fixed-bottom {+ position: fixed;+ right: 0;+ left: 0;+ z-index: 1030;+ margin-bottom: 0;+}+.navbar-fixed-top .navbar-inner,+.navbar-fixed-bottom .navbar-inner {+ padding-left: 0;+ padding-right: 0;+ -webkit-border-radius: 0;+ -moz-border-radius: 0;+ border-radius: 0;+}+.navbar-fixed-top .container,+.navbar-fixed-bottom .container {+ width: 940px;+}+.navbar-fixed-top {+ top: 0;+}+.navbar-fixed-bottom {+ bottom: 0;+}+.navbar .nav {+ position: relative;+ left: 0;+ display: block;+ float: left;+ margin: 0 10px 0 0;+}+.navbar .nav.pull-right {+ float: right;+}+.navbar .nav > li {+ display: block;+ float: left;+}+.navbar .nav > li > a {+ float: none;+ padding: 10px 10px 11px;+ line-height: 19px;+ color: #999999;+ text-decoration: none;+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);+}+.navbar .nav > li > a:hover {+ background-color: transparent;+ color: #ffffff;+ text-decoration: none;+}+.navbar .nav .active > a,+.navbar .nav .active > a:hover {+ color: #ffffff;+ text-decoration: none;+ background-color: #222222;+}+.navbar .divider-vertical {+ height: 40px;+ width: 1px;+ margin: 0 9px;+ overflow: hidden;+ background-color: #222222;+ border-right: 1px solid #333333;+}+.navbar .nav.pull-right {+ margin-left: 10px;+ margin-right: 0;+}+.navbar .dropdown-menu {+ margin-top: 1px;+ -webkit-border-radius: 4px;+ -moz-border-radius: 4px;+ border-radius: 4px;+}+.navbar .dropdown-menu:before {+ content: '';+ display: inline-block;+ border-left: 7px solid transparent;+ border-right: 7px solid transparent;+ border-bottom: 7px solid #ccc;+ border-bottom-color: rgba(0, 0, 0, 0.2);+ position: absolute;+ top: -7px;+ left: 9px;+}+.navbar .dropdown-menu:after {+ content: '';+ display: inline-block;+ border-left: 6px solid transparent;+ border-right: 6px solid transparent;+ border-bottom: 6px solid #ffffff;+ position: absolute;+ top: -6px;+ left: 10px;+}+.navbar-fixed-bottom .dropdown-menu:before {+ border-top: 7px solid #ccc;+ border-top-color: rgba(0, 0, 0, 0.2);+ border-bottom: 0;+ bottom: -7px;+ top: auto;+}+.navbar-fixed-bottom .dropdown-menu:after {+ border-top: 6px solid #ffffff;+ border-bottom: 0;+ bottom: -6px;+ top: auto;+}+.navbar .nav .dropdown-toggle .caret,+.navbar .nav .open.dropdown .caret {+ border-top-color: #ffffff;+ border-bottom-color: #ffffff;+}+.navbar .nav .active .caret {+ opacity: 1;+ filter: alpha(opacity=100);+}+.navbar .nav .open > .dropdown-toggle,+.navbar .nav .active > .dropdown-toggle,+.navbar .nav .open.active > .dropdown-toggle {+ background-color: transparent;+}+.navbar .nav .active > .dropdown-toggle:hover {+ color: #ffffff;+}+.navbar .nav.pull-right .dropdown-menu,+.navbar .nav .dropdown-menu.pull-right {+ left: auto;+ right: 0;+}+.navbar .nav.pull-right .dropdown-menu:before,+.navbar .nav .dropdown-menu.pull-right:before {+ left: auto;+ right: 12px;+}+.navbar .nav.pull-right .dropdown-menu:after,+.navbar .nav .dropdown-menu.pull-right:after {+ left: auto;+ right: 13px;+}+.breadcrumb {+ padding: 7px 14px;+ margin: 0 0 18px;+ list-style: none;+ background-color: #fbfbfb;+ background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5);+ background-image: -ms-linear-gradient(top, #ffffff, #f5f5f5);+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5));+ background-image: -webkit-linear-gradient(top, #ffffff, #f5f5f5);+ background-image: -o-linear-gradient(top, #ffffff, #f5f5f5);+ background-image: linear-gradient(top, #ffffff, #f5f5f5);+ background-repeat: repeat-x;+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);+ border: 1px solid #ddd;+ -webkit-border-radius: 3px;+ -moz-border-radius: 3px;+ border-radius: 3px;+ -webkit-box-shadow: inset 0 1px 0 #ffffff;+ -moz-box-shadow: inset 0 1px 0 #ffffff;+ box-shadow: inset 0 1px 0 #ffffff;+}+.breadcrumb li {+ display: inline-block;+ *display: inline;+ /* IE7 inline-block hack */++ *zoom: 1;+ text-shadow: 0 1px 0 #ffffff;+}+.breadcrumb .divider {+ padding: 0 5px;+ color: #999999;+}+.breadcrumb .active a {+ color: #333333;+}+.pagination {+ height: 36px;+ margin: 18px 0;+}+.pagination ul {+ display: inline-block;+ *display: inline;+ /* IE7 inline-block hack */++ *zoom: 1;+ margin-left: 0;+ margin-bottom: 0;+ -webkit-border-radius: 3px;+ -moz-border-radius: 3px;+ border-radius: 3px;+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);+ -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);+}+.pagination li {+ display: inline;+}+.pagination a {+ float: left;+ padding: 0 14px;+ line-height: 34px;+ text-decoration: none;+ border: 1px solid #ddd;+ border-left-width: 0;+}+.pagination a:hover,+.pagination .active a {+ background-color: #f5f5f5;+}+.pagination .active a {+ color: #999999;+ cursor: default;+}+.pagination .disabled span,+.pagination .disabled a,+.pagination .disabled a:hover {+ color: #999999;+ background-color: transparent;+ cursor: default;+}+.pagination li:first-child a {+ border-left-width: 1px;+ -webkit-border-radius: 3px 0 0 3px;+ -moz-border-radius: 3px 0 0 3px;+ border-radius: 3px 0 0 3px;+}+.pagination li:last-child a {+ -webkit-border-radius: 0 3px 3px 0;+ -moz-border-radius: 0 3px 3px 0;+ border-radius: 0 3px 3px 0;+}+.pagination-centered {+ text-align: center;+}+.pagination-right {+ text-align: right;+}+.pager {+ margin-left: 0;+ margin-bottom: 18px;+ list-style: none;+ text-align: center;+ *zoom: 1;+}+.pager:before,+.pager:after {+ display: table;+ content: "";+}+.pager:after {+ clear: both;+}+.pager li {+ display: inline;+}+.pager a {+ display: inline-block;+ padding: 5px 14px;+ background-color: #fff;+ border: 1px solid #ddd;+ -webkit-border-radius: 15px;+ -moz-border-radius: 15px;+ border-radius: 15px;+}+.pager a:hover {+ text-decoration: none;+ background-color: #f5f5f5;+}+.pager .next a {+ float: right;+}+.pager .previous a {+ float: left;+}+.pager .disabled a,+.pager .disabled a:hover {+ color: #999999;+ background-color: #fff;+ cursor: default;+}+.modal-open .dropdown-menu {+ z-index: 2050;+}+.modal-open .dropdown.open {+ *z-index: 2050;+}+.modal-open .popover {+ z-index: 2060;+}+.modal-open .tooltip {+ z-index: 2070;+}+.modal-backdrop {+ position: fixed;+ top: 0;+ right: 0;+ bottom: 0;+ left: 0;+ z-index: 1040;+ background-color: #000000;+}+.modal-backdrop.fade {+ opacity: 0;+}+.modal-backdrop,+.modal-backdrop.fade.in {+ opacity: 0.8;+ filter: alpha(opacity=80);+}+.modal {+ position: fixed;+ top: 50%;+ left: 50%;+ z-index: 1050;+ overflow: auto;+ width: 560px;+ margin: -250px 0 0 -280px;+ background-color: #ffffff;+ border: 1px solid #999;+ border: 1px solid rgba(0, 0, 0, 0.3);+ *border: 1px solid #999;+ /* IE6-7 */++ -webkit-border-radius: 6px;+ -moz-border-radius: 6px;+ border-radius: 6px;+ -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);+ -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);+ box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);+ -webkit-background-clip: padding-box;+ -moz-background-clip: padding-box;+ background-clip: padding-box;+}+.modal.fade {+ -webkit-transition: opacity .3s linear, top .3s ease-out;+ -moz-transition: opacity .3s linear, top .3s ease-out;+ -ms-transition: opacity .3s linear, top .3s ease-out;+ -o-transition: opacity .3s linear, top .3s ease-out;+ transition: opacity .3s linear, top .3s ease-out;+ top: -25%;+}+.modal.fade.in {+ top: 50%;+}+.modal-header {+ padding: 9px 15px;+ border-bottom: 1px solid #eee;+}+.modal-header .close {+ margin-top: 2px;+}+.modal-body {+ overflow-y: auto;+ max-height: 400px;+ padding: 15px;+}+.modal-form {+ margin-bottom: 0;+}+.modal-footer {+ padding: 14px 15px 15px;+ margin-bottom: 0;+ text-align: right;+ background-color: #f5f5f5;+ border-top: 1px solid #ddd;+ -webkit-border-radius: 0 0 6px 6px;+ -moz-border-radius: 0 0 6px 6px;+ border-radius: 0 0 6px 6px;+ -webkit-box-shadow: inset 0 1px 0 #ffffff;+ -moz-box-shadow: inset 0 1px 0 #ffffff;+ box-shadow: inset 0 1px 0 #ffffff;+ *zoom: 1;+}+.modal-footer:before,+.modal-footer:after {+ display: table;+ content: "";+}+.modal-footer:after {+ clear: both;+}+.modal-footer .btn + .btn {+ margin-left: 5px;+ margin-bottom: 0;+}+.modal-footer .btn-group .btn + .btn {+ margin-left: -1px;+}+.tooltip {+ position: absolute;+ z-index: 1020;+ display: block;+ visibility: visible;+ padding: 5px;+ font-size: 11px;+ opacity: 0;+ filter: alpha(opacity=0);+}+.tooltip.in {+ opacity: 0.8;+ filter: alpha(opacity=80);+}+.tooltip.top {+ margin-top: -2px;+}+.tooltip.right {+ margin-left: 2px;+}+.tooltip.bottom {+ margin-top: 2px;+}+.tooltip.left {+ margin-left: -2px;+}+.tooltip.top .tooltip-arrow {+ bottom: 0;+ left: 50%;+ margin-left: -5px;+ border-left: 5px solid transparent;+ border-right: 5px solid transparent;+ border-top: 5px solid #000000;+}+.tooltip.left .tooltip-arrow {+ top: 50%;+ right: 0;+ margin-top: -5px;+ border-top: 5px solid transparent;+ border-bottom: 5px solid transparent;+ border-left: 5px solid #000000;+}+.tooltip.bottom .tooltip-arrow {+ top: 0;+ left: 50%;+ margin-left: -5px;+ border-left: 5px solid transparent;+ border-right: 5px solid transparent;+ border-bottom: 5px solid #000000;+}+.tooltip.right .tooltip-arrow {+ top: 50%;+ left: 0;+ margin-top: -5px;+ border-top: 5px solid transparent;+ border-bottom: 5px solid transparent;+ border-right: 5px solid #000000;+}+.tooltip-inner {+ max-width: 200px;+ padding: 3px 8px;+ color: #ffffff;+ text-align: center;+ text-decoration: none;+ background-color: #000000;+ -webkit-border-radius: 4px;+ -moz-border-radius: 4px;+ border-radius: 4px;+}+.tooltip-arrow {+ position: absolute;+ width: 0;+ height: 0;+}+.popover {+ position: absolute;+ top: 0;+ left: 0;+ z-index: 1010;+ display: none;+ padding: 5px;+}+.popover.top {+ margin-top: -5px;+}+.popover.right {+ margin-left: 5px;+}+.popover.bottom {+ margin-top: 5px;+}+.popover.left {+ margin-left: -5px;+}+.popover.top .arrow {+ bottom: 0;+ left: 50%;+ margin-left: -5px;+ border-left: 5px solid transparent;+ border-right: 5px solid transparent;+ border-top: 5px solid #000000;+}+.popover.right .arrow {+ top: 50%;+ left: 0;+ margin-top: -5px;+ border-top: 5px solid transparent;+ border-bottom: 5px solid transparent;+ border-right: 5px solid #000000;+}+.popover.bottom .arrow {+ top: 0;+ left: 50%;+ margin-left: -5px;+ border-left: 5px solid transparent;+ border-right: 5px solid transparent;+ border-bottom: 5px solid #000000;+}+.popover.left .arrow {+ top: 50%;+ right: 0;+ margin-top: -5px;+ border-top: 5px solid transparent;+ border-bottom: 5px solid transparent;+ border-left: 5px solid #000000;+}+.popover .arrow {+ position: absolute;+ width: 0;+ height: 0;+}+.popover-inner {+ padding: 3px;+ width: 280px;+ overflow: hidden;+ background: #000000;+ background: rgba(0, 0, 0, 0.8);+ -webkit-border-radius: 6px;+ -moz-border-radius: 6px;+ border-radius: 6px;+ -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);+ -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);+ box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);+}+.popover-title {+ padding: 9px 15px;+ line-height: 1;+ background-color: #f5f5f5;+ border-bottom: 1px solid #eee;+ -webkit-border-radius: 3px 3px 0 0;+ -moz-border-radius: 3px 3px 0 0;+ border-radius: 3px 3px 0 0;+}+.popover-content {+ padding: 14px;+ background-color: #ffffff;+ -webkit-border-radius: 0 0 3px 3px;+ -moz-border-radius: 0 0 3px 3px;+ border-radius: 0 0 3px 3px;+ -webkit-background-clip: padding-box;+ -moz-background-clip: padding-box;+ background-clip: padding-box;+}+.popover-content p,+.popover-content ul,+.popover-content ol {+ margin-bottom: 0;+}+.thumbnails {+ margin-left: -20px;+ list-style: none;+ *zoom: 1;+}+.thumbnails:before,+.thumbnails:after {+ display: table;+ content: "";+}+.thumbnails:after {+ clear: both;+}+.thumbnails > li {+ float: left;+ margin: 0 0 18px 20px;+}+.thumbnail {+ display: block;+ padding: 4px;+ line-height: 1;+ border: 1px solid #ddd;+ -webkit-border-radius: 4px;+ -moz-border-radius: 4px;+ border-radius: 4px;+ -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);+ -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);+}+a.thumbnail:hover {+ border-color: #0088cc;+ -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);+ -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);+ box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);+}+.thumbnail > img {+ display: block;+ max-width: 100%;+ margin-left: auto;+ margin-right: auto;+}+.thumbnail .caption {+ padding: 9px;+}+.label {+ padding: 1px 4px 2px;+ font-size: 10.998px;+ font-weight: bold;+ line-height: 13px;+ color: #ffffff;+ vertical-align: middle;+ white-space: nowrap;+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);+ background-color: #999999;+ -webkit-border-radius: 3px;+ -moz-border-radius: 3px;+ border-radius: 3px;+}+.label:hover {+ color: #ffffff;+ text-decoration: none;+}+.label-important {+ background-color: #b94a48;+}+.label-important:hover {+ background-color: #953b39;+}+.label-warning {+ background-color: #f89406;+}+.label-warning:hover {+ background-color: #c67605;+}+.label-success {+ background-color: #468847;+}+.label-success:hover {+ background-color: #356635;+}+.label-info {+ background-color: #3a87ad;+}+.label-info:hover {+ background-color: #2d6987;+}+.label-inverse {+ background-color: #333333;+}+.label-inverse:hover {+ background-color: #1a1a1a;+}+.badge {+ padding: 1px 9px 2px;+ font-size: 12.025px;+ font-weight: bold;+ white-space: nowrap;+ color: #ffffff;+ background-color: #999999;+ -webkit-border-radius: 9px;+ -moz-border-radius: 9px;+ border-radius: 9px;+}+.badge:hover {+ color: #ffffff;+ text-decoration: none;+ cursor: pointer;+}+.badge-error {+ background-color: #b94a48;+}+.badge-error:hover {+ background-color: #953b39;+}+.badge-warning {+ background-color: #f89406;+}+.badge-warning:hover {+ background-color: #c67605;+}+.badge-success {+ background-color: #468847;+}+.badge-success:hover {+ background-color: #356635;+}+.badge-info {+ background-color: #3a87ad;+}+.badge-info:hover {+ background-color: #2d6987;+}+.badge-inverse {+ background-color: #333333;+}+.badge-inverse:hover {+ background-color: #1a1a1a;+}+@-webkit-keyframes progress-bar-stripes {+ from {+ background-position: 0 0;+ }+ to {+ background-position: 40px 0;+ }+}+@-moz-keyframes progress-bar-stripes {+ from {+ background-position: 0 0;+ }+ to {+ background-position: 40px 0;+ }+}+@-ms-keyframes progress-bar-stripes {+ from {+ background-position: 0 0;+ }+ to {+ background-position: 40px 0;+ }+}+@keyframes progress-bar-stripes {+ from {+ background-position: 0 0;+ }+ to {+ background-position: 40px 0;+ }+}+.progress {+ overflow: hidden;+ height: 18px;+ margin-bottom: 18px;+ background-color: #f7f7f7;+ background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9);+ background-image: -ms-linear-gradient(top, #f5f5f5, #f9f9f9);+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));+ background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9);+ background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9);+ background-image: linear-gradient(top, #f5f5f5, #f9f9f9);+ background-repeat: repeat-x;+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', GradientType=0);+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);+ -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);+ -webkit-border-radius: 4px;+ -moz-border-radius: 4px;+ border-radius: 4px;+}+.progress .bar {+ width: 0%;+ height: 18px;+ color: #ffffff;+ font-size: 12px;+ text-align: center;+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);+ background-color: #0e90d2;+ background-image: -moz-linear-gradient(top, #149bdf, #0480be);+ background-image: -ms-linear-gradient(top, #149bdf, #0480be);+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));+ background-image: -webkit-linear-gradient(top, #149bdf, #0480be);+ background-image: -o-linear-gradient(top, #149bdf, #0480be);+ background-image: linear-gradient(top, #149bdf, #0480be);+ background-repeat: repeat-x;+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', GradientType=0);+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);+ -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);+ -webkit-box-sizing: border-box;+ -moz-box-sizing: border-box;+ -ms-box-sizing: border-box;+ box-sizing: border-box;+ -webkit-transition: width 0.6s ease;+ -moz-transition: width 0.6s ease;+ -ms-transition: width 0.6s ease;+ -o-transition: width 0.6s ease;+ transition: width 0.6s ease;+}+.progress-striped .bar {+ background-color: #149bdf;+ background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));+ background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);+ background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);+ background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);+ background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);+ background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);+ -webkit-background-size: 40px 40px;+ -moz-background-size: 40px 40px;+ -o-background-size: 40px 40px;+ background-size: 40px 40px;+}+.progress.active .bar {+ -webkit-animation: progress-bar-stripes 2s linear infinite;+ -moz-animation: progress-bar-stripes 2s linear infinite;+ animation: progress-bar-stripes 2s linear infinite;+}+.progress-danger .bar {+ background-color: #dd514c;+ background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);+ background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35);+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));+ background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);+ background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);+ background-image: linear-gradient(top, #ee5f5b, #c43c35);+ background-repeat: repeat-x;+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);+}+.progress-danger.progress-striped .bar {+ background-color: #ee5f5b;+ background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));+ background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);+ background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);+ background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);+ background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);+ background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);+}+.progress-success .bar {+ background-color: #5eb95e;+ background-image: -moz-linear-gradient(top, #62c462, #57a957);+ background-image: -ms-linear-gradient(top, #62c462, #57a957);+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));+ background-image: -webkit-linear-gradient(top, #62c462, #57a957);+ background-image: -o-linear-gradient(top, #62c462, #57a957);+ background-image: linear-gradient(top, #62c462, #57a957);+ background-repeat: repeat-x;+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);+}+.progress-success.progress-striped .bar {+ background-color: #62c462;+ background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));+ background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);+ background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);+ background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);+ background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);+ background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);+}+.progress-info .bar {+ background-color: #4bb1cf;+ background-image: -moz-linear-gradient(top, #5bc0de, #339bb9);+ background-image: -ms-linear-gradient(top, #5bc0de, #339bb9);+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));+ background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9);+ background-image: -o-linear-gradient(top, #5bc0de, #339bb9);+ background-image: linear-gradient(top, #5bc0de, #339bb9);+ background-repeat: repeat-x;+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);+}+.progress-info.progress-striped .bar {+ background-color: #5bc0de;+ background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));+ background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);+ background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);+ background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);+ background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);+ background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);+}+.progress-warning .bar {+ background-color: #faa732;+ background-image: -moz-linear-gradient(top, #fbb450, #f89406);+ background-image: -ms-linear-gradient(top, #fbb450, #f89406);+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));+ background-image: -webkit-linear-gradient(top, #fbb450, #f89406);+ background-image: -o-linear-gradient(top, #fbb450, #f89406);+ background-image: linear-gradient(top, #fbb450, #f89406);+ background-repeat: repeat-x;+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);+}+.progress-warning.progress-striped .bar {+ background-color: #fbb450;+ background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));+ background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);+ background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);+ background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);+ background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);+ background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);+}+.accordion {+ margin-bottom: 18px;+}+.accordion-group {+ margin-bottom: 2px;+ border: 1px solid #e5e5e5;+ -webkit-border-radius: 4px;+ -moz-border-radius: 4px;+ border-radius: 4px;+}+.accordion-heading {+ border-bottom: 0;+}+.accordion-heading .accordion-toggle {+ display: block;+ padding: 8px 15px;+}+.accordion-inner {+ padding: 9px 15px;+ border-top: 1px solid #e5e5e5;+}+.carousel {+ position: relative;+ margin-bottom: 18px;+ line-height: 1;+}+.carousel-inner {+ overflow: hidden;+ width: 100%;+ position: relative;+}+.carousel .item {+ display: none;+ position: relative;+ -webkit-transition: 0.6s ease-in-out left;+ -moz-transition: 0.6s ease-in-out left;+ -ms-transition: 0.6s ease-in-out left;+ -o-transition: 0.6s ease-in-out left;+ transition: 0.6s ease-in-out left;+}+.carousel .item > img {+ display: block;+ line-height: 1;+}+.carousel .active,+.carousel .next,+.carousel .prev {+ display: block;+}+.carousel .active {+ left: 0;+}+.carousel .next,+.carousel .prev {+ position: absolute;+ top: 0;+ width: 100%;+}+.carousel .next {+ left: 100%;+}+.carousel .prev {+ left: -100%;+}+.carousel .next.left,+.carousel .prev.right {+ left: 0;+}+.carousel .active.left {+ left: -100%;+}+.carousel .active.right {+ left: 100%;+}+.carousel-control {+ position: absolute;+ top: 40%;+ left: 15px;+ width: 40px;+ height: 40px;+ margin-top: -20px;+ font-size: 60px;+ font-weight: 100;+ line-height: 30px;+ color: #ffffff;+ text-align: center;+ background: #222222;+ border: 3px solid #ffffff;+ -webkit-border-radius: 23px;+ -moz-border-radius: 23px;+ border-radius: 23px;+ opacity: 0.5;+ filter: alpha(opacity=50);+}+.carousel-control.right {+ left: auto;+ right: 15px;+}+.carousel-control:hover {+ color: #ffffff;+ text-decoration: none;+ opacity: 0.9;+ filter: alpha(opacity=90);+}+.carousel-caption {+ position: absolute;+ left: 0;+ right: 0;+ bottom: 0;+ padding: 10px 15px 5px;+ background: #333333;+ background: rgba(0, 0, 0, 0.75);+}+.carousel-caption h4,+.carousel-caption p {+ color: #ffffff;+}+.hero-unit {+ padding: 60px;+ margin-bottom: 30px;+ background-color: #eeeeee;+ -webkit-border-radius: 6px;+ -moz-border-radius: 6px;+ border-radius: 6px;+}+.hero-unit h1 {+ margin-bottom: 0;+ font-size: 60px;+ line-height: 1;+ color: inherit;+ letter-spacing: -1px;+}+.hero-unit p {+ font-size: 18px;+ font-weight: 200;+ line-height: 27px;+ color: inherit;+}+.pull-right {+ float: right;+}+.pull-left {+ float: left;+}+.hide {+ display: none;+}+.show {+ display: block;+}+.invisible {+ visibility: hidden;+}
− scaffold/static/js/modernizr.js.cg
@@ -1,4 +0,0 @@-/* Modernizr 2.0.6 (Custom Build) | MIT & BSD- * Build: http://www.modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-applicationcache-canvas-canvastext-draganddrop-hashchange-history-audio-video-indexeddb-input-inputtypes-localstorage-postmessage-sessionstorage-websockets-websqldatabase-webworkers-geolocation-inlinesvg-smil-svg-svgclippaths-touch-webgl-iepp-cssclasses-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-load- */-;window.Modernizr=function(a,b,c){function H(){e.input=function(a){for(var b=0,c=a.length;b<c;b++)t[a[b]]=a[b]in l;return t}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" ")),e.inputtypes=function(a){for(var d=0,e,f,h,i=a.length;d<i;d++)l.setAttribute("type",f=a[d]),e=l.type!=="text",e&&(l.value=m,l.style.cssText="position:absolute;visibility:hidden;",/^range$/.test(f)&&l.style.WebkitAppearance!==c?(g.appendChild(l),h=b.defaultView,e=h.getComputedStyle&&h.getComputedStyle(l,null).WebkitAppearance!=="textfield"&&l.offsetHeight!==0,g.removeChild(l)):/^(search|tel)$/.test(f)||(/^(url|email)$/.test(f)?e=l.checkValidity&&l.checkValidity()===!1:/^color$/.test(f)?(g.appendChild(l),g.offsetWidth,e=l.value!=m,g.removeChild(l)):e=l.value!=m)),s[a[d]]=!!e;return s}("search tel url email datetime date month week time datetime-local number range color".split(" "))}function F(a,b){var c=a.charAt(0).toUpperCase()+a.substr(1),d=(a+" "+p.join(c+" ")+c).split(" ");return E(d,b)}function E(a,b){for(var d in a)if(k[a[d]]!==c)return b=="pfx"?a[d]:!0;return!1}function D(a,b){return!!~(""+a).indexOf(b)}function C(a,b){return typeof a===b}function B(a,b){return A(o.join(a+";")+(b||""))}function A(a){k.cssText=a}var d="2.0.6",e={},f=!0,g=b.documentElement,h=b.head||b.getElementsByTagName("head")[0],i="modernizr",j=b.createElement(i),k=j.style,l=b.createElement("input"),m=":)",n=Object.prototype.toString,o=" -webkit- -moz- -o- -ms- -khtml- ".split(" "),p="Webkit Moz O ms Khtml".split(" "),q={svg:"http://www.w3.org/2000/svg"},r={},s={},t={},u=[],v=function(a,c,d,e){var f,h,j,k=b.createElement("div");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:i+(d+1),k.appendChild(j);f=["­","<style>",a,"</style>"].join(""),k.id=i,k.innerHTML+=f,g.appendChild(k),h=c(k,a),k.parentNode.removeChild(k);return!!h},w=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=C(e[d],"function"),C(e[d],c)||(e[d]=c),e.removeAttribute(d))),e=null;return f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),x,y={}.hasOwnProperty,z;!C(y,c)&&!C(y.call,c)?z=function(a,b){return y.call(a,b)}:z=function(a,b){return b in a&&C(a.constructor.prototype[b],c)};var G=function(c,d){var f=c.join(""),g=d.length;v(f,function(c,d){var f=b.styleSheets[b.styleSheets.length-1],h=f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"",i=c.childNodes,j={};while(g--)j[i[g].id]=i[g];e.touch="ontouchstart"in a||j.touch.offsetTop===9,e.csstransforms3d=j.csstransforms3d.offsetLeft===9,e.generatedcontent=j.generatedcontent.offsetHeight>=1,e.fontface=/src/i.test(h)&&h.indexOf(d.split(" ")[0])===0},g,d)}(['@font-face {font-family:"font";src:url("https://")}',["@media (",o.join("touch-enabled),("),i,")","{#touch{top:9px;position:absolute}}"].join(""),["@media (",o.join("transform-3d),("),i,")","{#csstransforms3d{left:9px;position:absolute}}"].join(""),['#generatedcontent:after{content:"',m,'";visibility:hidden}'].join("")],["fontface","touch","csstransforms3d","generatedcontent"]);r.flexbox=function(){function c(a,b,c,d){a.style.cssText=o.join(b+":"+c+";")+(d||"")}function a(a,b,c,d){b+=":",a.style.cssText=(b+o.join(c+";"+b)).slice(0,-b.length)+(d||"")}var d=b.createElement("div"),e=b.createElement("div");a(d,"display","box","width:42px;padding:0;"),c(e,"box-flex","1","width:10px;"),d.appendChild(e),g.appendChild(d);var f=e.offsetWidth===42;d.removeChild(e),g.removeChild(d);return f},r.canvas=function(){var a=b.createElement("canvas");return!!a.getContext&&!!a.getContext("2d")},r.canvastext=function(){return!!e.canvas&&!!C(b.createElement("canvas").getContext("2d").fillText,"function")},r.webgl=function(){return!!a.WebGLRenderingContext},r.touch=function(){return e.touch},r.geolocation=function(){return!!navigator.geolocation},r.postmessage=function(){return!!a.postMessage},r.websqldatabase=function(){var b=!!a.openDatabase;return b},r.indexedDB=function(){for(var b=-1,c=p.length;++b<c;)if(a[p[b].toLowerCase()+"IndexedDB"])return!0;return!!a.indexedDB},r.hashchange=function(){return w("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},r.history=function(){return!!a.history&&!!history.pushState},r.draganddrop=function(){return w("dragstart")&&w("drop")},r.websockets=function(){for(var b=-1,c=p.length;++b<c;)if(a[p[b]+"WebSocket"])return!0;return"WebSocket"in a},r.rgba=function(){A("background-color:rgba(150,255,150,.5)");return D(k.backgroundColor,"rgba")},r.hsla=function(){A("background-color:hsla(120,40%,100%,.5)");return D(k.backgroundColor,"rgba")||D(k.backgroundColor,"hsla")},r.multiplebgs=function(){A("background:url(https://),url(https://),red url(https://)");return/(url\s*\(.*?){3}/.test(k.background)},r.backgroundsize=function(){return F("backgroundSize")},r.borderimage=function(){return F("borderImage")},r.borderradius=function(){return F("borderRadius")},r.boxshadow=function(){return F("boxShadow")},r.textshadow=function(){return b.createElement("div").style.textShadow===""},r.opacity=function(){B("opacity:.55");return/^0.55$/.test(k.opacity)},r.cssanimations=function(){return F("animationName")},r.csscolumns=function(){return F("columnCount")},r.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";A((a+o.join(b+a)+o.join(c+a)).slice(0,-a.length));return D(k.backgroundImage,"gradient")},r.cssreflections=function(){return F("boxReflect")},r.csstransforms=function(){return!!E(["transformProperty","WebkitTransform","MozTransform","OTransform","msTransform"])},r.csstransforms3d=function(){var a=!!E(["perspectiveProperty","WebkitPerspective","MozPerspective","OPerspective","msPerspective"]);a&&"webkitPerspective"in g.style&&(a=e.csstransforms3d);return a},r.csstransitions=function(){return F("transitionProperty")},r.fontface=function(){return e.fontface},r.generatedcontent=function(){return e.generatedcontent},r.video=function(){var a=b.createElement("video"),c=!1;try{if(c=!!a.canPlayType){c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"');var d='video/mp4; codecs="avc1.42E01E';c.h264=a.canPlayType(d+'"')||a.canPlayType(d+', mp4a.40.2"'),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"')}}catch(e){}return c},r.audio=function(){var a=b.createElement("audio"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"'),c.mp3=a.canPlayType("audio/mpeg;"),c.wav=a.canPlayType('audio/wav; codecs="1"'),c.m4a=a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")}catch(d){}return c},r.localstorage=function(){try{return!!localStorage.getItem}catch(a){return!1}},r.sessionstorage=function(){try{return!!sessionStorage.getItem}catch(a){return!1}},r.webworkers=function(){return!!a.Worker},r.applicationcache=function(){return!!a.applicationCache},r.svg=function(){return!!b.createElementNS&&!!b.createElementNS(q.svg,"svg").createSVGRect},r.inlinesvg=function(){var a=b.createElement("div");a.innerHTML="<svg/>";return(a.firstChild&&a.firstChild.namespaceURI)==q.svg},r.smil=function(){return!!b.createElementNS&&/SVG/.test(n.call(b.createElementNS(q.svg,"animate")))},r.svgclippaths=function(){return!!b.createElementNS&&/SVG/.test(n.call(b.createElementNS(q.svg,"clipPath")))};for(var I in r)z(r,I)&&(x=I.toLowerCase(),e[x]=r[I](),u.push((e[x]?"":"no-")+x));e.input||H(),A(""),j=l=null,a.attachEvent&&function(){var a=b.createElement("div");a.innerHTML="<elem></elem>";return a.childNodes.length!==1}()&&function(a,b){function s(a){var b=-1;while(++b<g)a.createElement(f[b])}a.iepp=a.iepp||{};var d=a.iepp,e=d.html5elements||"abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",f=e.split("|"),g=f.length,h=new RegExp("(^|\\s)("+e+")","gi"),i=new RegExp("<(/*)("+e+")","gi"),j=/^\s*[\{\}]\s*$/,k=new RegExp("(^|[^\\n]*?\\s)("+e+")([^\\n]*)({[\\n\\w\\W]*?})","gi"),l=b.createDocumentFragment(),m=b.documentElement,n=m.firstChild,o=b.createElement("body"),p=b.createElement("style"),q=/print|all/,r;d.getCSS=function(a,b){if(a+""===c)return"";var e=-1,f=a.length,g,h=[];while(++e<f){g=a[e];if(g.disabled)continue;b=g.media||b,q.test(b)&&h.push(d.getCSS(g.imports,b),g.cssText),b="all"}return h.join("")},d.parseCSS=function(a){var b=[],c;while((c=k.exec(a))!=null)b.push(((j.exec(c[1])?"\n":c[1])+c[2]+c[3]).replace(h,"$1.iepp_$2")+c[4]);return b.join("\n")},d.writeHTML=function(){var a=-1;r=r||b.body;while(++a<g){var c=b.getElementsByTagName(f[a]),d=c.length,e=-1;while(++e<d)c[e].className.indexOf("iepp_")<0&&(c[e].className+=" iepp_"+f[a])}l.appendChild(r),m.appendChild(o),o.className=r.className,o.id=r.id,o.innerHTML=r.innerHTML.replace(i,"<$1font")},d._beforePrint=function(){p.styleSheet.cssText=d.parseCSS(d.getCSS(b.styleSheets,"all")),d.writeHTML()},d.restoreHTML=function(){o.innerHTML="",m.removeChild(o),m.appendChild(r)},d._afterPrint=function(){d.restoreHTML(),p.styleSheet.cssText=""},s(b),s(l);d.disablePP||(n.insertBefore(p,n.firstChild),p.media="print",p.className="iepp-printshim",a.attachEvent("onbeforeprint",d._beforePrint),a.attachEvent("onafterprint",d._afterPrint))}(a,b),e._version=d,e._prefixes=o,e._domPrefixes=p,e.hasEvent=w,e.testProp=function(a){return E([a])},e.testAllProps=F,e.testStyles=v,g.className=g.className.replace(/\bno-js\b/,"")+(f?" js "+u.join(" "):"");return e}(this,this.document),function(a,b,c){function k(a){return!a||a=="loaded"||a=="complete"}function j(){var a=1,b=-1;while(p.length- ++b)if(p[b].s&&!(a=p[b].r))break;a&&g()}function i(a){var c=b.createElement("script"),d;c.src=a.s,c.onreadystatechange=c.onload=function(){!d&&k(c.readyState)&&(d=1,j(),c.onload=c.onreadystatechange=null)},m(function(){d||(d=1,j())},H.errorTimeout),a.e?c.onload():n.parentNode.insertBefore(c,n)}function h(a){var c=b.createElement("link"),d;c.href=a.s,c.rel="stylesheet",c.type="text/css";if(!a.e&&(w||r)){var e=function(a){m(function(){if(!d)try{a.sheet.cssRules.length?(d=1,j()):e(a)}catch(b){b.code==1e3||b.message=="security"||b.message=="denied"?(d=1,m(function(){j()},0)):e(a)}},0)};e(c)}else c.onload=function(){d||(d=1,m(function(){j()},0))},a.e&&c.onload();m(function(){d||(d=1,j())},H.errorTimeout),!a.e&&n.parentNode.insertBefore(c,n)}function g(){var a=p.shift();q=1,a?a.t?m(function(){a.t=="c"?h(a):i(a)},0):(a(),j()):q=0}function f(a,c,d,e,f,h){function i(){!o&&k(l.readyState)&&(r.r=o=1,!q&&j(),l.onload=l.onreadystatechange=null,m(function(){u.removeChild(l)},0))}var l=b.createElement(a),o=0,r={t:d,s:c,e:h};l.src=l.data=c,!s&&(l.style.display="none"),l.width=l.height="0",a!="object"&&(l.type=d),l.onload=l.onreadystatechange=i,a=="img"?l.onerror=i:a=="script"&&(l.onerror=function(){r.e=r.r=1,g()}),p.splice(e,0,r),u.insertBefore(l,s?null:n),m(function(){o||(u.removeChild(l),r.r=r.e=o=1,j())},H.errorTimeout)}function e(a,b,c){var d=b=="c"?z:y;q=0,b=b||"j",C(a)?f(d,a,b,this.i++,l,c):(p.splice(this.i++,0,a),p.length==1&&g());return this}function d(){var a=H;a.loader={load:e,i:0};return a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=r&&!s,u=s?l:n.parentNode,v=a.opera&&o.call(a.opera)=="[object Opera]",w="webkitAppearance"in l.style,x=w&&"async"in b.createElement("script"),y=r?"object":v||x?"img":"script",z=w?"img":y,A=Array.isArray||function(a){return o.call(a)=="[object Array]"},B=function(a){return Object(a)===a},C=function(a){return typeof a=="string"},D=function(a){return o.call(a)=="[object Function]"},E=[],F={},G,H;H=function(a){function f(a){var b=a.split("!"),c=E.length,d=b.pop(),e=b.length,f={url:d,origUrl:d,prefixes:b},g,h;for(h=0;h<e;h++)g=F[b[h]],g&&(f=g(f));for(h=0;h<c;h++)f=E[h](f);return f}function e(a,b,e,g,h){var i=f(a),j=i.autoCallback;if(!i.bypass){b&&(b=D(b)?b:b[a]||b[g]||b[a.split("/").pop().split("?")[0]]);if(i.instead)return i.instead(a,b,e,g,h);e.load(i.url,i.forceCSS||!i.forceJS&&/css$/.test(i.url)?"c":c,i.noexec),(D(b)||D(j))&&e.load(function(){d(),b&&b(i.origUrl,h,g),j&&j(i.origUrl,h,g)})}}function b(a,b){function c(a){if(C(a))e(a,h,b,0,d);else if(B(a))for(i in a)a.hasOwnProperty(i)&&e(a[i],h,b,i,d)}var d=!!a.test,f=d?a.yep:a.nope,g=a.load||a.both,h=a.callback,i;c(f),c(g),a.complete&&b.load(a.complete)}var g,h,i=this.yepnope.loader;if(C(a))e(a,0,i,0);else if(A(a))for(g=0;g<a.length;g++)h=a[g],C(h)?e(h,0,i,0):A(h)?H(h):B(h)&&b(h,i);else B(a)&&b(a,i)},H.addPrefix=function(a,b){F[a]=b},H.addFilter=function(a){E.push(a)},H.errorTimeout=1e4,b.readyState==null&&b.addEventListener&&(b.readyState="loading",b.addEventListener("DOMContentLoaded",G=function(){b.removeEventListener("DOMContentLoaded",G,0),b.readyState="complete"},0)),a.yepnope=d()}(this,this.document),Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0))};
+ scaffold/templates/boilerplate-wrapper.hamlet.cg view
@@ -0,0 +1,42 @@+\<!doctype html>+\<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->+\<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->+\<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->+\<!--[if gt IE 8]><!-->+<html class="no-js" lang="en"> <!--<![endif]-->+ <head>+ <meta charset="UTF-8">++ <title>#{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 id="container">+ <header>+ <div id="main" role="main">+ ^{pageBody pc}+ <footer>++ \<!-- Change UA-XXXXX-X to be your site's ID -->+ <script>+ window._gaq = [['_setAccount','UAXXXXXXXX1'],['_trackPageview'],['_trackPageLoadTime']];+ YepNope.load({+ \ load: ('https:' == location.protocol ? '//ssl' : '//www') + '.google-analytics.com/ga.js'+ });+ \<!-- Prompt IE 6 users to install Chrome Frame. Remove this if you want to support IE 6. chromium.org/developers/how-tos/chrome-frame-getting-started -->+ \<!--[if lt IE 7 ]>+ <script src="//ajax.googleapis.com/ajax/libs/chrome-frame/1.0.3/CFInstall.min.js">+ <script>+ window.attachEvent('onload',function(){CFInstall.check({mode:'overlay'})})+ \<![endif]-->
− scaffold/templates/default-layout.lucius.cg
@@ -1,3 +0,0 @@-body {- font-family: sans-serif;-}
scaffold/templates/homepage.hamlet.cg view
@@ -1,2 +1,38 @@ <h1>_{MsgHello}-<h2 ##{h2id}>You do not have Javascript enabled.++<ol>+ <li>Now that you have a working project you should use the #+ <a href="http://www.yesodweb.com/book/">Yesod book</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/Root.hs</em>.++ <li> The #{handlerName} handler is set to generate your site's home screen in Routes file #+ <em>config/routes</em>++ <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.+ + <li #form>+ This is an example trivial Form. Read the #+ <a href="http://www.yesodweb.com/book/forms">Forms chapter</a> #+ on the yesod book to learn more about them.+ $maybe (info,con) <- submission+ <div .message>+ 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}+ <input type="submit" value="Send it!">++ <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>cabal install --enable-tests && cabal test</pre>
scaffold/templates/homepage.julius.cg view
@@ -1,1 +1,1 @@-document.getElementById("#{h2id}").innerHTML = "<i>Added from JavaScript.</i>";+document.getElementById("#{aDomId}").innerHTML = "This text was added by the Javascript part of the homepage widget.";
scaffold/templates/homepage.lucius.cg view
@@ -1,6 +1,6 @@ h1 { text-align: center }-h2##{h2id} {+h2##{aDomId} { color: #990 }
+ scaffold/tests/main.hs.cg view
@@ -0,0 +1,20 @@+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE NoMonomorphismRestriction #-}+{-# OPTIONS_GHC -fno-warn-orphans #-}++module Main where++import Import+import Settings+import Yesod.Logger (defaultDevelopmentLogger)+import Yesod.Default.Config+import Yesod.Test+import Application (makeFoundation)++main :: IO a+main = do+ conf <- loadConfig $ (configSettings Testing) { csParseExtra = parseExtra }+ logger <- defaultDevelopmentLogger+ foundation <- makeFoundation conf logger+ app <- toWaiAppPlain foundation+ runTests app (connPool foundation) homeSpecs
− scaffold/tiny/Application.hs.cg
@@ -1,57 +0,0 @@-{-# OPTIONS_GHC -fno-warn-orphans #-}-module Application- ( getApplication- , getApplicationDev- ) where--import Import-import Settings (parseExtra)-import Settings.StaticFiles (staticSite)-import Yesod.Default.Config-import Yesod.Default.Main (defaultDevelApp)-import Yesod.Default.Handlers (getFaviconR, getRobotsR)-#if DEVELOPMENT-import Yesod.Logger (Logger, logBS)-import Network.Wai.Middleware.RequestLogger (logCallbackDev)-#else-import Yesod.Logger (Logger, logBS, toProduction)-import Network.Wai.Middleware.RequestLogger (logCallback)-#endif-import Network.Wai (Application)---- Import all relevant handler modules here.-import Handler.Root---- This line actually creates our YesodSite 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 "~sitearg~" resources~sitearg~---- This function allocates resources (such as a database connection pool),--- performs initialization and creates a WAI application. This is also the--- place to put your migrate statements to have automatic database--- migrations handled by Yesod.-getApplication :: AppConfig DefaultEnv Extra -> Logger -> IO Application-getApplication conf logger = do- s <- staticSite- let foundation = ~sitearg~ conf setLogger s- app <- toWaiAppPlain foundation- return $ logWare app- where-#ifdef DEVELOPMENT- logWare = logCallbackDev (logBS setLogger)- setLogger = logger-#else- setLogger = toProduction logger -- by default the logger is set for development- logWare = logCallback (logBS setLogger)-#endif---- for yesod devel-getApplicationDev :: IO (Int, Application)-getApplicationDev =- defaultDevelApp loader getApplication- where- loader = loadConfig (configSettings Development)- { csParseExtra = parseExtra- }-
− scaffold/tiny/Foundation.hs.cg
@@ -1,99 +0,0 @@-module Foundation- ( ~sitearg~ (..)- , Route (..)- , ~sitearg~Message (..)- , resources~sitearg~- , Handler- , Widget- , module Yesod.Core- , module Settings- , liftIO- ) where--import Prelude-import Yesod.Core hiding (Route)-import Yesod.Default.Config-import Yesod.Default.Util (addStaticContentExternal)-import Yesod.Static-import Settings.StaticFiles-import Yesod.Logger (Logger, logMsg, formatLogText)-import qualified Settings-import Settings (Extra (..), widgetFile)-import Control.Monad.IO.Class (liftIO)-import Web.ClientSession (getKey)-import Text.Hamlet (hamletFile)---- | The site argument 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 ~sitearg~ = ~sitearg~- { settings :: AppConfig DefaultEnv Extra- , getLogger :: Logger- , getStatic :: Static -- ^ Settings for static file serving.- }---- Set up i18n messages. See the message folder.-mkMessage "~sitearg~" "messages" "en"---- This is where we define all of the routes in our application. For a full--- explanation of the syntax, please see:--- http://docs.yesodweb.com/book/web-routes-quasi/------ This function does three things:------ * Creates the route datatype ~sitearg~Route. Every valid URL in your--- application can be represented as a value of this type.--- * Creates the associated type:--- type instance Route ~sitearg~ = ~sitearg~Route--- * Creates the value resources~sitearg~ which contains information on the--- resources declared below. This is used in Handler.hs by the call to--- mkYesodDispatch------ What this function does *not* do is create a YesodSite instance for--- ~sitearg~. Creating that instance requires all of the handler functions--- for our application to be in scope. However, the handler functions--- usually require access to the ~sitearg~Route datatype. Therefore, we--- split these actions into two functions and place them in separate files.-mkYesodData "~sitearg~" $(parseRoutesFile "config/routes")---- Please see the documentation for the Yesod typeclass. There are a number--- of settings which can be configured by overriding methods here.-instance Yesod ~sitearg~ where- approot = ApprootMaster $ appRoot . settings-- -- Place the session key file in the config folder- encryptKey _ = fmap Just $ getKey "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- $(widgetFile "normalize")- $(widgetFile "default-layout")- hamletToRepHtml $(hamletFile "templates/default-layout-wrapper.hamlet")-- -- This is done to provide an optimization for serving static files from- -- a separate domain. Please see the staticroot setting in Settings.hs- urlRenderOverride y (StaticR s) =- Just $ uncurry (joinPath y (Settings.staticRoot $ settings y)) $ renderRoute s- urlRenderOverride _ _ = Nothing-- messageLogger y loc level msg =- formatLogText (getLogger y) loc level msg >>= logMsg (getLogger y)-- -- 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 = addStaticContentExternal (const $ Left ()) base64md5 Settings.staticDir (StaticR . flip StaticRoute [])-- -- Place Javascript at bottom of the body tag so the rest of the page loads first- jsLoader _ = BottomOfBody
− scaffold/tiny/Import.hs.cg
@@ -1,18 +0,0 @@-module Import- ( module Prelude- , module Foundation- , (<>)- , Text- , module Data.Monoid- , module Control.Applicative- ) where--import Prelude hiding (writeFile, readFile)-import Foundation-import Data.Monoid (Monoid (mappend, mempty, mconcat))-import Control.Applicative ((<$>), (<*>), pure)-import Data.Text (Text)--infixr 5 <>-(<>) :: Monoid m => m -> m -> m-(<>) = mappend
− scaffold/tiny/Settings.hs.cg
@@ -1,60 +0,0 @@--- | 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 ~project~.hs file.-module Settings- ( widgetFile- , staticRoot- , staticDir- , Extra (..)- , parseExtra- ) where--import Prelude-import Text.Shakespeare.Text (st)-import Language.Haskell.TH.Syntax-import Yesod.Default.Config-import qualified Yesod.Default.Util-import Data.Text (Text)-import Data.Yaml-import Control.Applicative---- | The location of static files on your system. This is a file system--- path. The default value works properly with your scaffolded site.-staticDir :: FilePath-staticDir = "static"---- | The base URL for your static files. As you can see by the default--- value, this can simply be "static" appended to your application root.--- A powerful optimization can be serving static files from a separate--- domain name. This allows you to use a web server optimized for static--- files, more easily set expires and cache values, and avoid possibly--- costly transference of cookies on static files. For more information,--- please see:--- http://code.google.com/speed/page-speed/docs/request.html#ServeFromCookielessDomain------ If you change the resource pattern for StaticR in ~project~.hs, you will--- have to make a corresponding change here.------ To see how this value is used, see urlRenderOverride in ~project~.hs-staticRoot :: AppConfig DefaultEnv a -> Text-staticRoot conf = [~qq~st|#{appRoot conf}/static|]--widgetFile :: String -> Q Exp-#if DEVELOPMENT-widgetFile = Yesod.Default.Util.widgetFileReload-#else-widgetFile = Yesod.Default.Util.widgetFileNoReload-#endif--data Extra = Extra- { extraCopyright :: Text- , extraAnalytics :: Maybe Text -- ^ Google Analytics- }--parseExtra :: DefaultEnv -> Object -> Parser Extra-parseExtra _ o = Extra- <$> o .: "copyright"- <*> o .:? "analytics"-
− scaffold/tiny/config/routes.cg
@@ -1,7 +0,0 @@-/static StaticR Static getStatic--/favicon.ico FaviconR GET-/robots.txt RobotsR GET--/ RootR GET-
− scaffold/tiny/project.cabal.cg
@@ -1,83 +0,0 @@-name: ~project~-version: 0.0.0-license: BSD3-license-file: LICENSE-author: ~name~-maintainer: ~name~-synopsis: The greatest Yesod web application ever.-description: I'm sure you can say something clever here if you try.-category: Web-stability: Experimental-cabal-version: >= 1.6-build-type: Simple-homepage: http://~project~.yesodweb.com/--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- if flag(library-only)- Buildable: True- else- Buildable: False- exposed-modules: Application- other-modules: Foundation- Import- Settings- Settings.StaticFiles- Handler.Root-- ghc-options: -Wall -threaded -O0- cpp-options: -DDEVELOPMENT-- extensions: TemplateHaskell- QuasiQuotes- OverloadedStrings- NoImplicitPrelude- CPP- OverloadedStrings- MultiParamTypeClasses- TypeFamilies--executable ~project~- if flag(library-only)- Buildable: False-- if flag(dev)- cpp-options: -DDEVELOPMENT- ghc-options: -Wall -threaded -O0- else- ghc-options: -Wall -threaded -O2-- main-is: main.hs-- extensions: TemplateHaskell- QuasiQuotes- OverloadedStrings- NoImplicitPrelude- CPP- OverloadedStrings- MultiParamTypeClasses- TypeFamilies-- build-depends: base >= 4 && < 5- , yesod-core >= 0.10 && < 0.11- , yesod-static >= 0.10 && < 0.11- , yesod-default >= 0.6 && < 0.7- , clientsession >= 0.7.3 && < 0.8- , bytestring >= 0.9 && < 0.10- , text >= 0.11 && < 0.12- , template-haskell- , hamlet >= 0.10 && < 0.11- , shakespeare-text >= 0.11 && < 0.12- , wai >= 1.1 && < 1.2- , wai-extra >= 1.1 && < 1.2- , transformers >= 0.2 && < 0.3- , monad-control >= 0.3 && < 0.4- , yaml >= 0.5 && < 0.6-
yesod.cabal view
@@ -1,6 +1,6 @@ name: yesod-version: 0.10.2-license: BSD3+version: 1.0.0+license: MIT license-file: LICENSE author: Michael Snoyman <michael@snoyman.com> maintainer: Michael Snoyman <michael@snoyman.com>@@ -19,46 +19,45 @@ extra-source-files: input/*.cg- scaffold/templates/default-layout.lucius.cg- scaffold/templates/homepage.lucius.cg scaffold/Model.hs.cg- scaffold/Import.hs.cg- scaffold/Foundation.hs.cg scaffold/LICENSE.cg+ scaffold/project.cabal.cg scaffold/mongoDBConnPool.cg- scaffold/tiny/Import.hs.cg- scaffold/tiny/Foundation.hs.cg- scaffold/tiny/project.cabal.cg- scaffold/tiny/Application.hs.cg- scaffold/tiny/config/routes.cg- scaffold/tiny/Settings.hs.cg- scaffold/templates/normalize.lucius.cg+ scaffold/main.hs.cg scaffold/postgresqlConnPool.cg+ scaffold/Foundation.hs.cg scaffold/sqliteConnPool.cg+ scaffold/cabal_test_suite.cg+ scaffold/Import.hs.cg scaffold/.ghci.cg- scaffold/project.cabal.cg+ scaffold/tests/main.hs.cg+ scaffold/Settings.hs.cg+ scaffold/Settings/StaticFiles.hs.cg scaffold/Application.hs.cg- scaffold/templates/homepage.julius.cg+ scaffold/deploy/Procfile.cg scaffold/templates/homepage.hamlet.cg+ scaffold/static/css/bootstrap.css.cg scaffold/templates/default-layout.hamlet.cg+ scaffold/templates/homepage.julius.cg scaffold/templates/default-layout-wrapper.hamlet.cg scaffold/deploy/Procfile.cg scaffold/main.hs.cg scaffold/devel.hs.cg- scaffold/Handler/Root.hs.cg+ scaffold/Handler/Home.hs.cg+ scaffold/templates/normalize.lucius.cg+ scaffold/templates/boilerplate-wrapper.hamlet.cg+ scaffold/templates/homepage.lucius.cg+ scaffold/messages/en.msg.cg scaffold/config/models.cg+ scaffold/config/mysql.yml.cg scaffold/config/sqlite.yml.cg scaffold/config/settings.yml.cg scaffold/config/favicon.ico.cg scaffold/config/postgresql.yml.cg- scaffold/config/mysql.yml.cg- scaffold/config/mongoDB.yml.cg scaffold/config/routes.cg scaffold/config/robots.txt.cg- scaffold/Settings.hs.cg- scaffold/Settings/StaticFiles.hs.cg- scaffold/messages/en.msg.cg- scaffold/static/js/modernizr.js.cg+ scaffold/config/mongoDB.yml.cg+ scaffold/devel.hs.cg flag ghc7@@ -73,20 +72,20 @@ cpp-options: -DGHC7 else build-depends: base >= 4 && < 4.3- build-depends: yesod-core >= 0.10.1 && < 0.11- , yesod-auth >= 0.8.1 && < 0.9- , yesod-json >= 0.3.1 && < 0.4- , yesod-persistent >= 0.3.1 && < 0.4- , yesod-form >= 0.4.1 && < 0.5+ build-depends: yesod-core >= 1.0 && < 1.1+ , yesod-auth >= 1.0 && < 1.1+ , yesod-json >= 1.0 && < 1.1+ , yesod-persistent >= 1.0 && < 1.1+ , yesod-form >= 1.0 && < 1.1 , monad-control >= 0.3 && < 0.4- , transformers >= 0.2.2 && < 0.3- , wai >= 1.1 && < 1.2- , wai-extra >= 1.1 && < 1.3+ , transformers >= 0.2.2 && < 0.4+ , wai >= 1.2 && < 1.3+ , wai-extra >= 1.2 && < 1.3 , wai-logger >= 0.1.2- , hamlet >= 0.10 && < 0.11- , shakespeare-js >= 0.11 && < 0.12- , shakespeare-css >= 0.10 && < 0.11- , warp >= 1.1 && < 1.2+ , hamlet >= 1.0 && < 1.1+ , shakespeare-js >= 1.0 && < 1.1+ , shakespeare-css >= 1.0 && < 1.1+ , warp >= 1.2 && < 1.3 , blaze-html >= 0.4.1.3 && < 0.5 exposed-modules: Yesod ghc-options: -Wall@@ -101,7 +100,7 @@ cpp-options: -DWINDOWS build-depends: parsec >= 2.1 && < 4 , text >= 0.11 && < 0.12- , shakespeare-text >= 0.11 && < 0.12+ , shakespeare-text >= 1.0 && < 1.1 , bytestring >= 0.9.1.4 && < 0.10 , time >= 1.1.4 , template-haskell