From feda21a6e32107addcfe8a71329843ede480ed1a Mon Sep 17 00:00:00 2001 From: snipe Date: Wed, 13 Nov 2013 01:59:39 -0500 Subject: [PATCH] Initial laravel import --- .gitattributes | 1 + .gitignore | 4 + CONTRIBUTING.md | 3 + app/commands/.gitkeep | 0 app/commands/AppCommand.php | 299 + app/config/app.php | 188 + app/config/auth.php | 63 + app/config/cache.php | 89 + app/config/compile.php | 18 + app/config/database.php | 124 + app/config/mail.php | 124 + app/config/packages/.gitkeep | 0 .../packages/cartalyst/sentry/config.php | 178 + app/config/permissions.php | 19 + app/config/queue.php | 60 + app/config/session.php | 125 + app/config/testing/cache.php | 20 + app/config/testing/session.php | 21 + app/config/view.php | 31 + app/config/workbench.php | 31 + app/controllers/.gitkeep | 0 app/controllers/AdminController.php | 88 + app/controllers/AuthController.php | 344 + app/controllers/AuthorizedController.php | 26 + app/controllers/BaseController.php | 39 + app/controllers/BlogController.php | 110 + app/controllers/ContactUsController.php | 41 + app/controllers/HomeController.php | 23 + .../account/ChangeEmailController.php | 71 + .../account/ChangePasswordController.php | 71 + .../account/DashboardController.php | 19 + app/controllers/account/ProfileController.php | 66 + app/controllers/admin/BlogsController.php | 177 + app/controllers/admin/DashboardController.php | 19 + app/controllers/admin/GroupsController.php | 230 + app/controllers/admin/UsersController.php | 391 ++ app/database/migrations/.gitkeep | 0 .../2013_01_19_011903_create_posts_table.php | 40 + ...013_01_19_044505_create_comments_table.php | 37 + .../2013_03_23_193214_update_users_table.php | 38 + app/database/production.sqlite | 0 app/database/seeds/.gitkeep | 0 app/database/seeds/CommentsSeeder.php | 71 + app/database/seeds/DatabaseSeeder.php | 18 + app/database/seeds/PostsSeeder.php | 50 + app/database/seeds/comment1-content.txt | 1 + app/database/seeds/comment2-content.txt | 1 + app/database/seeds/comment3-content.txt | 1 + app/database/seeds/post-content.txt | 19 + app/filters.php | 118 + app/lang/en/admin/blogs/message.php | 22 + app/lang/en/admin/blogs/table.php | 9 + app/lang/en/admin/groups/message.php | 21 + app/lang/en/admin/groups/table.php | 10 + app/lang/en/admin/users/message.php | 28 + app/lang/en/admin/users/table.php | 12 + app/lang/en/auth/message.php | 36 + app/lang/en/button.php | 9 + app/lang/en/general.php | 8 + app/lang/en/pagination.php | 20 + app/lang/en/reminders.php | 22 + app/lang/en/table.php | 7 + app/lang/en/validation.php | 93 + app/models/Authentication.php | 15 + app/models/Comment.php | 35 + app/models/Group.php | 7 + app/models/Post.php | 73 + app/models/User.php | 39 + app/routes.php | 144 + app/start/artisan.php | 14 + app/start/global.php | 98 + app/start/local.php | 3 + app/storage/.gitignore | 1 + app/storage/cache/.gitignore | 2 + app/storage/logs/.gitignore | 2 + app/storage/meta/.gitignore | 2 + app/storage/sessions/.gitignore | 2 + app/storage/views/.gitignore | 2 + app/tests/ExampleTest.php | 17 + app/tests/TestCase.php | 19 + app/views/backend/blogs/create.blade.php | 109 + app/views/backend/blogs/edit.blade.php | 109 + app/views/backend/blogs/index.blade.php | 48 + app/views/backend/dashboard.blade.php | 1 + app/views/backend/groups/create.blade.php | 93 + app/views/backend/groups/edit.blade.php | 93 + app/views/backend/groups/index.blade.php | 56 + app/views/backend/layouts/default.blade.php | 95 + app/views/backend/users/create.blade.php | 166 + app/views/backend/users/edit.blade.php | 166 + app/views/backend/users/index.blade.php | 66 + app/views/emails/auth/reminder.blade.php | 13 + app/views/emails/forgot-password.blade.php | 13 + app/views/emails/layouts/default.blade.php | 10 + app/views/emails/register-activate.blade.php | 13 + app/views/error/403.blade.php | 121 + app/views/error/404.blade.php | 125 + app/views/error/500.blade.php | 125 + app/views/error/503.blade.php | 111 + app/views/frontend/about-us.blade.php | 14 + .../frontend/account/change-email.blade.php | 59 + .../account/change-password.blade.php | 119 + app/views/frontend/account/profile.blade.php | 77 + .../auth/forgot-password-confirm.blade.php | 45 + .../frontend/auth/forgot-password.blade.php | 36 + app/views/frontend/auth/signin.blade.php | 60 + app/views/frontend/auth/signup.blade.php | 85 + app/views/frontend/blog/index.blade.php | 46 + app/views/frontend/blog/view-post.blade.php | 91 + app/views/frontend/contact-us.blade.php | 40 + app/views/frontend/layouts/account.blade.php | 18 + app/views/frontend/layouts/default.blade.php | 112 + app/views/frontend/notifications.blade.php | 39 + app/views/hello.php | 52 + app/views/paginator/simple.php | 15 + app/views/paginator/slider.php | 21 + artisan | 74 + bootstrap/autoload.php | 75 + bootstrap/paths.php | 57 + bootstrap/start.php | 74 + composer.json | 37 + composer.lock | 1868 +++++ phpunit.xml | 18 + public/.htaccess | 8 + public/assets/css/bootstrap-responsive.css | 1109 +++ .../assets/css/bootstrap-responsive.min.css | 9 + public/assets/css/bootstrap.css | 6167 +++++++++++++++++ public/assets/css/bootstrap.min.css | 9 + .../ico/apple-touch-icon-114-precomposed.png | Bin 0 -> 11392 bytes .../ico/apple-touch-icon-144-precomposed.png | Bin 0 -> 16780 bytes .../ico/apple-touch-icon-57-precomposed.png | Bin 0 -> 4026 bytes .../ico/apple-touch-icon-72-precomposed.png | Bin 0 -> 5681 bytes public/assets/ico/favicon.png | Bin 0 -> 2711 bytes .../assets/img/glyphicons-halflings-white.png | Bin 0 -> 8777 bytes public/assets/img/glyphicons-halflings.png | Bin 0 -> 12799 bytes public/assets/img/social/fb_login.png | Bin 0 -> 8156 bytes public/assets/img/social/fb_signup.png | Bin 0 -> 9277 bytes public/assets/js/bootstrap/bootstrap.js | 2280 ++++++ public/assets/js/bootstrap/bootstrap.min.js | 6 + public/assets/js/jquery.1.10.2.min.js | 6 + public/favicon.ico | 0 public/index.php | 62 + public/packages/.gitkeep | 0 public/robots.txt | 2 + server.php | 19 + 145 files changed, 18621 insertions(+) create mode 100755 .gitattributes create mode 100755 .gitignore create mode 100755 CONTRIBUTING.md create mode 100755 app/commands/.gitkeep create mode 100755 app/commands/AppCommand.php create mode 100755 app/config/app.php create mode 100755 app/config/auth.php create mode 100755 app/config/cache.php create mode 100755 app/config/compile.php create mode 100755 app/config/database.php create mode 100755 app/config/mail.php create mode 100755 app/config/packages/.gitkeep create mode 100755 app/config/packages/cartalyst/sentry/config.php create mode 100755 app/config/permissions.php create mode 100755 app/config/queue.php create mode 100755 app/config/session.php create mode 100755 app/config/testing/cache.php create mode 100755 app/config/testing/session.php create mode 100755 app/config/view.php create mode 100755 app/config/workbench.php create mode 100755 app/controllers/.gitkeep create mode 100755 app/controllers/AdminController.php create mode 100755 app/controllers/AuthController.php create mode 100755 app/controllers/AuthorizedController.php create mode 100755 app/controllers/BaseController.php create mode 100755 app/controllers/BlogController.php create mode 100755 app/controllers/ContactUsController.php create mode 100755 app/controllers/HomeController.php create mode 100755 app/controllers/account/ChangeEmailController.php create mode 100755 app/controllers/account/ChangePasswordController.php create mode 100755 app/controllers/account/DashboardController.php create mode 100755 app/controllers/account/ProfileController.php create mode 100755 app/controllers/admin/BlogsController.php create mode 100755 app/controllers/admin/DashboardController.php create mode 100755 app/controllers/admin/GroupsController.php create mode 100755 app/controllers/admin/UsersController.php create mode 100755 app/database/migrations/.gitkeep create mode 100755 app/database/migrations/2013_01_19_011903_create_posts_table.php create mode 100755 app/database/migrations/2013_01_19_044505_create_comments_table.php create mode 100755 app/database/migrations/2013_03_23_193214_update_users_table.php create mode 100755 app/database/production.sqlite create mode 100755 app/database/seeds/.gitkeep create mode 100755 app/database/seeds/CommentsSeeder.php create mode 100755 app/database/seeds/DatabaseSeeder.php create mode 100755 app/database/seeds/PostsSeeder.php create mode 100755 app/database/seeds/comment1-content.txt create mode 100755 app/database/seeds/comment2-content.txt create mode 100755 app/database/seeds/comment3-content.txt create mode 100755 app/database/seeds/post-content.txt create mode 100755 app/filters.php create mode 100755 app/lang/en/admin/blogs/message.php create mode 100755 app/lang/en/admin/blogs/table.php create mode 100755 app/lang/en/admin/groups/message.php create mode 100755 app/lang/en/admin/groups/table.php create mode 100755 app/lang/en/admin/users/message.php create mode 100755 app/lang/en/admin/users/table.php create mode 100755 app/lang/en/auth/message.php create mode 100755 app/lang/en/button.php create mode 100755 app/lang/en/general.php create mode 100755 app/lang/en/pagination.php create mode 100755 app/lang/en/reminders.php create mode 100755 app/lang/en/table.php create mode 100755 app/lang/en/validation.php create mode 100755 app/models/Authentication.php create mode 100755 app/models/Comment.php create mode 100755 app/models/Group.php create mode 100755 app/models/Post.php create mode 100755 app/models/User.php create mode 100755 app/routes.php create mode 100755 app/start/artisan.php create mode 100755 app/start/global.php create mode 100755 app/start/local.php create mode 100755 app/storage/.gitignore create mode 100755 app/storage/cache/.gitignore create mode 100755 app/storage/logs/.gitignore create mode 100755 app/storage/meta/.gitignore create mode 100755 app/storage/sessions/.gitignore create mode 100755 app/storage/views/.gitignore create mode 100755 app/tests/ExampleTest.php create mode 100755 app/tests/TestCase.php create mode 100755 app/views/backend/blogs/create.blade.php create mode 100755 app/views/backend/blogs/edit.blade.php create mode 100755 app/views/backend/blogs/index.blade.php create mode 100755 app/views/backend/dashboard.blade.php create mode 100755 app/views/backend/groups/create.blade.php create mode 100755 app/views/backend/groups/edit.blade.php create mode 100755 app/views/backend/groups/index.blade.php create mode 100755 app/views/backend/layouts/default.blade.php create mode 100755 app/views/backend/users/create.blade.php create mode 100755 app/views/backend/users/edit.blade.php create mode 100755 app/views/backend/users/index.blade.php create mode 100755 app/views/emails/auth/reminder.blade.php create mode 100755 app/views/emails/forgot-password.blade.php create mode 100755 app/views/emails/layouts/default.blade.php create mode 100755 app/views/emails/register-activate.blade.php create mode 100755 app/views/error/403.blade.php create mode 100755 app/views/error/404.blade.php create mode 100755 app/views/error/500.blade.php create mode 100755 app/views/error/503.blade.php create mode 100755 app/views/frontend/about-us.blade.php create mode 100755 app/views/frontend/account/change-email.blade.php create mode 100755 app/views/frontend/account/change-password.blade.php create mode 100755 app/views/frontend/account/profile.blade.php create mode 100755 app/views/frontend/auth/forgot-password-confirm.blade.php create mode 100755 app/views/frontend/auth/forgot-password.blade.php create mode 100755 app/views/frontend/auth/signin.blade.php create mode 100755 app/views/frontend/auth/signup.blade.php create mode 100755 app/views/frontend/blog/index.blade.php create mode 100755 app/views/frontend/blog/view-post.blade.php create mode 100755 app/views/frontend/contact-us.blade.php create mode 100755 app/views/frontend/layouts/account.blade.php create mode 100755 app/views/frontend/layouts/default.blade.php create mode 100755 app/views/frontend/notifications.blade.php create mode 100755 app/views/hello.php create mode 100755 app/views/paginator/simple.php create mode 100755 app/views/paginator/slider.php create mode 100755 artisan create mode 100755 bootstrap/autoload.php create mode 100755 bootstrap/paths.php create mode 100755 bootstrap/start.php create mode 100755 composer.json create mode 100755 composer.lock create mode 100755 phpunit.xml create mode 100755 public/.htaccess create mode 100755 public/assets/css/bootstrap-responsive.css create mode 100755 public/assets/css/bootstrap-responsive.min.css create mode 100755 public/assets/css/bootstrap.css create mode 100755 public/assets/css/bootstrap.min.css create mode 100755 public/assets/ico/apple-touch-icon-114-precomposed.png create mode 100755 public/assets/ico/apple-touch-icon-144-precomposed.png create mode 100755 public/assets/ico/apple-touch-icon-57-precomposed.png create mode 100755 public/assets/ico/apple-touch-icon-72-precomposed.png create mode 100755 public/assets/ico/favicon.png create mode 100755 public/assets/img/glyphicons-halflings-white.png create mode 100755 public/assets/img/glyphicons-halflings.png create mode 100755 public/assets/img/social/fb_login.png create mode 100755 public/assets/img/social/fb_signup.png create mode 100755 public/assets/js/bootstrap/bootstrap.js create mode 100755 public/assets/js/bootstrap/bootstrap.min.js create mode 100755 public/assets/js/jquery.1.10.2.min.js create mode 100755 public/favicon.ico create mode 100755 public/index.php create mode 100755 public/packages/.gitkeep create mode 100755 public/robots.txt create mode 100755 server.php diff --git a/.gitattributes b/.gitattributes new file mode 100755 index 0000000000..2125666142 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +* text=auto \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100755 index 0000000000..032ef7ca54 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +/bootstrap/compiled.php +/vendor +composer.phar +.DS_Store diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100755 index 0000000000..015febc403 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,3 @@ +# Contribution Guidelines + +Please submit all issues and pull requests to the [laravel/framework](http://github.com/laravel/framework) repository! \ No newline at end of file diff --git a/app/commands/.gitkeep b/app/commands/.gitkeep new file mode 100755 index 0000000000..e69de29bb2 diff --git a/app/commands/AppCommand.php b/app/commands/AppCommand.php new file mode 100755 index 0000000000..fe799426e1 --- /dev/null +++ b/app/commands/AppCommand.php @@ -0,0 +1,299 @@ + null, + 'last_name' => null, + 'email' => null, + 'password' => null + ); + + /** + * Create a new command instance. + * + * @return void + */ + public function __construct() + { + parent::__construct(); + } + + /** + * Execute the console command. + * + * @return void + */ + public function fire() + { + $this->comment('====================================='); + $this->comment(''); + $this->info(' Step: 1'); + $this->comment(''); + $this->info(' Please follow the following'); + $this->info(' instructions to create your'); + $this->info(' default user.'); + $this->comment(''); + $this->comment('-------------------------------------'); + $this->comment(''); + + + // Let's ask the user some questions, shall we? + $this->askUserFirstName(); + $this->askUserLastName(); + $this->askUserEmail(); + $this->askUserPassword(); + + + $this->comment(''); + $this->comment(''); + $this->comment('====================================='); + $this->comment(''); + $this->info(' Step: 2'); + $this->comment(''); + $this->info(' Preparing your Application'); + $this->comment(''); + $this->comment('-------------------------------------'); + $this->comment(''); + + // Generate the Application Encryption key + $this->call('key:generate'); + + // Create the migrations table + $this->call('migrate:install'); + + // Run the Sentry Migrations + $this->call('migrate', array('--package' => 'cartalyst/sentry')); + + // Run the Migrations + $this->call('migrate'); + + // Create the default user and default groups. + $this->sentryRunner(); + + // Seed the tables with dummy data + $this->call('db:seed'); + } + + /** + * Asks the user for the first name. + * + * @return void + * @todo Use the Laravel Validator + */ + protected function askUserFirstName() + { + do + { + // Ask the user to input the first name + $first_name = $this->ask('Please enter your first name: '); + + // Check if the first name is valid + if ($first_name == '') + { + // Return an error message + $this->error('Your first name is invalid. Please try again.'); + } + + // Store the user first name + $this->userData['first_name'] = $first_name; + } + while( ! $first_name); + } + + /** + * Asks the user for the last name. + * + * @return void + * @todo Use the Laravel Validator + */ + protected function askUserLastName() + { + do + { + // Ask the user to input the last name + $last_name = $this->ask('Please enter your last name: '); + + // Check if the last name is valid. + if ($last_name == '') + { + // Return an error message + $this->error('Your last name is invalid. Please try again.'); + } + + // Store the user last name + $this->userData['last_name'] = $last_name; + } + while( ! $last_name); + } + + /** + * Asks the user for the user email address. + * + * @return void + * @todo Use the Laravel Validator + */ + protected function askUserEmail() + { + do + { + // Ask the user to input the email address + $email = $this->ask('Please enter your user email: '); + + // Check if email is valid + if ($email == '') + { + // Return an error message + $this->error('Email is invalid. Please try again.'); + } + + // Store the email address + $this->userData['email'] = $email; + } + while ( ! $email); + } + + /** + * Asks the user for the user password. + * + * @return void + * @todo Use the Laravel Validator + */ + protected function askUserPassword() + { + do + { + // Ask the user to input the user password + $password = $this->ask('Please enter your user password: '); + + // Check if email is valid + if ($password == '') + { + // Return an error message + $this->error('Password is invalid. Please try again.'); + } + + // Store the password + $this->userData['password'] = $password; + } + while( ! $password); + } + + /** + * Runs all the necessary Sentry commands. + * + * @return void + */ + protected function sentryRunner() + { + // Create the default groups + $this->sentryCreateDefaultGroups(); + + // Create the user + $this->sentryCreateUser(); + + // Create dummy user + $this->sentryCreateDummyUser(); + } + + /** + * Creates the default groups. + * + * @return void + */ + protected function sentryCreateDefaultGroups() + { + try + { + // Create the admin group + $group = Sentry::getGroupProvider()->create(array( + 'name' => 'Admin', + 'permissions' => array( + 'admin' => 1, + 'users' => 1 + ) + )); + + // Show the success message. + $this->comment(''); + $this->info('Admin group created successfully.'); + } + catch (Cartalyst\Sentry\Groups\GroupExistsException $e) + { + $this->error('Group already exists.'); + } + } + + /** + * Create the user and associates the admin group to that user. + * + * @return void + */ + protected function sentryCreateUser() + { + // Prepare the user data array. + $data = array_merge($this->userData, array( + 'activated' => 1, + 'permissions' => array( + 'admin' => 1, + 'user' => 1, + ), + )); + + // Create the user + $user = Sentry::getUserProvider()->create($data); + + // Associate the Admin group to this user + $group = Sentry::getGroupProvider()->findById(1); + $user->addGroup($group); + + // Show the success message + $this->comment(''); + $this->info('Your user was created successfully.'); + $this->comment(''); + } + + /** + * Create a dummy user. + * + * @return void + */ + protected function sentryCreateDummyUser() + { + // Prepare the user data array. + $data = array( + 'first_name' => 'John', + 'last_name' => 'Doe', + 'email' => 'john.doe@example.com', + 'password' => 'johndoe', + 'activated' => 1, + ); + + // Create the user + Sentry::getUserProvider()->create($data); + } + +} diff --git a/app/config/app.php b/app/config/app.php new file mode 100755 index 0000000000..17c04bec5c --- /dev/null +++ b/app/config/app.php @@ -0,0 +1,188 @@ + true, + + /* + |-------------------------------------------------------------------------- + | Application URL + |-------------------------------------------------------------------------- + | + | This URL is used by the console to properly generate URLs when using + | the Artisan command line tool. You should set this to the root of + | your application so that it is used when running Artisan tasks. + | + */ + + 'url' => 'http://localhost', + + /* + |-------------------------------------------------------------------------- + | Application Timezone + |-------------------------------------------------------------------------- + | + | Here you may specify the default timezone for your application, which + | will be used by the PHP date and date-time functions. We have gone + | ahead and set this to a sensible default for you out of the box. + | + */ + + 'timezone' => 'UTC', + + /* + |-------------------------------------------------------------------------- + | Application Locale Configuration + |-------------------------------------------------------------------------- + | + | The application locale determines the default locale that will be used + | by the translation service provider. You are free to set this value + | to any of the locales which will be supported by the application. + | + */ + + 'locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Encryption Key + |-------------------------------------------------------------------------- + | + | This key is used by the Illuminate encrypter service and should be set + | to a random, 32 character string, otherwise these encrypted strings + | will not be safe. Please do this before deploying an application! + | + */ + + 'key' => 'YourSecretKey!!!', + + /* + |-------------------------------------------------------------------------- + | Autoloaded Service Providers + |-------------------------------------------------------------------------- + | + | The service providers listed here will be automatically loaded on the + | request to your application. Feel free to add your own services to + | this array to grant expanded functionality to your applications. + | + */ + + 'providers' => array( + + 'Illuminate\Foundation\Providers\ArtisanServiceProvider', + 'Illuminate\Auth\AuthServiceProvider', + 'Illuminate\Cache\CacheServiceProvider', + 'Illuminate\Foundation\Providers\CommandCreatorServiceProvider', + 'Illuminate\Session\CommandsServiceProvider', + 'Illuminate\Foundation\Providers\ComposerServiceProvider', + 'Illuminate\Routing\ControllerServiceProvider', + 'Illuminate\Cookie\CookieServiceProvider', + 'Illuminate\Database\DatabaseServiceProvider', + 'Illuminate\Encryption\EncryptionServiceProvider', + 'Illuminate\Filesystem\FilesystemServiceProvider', + 'Illuminate\Hashing\HashServiceProvider', + 'Illuminate\Html\HtmlServiceProvider', + 'Illuminate\Foundation\Providers\KeyGeneratorServiceProvider', + 'Illuminate\Log\LogServiceProvider', + 'Illuminate\Mail\MailServiceProvider', + 'Illuminate\Foundation\Providers\MaintenanceServiceProvider', + 'Illuminate\Database\MigrationServiceProvider', + 'Illuminate\Foundation\Providers\OptimizeServiceProvider', + 'Illuminate\Pagination\PaginationServiceProvider', + 'Illuminate\Foundation\Providers\PublisherServiceProvider', + 'Illuminate\Queue\QueueServiceProvider', + 'Illuminate\Redis\RedisServiceProvider', + 'Illuminate\Auth\Reminders\ReminderServiceProvider', + 'Illuminate\Foundation\Providers\RouteListServiceProvider', + 'Illuminate\Database\SeedServiceProvider', + 'Illuminate\Foundation\Providers\ServerServiceProvider', + 'Illuminate\Session\SessionServiceProvider', + 'Illuminate\Foundation\Providers\TinkerServiceProvider', + 'Illuminate\Translation\TranslationServiceProvider', + 'Illuminate\Validation\ValidationServiceProvider', + 'Illuminate\View\ViewServiceProvider', + 'Illuminate\Workbench\WorkbenchServiceProvider', + + 'Cartalyst\Sentry\SentryServiceProvider', + + ), + + /* + |-------------------------------------------------------------------------- + | Service Provider Manifest + |-------------------------------------------------------------------------- + | + | The service provider manifest is used by Laravel to lazy load service + | providers which are not needed for each request, as well to keep a + | list of all of the services. Here, you may set its storage spot. + | + */ + + 'manifest' => storage_path().'/meta', + + /* + |-------------------------------------------------------------------------- + | Class Aliases + |-------------------------------------------------------------------------- + | + | This array of class aliases will be registered when this application + | is started. However, feel free to register as many as you wish as + | the aliases are "lazy" loaded so they don't hinder performance. + | + */ + + 'aliases' => array( + + 'App' => 'Illuminate\Support\Facades\App', + 'Artisan' => 'Illuminate\Support\Facades\Artisan', + 'Auth' => 'Illuminate\Support\Facades\Auth', + 'Blade' => 'Illuminate\Support\Facades\Blade', + 'Cache' => 'Illuminate\Support\Facades\Cache', + 'ClassLoader' => 'Illuminate\Support\ClassLoader', + 'Config' => 'Illuminate\Support\Facades\Config', + 'Controller' => 'Illuminate\Routing\Controllers\Controller', + 'Cookie' => 'Illuminate\Support\Facades\Cookie', + 'Crypt' => 'Illuminate\Support\Facades\Crypt', + 'DB' => 'Illuminate\Support\Facades\DB', + 'Eloquent' => 'Illuminate\Database\Eloquent\Model', + 'Event' => 'Illuminate\Support\Facades\Event', + 'File' => 'Illuminate\Support\Facades\File', + 'Form' => 'Illuminate\Support\Facades\Form', + 'Hash' => 'Illuminate\Support\Facades\Hash', + 'HTML' => 'Illuminate\Support\Facades\HTML', + 'Input' => 'Illuminate\Support\Facades\Input', + 'Lang' => 'Illuminate\Support\Facades\Lang', + 'Log' => 'Illuminate\Support\Facades\Log', + 'Mail' => 'Illuminate\Support\Facades\Mail', + 'Paginator' => 'Illuminate\Support\Facades\Paginator', + 'Password' => 'Illuminate\Support\Facades\Password', + 'Queue' => 'Illuminate\Support\Facades\Queue', + 'Redirect' => 'Illuminate\Support\Facades\Redirect', + 'Redis' => 'Illuminate\Support\Facades\Redis', + 'Request' => 'Illuminate\Support\Facades\Request', + 'Response' => 'Illuminate\Support\Facades\Response', + 'Route' => 'Illuminate\Support\Facades\Route', + 'Schema' => 'Illuminate\Support\Facades\Schema', + 'Seeder' => 'Illuminate\Database\Seeder', + 'Session' => 'Illuminate\Support\Facades\Session', + 'Str' => 'Illuminate\Support\Str', + 'URL' => 'Illuminate\Support\Facades\URL', + 'Validator' => 'Illuminate\Support\Facades\Validator', + 'View' => 'Illuminate\Support\Facades\View', + + 'Sentry' => 'Cartalyst\Sentry\Facades\Laravel\Sentry', + + ), + +); diff --git a/app/config/auth.php b/app/config/auth.php new file mode 100755 index 0000000000..36a8ba157c --- /dev/null +++ b/app/config/auth.php @@ -0,0 +1,63 @@ + 'eloquent', + + /* + |-------------------------------------------------------------------------- + | Authentication Model + |-------------------------------------------------------------------------- + | + | When using the "Eloquent" authentication driver, we need to know which + | Eloquent model should be used to retrieve your users. Of course, it + | is often just the "User" model but you may use whatever you like. + | + */ + + 'model' => 'User', + + /* + |-------------------------------------------------------------------------- + | Authentication Table + |-------------------------------------------------------------------------- + | + | When using the "Database" authentication driver, we need to know which + | table should be used to retrieve your users. We have chosen a basic + | default value but you may easily change it to any table you like. + | + */ + + 'table' => 'users', + + /* + |-------------------------------------------------------------------------- + | Password Reminder Settings + |-------------------------------------------------------------------------- + | + | Here you may set the settings for password reminders, including a view + | that should be used as your password reminder e-mail. You will also + | be able to set the name of the table that holds the reset tokens. + | + */ + + 'reminder' => array( + + 'email' => 'emails.auth.reminder', 'table' => 'password_reminders', + + ), + +); diff --git a/app/config/cache.php b/app/config/cache.php new file mode 100755 index 0000000000..ce89842399 --- /dev/null +++ b/app/config/cache.php @@ -0,0 +1,89 @@ + 'file', + + /* + |-------------------------------------------------------------------------- + | File Cache Location + |-------------------------------------------------------------------------- + | + | When using the "file" cache driver, we need a location where the cache + | files may be stored. A sensible default has been specified, but you + | are free to change it to any other place on disk that you desire. + | + */ + + 'path' => storage_path().'/cache', + + /* + |-------------------------------------------------------------------------- + | Database Cache Connection + |-------------------------------------------------------------------------- + | + | When using the "database" cache driver you may specify the connection + | that should be used to store the cached items. When this option is + | null the default database connection will be utilized for cache. + | + */ + + 'connection' => null, + + /* + |-------------------------------------------------------------------------- + | Database Cache Table + |-------------------------------------------------------------------------- + | + | When using the "database" cache driver we need to know the table that + | should be used to store the cached items. A default table name has + | been provided but you're free to change it however you deem fit. + | + */ + + 'table' => 'cache', + + /* + |-------------------------------------------------------------------------- + | Memcached Servers + |-------------------------------------------------------------------------- + | + | Now you may specify an array of your Memcached servers that should be + | used when utilizing the Memcached cache driver. All of the servers + | should contain a value for "host", "port", and "weight" options. + | + */ + + 'memcached' => array( + + array('host' => '127.0.0.1', 'port' => 11211, 'weight' => 100), + + ), + + /* + |-------------------------------------------------------------------------- + | Cache Key Prefix + |-------------------------------------------------------------------------- + | + | When utilizing a RAM based store such as APC or Memcached, there might + | be other applications utilizing the same cache. So, we'll specify a + | value to get prefixed to all our keys so we can avoid collisions. + | + */ + + 'prefix' => 'laravel', + +); diff --git a/app/config/compile.php b/app/config/compile.php new file mode 100755 index 0000000000..d5e55181b3 --- /dev/null +++ b/app/config/compile.php @@ -0,0 +1,18 @@ + PDO::FETCH_CLASS, + + /* + |-------------------------------------------------------------------------- + | Default Database Connection Name + |-------------------------------------------------------------------------- + | + | Here you may specify which of the database connections below you wish + | to use as your default connection for all database work. Of course + | you may use many connections at once using the Database library. + | + */ + + 'default' => 'mysql', + + /* + |-------------------------------------------------------------------------- + | Database Connections + |-------------------------------------------------------------------------- + | + | Here are each of the database connections setup for your application. + | Of course, examples of configuring each database platform that is + | supported by Laravel is shown below to make development simple. + | + | + | All database work in Laravel is done through the PHP PDO facilities + | so make sure you have the driver for your particular database of + | choice installed on your machine before you begin development. + | + */ + + 'connections' => array( + + 'sqlite' => array( + 'driver' => 'sqlite', + 'database' => __DIR__.'/../database/production.sqlite', + 'prefix' => '', + ), + + 'mysql' => array( + 'driver' => 'mysql', + 'host' => '127.0.0.1', + 'database' => 'laravel4_testing', + 'username' => 'root', + 'password' => '', + 'charset' => 'utf8', + 'collation' => 'utf8_unicode_ci', + 'prefix' => '', + ), + + 'pgsql' => array( + 'driver' => 'pgsql', + 'host' => 'localhost', + 'database' => 'database', + 'username' => 'root', + 'password' => '', + 'charset' => 'utf8', + 'prefix' => '', + 'schema' => 'public', + ), + + 'sqlsrv' => array( + 'driver' => 'sqlsrv', + 'host' => 'localhost', + 'database' => 'database', + 'username' => 'root', + 'password' => '', + 'prefix' => '', + ), + + ), + + /* + |-------------------------------------------------------------------------- + | Migration Repository Table + |-------------------------------------------------------------------------- + | + | This table keeps track of all the migrations that have already run for + | your application. Using this information, we can determine which of + | the migrations on disk have not actually be run in the databases. + | + */ + + 'migrations' => 'migrations', + + /* + |-------------------------------------------------------------------------- + | Redis Databases + |-------------------------------------------------------------------------- + | + | Redis is an open source, fast, and advanced key-value store that also + | provides a richer set of commands than a typical key-value systems + | such as APC or Memcached. Laravel makes it easy to dig right in. + | + */ + + 'redis' => array( + + 'cluster' => true, + + 'default' => array( + 'host' => '127.0.0.1', + 'port' => 6379, + 'database' => 0, + ), + + ), + +); diff --git a/app/config/mail.php b/app/config/mail.php new file mode 100755 index 0000000000..a7151a0674 --- /dev/null +++ b/app/config/mail.php @@ -0,0 +1,124 @@ + 'smtp', + + /* + |-------------------------------------------------------------------------- + | SMTP Host Address + |-------------------------------------------------------------------------- + | + | Here you may provide the host address of the SMTP server used by your + | applications. A default option is provided that is compatible with + | the Postmark mail service, which will provide reliable delivery. + | + */ + + 'host' => 'smtp.mailgun.org', + + /* + |-------------------------------------------------------------------------- + | SMTP Host Port + |-------------------------------------------------------------------------- + | + | This is the SMTP port used by your application to delivery e-mails to + | users of your application. Like the host we have set this value to + | stay compatible with the Postmark e-mail application by default. + | + */ + + 'port' => 587, + + /* + |-------------------------------------------------------------------------- + | Global "From" Address + |-------------------------------------------------------------------------- + | + | You may wish for all e-mails sent by your application to be sent from + | the same address. Here, you may specify a name and address that is + | used globally for all e-mails that are sent by your application. + | + */ + + 'from' => array('address' => null, 'name' => null), + + /* + |-------------------------------------------------------------------------- + | E-Mail Encryption Protocol + |-------------------------------------------------------------------------- + | + | Here you may specify the encryption protocol that should be used when + | the application send e-mail messages. A sensible default using the + | transport layer security protocol should provide great security. + | + */ + + 'encryption' => 'tls', + + /* + |-------------------------------------------------------------------------- + | SMTP Server Username + |-------------------------------------------------------------------------- + | + | If your SMTP server requires a username for authentication, you should + | set it here. This will get used to authenticate with your server on + | connection. You may also set the "password" value below this one. + | + */ + + 'username' => null, + + /* + |-------------------------------------------------------------------------- + | SMTP Server Password + |-------------------------------------------------------------------------- + | + | Here you may set the password required by your SMTP server to send out + | messages from your application. This will be given to the server on + | connection so that the application will be able to send messages. + | + */ + + 'password' => null, + + /* + |-------------------------------------------------------------------------- + | Sendmail System Path + |-------------------------------------------------------------------------- + | + | When using the "sendmail" driver to send e-mails, we will need to know + | the path to where Sendmail lives on this server. A default path has + | been provided here, which will work well on most of your systems. + | + */ + + 'sendmail' => '/usr/sbin/sendmail -bs', + + /* + |-------------------------------------------------------------------------- + | Mail "Pretend" + |-------------------------------------------------------------------------- + | + | When this option is enabled, e-mail will not actually be sent over the + | web and will instead be written to your application's logs files so + | you may inspect the message. This is great for local development. + | + */ + + 'pretend' => false, + +); \ No newline at end of file diff --git a/app/config/packages/.gitkeep b/app/config/packages/.gitkeep new file mode 100755 index 0000000000..e69de29bb2 diff --git a/app/config/packages/cartalyst/sentry/config.php b/app/config/packages/cartalyst/sentry/config.php new file mode 100755 index 0000000000..8c7836d158 --- /dev/null +++ b/app/config/packages/cartalyst/sentry/config.php @@ -0,0 +1,178 @@ + 'eloquent', + + /* + |-------------------------------------------------------------------------- + | Default Hasher + |-------------------------------------------------------------------------- + | + | This option allows you to specify the default hasher used by Sentry + | + | Supported: "native", "bcrypt", "sha256" + | + */ + + 'hasher' => 'native', + + /* + |-------------------------------------------------------------------------- + | Groups + |-------------------------------------------------------------------------- + | + | Configuration specific to the group management component of Sentry. + | + */ + 'groups' => array( + + /* + |-------------------------------------------------------------------------- + | Model + |-------------------------------------------------------------------------- + | + | When using the "eloquent" driver, we need to know which + | Eloquent models should be used throughout Sentry. + | + */ + + 'model' => 'Cartalyst\Sentry\Groups\Eloquent\Group', + + ), + + /* + |-------------------------------------------------------------------------- + | Users + |-------------------------------------------------------------------------- + | + | Configuration specific to the user management component of Sentry. + | + */ + 'users' => array( + + /* + |-------------------------------------------------------------------------- + | Model + |-------------------------------------------------------------------------- + | + | When using the "eloquent" driver, we need to know which + | Eloquent models should be used throughout Sentry. + | + */ + + 'model' => 'User', + + /* + |-------------------------------------------------------------------------- + | Login Attribute + |-------------------------------------------------------------------------- + | + | If you're the "eloquent" driver and extending the base Eloquent model, + | we allow you to globally override the login attribute without even + | subclassing the model, simply by specifying the attribute below. + | + */ + + 'login_attribute' => 'email', + + ), + + /* + |-------------------------------------------------------------------------- + | Throttling + |-------------------------------------------------------------------------- + | + | Throttling is an optional security feature for authentication, which + | enables limiting of login attempts and the suspension & banning of users. + | + */ + 'throttling' => array( + + /* + |-------------------------------------------------------------------------- + | Throttling + |-------------------------------------------------------------------------- + | + | Enable throttling or not. Throttling is where users are only allowed a + | certain number of login attempts before they are suspended. Suspension + | must be removed before a new login attempt is allowed. + | + */ + + 'enabled' => true, + + /* + |-------------------------------------------------------------------------- + | Model + |-------------------------------------------------------------------------- + | + | When using the "eloquent" driver, we need to know which + | Eloquent models should be used throughout Sentry. + | + */ + + 'model' => 'Cartalyst\Sentry\Throttling\Eloquent\Throttle', + + /* + |-------------------------------------------------------------------------- + | Attempts Limit + |-------------------------------------------------------------------------- + | + | When using the "eloquent" driver and extending the base Eloquent model, + | you have the option to globally set the login attempts. + | + | Supported: int + | + */ + + 'attempt_limit' => 5, + + /* + |-------------------------------------------------------------------------- + | Suspension Time + |-------------------------------------------------------------------------- + | + | When using the "eloquent" driver and extending the base Eloquent model, + | you have the option to globally set the suspension time, in minutes. + | + | Supported: int + | + */ + + 'suspension_time' => 15, + + ), + +); diff --git a/app/config/permissions.php b/app/config/permissions.php new file mode 100755 index 0000000000..3d186fa049 --- /dev/null +++ b/app/config/permissions.php @@ -0,0 +1,19 @@ + array( + array( + 'permission' => 'superuser', + 'label' => 'Super User', + ), + ), + + 'Admin' => array( + array( + 'permission' => 'admin', + 'label' => 'Admin Rights', + ), + ), + +); diff --git a/app/config/queue.php b/app/config/queue.php new file mode 100755 index 0000000000..220998cbac --- /dev/null +++ b/app/config/queue.php @@ -0,0 +1,60 @@ + 'sync', + + /* + |-------------------------------------------------------------------------- + | Queue Connections + |-------------------------------------------------------------------------- + | + | Here you may configure the connection information for each server that + | is used by your application. A default configuration has been added + | for each back-end shipped with Laravel. You are free to add more. + | + */ + + 'connections' => array( + + 'sync' => array( + 'driver' => 'sync', + ), + + 'beanstalkd' => array( + 'driver' => 'beanstalkd', + 'host' => 'localhost', + 'queue' => 'default', + ), + + 'sqs' => array( + 'driver' => 'sqs', + 'key' => 'your-public-key', + 'secret' => 'your-secret-key', + 'queue' => 'your-queue-url', + 'region' => 'us-east-1', + ), + + 'iron' => array( + 'driver' => 'iron', + 'project' => 'your-project-id', + 'token' => 'your-token', + 'queue' => 'your-queue-name', + ), + + ), + +); diff --git a/app/config/session.php b/app/config/session.php new file mode 100755 index 0000000000..e11e98cd0e --- /dev/null +++ b/app/config/session.php @@ -0,0 +1,125 @@ + 'native', + + /* + |-------------------------------------------------------------------------- + | Session Lifetime + |-------------------------------------------------------------------------- + | + | Here you may specify the number of minutes that you wish the session + | to be allowed to remain idle for it is expired. If you want them + | to immediately expire when the browser closes, set it to zero. + | + */ + + 'lifetime' => 120, + + /* + |-------------------------------------------------------------------------- + | Session File Location + |-------------------------------------------------------------------------- + | + | When using the native session driver, we need a location where session + | files may be stored. A default has been set for you but a different + | location may be specified. This is only needed for file sessions. + | + */ + + 'files' => storage_path().'/sessions', + + /* + |-------------------------------------------------------------------------- + | Session Database Connection + |-------------------------------------------------------------------------- + | + | When using the "database" session driver, you may specify the database + | connection that should be used to manage your sessions. This should + | correspond to a connection in your "database" configuration file. + | + */ + + 'connection' => null, + + /* + |-------------------------------------------------------------------------- + | Session Database Table + |-------------------------------------------------------------------------- + | + | When using the "database" session driver, you may specify the table we + | should use to manage the sessions. Of course, a sensible default is + | provided for you; however, you are free to change this as needed. + | + */ + + 'table' => 'sessions', + + /* + |-------------------------------------------------------------------------- + | Session Sweeping Lottery + |-------------------------------------------------------------------------- + | + | Some session drivers must manually sweep their storage location to get + | rid of old sessions from storage. Here are the chances that it will + | happen on a given request. By default, the odds are 2 out of 100. + | + */ + + 'lottery' => array(2, 100), + + /* + |-------------------------------------------------------------------------- + | Session Cookie Name + |-------------------------------------------------------------------------- + | + | Here you may change the name of the cookie used to identify a session + | instance by ID. The name specified here will get used every time a + | new session cookie is created by the framework for every driver. + | + */ + + 'cookie' => 'laravel_session', + + /* + |-------------------------------------------------------------------------- + | Session Cookie Path + |-------------------------------------------------------------------------- + | + | The session cookie path determines the path for which the cookie will + | be regarded as available. Typically, this will be the root path of + | your application but you are free to change this when necessary. + | + */ + + 'path' => '/', + + /* + |-------------------------------------------------------------------------- + | Session Cookie Domain + |-------------------------------------------------------------------------- + | + | Here you may change the domain of the cookie used to identify a session + | in your application. This will determine which domains the cookie is + | available to in your application. A sensible default has been set. + | + */ + + 'domain' => null, + +); diff --git a/app/config/testing/cache.php b/app/config/testing/cache.php new file mode 100755 index 0000000000..16d3ae2fa5 --- /dev/null +++ b/app/config/testing/cache.php @@ -0,0 +1,20 @@ + 'array', + +); \ No newline at end of file diff --git a/app/config/testing/session.php b/app/config/testing/session.php new file mode 100755 index 0000000000..a18c1b9fe5 --- /dev/null +++ b/app/config/testing/session.php @@ -0,0 +1,21 @@ + 'array', + +); \ No newline at end of file diff --git a/app/config/view.php b/app/config/view.php new file mode 100755 index 0000000000..b0bb6464ee --- /dev/null +++ b/app/config/view.php @@ -0,0 +1,31 @@ + array(__DIR__.'/../views'), + + /* + |-------------------------------------------------------------------------- + | Pagination View + |-------------------------------------------------------------------------- + | + | This view will be used to render the pagination link output, and can + | be easily customized here to show any view you like. A clean view + | compatible with Twitter's Bootstrap is given to you by default. + | + */ + + 'pagination' => 'paginator/slider', + +); diff --git a/app/config/workbench.php b/app/config/workbench.php new file mode 100755 index 0000000000..87c5e3879e --- /dev/null +++ b/app/config/workbench.php @@ -0,0 +1,31 @@ + '', + + /* + |-------------------------------------------------------------------------- + | Workbench Author E-Mail Address + |-------------------------------------------------------------------------- + | + | Like the option above, your e-mail address is used when generating new + | workbench packages. The e-mail is placed in your composer.json file + | automatically after the package is created by the workbench tool. + | + */ + + 'email' => '', + +); diff --git a/app/controllers/.gitkeep b/app/controllers/.gitkeep new file mode 100755 index 0000000000..e69de29bb2 diff --git a/app/controllers/AdminController.php b/app/controllers/AdminController.php new file mode 100755 index 0000000000..66d2324baa --- /dev/null +++ b/app/controllers/AdminController.php @@ -0,0 +1,88 @@ +beforeFilter('admin-auth'); + } + + + + /** + * Encodes the permissions so that they are form friendly. + * + * @param array $permissions + * @param bool $removeSuperUser + * @return void + */ + protected function encodeAllPermissions(array &$allPermissions, $removeSuperUser = false) + { + foreach ($allPermissions as $area => &$permissions) + { + foreach ($permissions as $index => &$permission) + { + if ($removeSuperUser == true and $permission['permission'] == 'superuser') + { + unset($permissions[$index]); + continue; + } + + $permission['can_inherit'] = ($permission['permission'] != 'superuser'); + $permission['permission'] = base64_encode($permission['permission']); + } + + // If we removed a super user permission and there are + // none left, let's remove the group + if ($removeSuperUser == true and empty($permissions)) + { + unset($allPermissions[$area]); + } + } + } + + /** + * Encodes user permissions to match that of the encoded "all" + * permissions above. + * + * @param array $permissions + * @return void + */ + protected function encodePermissions(array &$permissions) + { + $encodedPermissions = array(); + + foreach ($permissions as $permission => $access) + { + $encodedPermissions[base64_encode($permission)] = $access; + } + + $permissions = $encodedPermissions; + } + + /** + * Decodes user permissions to match that of the encoded "all" + * permissions above. + * + * @param array $permissions + * @return void + */ + protected function decodePermissions(array &$permissions) + { + $decodedPermissions = array(); + + foreach ($permissions as $permission => $access) + { + $decodedPermissions[base64_decode($permission)] = $access; + } + + $permissions = $decodedPermissions; + } + +} diff --git a/app/controllers/AuthController.php b/app/controllers/AuthController.php new file mode 100755 index 0000000000..d3c309b075 --- /dev/null +++ b/app/controllers/AuthController.php @@ -0,0 +1,344 @@ + 'required|email', + 'password' => 'required|between:3,32', + ); + + // Create a new validator instance from our validation rules + $validator = Validator::make(Input::all(), $rules); + + // If validation fails, we'll exit the operation now. + if ($validator->fails()) + { + // Ooops.. something went wrong + return Redirect::back()->withInput()->withErrors($validator); + } + + try + { + // Try to log the user in + Sentry::authenticate(Input::only('email', 'password'), Input::get('remember-me', 0)); + + // Get the page we were before + $redirect = Session::get('loginRedirect', 'account'); + + // Unset the page we were before from the session + Session::forget('loginRedirect'); + + // Redirect to the users page + return Redirect::to($redirect)->with('success', Lang::get('auth/message.signin.success')); + } + catch (Cartalyst\Sentry\Users\UserNotFoundException $e) + { + $this->messageBag->add('email', Lang::get('auth/message.account_not_found')); + } + catch (Cartalyst\Sentry\Users\UserNotActivatedException $e) + { + $this->messageBag->add('email', Lang::get('auth/message.account_not_activated')); + } + catch (Cartalyst\Sentry\Throttling\UserSuspendedException $e) + { + $this->messageBag->add('email', Lang::get('auth/message.account_suspended')); + } + catch (Cartalyst\Sentry\Throttling\UserBannedException $e) + { + $this->messageBag->add('email', Lang::get('auth/message.account_banned')); + } + + // Ooops.. something went wrong + return Redirect::back()->withInput()->withErrors($this->messageBag); + } + + /** + * Account sign up. + * + * @return View + */ + public function getSignup() + { + // Is the user logged in? + if (Sentry::check()) + { + return Redirect::route('account'); + } + + // Show the page + return View::make('frontend.auth.signup'); + } + + /** + * Account sign up form processing. + * + * @return Redirect + */ + public function postSignup() + { + // Declare the rules for the form validation + $rules = array( + 'first_name' => 'required|min:3', + 'last_name' => 'required|min:3', + 'email' => 'required|email|unique:users', + 'email_confirm' => 'required|email|same:email', + 'password' => 'required|between:3,32', + 'password_confirm' => 'required|same:password', + ); + + // Create a new validator instance from our validation rules + $validator = Validator::make(Input::all(), $rules); + + // If validation fails, we'll exit the operation now. + if ($validator->fails()) + { + // Ooops.. something went wrong + return Redirect::back()->withInput()->withErrors($validator); + } + + try + { + // Register the user + $user = Sentry::register(array( + 'first_name' => Input::get('first_name'), + 'last_name' => Input::get('last_name'), + 'email' => Input::get('email'), + 'password' => Input::get('password'), + )); + + // Data to be used on the email view + $data = array( + 'user' => $user, + 'activationUrl' => URL::route('activate', $user->getActivationCode()), + ); + + // Send the activation code through email + Mail::send('emails.register-activate', $data, function($m) use ($user) + { + $m->to($user->email, $user->first_name . ' ' . $user->last_name); + $m->subject('Welcome ' . $user->first_name); + }); + + // Redirect to the register page + return Redirect::back()->with('success', Lang::get('auth/message.signup.success')); + } + catch (Cartalyst\Sentry\Users\UserExistsException $e) + { + $this->messageBag->add('email', Lang::get('auth/message.account_already_exists')); + } + + // Ooops.. something went wrong + return Redirect::back()->withInput()->withErrors($this->messageBag); + } + + /** + * User account activation page. + * + * @param string $actvationCode + * @return + */ + public function getActivate($activationCode = null) + { + // Is the user logged in? + if (Sentry::check()) + { + return Redirect::route('account'); + } + + try + { + // Get the user we are trying to activate + $user = Sentry::getUserProvider()->findByActivationCode($activationCode); + + // Try to activate this user account + if ($user->attemptActivation($activationCode)) + { + // Redirect to the login page + return Redirect::route('signin')->with('success', Lang::get('auth/message.activate.success')); + } + + // The activation failed. + $error = Lang::get('auth/message.activate.error'); + } + catch (Cartalyst\Sentry\Users\UserNotFoundException $e) + { + $error = Lang::get('auth/message.activate.error'); + } + + // Ooops.. something went wrong + return Redirect::route('signin')->with('error', $error); + } + + /** + * Forgot password page. + * + * @return View + */ + public function getForgotPassword() + { + // Show the page + return View::make('frontend.auth.forgot-password'); + } + + /** + * Forgot password form processing page. + * + * @return Redirect + */ + public function postForgotPassword() + { + // Declare the rules for the validator + $rules = array( + 'email' => 'required|email', + ); + + // Create a new validator instance from our dynamic rules + $validator = Validator::make(Input::all(), $rules); + + // If validation fails, we'll exit the operation now. + if ($validator->fails()) + { + // Ooops.. something went wrong + return Redirect::route('forgot-password')->withInput()->withErrors($validator); + } + + try + { + // Get the user password recovery code + $user = Sentry::getUserProvider()->findByLogin(Input::get('email')); + + // Data to be used on the email view + $data = array( + 'user' => $user, + 'forgotPasswordUrl' => URL::route('forgot-password-confirm', $user->getResetPasswordCode()), + ); + + // Send the activation code through email + Mail::send('emails.forgot-password', $data, function($m) use ($user) + { + $m->to($user->email, $user->first_name . ' ' . $user->last_name); + $m->subject('Account Password Recovery'); + }); + } + catch (Cartalyst\Sentry\Users\UserNotFoundException $e) + { + // Even though the email was not found, we will pretend + // we have sent the password reset code through email, + // this is a security measure against hackers. + } + + // Redirect to the forgot password + return Redirect::route('forgot-password')->with('success', Lang::get('auth/message.forgot-password.success')); + } + + /** + * Forgot Password Confirmation page. + * + * @param string $passwordResetCode + * @return View + */ + public function getForgotPasswordConfirm($passwordResetCode = null) + { + try + { + // Find the user using the password reset code + $user = Sentry::getUserProvider()->findByResetPasswordCode($passwordResetCode); + } + catch(Cartalyst\Sentry\Users\UserNotFoundException $e) + { + // Redirect to the forgot password page + return Redirect::route('forgot-password')->with('error', Lang::get('auth/message.account_not_found')); + } + + // Show the page + return View::make('frontend.auth.forgot-password-confirm'); + } + + /** + * Forgot Password Confirmation form processing page. + * + * @param string $passwordResetCode + * @return Redirect + */ + public function postForgotPasswordConfirm($passwordResetCode = null) + { + // Declare the rules for the form validation + $rules = array( + 'password' => 'required', + 'password_confirm' => 'required|same:password' + ); + + // Create a new validator instance from our dynamic rules + $validator = Validator::make(Input::all(), $rules); + + // If validation fails, we'll exit the operation now. + if ($validator->fails()) + { + // Ooops.. something went wrong + return Redirect::route('forgot-password-confirm', $passwordResetCode)->withInput()->withErrors($validator); + } + + try + { + // Find the user using the password reset code + $user = Sentry::getUserProvider()->findByResetPasswordCode($passwordResetCode); + + // Attempt to reset the user password + if ($user->attemptResetPassword($passwordResetCode, Input::get('password'))) + { + // Password successfully reseted + return Redirect::route('signin')->with('success', Lang::get('auth/message.forgot-password-confirm.success')); + } + else + { + // Ooops.. something went wrong + return Redirect::route('signin')->with('error', Lang::get('auth/message.forgot-password-confirm.error')); + } + } + catch (Cartalyst\Sentry\Users\UserNotFoundException $e) + { + // Redirect to the forgot password page + return Redirect::route('forgot-password')->with('error', Lang::get('auth/message.account_not_found')); + } + } + + /** + * Logout page. + * + * @return Redirect + */ + public function getLogout() + { + // Log the user out + Sentry::logout(); + + // Redirect to the users page + return Redirect::route('home')->with('success', 'You have successfully logged out!'); + } + +} diff --git a/app/controllers/AuthorizedController.php b/app/controllers/AuthorizedController.php new file mode 100755 index 0000000000..07b45169eb --- /dev/null +++ b/app/controllers/AuthorizedController.php @@ -0,0 +1,26 @@ +beforeFilter('auth', array('except' => $this->whitelist)); + + // Call parent + parent::__construct(); + } + +} diff --git a/app/controllers/BaseController.php b/app/controllers/BaseController.php new file mode 100755 index 0000000000..b12a4ac0e8 --- /dev/null +++ b/app/controllers/BaseController.php @@ -0,0 +1,39 @@ +beforeFilter('csrf', array('on' => 'post')); + + // + $this->messageBag = new Illuminate\Support\MessageBag; + } + + /** + * Setup the layout used by the controller. + * + * @return void + */ + protected function setupLayout() + { + if ( ! is_null($this->layout)) + { + $this->layout = View::make($this->layout); + } + } + +} diff --git a/app/controllers/BlogController.php b/app/controllers/BlogController.php new file mode 100755 index 0000000000..b5bffba247 --- /dev/null +++ b/app/controllers/BlogController.php @@ -0,0 +1,110 @@ + function($query) + { + $query->withTrashed(); + }, + ))->orderBy('created_at', 'DESC')->paginate(); + + // Show the page + return View::make('frontend/blog/index', compact('posts')); + } + + /** + * View a blog post. + * + * @param string $slug + * @return View + * @throws NotFoundHttpException + */ + public function getView($slug) + { + // Get this blog post data + $post = Post::with(array( + 'author' => function($query) + { + $query->withTrashed(); + }, + 'comments', + ))->where('slug', $slug)->first(); + + // Check if the blog post exists + if (is_null($post)) + { + // If we ended up in here, it means that a page or a blog post + // don't exist. So, this means that it is time for 404 error page. + return App::abort(404); + } + + // Get this post comments + $comments = $post->comments()->with(array( + 'author' => function($query) + { + $query->withTrashed(); + }, + ))->orderBy('created_at', 'DESC')->get(); + + // Show the page + return View::make('frontend/blog/view-post', compact('post', 'comments')); + } + + /** + * View a blog post. + * + * @param string $slug + * @return Redirect + */ + public function postView($slug) + { + // The user needs to be logged in, make that check please + if ( ! Sentry::check()) + { + return Redirect::to("blog/$slug#comments")->with('error', 'You need to be logged in to post comments!'); + } + + // Get this blog post data + $post = Post::where('slug', $slug)->first(); + + // Declare the rules for the form validation + $rules = array( + 'comment' => 'required|min:3', + ); + + // Create a new validator instance from our dynamic rules + $validator = Validator::make(Input::all(), $rules); + + // If validation fails, we'll exit the operation now + if ($validator->fails()) + { + // Redirect to this blog post page + return Redirect::to("blog/$slug#comments")->withInput()->withErrors($validator); + } + + // Save the comment + $comment = new Comment; + $comment->user_id = Sentry::getUser()->id; + $comment->content = e(Input::get('comment')); + + // Was the comment saved with success? + if($post->comments()->save($comment)) + { + // Redirect to this blog post page + return Redirect::to("blog/$slug#comments")->with('success', 'Your comment was successfully added.'); + } + + // Redirect to this blog post page + return Redirect::to("blog/$slug#comments")->with('error', 'There was a problem adding your comment, please try again.'); + } + +} diff --git a/app/controllers/ContactUsController.php b/app/controllers/ContactUsController.php new file mode 100755 index 0000000000..06f262281b --- /dev/null +++ b/app/controllers/ContactUsController.php @@ -0,0 +1,41 @@ + 'required', + 'email' => 'required|email', + 'description' => 'required', + ); + + // Create a new validator instance from our validation rules + $validator = Validator::make(Input::all(), $rules); + + // If validation fails, we'll exit the operation now. + if ($validator->fails()) + { + return Redirect::route('contact-us')->withErrors($validator); + } + + # TODO ! + } + +} diff --git a/app/controllers/HomeController.php b/app/controllers/HomeController.php new file mode 100755 index 0000000000..796a085e19 --- /dev/null +++ b/app/controllers/HomeController.php @@ -0,0 +1,23 @@ + 'required|between:3,32', + 'email' => 'required|email|unique:users,email,'.Sentry::getUser()->email.',email', + 'email_confirm' => 'required|same:email', + ); + + // Create a new validator instance from our validation rules + $validator = Validator::make(Input::all(), $rules); + + // If validation fails, we'll exit the operation now. + if ($validator->fails()) + { + // Ooops.. something went wrong + return Redirect::back()->withInput()->withErrors($validator); + } + + // Grab the user + $user = Sentry::getUser(); + + // Check the user current password + if ( ! $user->checkPassword(Input::get('current_password'))) + { + // Set the error message + $this->messageBag->add('current_password', 'Your current password is incorrect'); + + // Redirect to the change email page + return Redirect::route('change-email')->withErrors($this->messageBag); + } + + // Update the user email + $user->email = Input::get('email'); + $user->save(); + + // Redirect to the settings page + return Redirect::route('change-email')->with('success', 'Email successfully updated'); + } + +} diff --git a/app/controllers/account/ChangePasswordController.php b/app/controllers/account/ChangePasswordController.php new file mode 100755 index 0000000000..d6ffaf8ffa --- /dev/null +++ b/app/controllers/account/ChangePasswordController.php @@ -0,0 +1,71 @@ + 'required|between:3,32', + 'password' => 'required|between:3,32', + 'password_confirm' => 'required|same:password', + ); + + // Create a new validator instance from our validation rules + $validator = Validator::make(Input::all(), $rules); + + // If validation fails, we'll exit the operation now. + if ($validator->fails()) + { + // Ooops.. something went wrong + return Redirect::back()->withInput()->withErrors($validator); + } + + // Grab the user + $user = Sentry::getUser(); + + // Check the user current password + if ( ! $user->checkPassword(Input::get('old_password'))) + { + // Set the error message + $this->messageBag->add('old_password', 'Your current password is incorrect.'); + + // Redirect to the change password page + return Redirect::route('change-password')->withErrors($this->messageBag); + } + + // Update the user password + $user->password = Input::get('password'); + $user->save(); + + // Redirect to the change-password page + return Redirect::route('change-password')->with('success', 'Password successfully updated'); + } + +} diff --git a/app/controllers/account/DashboardController.php b/app/controllers/account/DashboardController.php new file mode 100755 index 0000000000..cb4bebb158 --- /dev/null +++ b/app/controllers/account/DashboardController.php @@ -0,0 +1,19 @@ + 'required|min:3', + 'last_name' => 'required|min:3', + 'website' => 'url', + 'gravatar' => 'email', + ); + + // Create a new validator instance from our validation rules + $validator = Validator::make(Input::all(), $rules); + + // If validation fails, we'll exit the operation now. + if ($validator->fails()) + { + // Ooops.. something went wrong + return Redirect::back()->withInput()->withErrors($validator); + } + + // Grab the user + $user = Sentry::getUser(); + + // Update the user information + $user->first_name = Input::get('first_name'); + $user->last_name = Input::get('last_name'); + $user->website = Input::get('website'); + $user->country = Input::get('country'); + $user->gravatar = Input::get('gravatar'); + $user->save(); + + // Redirect to the settings page + return Redirect::route('profile')->with('success', 'Account successfully updated'); + } + +} diff --git a/app/controllers/admin/BlogsController.php b/app/controllers/admin/BlogsController.php new file mode 100755 index 0000000000..046fca2c7e --- /dev/null +++ b/app/controllers/admin/BlogsController.php @@ -0,0 +1,177 @@ +paginate(10); + + // Show the page + return View::make('backend/blogs/index', compact('posts')); + } + + /** + * Blog post create. + * + * @return View + */ + public function getCreate() + { + // Show the page + return View::make('backend/blogs/create'); + } + + /** + * Blog post create form processing. + * + * @return Redirect + */ + public function postCreate() + { + // Declare the rules for the form validation + $rules = array( + 'title' => 'required|min:3', + 'content' => 'required|min:3', + ); + + // Create a new validator instance from our validation rules + $validator = Validator::make(Input::all(), $rules); + + // If validation fails, we'll exit the operation now. + if ($validator->fails()) + { + // Ooops.. something went wrong + return Redirect::back()->withInput()->withErrors($validator); + } + + // Create a new blog post + $post = new Post; + + // Update the blog post data + $post->title = e(Input::get('title')); + $post->slug = e(Str::slug(Input::get('title'))); + $post->content = e(Input::get('content')); + $post->meta_title = e(Input::get('meta-title')); + $post->meta_description = e(Input::get('meta-description')); + $post->meta_keywords = e(Input::get('meta-keywords')); + $post->user_id = Sentry::getId(); + + // Was the blog post created? + if($post->save()) + { + // Redirect to the new blog post page + return Redirect::to("admin/blogs/$post->id/edit")->with('success', Lang::get('admin/blogs/message.create.success')); + } + + // Redirect to the blog post create page + return Redirect::to('admin/blogs/create')->with('error', Lang::get('admin/blogs/message.create.error')); + } + + /** + * Blog post update. + * + * @param int $postId + * @return View + */ + public function getEdit($postId = null) + { + // Check if the blog post exists + if (is_null($post = Post::find($postId))) + { + // Redirect to the blogs management page + return Redirect::to('admin/blogs')->with('error', Lang::get('admin/blogs/message.does_not_exist')); + } + + // Show the page + return View::make('backend/blogs/edit', compact('post')); + } + + /** + * Blog Post update form processing page. + * + * @param int $postId + * @return Redirect + */ + public function postEdit($postId = null) + { + // Check if the blog post exists + if (is_null($post = Post::find($postId))) + { + // Redirect to the blogs management page + return Redirect::to('admin/blogs')->with('error', Lang::get('admin/blogs/message.does_not_exist')); + } + + // Declare the rules for the form validation + $rules = array( + 'title' => 'required|min:3', + 'content' => 'required|min:3', + ); + + // Create a new validator instance from our validation rules + $validator = Validator::make(Input::all(), $rules); + + // If validation fails, we'll exit the operation now. + if ($validator->fails()) + { + // Ooops.. something went wrong + return Redirect::back()->withInput()->withErrors($validator); + } + + // Update the blog post data + $post->title = e(Input::get('title')); + $post->slug = e(Str::slug(Input::get('title'))); + $post->content = e(Input::get('content')); + $post->meta_title = e(Input::get('meta-title')); + $post->meta_description = e(Input::get('meta-description')); + $post->meta_keywords = e(Input::get('meta-keywords')); + + // Was the blog post updated? + if($post->save()) + { + // Redirect to the new blog post page + return Redirect::to("admin/blogs/$postId/edit")->with('success', Lang::get('admin/blogs/message.update.success')); + } + + // Redirect to the blogs post management page + return Redirect::to("admin/blogs/$postId/edit")->with('error', Lang::get('admin/blogs/message.update.error')); + } + + /** + * Delete the given blog post. + * + * @param int $postId + * @return Redirect + */ + public function getDelete($postId) + { + // Check if the blog post exists + if (is_null($post = Post::find($postId))) + { + // Redirect to the blogs management page + return Redirect::to('admin/blogs')->with('error', Lang::get('admin/blogs/message.not_found')); + } + + // Delete the blog post + $post->delete(); + + // Redirect to the blog posts management page + return Redirect::to('admin/blogs')->with('success', Lang::get('admin/blogs/message.delete.success')); + } + +} diff --git a/app/controllers/admin/DashboardController.php b/app/controllers/admin/DashboardController.php new file mode 100755 index 0000000000..0721a0faea --- /dev/null +++ b/app/controllers/admin/DashboardController.php @@ -0,0 +1,19 @@ +createModel()->paginate(); + + // Show the page + return View::make('backend/groups/index', compact('groups')); + } + + /** + * Group create. + * + * @return View + */ + public function getCreate() + { + // Get all the available permissions + $permissions = Config::get('permissions'); + $this->encodeAllPermissions($permissions, true); + + // Selected permissions + $selectedPermissions = Input::old('permissions', array()); + + // Show the page + return View::make('backend/groups/create', compact('permissions', 'selectedPermissions')); + } + + /** + * Group create form processing. + * + * @return Redirect + */ + public function postCreate() + { + // Declare the rules for the form validation + $rules = array( + 'name' => 'required', + ); + + // Create a new validator instance from our validation rules + $validator = Validator::make(Input::all(), $rules); + + // If validation fails, we'll exit the operation now. + if ($validator->fails()) + { + // Ooops.. something went wrong + return Redirect::back()->withInput()->withErrors($validator); + } + + try + { + // We need to reverse the UI specific logic for our + // permissions here before we create the user. + $permissions = Input::get('permissions', array()); + $this->decodePermissions($permissions); + app('request')->request->set('permissions', $permissions); + + // Get the inputs, with some exceptions + $inputs = Input::except('_token'); + + // Was the group created? + if ($group = Sentry::getGroupProvider()->create($inputs)) + { + // Redirect to the new group page + return Redirect::route('update/group', $group->id)->with('success', Lang::get('admin/groups/message.success.create')); + } + + // Redirect to the new group page + return Redirect::route('create/group')->with('error', Lang::get('admin/groups/message.error.create')); + } + catch (NameRequiredException $e) + { + $error = 'group_name_required'; + } + catch (GroupExistsException $e) + { + $error = 'group_exists'; + } + + // Redirect to the group create page + return Redirect::route('create/group')->withInput()->with('error', Lang::get('admin/groups/message.'.$error)); + } + + /** + * Group update. + * + * @param int $id + * @return View + */ + public function getEdit($id = null) + { + try + { + // Get the group information + $group = Sentry::getGroupProvider()->findById($id); + + // Get all the available permissions + $permissions = Config::get('permissions'); + $this->encodeAllPermissions($permissions, true); + + // Get this group permissions + $groupPermissions = $group->getPermissions(); + $this->encodePermissions($groupPermissions); + $groupPermissions = array_merge($groupPermissions, Input::old('permissions', array())); + } + catch (GroupNotFoundException $e) + { + // Redirect to the groups management page + return Redirect::route('groups')->with('error', Lang::get('admin/groups/message.group_not_found', compact('id'))); + } + + // Show the page + return View::make('backend/groups/edit', compact('group', 'permissions', 'groupPermissions')); + } + + /** + * Group update form processing page. + * + * @param int $id + * @return Redirect + */ + public function postEdit($id = null) + { + // We need to reverse the UI specific logic for our + // permissions here before we update the group. + $permissions = Input::get('permissions', array()); + $this->decodePermissions($permissions); + app('request')->request->set('permissions', $permissions); + + try + { + // Get the group information + $group = Sentry::getGroupProvider()->findById($id); + } + catch (GroupNotFoundException $e) + { + // Redirect to the groups management page + return Rediret::route('groups')->with('error', Lang::get('admin/groups/message.group_not_found', compact('id'))); + } + + // Declare the rules for the form validation + $rules = array( + 'name' => 'required', + ); + + // Create a new validator instance from our validation rules + $validator = Validator::make(Input::all(), $rules); + + // If validation fails, we'll exit the operation now. + if ($validator->fails()) + { + // Ooops.. something went wrong + return Redirect::back()->withInput()->withErrors($validator); + } + + try + { + // Update the group data + $group->name = Input::get('name'); + $group->permissions = Input::get('permissions'); + + // Was the group updated? + if ($group->save()) + { + // Redirect to the group page + return Redirect::route('update/group', $id)->with('success', Lang::get('admin/groups/message.success.update')); + } + else + { + // Redirect to the group page + return Redirect::route('update/group', $id)->with('error', Lang::get('admin/groups/message.error.update')); + } + } + catch (NameRequiredException $e) + { + $error = Lang::get('admin/group/message.group_name_required'); + } + + // Redirect to the group page + return Redirect::route('update/group', $id)->withInput()->with('error', $error); + } + + /** + * Delete the given group. + * + * @param int $id + * @return Redirect + */ + public function getDelete($id = null) + { + try + { + // Get group information + $group = Sentry::getGroupProvider()->findById($id); + + // Delete the group + $group->delete(); + + // Redirect to the group management page + return Redirect::route('groups')->with('success', Lang::get('admin/groups/message.success.delete')); + } + catch (GroupNotFoundException $e) + { + // Redirect to the group management page + return Redirect::route('groups')->with('error', Lang::get('admin/groups/message.group_not_found', compact('id'))); + } + } + +} diff --git a/app/controllers/admin/UsersController.php b/app/controllers/admin/UsersController.php new file mode 100755 index 0000000000..e83adca9eb --- /dev/null +++ b/app/controllers/admin/UsersController.php @@ -0,0 +1,391 @@ + 'required|min:3', + 'last_name' => 'required|min:3', + 'email' => 'required|email|unique:users,email', + 'password' => 'required|between:3,32', + 'password_confirm' => 'required|between:3,32|same:password', + ); + + /** + * Show a list of all the users. + * + * @return View + */ + public function getIndex() + { + // Grab all the users + $users = Sentry::getUserProvider()->createModel(); + + // Do we want to include the deleted users? + if (Input::get('withTrashed')) + { + $users = $users->withTrashed(); + } + else if (Input::get('onlyTrashed')) + { + $users = $users->onlyTrashed(); + } + + // Paginate the users + $users = $users->paginate() + ->appends(array( + 'withTrashed' => Input::get('withTrashed'), + 'onlyTrashed' => Input::get('onlyTrashed'), + )); + + // Show the page + return View::make('backend/users/index', compact('users')); + } + + /** + * User create. + * + * @return View + */ + public function getCreate() + { + // Get all the available groups + $groups = Sentry::getGroupProvider()->findAll(); + + // Selected groups + $selectedGroups = Input::old('groups', array()); + + // Get all the available permissions + $permissions = Config::get('permissions'); + $this->encodeAllPermissions($permissions); + + // Selected permissions + $selectedPermissions = Input::old('permissions', array('superuser' => -1)); + $this->encodePermissions($selectedPermissions); + + // Show the page + return View::make('backend/users/create', compact('groups', 'selectedGroups', 'permissions', 'selectedPermissions')); + } + + /** + * User create form processing. + * + * @return Redirect + */ + public function postCreate() + { + // Create a new validator instance from our validation rules + $validator = Validator::make(Input::all(), $this->validationRules); + + // If validation fails, we'll exit the operation now. + if ($validator->fails()) + { + // Ooops.. something went wrong + return Redirect::back()->withInput()->withErrors($validator); + } + + try + { + // We need to reverse the UI specific logic for our + // permissions here before we create the user. + $permissions = Input::get('permissions', array()); + $this->decodePermissions($permissions); + app('request')->request->set('permissions', $permissions); + + // Get the inputs, with some exceptions + $inputs = Input::except('csrf_token', 'password_confirm', 'groups'); + + // Was the user created? + if ($user = Sentry::getUserProvider()->create($inputs)) + { + // Assign the selected groups to this user + foreach (Input::get('groups', array()) as $groupId) + { + $group = Sentry::getGroupProvider()->findById($groupId); + + $user->addGroup($group); + } + + // Prepare the success message + $success = Lang::get('admin/users/message.success.create'); + + // Redirect to the new user page + return Redirect::route('update/user', $user->id)->with('success', $success); + } + + // Prepare the error message + $error = Lang::get('admin/users/message.error.create'); + + // Redirect to the user creation page + return Redirect::route('create/user')->with('error', $error); + } + catch (LoginRequiredException $e) + { + $error = Lang::get('admin/users/message.user_login_required'); + } + catch (PasswordRequiredException $e) + { + $error = Lang::get('admin/users/message.user_password_required'); + } + catch (UserExistsException $e) + { + $error = Lang::get('admin/users/message.user_exists'); + } + + // Redirect to the user creation page + return Redirect::route('create/user')->withInput()->with('error', $error); + } + + /** + * User update. + * + * @param int $id + * @return View + */ + public function getEdit($id = null) + { + try + { + // Get the user information + $user = Sentry::getUserProvider()->findById($id); + + // Get this user groups + $userGroups = $user->groups()->lists('name', 'group_id'); + + // Get this user permissions + $userPermissions = array_merge(Input::old('permissions', array('superuser' => -1)), $user->getPermissions()); + $this->encodePermissions($userPermissions); + + // Get a list of all the available groups + $groups = Sentry::getGroupProvider()->findAll(); + + // Get all the available permissions + $permissions = Config::get('permissions'); + $this->encodeAllPermissions($permissions); + } + catch (UserNotFoundException $e) + { + // Prepare the error message + $error = Lang::get('admin/users/message.user_not_found', compact('id')); + + // Redirect to the user management page + return Redirect::route('users')->with('error', $error); + } + + // Show the page + return View::make('backend/users/edit', compact('user', 'groups', 'userGroups', 'permissions', 'userPermissions')); + } + + /** + * User update form processing page. + * + * @param int $id + * @return Redirect + */ + public function postEdit($id = null) + { + // We need to reverse the UI specific logic for our + // permissions here before we update the user. + $permissions = Input::get('permissions', array()); + $this->decodePermissions($permissions); + app('request')->request->set('permissions', $permissions); + + try + { + // Get the user information + $user = Sentry::getUserProvider()->findById($id); + } + catch (UserNotFoundException $e) + { + // Prepare the error message + $error = Lang::get('admin/users/message.user_not_found', compact('id')); + + // Redirect to the user management page + return Redirect::route('users')->with('error', $error); + } + + // + $this->validationRules['email'] = "required|email|unique:users,email,{$user->email},email"; + + // Do we want to update the user password? + if ( ! $password = Input::get('password')) + { + unset($this->validationRules['password']); + unset($this->validationRules['password_confirm']); + #$this->validationRules['password'] = 'required|between:3,32'; + #$this->validationRules['password_confirm'] = 'required|between:3,32|same:password'; + } + + // Create a new validator instance from our validation rules + $validator = Validator::make(Input::all(), $this->validationRules); + + // If validation fails, we'll exit the operation now. + if ($validator->fails()) + { + // Ooops.. something went wrong + return Redirect::back()->withInput()->withErrors($validator); + } + + try + { + // Update the user + $user->first_name = Input::get('first_name'); + $user->last_name = Input::get('last_name'); + $user->email = Input::get('email'); + $user->activated = Input::get('activated', $user->activated); + $user->permissions = Input::get('permissions'); + + // Do we want to update the user password? + if ($password) + { + $user->password = $password; + } + + // Get the current user groups + $userGroups = $user->groups()->lists('group_id', 'group_id'); + + // Get the selected groups + $selectedGroups = Input::get('groups', array()); + + // Groups comparison between the groups the user currently + // have and the groups the user wish to have. + $groupsToAdd = array_diff($selectedGroups, $userGroups); + $groupsToRemove = array_diff($userGroups, $selectedGroups); + + // Assign the user to groups + foreach ($groupsToAdd as $groupId) + { + $group = Sentry::getGroupProvider()->findById($groupId); + + $user->addGroup($group); + } + + // Remove the user from groups + foreach ($groupsToRemove as $groupId) + { + $group = Sentry::getGroupProvider()->findById($groupId); + + $user->removeGroup($group); + } + + // Was the user updated? + if ($user->save()) + { + // Prepare the success message + $success = Lang::get('admin/users/message.success.update'); + + // Redirect to the user page + return Redirect::route('update/user', $id)->with('success', $success); + } + + // Prepare the error message + $error = Lang::get('admin/users/message.error.update'); + } + catch (LoginRequiredException $e) + { + $error = Lang::get('admin/users/message.user_login_required'); + } + + // Redirect to the user page + return Redirect::route('update/user', $id)->withInput()->with('error', $error); + } + + /** + * Delete the given user. + * + * @param int $id + * @return Redirect + */ + public function getDelete($id = null) + { + try + { + // Get user information + $user = Sentry::getUserProvider()->findById($id); + + // Check if we are not trying to delete ourselves + if ($user->id === Sentry::getId()) + { + // Prepare the error message + $error = Lang::get('admin/users/message.error.delete'); + + // Redirect to the user management page + return Redirect::route('users')->with('error', $error); + } + + // Do we have permission to delete this user? + if ($user->isSuperUser() and ! Sentry::getUser()->isSuperUser()) + { + // Redirect to the user management page + return Redirect::route('users')->with('error', 'Insufficient permissions!'); + } + + // Delete the user + $user->delete(); + + // Prepare the success message + $success = Lang::get('admin/users/message.success.delete'); + + // Redirect to the user management page + return Redirect::route('users')->with('success', $success); + } + catch (UserNotFoundException $e) + { + // Prepare the error message + $error = Lang::get('admin/users/message.user_not_found', compact('id' )); + + // Redirect to the user management page + return Redirect::route('users')->with('error', $error); + } + } + + /** + * Restore a deleted user. + * + * @param int $id + * @return Redirect + */ + public function getRestore($id = null) + { + try + { + // Get user information + $user = Sentry::getUserProvider()->createModel()->withTrashed()->find($id); + + // Restore the user + $user->restore(); + + // Prepare the success message + $success = Lang::get('admin/users/message.success.restored'); + + // Redirect to the user management page + return Redirect::route('users')->with('success', $success); + } + catch (UserNotFoundException $e) + { + // Prepare the error message + $error = Lang::get('admin/users/message.user_not_found', compact('id')); + + // Redirect to the user management page + return Redirect::route('users')->with('error', $error); + } + } + +} diff --git a/app/database/migrations/.gitkeep b/app/database/migrations/.gitkeep new file mode 100755 index 0000000000..e69de29bb2 diff --git a/app/database/migrations/2013_01_19_011903_create_posts_table.php b/app/database/migrations/2013_01_19_011903_create_posts_table.php new file mode 100755 index 0000000000..ca99e2ed6c --- /dev/null +++ b/app/database/migrations/2013_01_19_011903_create_posts_table.php @@ -0,0 +1,40 @@ +increments('id')->unsigned(); + $table->integer('user_id')->unsigned(); + $table->string('title'); + $table->string('slug'); + $table->text('content'); + $table->string('meta_title')->nullable(); + $table->string('meta_description')->nullable(); + $table->string('meta_keywords')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // Delete the `Posts` table + Schema::drop('posts'); + } + +} diff --git a/app/database/migrations/2013_01_19_044505_create_comments_table.php b/app/database/migrations/2013_01_19_044505_create_comments_table.php new file mode 100755 index 0000000000..3712ea9ed1 --- /dev/null +++ b/app/database/migrations/2013_01_19_044505_create_comments_table.php @@ -0,0 +1,37 @@ +increments('id')->unsigned(); + $table->integer('parent_id')->unsigned()->nullable(); + $table->integer('post_id')->unsigned(); + $table->integer('user_id')->unsigned(); + $table->text('content'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // Delete the `Comments` table + Schema::drop('comments'); + } + +} diff --git a/app/database/migrations/2013_03_23_193214_update_users_table.php b/app/database/migrations/2013_03_23_193214_update_users_table.php new file mode 100755 index 0000000000..bb06c53acb --- /dev/null +++ b/app/database/migrations/2013_03_23_193214_update_users_table.php @@ -0,0 +1,38 @@ +softDeletes(); + $table->string('website')->nullable(); + $table->string('country')->nullable(); + $table->string('gravatar')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // Update the users table + Schema::table('users', function($table) + { + $table->dropColumn('deleted_at', 'website', 'country', 'gravatar'); + }); + } + +} diff --git a/app/database/production.sqlite b/app/database/production.sqlite new file mode 100755 index 0000000000..e69de29bb2 diff --git a/app/database/seeds/.gitkeep b/app/database/seeds/.gitkeep new file mode 100755 index 0000000000..e69de29bb2 diff --git a/app/database/seeds/CommentsSeeder.php b/app/database/seeds/CommentsSeeder.php new file mode 100755 index 0000000000..f281f937e7 --- /dev/null +++ b/app/database/seeds/CommentsSeeder.php @@ -0,0 +1,71 @@ + 1, + 'post_id' => 1, + 'content' => file_get_contents(__DIR__.'/comment1-content.txt'), + 'created_at' => $date->modify('-9 day +1 hour'), + 'updated_at' => $date->modify('-9 day +1 hour'), + ); + $date = new DateTime; + $comments[] = array( + 'user_id' => 2, + 'post_id' => 1, + 'content' => file_get_contents(__DIR__.'/comment2-content.txt'), + 'created_at' => $date->modify('-7 day +2 hour'), + 'updated_at' => $date->modify('-7 day +2 hour'), + ); + $date = new DateTime; + $comments[] = array( + 'user_id' => 1, + 'post_id' => 1, + 'content' => file_get_contents(__DIR__.'/comment3-content.txt'), + 'created_at' => $date->modify('-2 day +3 hour'), + 'updated_at' => $date->modify('-2 day +3 hour'), + ); + + // Blog Post 2 comments + $date = new DateTime; + $comments[] = array( + 'user_id' => 1, + 'post_id' => 2, + 'content' => file_get_contents(__DIR__.'/comment1-content.txt'), + 'created_at' => $date->modify('-2 day +1 hour'), + 'updated_at' => $date->modify('-2 day +1 hour'), + ); + $date = new DateTime; + $comments[] = array( + 'user_id' => 2, + 'post_id' => 2, + 'content' => file_get_contents(__DIR__.'/comment2-content.txt'), + 'created_at' => $date->modify('-1 day +2 hour'), + 'updated_at' => $date->modify('-1 day +2 hour'), + ); + + // Blog Post 3 comments + $date = new DateTime; + $comments[] = array( + 'user_id' => 1, + 'post_id' => 3, + 'content' => file_get_contents(__DIR__.'/comment1-content.txt'), + 'created_at' => $date->modify('-1 day +1 hour'), + 'updated_at' => $date->modify('-1 day +1 hour'), + ); + + // Delete all the posts comments + DB::table('comments')->truncate(); + + // Insert the posts comments + Comment::insert($comments); + } + +} diff --git a/app/database/seeds/DatabaseSeeder.php b/app/database/seeds/DatabaseSeeder.php new file mode 100755 index 0000000000..d2ccf63f9a --- /dev/null +++ b/app/database/seeds/DatabaseSeeder.php @@ -0,0 +1,18 @@ +call('PostsSeeder'); + $this->call('CommentsSeeder'); + } + +} diff --git a/app/database/seeds/PostsSeeder.php b/app/database/seeds/PostsSeeder.php new file mode 100755 index 0000000000..bbcb3f8479 --- /dev/null +++ b/app/database/seeds/PostsSeeder.php @@ -0,0 +1,50 @@ + 1, + 'content' => file_get_contents(__DIR__ . '/post-content.txt'), + ); + + // Initialize empty array + $posts = array(); + + // Blog post 1 + $date = new DateTime; + $posts[] = array_merge($common, array( + 'title' => 'Lorem ipsum dolor sit amet', + 'slug' => 'lorem-ipsum-dolor-sit-amet', + 'created_at' => $date->modify('-10 day'), + 'updated_at' => $date->modify('-10 day'), + )); + + // Blog post 2 + $date = new DateTime; + $posts[] = array_merge($common, array( + 'title' => 'Vivendo suscipiantur vim te vix', + 'slug' => 'vivendo-suscipiantur-vim-te-vix', + 'created_at' => $date->modify('-4 day'), + 'updated_at' => $date->modify('-4 day'), + )); + + // Blog post 3 + $date = new DateTime; + $posts[] = array_merge($common, array( + 'title' => 'In iisque similique reprimique eum', + 'slug' => 'in-iisque-similique-reprimique-eum', + 'created_at' => $date->modify('-2 day'), + 'updated_at' => $date->modify('-2 day'), + )); + + // Delete all the blog posts + DB::table('posts')->truncate(); + + // Insert the blog posts + Post::insert($posts); + } + +} diff --git a/app/database/seeds/comment1-content.txt b/app/database/seeds/comment1-content.txt new file mode 100755 index 0000000000..2b84caaca9 --- /dev/null +++ b/app/database/seeds/comment1-content.txt @@ -0,0 +1 @@ +Lorem ipsum dolor sit amet, mutat utinam nonumy ea mel. \ No newline at end of file diff --git a/app/database/seeds/comment2-content.txt b/app/database/seeds/comment2-content.txt new file mode 100755 index 0000000000..9da328e19d --- /dev/null +++ b/app/database/seeds/comment2-content.txt @@ -0,0 +1 @@ +Lorem ipsum dolor sit amet, sale ceteros liberavisse duo ex, nam mazim maiestatis dissentiunt no. Iusto nominavi cu sed, has. \ No newline at end of file diff --git a/app/database/seeds/comment3-content.txt b/app/database/seeds/comment3-content.txt new file mode 100755 index 0000000000..ad1d089a9a --- /dev/null +++ b/app/database/seeds/comment3-content.txt @@ -0,0 +1 @@ +Et consul eirmod feugait mel! Te vix iuvaret feugiat repudiandae. Solet dolore lobortis mei te, saepe habemus imperdiet ex vim. Consequat signiferumque per no, ne pri erant vocibus invidunt te. \ No newline at end of file diff --git a/app/database/seeds/post-content.txt b/app/database/seeds/post-content.txt new file mode 100755 index 0000000000..635618184a --- /dev/null +++ b/app/database/seeds/post-content.txt @@ -0,0 +1,19 @@ +In mea autem etiam menandri, quot elitr vim ei, eos semper disputationi id? Per facer appetere eu, duo et animal maiestatis. Omnesque invidunt mnesarchum ex mel, vis no case senserit dissentias. Te mei minimum singulis inimicus, ne labores accusam necessitatibus vel, vivendo nominavi ne sed. Posidonium scriptorem consequuntur cum ex? Posse fabulas iudicabit in nec, eos cu electram forensibus, pro ei commodo tractatos reformidans. Qui eu lorem augue alterum, eos in facilis pericula mediocritatem? + +Est hinc legimus oporteat in. Sit ei melius delicatissimi. Duo ex qualisque adolescens! Pri cu solum aeque. Aperiri docendi vituperatoribus has ea! + +Sed ut ludus perfecto sensibus, no mea iisque facilisi. Choro tation melius et mea, ne vis nisl insolens. Vero autem scriptorem cu qui? Errem dolores no nam, mea tritani platonem id! At nec tantas consul, vis mundi petentium elaboraret ex, mel appareat maiestatis at. + +Sed et eros concludaturque. Mel ne aperiam comprehensam! Ornatus delicatissimi eam ex, sea an quidam tritani placerat? Ad eius iriure consequat eam, mazim temporibus conclusionemque eum ex. + +Te amet sumo usu, ne autem impetus scripserit duo, ius ei mutat labore inciderint! Id nulla comprehensam his? Ut eam deleniti argumentum, eam appellantur definitionem ad. Pro et purto partem mucius! + +Cu liber primis sed, esse evertitur vis ad. Ne graeco maiorum mea! In eos nostro docendi conclusionemque. Ne sit audire blandit tractatos? An nec dicam causae meliore, pro tamquam offendit efficiendi ut. + +Te dicta sadipscing nam, denique albucius conclusionemque ne usu, mea eu euripidis philosophia! Qui at vivendo efficiendi! Vim ex delenit blandit oportere, in iriure placerat cum. Te cum meis altera, ius ex quis veri. + +Mutat propriae eu has, mel ne veri bonorum tincidunt. Per noluisse sensibus honestatis ut, stet singulis ea eam, his dicunt vivendum mediocrem ei. Ei usu mutat efficiantur, eum verear aperiam definitiones an! Simul dicam instructior ius ei. Cu ius facer doming cotidieque! Quot principes eu his, usu vero dicat an. + +Ex dicta perpetua qui, pericula intellegam scripserit id vel. Id fabulas ornatus necessitatibus mel. Prompta dolorem appetere ea has. Vel ad expetendis instructior! + +Te his dolorem adversarium? Pri eu rebum viris, tation molestie id pri. Mel ei stet inermis dissentias. Sed ea dolorum detracto vituperata. Possit oportere similique cu nec, ridens animal quo ex? \ No newline at end of file diff --git a/app/filters.php b/app/filters.php new file mode 100755 index 0000000000..4b8a072784 --- /dev/null +++ b/app/filters.php @@ -0,0 +1,118 @@ +hasAccess('admin')) + { + // Show the insufficient permissions page + return App::abort(403); + } +}); + +/* +|-------------------------------------------------------------------------- +| CSRF Protection Filter +|-------------------------------------------------------------------------- +| +| The CSRF filter is responsible for protecting your application against +| cross-site request forgery attacks. If this special token in a user +| session does not match the one given in this request, we'll bail. +| +*/ + +Route::filter('csrf', function() +{ + if (Session::token() != Input::get('_token')) + { + throw new Illuminate\Session\TokenMismatchException; + } +}); diff --git a/app/lang/en/admin/blogs/message.php b/app/lang/en/admin/blogs/message.php new file mode 100755 index 0000000000..83256e2d91 --- /dev/null +++ b/app/lang/en/admin/blogs/message.php @@ -0,0 +1,22 @@ + 'Blog post does not exist.', + + 'create' => array( + 'error' => 'Blog post was not created, please try again.', + 'success' => 'Blog post created successfully.' + ), + + 'update' => array( + 'error' => 'Blog post was not updated, please try again', + 'success' => 'Blog post updated successfully.' + ), + + 'delete' => array( + 'error' => 'There was an issue deleting the blog post. Please try again.', + 'success' => 'The blog post was deleted successfully.' + ) + +); diff --git a/app/lang/en/admin/blogs/table.php b/app/lang/en/admin/blogs/table.php new file mode 100755 index 0000000000..cef74de7de --- /dev/null +++ b/app/lang/en/admin/blogs/table.php @@ -0,0 +1,9 @@ + 'Blog Title', + 'comments' => '# of Comments', + 'created_at' => 'Created at', + +); diff --git a/app/lang/en/admin/groups/message.php b/app/lang/en/admin/groups/message.php new file mode 100755 index 0000000000..6a0b9fa5a7 --- /dev/null +++ b/app/lang/en/admin/groups/message.php @@ -0,0 +1,21 @@ + 'Group already exists!', + 'group_not_found' => 'Group [:id] does not exist.', + 'group_name_required' => 'The name field is required', + + 'success' => array( + 'create' => 'Group was successfully created.', + 'update' => 'Group was successfully updated.', + 'delete' => 'Group was successfully deleted.', + ), + + 'delete' => array( + 'create' => 'There was an issue creating the group. Please try again.', + 'update' => 'There was an issue updating the group. Please try again.', + 'delete' => 'There was an issue deleting the group. Please try again.', + ), + +); diff --git a/app/lang/en/admin/groups/table.php b/app/lang/en/admin/groups/table.php new file mode 100755 index 0000000000..23f178b62a --- /dev/null +++ b/app/lang/en/admin/groups/table.php @@ -0,0 +1,10 @@ + 'Id', + 'name' => 'Name', + 'users' => '# of Users', + 'created_at' => 'Created at', + +); diff --git a/app/lang/en/admin/users/message.php b/app/lang/en/admin/users/message.php new file mode 100755 index 0000000000..3c85604bfd --- /dev/null +++ b/app/lang/en/admin/users/message.php @@ -0,0 +1,28 @@ + 'User already exists!', + 'user_not_found' => 'User [:id] does not exist.', + 'user_login_required' => 'The login field is required', + 'user_password_required' => 'The password is required.', + 'insufficient_permissions' => 'Insufficient Permissions.', + + 'success' => array( + 'create' => 'User was successfully created.', + 'update' => 'User was successfully updated.', + 'delete' => 'User was successfully deleted.', + 'ban' => 'User was successfully banned.', + 'unban' => 'User was successfully unbanned.', + 'suspend' => 'User was successfully suspended.', + 'unsuspend' => 'User was successfully unsuspended.', + 'restored' => 'User was successfully restored.' + ), + + 'error' => array( + 'create' => 'There was an issue creating the user. Please try again.', + 'update' => 'There was an issue updating the user. Please try again.', + 'delete' => 'There was an issue deleting the user. Please try again.', + ), + +); diff --git a/app/lang/en/admin/users/table.php b/app/lang/en/admin/users/table.php new file mode 100755 index 0000000000..7b2c2da604 --- /dev/null +++ b/app/lang/en/admin/users/table.php @@ -0,0 +1,12 @@ + 'Id', + 'first_name' => 'First Name', + 'last_name' => 'Last Name', + 'email' => 'Email', + 'activated' => 'Activated', + 'created_at' => 'Created at', + +); diff --git a/app/lang/en/auth/message.php b/app/lang/en/auth/message.php new file mode 100755 index 0000000000..a16ceed619 --- /dev/null +++ b/app/lang/en/auth/message.php @@ -0,0 +1,36 @@ + 'An account with the provided email, already exists.', + 'account_not_found' => 'This user account was not found.', + 'account_not_activated' => 'This user account is not activated.', + 'account_suspended' => 'This user account is suspended.', + 'account_banned' => 'This user account is banned.', + + 'signin' => array( + 'error' => 'There was a problem while trying to log you in, please try again.', + 'success' => 'You have successfully logged in.', + ), + + 'signup' => array( + 'error' => 'There was a problem while trying to create your account, please try again.', + 'success' => 'Account sucessfully created.', + ), + + 'forgot-password' => array( + 'error' => 'There was a problem while trying to get a reset password code, please try again.', + 'success' => 'Password recovery email successfully sent.', + ), + + 'forgot-password-confirm' => array( + 'error' => 'There was a problem while trying to reset your password, please try again.', + 'success' => 'Your password has been successfully reset.', + ), + + 'activate' => array( + 'error' => 'There was a problem while trying to activate your account, please try again.', + 'success' => 'Your account has been successfully activated.', + ), + +); diff --git a/app/lang/en/button.php b/app/lang/en/button.php new file mode 100755 index 0000000000..363ff868fc --- /dev/null +++ b/app/lang/en/button.php @@ -0,0 +1,9 @@ + 'Edit', + 'delete' => 'Delete', + 'restore' => 'Restore', + +); diff --git a/app/lang/en/general.php b/app/lang/en/general.php new file mode 100755 index 0000000000..5f2985a2bf --- /dev/null +++ b/app/lang/en/general.php @@ -0,0 +1,8 @@ + 'Yes', + 'no' => 'No' + +); diff --git a/app/lang/en/pagination.php b/app/lang/en/pagination.php new file mode 100755 index 0000000000..6b99ef5fd8 --- /dev/null +++ b/app/lang/en/pagination.php @@ -0,0 +1,20 @@ + '« Previous', + + 'next' => 'Next »', + +); diff --git a/app/lang/en/reminders.php b/app/lang/en/reminders.php new file mode 100755 index 0000000000..63cf8333ba --- /dev/null +++ b/app/lang/en/reminders.php @@ -0,0 +1,22 @@ + "Passwords must be six characters and match the confirmation.", + + "user" => "We can't find a user with that e-mail address.", + + "token" => "This password reset token is invalid.", + +); diff --git a/app/lang/en/table.php b/app/lang/en/table.php new file mode 100755 index 0000000000..f655c15d7c --- /dev/null +++ b/app/lang/en/table.php @@ -0,0 +1,7 @@ + 'Actions' + +); diff --git a/app/lang/en/validation.php b/app/lang/en/validation.php new file mode 100755 index 0000000000..85a62aa508 --- /dev/null +++ b/app/lang/en/validation.php @@ -0,0 +1,93 @@ + "The :attribute must be accepted.", + "active_url" => "The :attribute is not a valid URL.", + "after" => "The :attribute must be a date after :date.", + "alpha" => "The :attribute may only contain letters.", + "alpha_dash" => "The :attribute may only contain letters, numbers, and dashes.", + "alpha_num" => "The :attribute may only contain letters and numbers.", + "before" => "The :attribute must be a date before :date.", + "between" => array( + "numeric" => "The :attribute must be between :min - :max.", + "file" => "The :attribute must be between :min - :max kilobytes.", + "string" => "The :attribute must be between :min - :max characters.", + ), + "confirmed" => "The :attribute confirmation does not match.", + "date" => "The :attribute is not a valid date.", + "date_format" => "The :attribute does not match the format :format.", + "different" => "The :attribute and :other must be different.", + "digits" => "The :attribute must be :digits digits.", + "digits_between" => "The :attribute must be between :min and :max digits.", + "email" => "The :attribute format is invalid.", + "exists" => "The selected :attribute is invalid.", + "image" => "The :attribute must be an image.", + "in" => "The selected :attribute is invalid.", + "integer" => "The :attribute must be an integer.", + "ip" => "The :attribute must be a valid IP address.", + "max" => array( + "numeric" => "The :attribute may not be greater than :max.", + "file" => "The :attribute may not be greater than :max kilobytes.", + "string" => "The :attribute may not be greater than :max characters.", + ), + "mimes" => "The :attribute must be a file of type: :values.", + "min" => array( + "numeric" => "The :attribute must be at least :min.", + "file" => "The :attribute must be at least :min kilobytes.", + "string" => "The :attribute must be at least :min characters.", + ), + "not_in" => "The selected :attribute is invalid.", + "numeric" => "The :attribute must be a number.", + "regex" => "The :attribute format is invalid.", + "required" => "The :attribute field is required.", + "required_if" => "The :attribute field is required when :other is :value.", + "required_with" => "The :attribute field is required when :values is present.", + "required_without" => "The :attribute field is required when :values is not present.", + "same" => "The :attribute and :other must match.", + "size" => array( + "numeric" => "The :attribute must be :size.", + "file" => "The :attribute must be :size kilobytes.", + "string" => "The :attribute must be :size characters.", + ), + "unique" => "The :attribute has already been taken.", + "url" => "The :attribute format is invalid.", + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => array(), + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => array(), + +); diff --git a/app/models/Authentication.php b/app/models/Authentication.php new file mode 100755 index 0000000000..071503c286 --- /dev/null +++ b/app/models/Authentication.php @@ -0,0 +1,15 @@ +belongsTo('User'); + } + +} diff --git a/app/models/Comment.php b/app/models/Comment.php new file mode 100755 index 0000000000..322c6b4c08 --- /dev/null +++ b/app/models/Comment.php @@ -0,0 +1,35 @@ +content); + } + + /** + * Get the comment's author. + * + * @return User + */ + public function author() + { + return $this->belongsTo('User', 'user_id'); + } + + /** + * Get the comment's post's. + * + * @return Blog\Post + */ + public function post() + { + return $this->belongsTo('Post'); + } + +} diff --git a/app/models/Group.php b/app/models/Group.php new file mode 100755 index 0000000000..222656f095 --- /dev/null +++ b/app/models/Group.php @@ -0,0 +1,7 @@ +comments()->delete(); + + // Delete the blog post + return parent::delete(); + } + + /** + * Returns a formatted post content entry, this ensures that + * line breaks are returned. + * + * @return string + */ + public function content() + { + return nl2br($this->content); + } + + /** + * Return the post's author. + * + * @return User + */ + public function author() + { + return $this->belongsTo('User', 'user_id'); + } + + /** + * Return how many comments this post has. + * + * @return array + */ + public function comments() + { + return $this->hasMany('Comment'); + } + + /** + * Return the URL to the post. + * + * @return string + */ + public function url() + { + return URL::route('view-post', $this->slug); + } + + /** + * Return the post thumbnail image url. + * + * @return string + */ + public function thumbnail() + { + # you should save the image url on the database + # and return that url here. + + return 'http://lorempixel.com/130/90/business/'; + } + +} diff --git a/app/models/User.php b/app/models/User.php new file mode 100755 index 0000000000..be3fb9bfcb --- /dev/null +++ b/app/models/User.php @@ -0,0 +1,39 @@ +first_name} {$this->last_name}"; + } + + /** + * Returns the user Gravatar image url. + * + * @return string + */ + public function gravatar() + { + // Generate the Gravatar hash + $gravatar = md5(strtolower(trim($this->gravatar))); + + // Return the Gravatar url + return "//gravatar.org/avatar/{$gravatar}"; + } + +} diff --git a/app/routes.php b/app/routes.php new file mode 100755 index 0000000000..a57a3a9b10 --- /dev/null +++ b/app/routes.php @@ -0,0 +1,144 @@ + 'admin'), function() +{ + + # Blog Management + Route::group(array('prefix' => 'blogs'), function() + { + Route::get('/', array('as' => 'blogs', 'uses' => 'Controllers\Admin\BlogsController@getIndex')); + Route::get('create', array('as' => 'create/blog', 'uses' => 'Controllers\Admin\BlogsController@getCreate')); + Route::post('create', 'Controllers\Admin\BlogsController@postCreate'); + Route::get('{blogId}/edit', array('as' => 'update/blog', 'uses' => 'Controllers\Admin\BlogsController@getEdit')); + Route::post('{blogId}/edit', 'Controllers\Admin\BlogsController@postEdit'); + Route::get('{blogId}/delete', array('as' => 'delete/blog', 'uses' => 'Controllers\Admin\BlogsController@getDelete')); + Route::get('{blogId}/restore', array('as' => 'restore/blog', 'uses' => 'Controllers\Admin\BlogsController@getRestore')); + }); + + # User Management + Route::group(array('prefix' => 'users'), function() + { + Route::get('/', array('as' => 'users', 'uses' => 'Controllers\Admin\UsersController@getIndex')); + Route::get('create', array('as' => 'create/user', 'uses' => 'Controllers\Admin\UsersController@getCreate')); + Route::post('create', 'Controllers\Admin\UsersController@postCreate'); + Route::get('{userId}/edit', array('as' => 'update/user', 'uses' => 'Controllers\Admin\UsersController@getEdit')); + Route::post('{userId}/edit', 'Controllers\Admin\UsersController@postEdit'); + Route::get('{userId}/delete', array('as' => 'delete/user', 'uses' => 'Controllers\Admin\UsersController@getDelete')); + Route::get('{userId}/restore', array('as' => 'restore/user', 'uses' => 'Controllers\Admin\UsersController@getRestore')); + }); + + # Group Management + Route::group(array('prefix' => 'groups'), function() + { + Route::get('/', array('as' => 'groups', 'uses' => 'Controllers\Admin\GroupsController@getIndex')); + Route::get('create', array('as' => 'create/group', 'uses' => 'Controllers\Admin\GroupsController@getCreate')); + Route::post('create', 'Controllers\Admin\GroupsController@postCreate'); + Route::get('{groupId}/edit', array('as' => 'update/group', 'uses' => 'Controllers\Admin\GroupsController@getEdit')); + Route::post('{groupId}/edit', 'Controllers\Admin\GroupsController@postEdit'); + Route::get('{groupId}/delete', array('as' => 'delete/group', 'uses' => 'Controllers\Admin\GroupsController@getDelete')); + Route::get('{groupId}/restore', array('as' => 'restore/group', 'uses' => 'Controllers\Admin\GroupsController@getRestore')); + }); + + # Dashboard + Route::get('/', array('as' => 'admin', 'uses' => 'Controllers\Admin\DashboardController@getIndex')); + +}); + +/* +|-------------------------------------------------------------------------- +| Authentication and Authorization Routes +|-------------------------------------------------------------------------- +| +| +| +*/ + +Route::group(array('prefix' => 'auth'), function() +{ + + # Login + Route::get('signin', array('as' => 'signin', 'uses' => 'AuthController@getSignin')); + Route::post('signin', 'AuthController@postSignin'); + + # Register + Route::get('signup', array('as' => 'signup', 'uses' => 'AuthController@getSignup')); + Route::post('signup', 'AuthController@postSignup'); + + # Account Activation + Route::get('activate/{activationCode}', array('as' => 'activate', 'uses' => 'AuthController@getActivate')); + + # Forgot Password + Route::get('forgot-password', array('as' => 'forgot-password', 'uses' => 'AuthController@getForgotPassword')); + Route::post('forgot-password', 'AuthController@postForgotPassword'); + + # Forgot Password Confirmation + Route::get('forgot-password/{passwordResetCode}', array('as' => 'forgot-password-confirm', 'uses' => 'AuthController@getForgotPasswordConfirm')); + Route::post('forgot-password/{passwordResetCode}', 'AuthController@postForgotPasswordConfirm'); + + # Logout + Route::get('logout', array('as' => 'logout', 'uses' => 'AuthController@getLogout')); + +}); + +/* +|-------------------------------------------------------------------------- +| Account Routes +|-------------------------------------------------------------------------- +| +| +| +*/ + +Route::group(array('prefix' => 'account'), function() +{ + + # Account Dashboard + Route::get('/', array('as' => 'account', 'uses' => 'Controllers\Account\DashboardController@getIndex')); + + # Profile + Route::get('profile', array('as' => 'profile', 'uses' => 'Controllers\Account\ProfileController@getIndex')); + Route::post('profile', 'Controllers\Account\ProfileController@postIndex'); + + # Change Password + Route::get('change-password', array('as' => 'change-password', 'uses' => 'Controllers\Account\ChangePasswordController@getIndex')); + Route::post('change-password', 'Controllers\Account\ChangePasswordController@postIndex'); + + # Change Email + Route::get('change-email', array('as' => 'change-email', 'uses' => 'Controllers\Account\ChangeEmailController@getIndex')); + Route::post('change-email', 'Controllers\Account\ChangeEmailController@postIndex'); + +}); + +/* +|-------------------------------------------------------------------------- +| Application Routes +|-------------------------------------------------------------------------- +| +| Here is where you can register all of the routes for an application. +| It's a breeze. Simply tell Laravel the URIs it should respond to +| and give it the Closure to execute when that URI is requested. +| +*/ + +Route::get('about-us', function() +{ + // + return View::make('frontend/about-us'); +}); + +Route::get('contact-us', array('as' => 'contact-us', 'uses' => 'ContactUsController@getIndex')); +Route::post('contact-us', 'ContactUsController@postIndex'); + +Route::get('blog/{postSlug}', array('as' => 'view-post', 'uses' => 'BlogController@getView')); +Route::post('blog/{postSlug}', 'BlogController@postView'); + +Route::get('/', array('as' => 'home', 'uses' => 'BlogController@getIndex')); diff --git a/app/start/artisan.php b/app/start/artisan.php new file mode 100755 index 0000000000..b03a23f974 --- /dev/null +++ b/app/start/artisan.php @@ -0,0 +1,14 @@ +client->request('GET', '/'); + + $this->assertTrue($this->client->getResponse()->isOk()); + } + +} \ No newline at end of file diff --git a/app/tests/TestCase.php b/app/tests/TestCase.php new file mode 100755 index 0000000000..49b80fc274 --- /dev/null +++ b/app/tests/TestCase.php @@ -0,0 +1,19 @@ + +

+ Create a New Blog Post + +
+ Back +
+

+ + + + + +
+ + + + +
+ +
+ +
+ +
+ + {{ $errors->first('title', ':message') }} +
+
+ + +
+ +
+
+ + {{ str_finish(URL::to('/'), '/') }} + + +
+
+
+ + +
+ +
+ + {{ $errors->first('content', ':message') }} +
+
+
+ + +
+ +
+ +
+ + {{ $errors->first('meta-title', ':message') }} +
+
+ + +
+ +
+ + {{ $errors->first('meta-description', ':message') }} +
+
+ + +
+ +
+ + {{ $errors->first('meta-keywords', ':message') }} +
+
+
+
+ + +
+
+ Cancel + + + + +
+
+
+@stop diff --git a/app/views/backend/blogs/edit.blade.php b/app/views/backend/blogs/edit.blade.php new file mode 100755 index 0000000000..c47d13c362 --- /dev/null +++ b/app/views/backend/blogs/edit.blade.php @@ -0,0 +1,109 @@ +@extends('backend/layouts/default') + +{{-- Page title --}} +@section('title') +Blog Post Update :: +@parent +@stop + +{{-- Page content --}} +@section('content') + + + + + +
+ + + + +
+ +
+ +
+ +
+ + {{ $errors->first('title', ':message') }} +
+
+ + +
+ +
+
+ + {{ str_finish(URL::to('/'), '/') }} + + +
+
+
+ + +
+ +
+ + {{ $errors->first('content', ':message') }} +
+
+
+ + +
+ +
+ +
+ + {{ $errors->first('meta-title', ':message') }} +
+
+ + +
+ +
+ + {{ $errors->first('meta-description', ':message') }} +
+
+ + +
+ +
+ + {{ $errors->first('meta-keywords', ':message') }} +
+
+
+
+ + +
+
+ Cancel + + + + +
+
+
+@stop diff --git a/app/views/backend/blogs/index.blade.php b/app/views/backend/blogs/index.blade.php new file mode 100755 index 0000000000..1b8643910a --- /dev/null +++ b/app/views/backend/blogs/index.blade.php @@ -0,0 +1,48 @@ +@extends('backend/layouts/default') + +{{-- Page title --}} +@section('title') +Blog Management :: +@parent +@stop + +{{-- Page content --}} +@section('content') + + +{{ $posts->links() }} + + + + + + + + + + + + @foreach ($posts as $post) + + + + + + + @endforeach + +
@lang('admin/blogs/table.title')@lang('admin/blogs/table.comments')@lang('admin/blogs/table.created_at')@lang('table.actions')
{{ $post->title }}{{ $post->comments()->count() }}{{ $post->created_at->diffForHumans() }} + @lang('button.edit') + @lang('button.delete') +
+ +{{ $posts->links() }} +@stop diff --git a/app/views/backend/dashboard.blade.php b/app/views/backend/dashboard.blade.php new file mode 100755 index 0000000000..e1126e3dd2 --- /dev/null +++ b/app/views/backend/dashboard.blade.php @@ -0,0 +1 @@ +@extends('backend/layouts/default') diff --git a/app/views/backend/groups/create.blade.php b/app/views/backend/groups/create.blade.php new file mode 100755 index 0000000000..2e4a38aa70 --- /dev/null +++ b/app/views/backend/groups/create.blade.php @@ -0,0 +1,93 @@ +@extends('backend/layouts/default') + +{{-- Web site Title --}} +@section('title') +Create a Group :: +@parent +@stop + +{{-- Content --}} +@section('content') + + + + + +
+ + + + +
+ +
+ +
+ +
+ + {{ $errors->first('name', ':message') }} +
+
+
+ + +
+
+
+ + @foreach ($permissions as $area => $permissions) +
+ {{ $area }} + + @foreach ($permissions as $permission) +
+ + +
+ +
+ +
+ +
+
+ @endforeach + +
+ @endforeach + +
+
+
+
+ + +
+
+ Cancel + + + + +
+
+
+@stop diff --git a/app/views/backend/groups/edit.blade.php b/app/views/backend/groups/edit.blade.php new file mode 100755 index 0000000000..707721ba7f --- /dev/null +++ b/app/views/backend/groups/edit.blade.php @@ -0,0 +1,93 @@ +@extends('backend/layouts/default') + +{{-- Web site Title --}} +@section('title') +Group Update :: +@parent +@stop + +{{-- Content --}} +@section('content') + + + + + +
+ + + + +
+ +
+ +
+ +
+ + {{ $errors->first('name', ':message') }} +
+
+
+ + +
+
+
+ + @foreach ($permissions as $area => $permissions) +
+ {{ $area }} + + @foreach ($permissions as $permission) +
+ + +
+ +
+ +
+ +
+
+ @endforeach + +
+ @endforeach + +
+
+
+
+ + +
+
+ Cancel + + + + +
+
+
+@stop diff --git a/app/views/backend/groups/index.blade.php b/app/views/backend/groups/index.blade.php new file mode 100755 index 0000000000..383634759f --- /dev/null +++ b/app/views/backend/groups/index.blade.php @@ -0,0 +1,56 @@ +@extends('backend/layouts/default') + +{{-- Web site Title --}} +@section('title') +Group Management :: +@parent +@stop + +{{-- Content --}} +@section('content') + + +{{ $groups->links() }} + + + + + + + + + + + + + @if ($groups->count() >= 1) + @foreach ($groups as $group) + + + + + + + + @endforeach + @else + + + + @endif + +
@lang('admin/groups/table.id')@lang('admin/groups/table.name')@lang('admin/groups/table.users')@lang('admin/groups/table.created_at')@lang('table.actions')
{{ $group->id }}{{ $group->name }}{{ $group->users()->count() }}{{ $group->created_at->diffForHumans() }} + @lang('button.edit') + @lang('button.delete') +
No results
+ +{{ $groups->links() }} +@stop diff --git a/app/views/backend/layouts/default.blade.php b/app/views/backend/layouts/default.blade.php new file mode 100755 index 0000000000..5fde79932d --- /dev/null +++ b/app/views/backend/layouts/default.blade.php @@ -0,0 +1,95 @@ + + + + + + + @section('title') + Administration + @show + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + @include('frontend/notifications') + + + @yield('content') +
+ + + + + + diff --git a/app/views/backend/users/create.blade.php b/app/views/backend/users/create.blade.php new file mode 100755 index 0000000000..5639f60b55 --- /dev/null +++ b/app/views/backend/users/create.blade.php @@ -0,0 +1,166 @@ +@extends('backend/layouts/default') + +{{-- Page title --}} +@section('title') +Create a User :: +@parent +@stop + +{{-- Page content --}} +@section('content') + + + + + +
+ + + + +
+ +
+ +
+ +
+ + {{ $errors->first('first_name', ':message') }} +
+
+ + +
+ +
+ + {{ $errors->first('last_name', ':message') }} +
+
+ + +
+ +
+ + {{ $errors->first('email', ':message') }} +
+
+ + +
+ +
+ + {{ $errors->first('password', ':message') }} +
+
+ + +
+ +
+ + {{ $errors->first('password_confirm', ':message') }} +
+
+ + +
+ +
+ + {{ $errors->first('activated', ':message') }} +
+
+ + +
+ +
+ + + + Select a group to assign to the user, remember that a user takes on the permissions of the group they are assigned. + +
+
+
+ + +
+
+
+ + @foreach ($permissions as $area => $permissions) +
+ {{ $area }} + + @foreach ($permissions as $permission) +
+ + +
+ +
+ +
+ +
+ + @if ($permission['can_inherit']) +
+ +
+ @endif +
+ @endforeach + +
+ @endforeach + +
+
+
+
+ + +
+
+ Cancel + + + + +
+
+
+@stop diff --git a/app/views/backend/users/edit.blade.php b/app/views/backend/users/edit.blade.php new file mode 100755 index 0000000000..8c562ff2fd --- /dev/null +++ b/app/views/backend/users/edit.blade.php @@ -0,0 +1,166 @@ +@extends('backend/layouts/default') + +{{-- Page title --}} +@section('title') +User Update :: +@parent +@stop + +{{-- Page content --}} +@section('content') + + + + + +
+ + + + +
+ +
+ +
+ +
+ + {{ $errors->first('first_name', ':message') }} +
+
+ + +
+ +
+ + {{ $errors->first('last_name', ':message') }} +
+
+ + +
+ +
+ + {{ $errors->first('email', ':message') }} +
+
+ + +
+ +
+ + {{ $errors->first('password', ':message') }} +
+
+ + +
+ +
+ + {{ $errors->first('password_confirm', ':message') }} +
+
+ + +
+ +
+ id === Sentry::getId() ? ' disabled="disabled"' : '') }} name="activated" id="activated"> + + + + {{ $errors->first('activated', ':message') }} +
+
+ + +
+ +
+ + + + Select a group to assign to the user, remember that a user takes on the permissions of the group they are assigned. + +
+
+
+ + +
+
+
+ + @foreach ($permissions as $area => $permissions) +
+ {{ $area }} + + @foreach ($permissions as $permission) +
+ + +
+ +
+ +
+ +
+ + @if ($permission['can_inherit']) +
+ +
+ @endif +
+ @endforeach + +
+ @endforeach + +
+
+
+
+ + +
+
+ Cancel + + + + +
+
+
+@stop diff --git a/app/views/backend/users/index.blade.php b/app/views/backend/users/index.blade.php new file mode 100755 index 0000000000..e415401601 --- /dev/null +++ b/app/views/backend/users/index.blade.php @@ -0,0 +1,66 @@ +@extends('backend/layouts/default') + +{{-- Page title --}} +@section('title') +User Management :: +@parent +@stop + +{{-- Page content --}} +@section('content') + + +Include Deleted Users +Include Only Deleted Users + +{{ $users->links() }} + + + + + + + + + + + + + + + @foreach ($users as $user) + + + + + + + + + + @endforeach + +
@lang('admin/users/table.id')@lang('admin/users/table.first_name')@lang('admin/users/table.last_name')@lang('admin/users/table.email')@lang('admin/users/table.activated')@lang('admin/users/table.created_at')@lang('table.actions')
{{ $user->id }}{{ $user->first_name }}{{ $user->last_name }}{{ $user->email }}@lang('general.' . ($user->isActivated() ? 'yes' : 'no')){{ $user->created_at->diffForHumans() }} + @lang('button.edit') + + @if ( ! is_null($user->deleted_at)) + @lang('button.restore') + @else + @if (Sentry::getId() !== $user->id) + @lang('button.delete') + @else + @lang('button.delete') + @endif + @endif +
+ +{{ $users->links() }} +@stop diff --git a/app/views/emails/auth/reminder.blade.php b/app/views/emails/auth/reminder.blade.php new file mode 100755 index 0000000000..2976327b5d --- /dev/null +++ b/app/views/emails/auth/reminder.blade.php @@ -0,0 +1,13 @@ + + + + + + +

Password Reset

+ +
+ To reset your password, complete this form: {{ URL::to('password/reset', array($token)) }}. +
+ + \ No newline at end of file diff --git a/app/views/emails/forgot-password.blade.php b/app/views/emails/forgot-password.blade.php new file mode 100755 index 0000000000..983a6779ff --- /dev/null +++ b/app/views/emails/forgot-password.blade.php @@ -0,0 +1,13 @@ +@extends('emails/layouts/default') + +@section('content') +

Hello {{ $user->first_name }},

+ +

Please click on the following link to updated your password:

+ +

{{ $forgotPasswordUrl }}

+ +

Best regards,

+ +

SiteNameHere Team

+@stop diff --git a/app/views/emails/layouts/default.blade.php b/app/views/emails/layouts/default.blade.php new file mode 100755 index 0000000000..24f8d8f5ad --- /dev/null +++ b/app/views/emails/layouts/default.blade.php @@ -0,0 +1,10 @@ + + + + + + + + @yield('content') + + diff --git a/app/views/emails/register-activate.blade.php b/app/views/emails/register-activate.blade.php new file mode 100755 index 0000000000..e5dd3d6182 --- /dev/null +++ b/app/views/emails/register-activate.blade.php @@ -0,0 +1,13 @@ +@extends('emails/layouts/default') + +@section('content') +

Hello {{ $user->first_name }},

+ +

Welcome to SiteNameHere! Please click on the following link to confirm your SiteNameHere account:

+ +

{{ $activationUrl }}

+ +

Best regards,

+ +

SiteNameHere Team

+@stop diff --git a/app/views/error/403.blade.php b/app/views/error/403.blade.php new file mode 100755 index 0000000000..41f0da5c31 --- /dev/null +++ b/app/views/error/403.blade.php @@ -0,0 +1,121 @@ + + + + + + Error 403 - Forbidden + + + + +
+
+
+

Access Forbidden

+ +

Server Error: 403 (Forbidden)

+ +
+ +

What does this mean?

+ +

+ You don't have the necessary permissions to access to this page. +

+ +

+ Perhaps you would like to go to our home page? +

+
+
+ + diff --git a/app/views/error/404.blade.php b/app/views/error/404.blade.php new file mode 100755 index 0000000000..96d1bc0ece --- /dev/null +++ b/app/views/error/404.blade.php @@ -0,0 +1,125 @@ + + + + + + Error 404 - Not Found + + + + +
+
+
+ + +

+ +

Server Error: 404 (Not Found)

+ +
+ +

What does this mean?

+ +

+ We couldn't find the page you requested on our servers. We're really sorry + about that. It's our fault, not yours. We'll work hard to get this page + back online as soon as possible. +

+ +

+ Perhaps you would like to go to our home page? +

+
+
+ + diff --git a/app/views/error/500.blade.php b/app/views/error/500.blade.php new file mode 100755 index 0000000000..87385509d9 --- /dev/null +++ b/app/views/error/500.blade.php @@ -0,0 +1,125 @@ + + + + + + Error 500 - Internal Server Error + + + + +
+
+
+ + +

+ +

Server Error: 500 (Internal Server Error)

+ +
+ +

What does this mean?

+ +

+ Something went wrong on our servers while we were processing your request. + We're really sorry about this, and will work hard to get this resolved as + soon as possible. +

+ +

+ Perhaps you would like to go to our home page? +

+
+
+ + diff --git a/app/views/error/503.blade.php b/app/views/error/503.blade.php new file mode 100755 index 0000000000..dbe2b3736a --- /dev/null +++ b/app/views/error/503.blade.php @@ -0,0 +1,111 @@ + + + + + + Scheduled Maintenance + + + + +
+
+
+

Scheduled Maintenance

+ +

+ We are under a scheduled maintenance and we'll be back shortly! +

+
+
+ + diff --git a/app/views/frontend/about-us.blade.php b/app/views/frontend/about-us.blade.php new file mode 100755 index 0000000000..a446c7efc8 --- /dev/null +++ b/app/views/frontend/about-us.blade.php @@ -0,0 +1,14 @@ +@extends('frontend/layouts/default') + +{{-- Page title --}} +@section('title') +About us :: +@parent +@stop + +{{-- Page content --}} +@section('content') + +About us page. + +@stop diff --git a/app/views/frontend/account/change-email.blade.php b/app/views/frontend/account/change-email.blade.php new file mode 100755 index 0000000000..f9f50ac88f --- /dev/null +++ b/app/views/frontend/account/change-email.blade.php @@ -0,0 +1,59 @@ +@extends('frontend/layouts/account') + +{{-- Page title --}} +@section('title') +Change your Email +@stop + +{{-- Account page content --}} +@section('account-content') + + +
+ + + + + + + +
+ +
+ + {{ $errors->first('email', ':message') }} +
+
+ + +
+ +
+ + {{ $errors->first('email_confirm', ':message') }} +
+
+ + +
+ +
+ + {{ $errors->first('current_password', ':message') }} +
+
+ +
+ + +
+
+ + + I forgot my password +
+
+
+@stop diff --git a/app/views/frontend/account/change-password.blade.php b/app/views/frontend/account/change-password.blade.php new file mode 100755 index 0000000000..d8f983f750 --- /dev/null +++ b/app/views/frontend/account/change-password.blade.php @@ -0,0 +1,119 @@ +@extends('frontend/layouts/account') + +{{-- Page title --}} +@section('title') +Change your Password +@stop + +{{-- Account page content --}} +@section('account-content') + + +
+ + + + +
+ +
+ + {{ $errors->first('old_password', ':message') }} +
+
+ + +
+ +
+ + {{ $errors->first('password', ':message') }} +
+
+ + +
+ +
+ + {{ $errors->first('password_confirm', ':message') }} +
+
+ +
+ + +
+
+ + + I forgot my password +
+
+
+@stop + +@section('contenxt') + +
+ + + + +
+ + +
+
+ + + + + + + +
+ +
+ + {{ $errors->first('old_password', ':message') }} +
+
+ + +
+ +
+ + {{ $errors->first('email', ':message') }} +
+
+ + +
+ +
+ + {{ $errors->first('email_confirm', ':message') }} +
+
+ + +
+
+ Cancel + + +
+
+
+
+
+
+@stop diff --git a/app/views/frontend/account/profile.blade.php b/app/views/frontend/account/profile.blade.php new file mode 100755 index 0000000000..b821b2c80b --- /dev/null +++ b/app/views/frontend/account/profile.blade.php @@ -0,0 +1,77 @@ +@extends('frontend/layouts/account') + +{{-- Page title --}} +@section('title') +Your Profile +@stop + +{{-- Account page content --}} +@section('account-content') + + +
+ + + + +
+ +
+ + {{ $errors->first('first_name', ':message') }} +
+
+ + +
+ +
+ + {{ $errors->first('last_name', ':message') }} +
+
+ + +
+ +
+ + {{ $errors->first('website', ':message') }} +
+
+ + +
+ +
+ + {{ $errors->first('country', ':message') }} +
+
+ + +
+ +
+ + {{ $errors->first('gravatar', ':message') }} +
+ +

+ + Change your avatar at Gravatar.com. +

+
+ +
+ + +
+
+ +
+
+
+@stop diff --git a/app/views/frontend/auth/forgot-password-confirm.blade.php b/app/views/frontend/auth/forgot-password-confirm.blade.php new file mode 100755 index 0000000000..8ed5a8bf72 --- /dev/null +++ b/app/views/frontend/auth/forgot-password-confirm.blade.php @@ -0,0 +1,45 @@ +@extends('frontend/layouts/default') + +{{-- Page title --}} +@section('title') +Forgot Password :: +@parent +@stop + +{{-- Page content --}} +@section('content') + +
+ + + + +
+ +
+ + {{ $errors->first('password', ':message') }} +
+
+ + +
+ +
+ + {{ $errors->first('password_confirm', ':message') }} +
+
+ + +
+
+ Cancel + + +
+
+
+@stop diff --git a/app/views/frontend/auth/forgot-password.blade.php b/app/views/frontend/auth/forgot-password.blade.php new file mode 100755 index 0000000000..f46ff7baa3 --- /dev/null +++ b/app/views/frontend/auth/forgot-password.blade.php @@ -0,0 +1,36 @@ +@extends('frontend/layouts/default') + +{{-- Page title --}} +@section('title') +Forgot Password :: +@parent +@stop + +{{-- Page content --}} +@section('content') + +
+ + + + +
+ +
+ + {{ $errors->first('email', ':message') }} +
+
+ + +
+
+ Cancel + + +
+
+
+@stop diff --git a/app/views/frontend/auth/signin.blade.php b/app/views/frontend/auth/signin.blade.php new file mode 100755 index 0000000000..c88bb4e9c4 --- /dev/null +++ b/app/views/frontend/auth/signin.blade.php @@ -0,0 +1,60 @@ +@extends('frontend/layouts/default') + +{{-- Page title --}} +@section('title') +Account Sign in :: +@parent +@stop + +{{-- Page content --}} +@section('content') + +
+
+ + + + +
+ +
+ + {{ $errors->first('email', ':message') }} +
+
+ + +
+ +
+ + {{ $errors->first('password', ':message') }} +
+
+ + +
+
+ +
+
+ +
+ + +
+
+ Cancel + + + + I forgot my password +
+
+
+
+@stop diff --git a/app/views/frontend/auth/signup.blade.php b/app/views/frontend/auth/signup.blade.php new file mode 100755 index 0000000000..21f7513848 --- /dev/null +++ b/app/views/frontend/auth/signup.blade.php @@ -0,0 +1,85 @@ +@extends('frontend/layouts/default') + +{{-- Page title --}} +@section('title') +Account Sign up :: +@parent +@stop + +{{-- Page content --}} +@section('content') + +
+
+ + + + +
+ +
+ + {{ $errors->first('first_name', ':message') }} +
+
+ + +
+ +
+ + {{ $errors->first('last_name', ':message') }} +
+
+ + +
+ +
+ + {{ $errors->first('email', ':message') }} +
+
+ + +
+ +
+ + {{ $errors->first('email_confirm', ':message') }} +
+
+ + +
+ +
+ + {{ $errors->first('password', ':message') }} +
+
+ + +
+ +
+ + {{ $errors->first('password_confirm', ':message') }} +
+
+ +
+ + +
+
+ Cancel + + +
+
+
+
+@stop diff --git a/app/views/frontend/blog/index.blade.php b/app/views/frontend/blog/index.blade.php new file mode 100755 index 0000000000..d86e78895b --- /dev/null +++ b/app/views/frontend/blog/index.blade.php @@ -0,0 +1,46 @@ +@extends('frontend/layouts/default') + +{{-- Page content --}} +@section('content') +@foreach ($posts as $post) +
+
+ + + + +
+
+ +
+
+

+ {{ Str::limit($post->content, 200) }} +

+

Read more...

+
+
+ + +
+
+

+

+ by {{ $post->author->first_name }} + | {{ $post->created_at->diffForHumans() }} + | {{ $post->comments()->count() }} Comments +

+
+
+
+
+ +
+@endforeach + +{{ $posts->links() }} +@stop diff --git a/app/views/frontend/blog/view-post.blade.php b/app/views/frontend/blog/view-post.blade.php new file mode 100755 index 0000000000..293e0f1a61 --- /dev/null +++ b/app/views/frontend/blog/view-post.blade.php @@ -0,0 +1,91 @@ +@extends('frontend/layouts/default') + +{{-- Page title --}} +@section('title') +{{ $post->title }} :: +@parent +@stop + +{{-- Update the Meta Title --}} +@section('meta_title') + +@parent +@stop + +{{-- Update the Meta Description --}} +@section('meta_description') + +@parent +@stop + +{{-- Update the Meta Keywords --}} +@section('meta_keywords') + +@parent +@stop + +{{-- Page content --}} +@section('content') +

{{ $post->title }}

+ +

{{ $post->content() }}

+ +
+ Posted {{ $post->created_at->diffForHumans() }} +
+ +
+ + +

{{ $comments->count() }} Comments

+ +@if ($comments->count()) +@foreach ($comments as $comment) +
+
+ +
+
+
+
+ {{ $comment->author->fullName() }} + • + {{ $comment->created_at->diffForHumans() }} + +
+ + {{ $comment->content() }} +
+
+
+
+
+@endforeach +@else +
+@endif + +@if ( ! Sentry::check()) +You need to be logged in to add comments.

+Click here to login into your account. +@else +

Add a Comment

+
+ + + + +
+ + {{ $errors->first('comment', ':message') }} +
+ + +
+
+ +
+
+
+@endif +@stop diff --git a/app/views/frontend/contact-us.blade.php b/app/views/frontend/contact-us.blade.php new file mode 100755 index 0000000000..6c593ba643 --- /dev/null +++ b/app/views/frontend/contact-us.blade.php @@ -0,0 +1,40 @@ +@extends('frontend/layouts/default') + +{{-- Page title --}} +@section('title') +Contact us :: +@parent +@stop + +{{-- Page content --}} +@section('content') + +
+ + + +
+ +
+ + {{ $errors->first('name', ':message') }} +
+ + +
+ + {{ $errors->first('email', ':message') }} +
+ +
+ + {{ $errors->first('description', ':message') }} +
+ + + +
+
+@stop diff --git a/app/views/frontend/layouts/account.blade.php b/app/views/frontend/layouts/account.blade.php new file mode 100755 index 0000000000..270188bac3 --- /dev/null +++ b/app/views/frontend/layouts/account.blade.php @@ -0,0 +1,18 @@ +@extends('frontend/layouts/default') + +{{-- Page content --}} +@section('content') +
+
+ +
+
+ @yield('account-content') +
+
+@stop diff --git a/app/views/frontend/layouts/default.blade.php b/app/views/frontend/layouts/default.blade.php new file mode 100755 index 0000000000..3e7621e34e --- /dev/null +++ b/app/views/frontend/layouts/default.blade.php @@ -0,0 +1,112 @@ + + + + + + + @section('title') + Bootstrap + @show + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + @include('frontend/notifications') + + + @yield('content') + +
+ + +
+

© Company {{ date('Y') }}

+
+
+ + + + + + diff --git a/app/views/frontend/notifications.blade.php b/app/views/frontend/notifications.blade.php new file mode 100755 index 0000000000..3790540f68 --- /dev/null +++ b/app/views/frontend/notifications.blade.php @@ -0,0 +1,39 @@ +@if ($errors->any()) +
+ +

Error

+ Please check the form below for errors +
+@endif + +@if ($message = Session::get('success')) +
+ +

Success

+ {{ $message }} +
+@endif + +@if ($message = Session::get('error')) +
+ +

Error

+ {{ $message }} +
+@endif + +@if ($message = Session::get('warning')) +
+ +

Warning

+ {{ $message }} +
+@endif + +@if ($message = Session::get('info')) +
+ +

Info

+ {{ $message }} +
+@endif diff --git a/app/views/hello.php b/app/views/hello.php new file mode 100755 index 0000000000..065a0a8af9 --- /dev/null +++ b/app/views/hello.php @@ -0,0 +1,52 @@ + + + + + Laravel PHP Framework + + + +
+ +

You have arrived.

+
+ + diff --git a/app/views/paginator/simple.php b/app/views/paginator/simple.php new file mode 100755 index 0000000000..3a134823cd --- /dev/null +++ b/app/views/paginator/simple.php @@ -0,0 +1,15 @@ +getTranslator(); +?> + +getLastPage() > 1): ?> + + diff --git a/app/views/paginator/slider.php b/app/views/paginator/slider.php new file mode 100755 index 0000000000..70b312fc3e --- /dev/null +++ b/app/views/paginator/slider.php @@ -0,0 +1,21 @@ + + + diff --git a/artisan b/artisan new file mode 100755 index 0000000000..0fcf29e0e2 --- /dev/null +++ b/artisan @@ -0,0 +1,74 @@ +#!/usr/bin/env php +boot(); + +/* +|-------------------------------------------------------------------------- +| Load The Artisan Console Application +|-------------------------------------------------------------------------- +| +| We'll need to run the script to load and return the Artisan console +| application. We keep this in its own script so that we will load +| the console application independent of running commands which +| will allow us to fire commands from Routes when we want to. +| +*/ + +$artisan = Illuminate\Console\Application::start($app); + +/* +|-------------------------------------------------------------------------- +| Run The Artisan Application +|-------------------------------------------------------------------------- +| +| When we run the console application, the current CLI command will be +| executed in this console and the response sent back to a terminal +| or another output device for the developers. Here goes nothing! +| +*/ + +$status = $artisan->run(); + +/* +|-------------------------------------------------------------------------- +| Shutdown The Application +|-------------------------------------------------------------------------- +| +| Once Artisan has finished running. We will fire off the shutdown events +| so that any final work may be done by the application before we shut +| down the process. This is the last thing to happen to the request. +| +*/ + +$app->shutdown(); + +exit($status); diff --git a/bootstrap/autoload.php b/bootstrap/autoload.php new file mode 100755 index 0000000000..6b329312a6 --- /dev/null +++ b/bootstrap/autoload.php @@ -0,0 +1,75 @@ + __DIR__.'/../app', + + /* + |-------------------------------------------------------------------------- + | Public Path + |-------------------------------------------------------------------------- + | + | The public path contains the assets for your web application, such as + | your JavaScript and CSS files, and also contains the primary entry + | point for web requests into these applications from the outside. + | + */ + + 'public' => __DIR__.'/../public', + + /* + |-------------------------------------------------------------------------- + | Base Path + |-------------------------------------------------------------------------- + | + | The base path is the root of the Laravel installation. Most likely you + | will not need to change this value. But, if for some wild reason it + | is necessary you will do so here, just proceed with some caution. + | + */ + + 'base' => __DIR__.'/..', + + /* + |-------------------------------------------------------------------------- + | Storage Path + |-------------------------------------------------------------------------- + | + | The storage path is used by Laravel to store cached Blade views, logs + | and other pieces of information. You may modify the path here when + | you want to change the location of this directory for your apps. + | + */ + + 'storage' => __DIR__.'/../app/storage', + +); diff --git a/bootstrap/start.php b/bootstrap/start.php new file mode 100755 index 0000000000..9848f9bc9e --- /dev/null +++ b/bootstrap/start.php @@ -0,0 +1,74 @@ +redirectIfTrailingSlash(); + +/* +|-------------------------------------------------------------------------- +| Detect The Application Environment +|-------------------------------------------------------------------------- +| +| Laravel takes a dead simple approach to your application environments +| so you can just specify a machine name or HTTP host that matches a +| given environment, then we will automatically detect it for you. +| +*/ + +$env = $app->detectEnvironment(array( + + 'local' => array('your-machine-name'), + +)); + +/* +|-------------------------------------------------------------------------- +| Bind Paths +|-------------------------------------------------------------------------- +| +| Here we are binding the paths configured in paths.php to the app. You +| should not be changing these here. If you need to change these you +| may do so within the paths.php file and they will be bound here. +| +*/ + +$app->bindInstallPaths(require __DIR__.'/paths.php'); + +/* +|-------------------------------------------------------------------------- +| Load The Application +|-------------------------------------------------------------------------- +| +| Here we will load the Illuminate application. We'll keep this is in a +| separate location so we can isolate the creation of an application +| from the actual running of the application with a given request. +| +*/ + +$framework = $app['path.base'].'/vendor/laravel/framework/src'; + +require $framework.'/Illuminate/Foundation/start.php'; + +/* +|-------------------------------------------------------------------------- +| Return The Application +|-------------------------------------------------------------------------- +| +| This script returns the application instance. The instance is given to +| the calling script so we can separate the building of the instances +| from the actual running of the application and sending responses. +| +*/ + +return $app; diff --git a/composer.json b/composer.json new file mode 100755 index 0000000000..6a8b9d018c --- /dev/null +++ b/composer.json @@ -0,0 +1,37 @@ +{ + "name": "laravel/laravel", + "description": "The Laravel Framework.", + "keywords": ["framework", "laravel"], + "require": { + "laravel/framework": "4.0.*", + "cartalyst/sentry": "2.0.*" + }, + "autoload": { + "classmap": [ + "app/commands", + "app/controllers", + "app/models", + "app/database/migrations", + "app/database/seeds", + "app/tests/TestCase.php" + ] + }, + "scripts": { + "post-install-cmd": [ + "php artisan optimize" + ], + "pre-update-cmd": [ + "php artisan clear-compiled" + ], + "post-update-cmd": [ + "php artisan optimize" + ], + "post-create-project-cmd": [ + "php artisan key:generate" + ] + }, + "config": { + "preferred-install": "dist" + }, + "minimum-stability": "dev" +} diff --git a/composer.lock b/composer.lock new file mode 100755 index 0000000000..19741b3d55 --- /dev/null +++ b/composer.lock @@ -0,0 +1,1868 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file" + ], + "hash": "f77236f34f4e5e2a51b27f435a4b87de", + "packages": [ + { + "name": "cartalyst/sentry", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/cartalyst/sentry.git", + "reference": "b771fdbc9720c31054925d36b5f6e7dd88aac32b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cartalyst/sentry/zipball/b771fdbc9720c31054925d36b5f6e7dd88aac32b", + "reference": "b771fdbc9720c31054925d36b5f6e7dd88aac32b", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "illuminate/cookie": "4.0.*", + "illuminate/database": "4.0.*", + "illuminate/session": "4.0.*", + "ircmaxell/password-compat": "1.0.*", + "mockery/mockery": "0.7.2" + }, + "suggest": { + "illuminate/database": "Default sentry user, group and throttling implementations.", + "ircmaxell/password-compat": "Default hashing uses PHP 5.5 password_* functions, with forward-compatible support." + }, + "type": "library", + "extra": { + "component": "package", + "frameworks": [ + "Laravel 3", + "Laravel 4", + "CodeIgniter 3", + "FuelPHP 1" + ], + "versions": { + "1": "1.1/master", + "2": "master" + }, + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/Cartalyst/Sentry/Groups/Exceptions.php", + "src/Cartalyst/Sentry/Throttling/Exceptions.php", + "src/Cartalyst/Sentry/Users/Exceptions.php", + "src/migrations" + ], + "psr-0": { + "Cartalyst\\Sentry": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Ben Corlett", + "email": "ben.corlett@cartalyst.com", + "role": "Developer" + }, + { + "name": "Cartalyst LLC", + "email": "help@cartalyst.com" + }, + { + "name": "Bruno Gaspar", + "email": "bruno.gaspar@cartalyst.com", + "role": "Developer" + }, + { + "name": "Dan Syme", + "email": "dan.syme@cartalyst.com", + "role": "Creator & Designer" + }, + { + "name": "Daniel Petrie", + "email": "dan.petrie@cartalyst.com", + "role": "Developer" + } + ], + "description": "PHP 5.3+ Fully-featured Authentication & Authorization System", + "keywords": [ + "auth", + "codeigniter", + "fuelphp", + "laravel", + "security" + ], + "time": "2013-06-18 19:54:39" + }, + { + "name": "classpreloader/classpreloader", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/mtdowling/ClassPreloader.git", + "reference": "62c99d52ce2f1b0b8449c61e2d94f48d918222eb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mtdowling/ClassPreloader/zipball/62c99d52ce2f1b0b8449c61e2d94f48d918222eb", + "reference": "62c99d52ce2f1b0b8449c61e2d94f48d918222eb", + "shasum": "" + }, + "require": { + "nikic/php-parser": "*", + "php": ">=5.3.3", + "symfony/console": ">2.0", + "symfony/filesystem": ">2.0", + "symfony/finder": ">2.0" + }, + "bin": [ + "classpreloader.php" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.0-dev" + } + }, + "autoload": { + "psr-0": { + "ClassPreloader": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Helps class loading performance by generating a single PHP file containing all of the autoloaded files for a specific use case", + "keywords": [ + "autoload", + "class", + "preload" + ], + "time": "2013-05-26 16:10:36" + }, + { + "name": "doctrine/annotations", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "v1.1.1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/v1.1.1", + "reference": "v1.1.1", + "shasum": "" + }, + "require": { + "doctrine/lexer": "1.*", + "php": ">=5.3.2" + }, + "require-dev": { + "doctrine/cache": "1.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Annotations\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com", + "homepage": "http://www.jwage.com/" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com", + "homepage": "http://www.instaclick.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh", + "role": "Developer of wrapped JMSSerializerBundle" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "time": "2013-04-20 08:30:17" + }, + { + "name": "doctrine/cache", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/doctrine/cache.git", + "reference": "89493d2c6e1362f581f9de1c1871cc52eb29c030" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/cache/zipball/89493d2c6e1362f581f9de1c1871cc52eb29c030", + "reference": "89493d2c6e1362f581f9de1c1871cc52eb29c030", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "conflict": { + "doctrine/common": ">2.2,<2.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Cache\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com", + "homepage": "http://www.jwage.com/" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com", + "homepage": "http://www.instaclick.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh", + "role": "Developer of wrapped JMSSerializerBundle" + } + ], + "description": "Caching library offering an object-oriented API for many cache backends", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "cache", + "caching" + ], + "time": "2013-06-07 14:54:47" + }, + { + "name": "doctrine/collections", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/doctrine/collections.git", + "reference": "3db3ab843ff76774bee4679d4cb3a10cffb0a935" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/collections/zipball/3db3ab843ff76774bee4679d4cb3a10cffb0a935", + "reference": "3db3ab843ff76774bee4679d4cb3a10cffb0a935", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Collections\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com", + "homepage": "http://www.jwage.com/" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com", + "homepage": "http://www.instaclick.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh", + "role": "Developer of wrapped JMSSerializerBundle" + } + ], + "description": "Collections Abstraction library", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "array", + "collections", + "iterator" + ], + "time": "2013-05-26 05:21:22" + }, + { + "name": "doctrine/common", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/doctrine/common.git", + "reference": "c4255b9fbd63ee1fe52697839318af5937fced9b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/common/zipball/c4255b9fbd63ee1fe52697839318af5937fced9b", + "reference": "c4255b9fbd63ee1fe52697839318af5937fced9b", + "shasum": "" + }, + "require": { + "doctrine/annotations": "1.*", + "doctrine/cache": "1.*", + "doctrine/collections": "1.*", + "doctrine/inflector": "1.*", + "doctrine/lexer": "1.*", + "php": ">=5.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com", + "homepage": "http://www.jwage.com/" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com", + "homepage": "http://www.instaclick.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh", + "role": "Developer of wrapped JMSSerializerBundle" + } + ], + "description": "Common Library for Doctrine projects", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "annotations", + "collections", + "eventmanager", + "persistence", + "spl" + ], + "time": "2013-06-21 12:11:28" + }, + { + "name": "doctrine/dbal", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/doctrine/dbal.git", + "reference": "4804a9a096f1a3f048da11b192b9df5caafc1a5d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/4804a9a096f1a3f048da11b192b9df5caafc1a5d", + "reference": "4804a9a096f1a3f048da11b192b9df5caafc1a5d", + "shasum": "" + }, + "require": { + "doctrine/common": "2.4.*@beta", + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "3.7.*", + "symfony/console": "2.*" + }, + "suggest": { + "symfony/console": "Allows use of the command line interface" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\DBAL\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com", + "homepage": "http://www.jwage.com/" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com", + "homepage": "http://www.instaclick.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + } + ], + "description": "Database Abstraction Layer", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "database", + "dbal", + "persistence", + "queryobject" + ], + "time": "2013-06-21 19:00:38" + }, + { + "name": "doctrine/inflector", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "8b4b3ccec7aafc596e2fc1e593c9f2e78f939c8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/8b4b3ccec7aafc596e2fc1e593c9f2e78f939c8c", + "reference": "8b4b3ccec7aafc596e2fc1e593c9f2e78f939c8c", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Inflector\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com", + "homepage": "http://www.jwage.com/" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com", + "homepage": "http://www.instaclick.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh", + "role": "Developer of wrapped JMSSerializerBundle" + } + ], + "description": "Common String Manipulations with regard to casing and singular/plural rules.", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "inflection", + "pluralize", + "singularize", + "string" + ], + "time": "2013-04-10 16:14:30" + }, + { + "name": "doctrine/lexer", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "bc0e1f0cc285127a38c6c8ea88bc5dba2fd53e94" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/bc0e1f0cc285127a38c6c8ea88bc5dba2fd53e94", + "reference": "bc0e1f0cc285127a38c6c8ea88bc5dba2fd53e94", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Lexer\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com", + "homepage": "http://www.instaclick.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh", + "role": "Developer of wrapped JMSSerializerBundle" + } + ], + "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "lexer", + "parser" + ], + "time": "2013-03-07 12:15:25" + }, + { + "name": "filp/whoops", + "version": "1.0.6", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "1.0.6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/1.0.6", + "reference": "1.0.6", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "mockery/mockery": "dev-master", + "silex/silex": "1.0.*@dev" + }, + "type": "library", + "autoload": { + "psr-0": { + "Whoops": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://github.com/filp/whoops", + "keywords": [ + "error", + "exception", + "handling", + "library", + "silex-provider", + "whoops", + "zf2" + ], + "time": "2013-05-10 22:13:22" + }, + { + "name": "ircmaxell/password-compat", + "version": "1.0.x-dev", + "source": { + "type": "git", + "url": "https://github.com/ircmaxell/password_compat.git", + "reference": "v1.0.3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ircmaxell/password_compat/zipball/v1.0.3", + "reference": "v1.0.3", + "shasum": "" + }, + "type": "library", + "autoload": { + "files": [ + "lib/password.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anthony Ferrara", + "email": "ircmaxell@ircmaxell.com", + "homepage": "http://blog.ircmaxell.com" + } + ], + "description": "A compatibility library for the proposed simplified password hashing algorithm: https://wiki.php.net/rfc/password_hash", + "homepage": "https://github.com/ircmaxell/password_compat", + "keywords": [ + "hashing", + "password" + ], + "time": "2013-04-30 19:58:08" + }, + { + "name": "laravel/framework", + "version": "4.0.x-dev", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "8683a510b3e5541cb57d1ef6a09d66b713e42a13" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/8683a510b3e5541cb57d1ef6a09d66b713e42a13", + "reference": "8683a510b3e5541cb57d1ef6a09d66b713e42a13", + "shasum": "" + }, + "require": { + "classpreloader/classpreloader": "1.0.*", + "doctrine/dbal": "2.4.x", + "filp/whoops": "1.0.6", + "ircmaxell/password-compat": "1.0.*", + "monolog/monolog": "1.5.*", + "nesbot/carbon": "1.*", + "patchwork/utf8": "1.1.*", + "php": ">=5.3.0", + "predis/predis": "0.8.*", + "swiftmailer/swiftmailer": "5.0.*", + "symfony/browser-kit": "2.3.*", + "symfony/console": "2.3.*", + "symfony/css-selector": "2.3.*", + "symfony/debug": "2.3.*", + "symfony/dom-crawler": "2.3.*", + "symfony/event-dispatcher": "2.3.*", + "symfony/finder": "2.3.*", + "symfony/http-foundation": "2.3.*", + "symfony/http-kernel": "2.3.*", + "symfony/process": "2.3.*", + "symfony/routing": "2.3.*", + "symfony/translation": "2.3.*" + }, + "replace": { + "illuminate/auth": "self.version", + "illuminate/cache": "self.version", + "illuminate/config": "self.version", + "illuminate/console": "self.version", + "illuminate/container": "self.version", + "illuminate/cookie": "self.version", + "illuminate/database": "self.version", + "illuminate/encryption": "self.version", + "illuminate/events": "self.version", + "illuminate/exception": "self.version", + "illuminate/filesystem": "self.version", + "illuminate/foundation": "self.version", + "illuminate/hashing": "self.version", + "illuminate/html": "self.version", + "illuminate/http": "self.version", + "illuminate/log": "self.version", + "illuminate/mail": "self.version", + "illuminate/pagination": "self.version", + "illuminate/queue": "self.version", + "illuminate/redis": "self.version", + "illuminate/routing": "self.version", + "illuminate/session": "self.version", + "illuminate/support": "self.version", + "illuminate/translation": "self.version", + "illuminate/validation": "self.version", + "illuminate/view": "self.version", + "illuminate/workbench": "self.version" + }, + "require-dev": { + "aws/aws-sdk-php": "2.2.*", + "iron-io/iron_mq": "1.4.4", + "mockery/mockery": "0.7.2", + "pda/pheanstalk": "2.0.*", + "phpunit/phpunit": "3.7.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + [ + "src/Illuminate/Queue/IlluminateQueueClosure.php" + ] + ], + "files": [ + "src/Illuminate/Support/helpers.php" + ], + "psr-0": { + "Illuminate": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylorotwell@gmail.com" + } + ], + "description": "The Laravel Framework.", + "keywords": [ + "framework", + "laravel" + ], + "time": "2013-06-20 20:50:36" + }, + { + "name": "monolog/monolog", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "1.5.0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/1.5.0", + "reference": "1.5.0", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "psr/log": ">=1.0,<2.0" + }, + "require-dev": { + "doctrine/couchdb": "dev-master", + "mlehner/gelf-php": "1.0.*", + "raven/raven": "0.3.*" + }, + "suggest": { + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-mongo": "Allow sending log messages to a MongoDB server", + "mlehner/gelf-php": "Allow sending log messages to a GrayLog2 server", + "raven/raven": "Allow sending log messages to a Sentry server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "psr-0": { + "Monolog": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be", + "role": "Developer" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "http://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "time": "2013-04-23 10:09:48" + }, + { + "name": "nesbot/carbon", + "version": "1.2.0", + "source": { + "type": "git", + "url": "git://github.com/briannesbitt/Carbon.git", + "reference": "1.2.0" + }, + "dist": { + "type": "zip", + "url": "https://github.com/briannesbitt/Carbon/zipball/1.2.0", + "reference": "1.2.0", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "Carbon": "." + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "http://nesbot.com" + } + ], + "description": "A simple API extension for DateTime.", + "homepage": "https://github.com/briannesbitt/Carbon", + "keywords": [ + "date", + "datetime", + "time" + ], + "time": "2012-10-14 17:41:18" + }, + { + "name": "nikic/php-parser", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "5ccf6196d6925e66568e3b8460c262e9512e4b92" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/5ccf6196d6925e66568e3b8460c262e9512e4b92", + "reference": "5ccf6196d6925e66568e3b8460c262e9512e4b92", + "shasum": "" + }, + "require": { + "php": ">=5.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.9-dev" + } + }, + "autoload": { + "psr-0": { + "PHPParser": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "time": "2013-05-23 13:17:59" + }, + { + "name": "patchwork/utf8", + "version": "v1.1.8", + "source": { + "type": "git", + "url": "https://github.com/nicolas-grekas/Patchwork-UTF8.git", + "reference": "v1.1.8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nicolas-grekas/Patchwork-UTF8/zipball/v1.1.8", + "reference": "v1.1.8", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "Patchwork": "class/", + "Normalizer": "class/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "(Apache-2.0 or GPL-2.0)" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com", + "role": "Developer" + } + ], + "description": "UTF-8 strings handling for PHP 5.3: portable, performant and extended", + "homepage": "https://github.com/nicolas-grekas/Patchwork-UTF8", + "keywords": [ + "i18n", + "unicode", + "utf-8", + "utf8" + ], + "time": "2013-05-24 12:11:22" + }, + { + "name": "predis/predis", + "version": "0.8.x-dev", + "source": { + "type": "git", + "url": "https://github.com/nrk/predis.git", + "reference": "4576dc029f04f25438521065aa4d29419a19bf2a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nrk/predis/zipball/4576dc029f04f25438521065aa4d29419a19bf2a", + "reference": "4576dc029f04f25438521065aa4d29419a19bf2a", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "suggest": { + "ext-curl": "Allows access to Webdis when paired with phpiredis", + "ext-phpiredis": "Allows faster serialization and deserialization of the Redis protocol" + }, + "type": "library", + "autoload": { + "psr-0": { + "Predis": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniele Alessandri", + "email": "suppakilla@gmail.com", + "homepage": "http://clorophilla.net" + } + ], + "description": "Flexible and feature-complete PHP client library for Redis", + "homepage": "http://github.com/nrk/predis", + "keywords": [ + "nosql", + "predis", + "redis" + ], + "time": "2013-06-17 09:16:07" + }, + { + "name": "psr/log", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log", + "reference": "1.0.0" + }, + "dist": { + "type": "zip", + "url": "https://github.com/php-fig/log/archive/1.0.0.zip", + "reference": "1.0.0", + "shasum": "" + }, + "type": "library", + "autoload": { + "psr-0": { + "Psr\\Log\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2012-12-21 11:40:51" + }, + { + "name": "swiftmailer/swiftmailer", + "version": "v5.0.1", + "source": { + "type": "git", + "url": "https://github.com/swiftmailer/swiftmailer.git", + "reference": "v5.0.1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/v5.0.1", + "reference": "v5.0.1", + "shasum": "" + }, + "require": { + "php": ">=5.2.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "files": [ + "lib/swift_required.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Chris Corbyn" + } + ], + "description": "Swiftmailer, free feature-rich PHP mailer", + "homepage": "http://swiftmailer.org", + "keywords": [ + "mail", + "mailer" + ], + "time": "2013-06-17 13:32:32" + }, + { + "name": "symfony/browser-kit", + "version": "2.3.x-dev", + "target-dir": "Symfony/Component/BrowserKit", + "source": { + "type": "git", + "url": "https://github.com/symfony/BrowserKit.git", + "reference": "v2.3.1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/BrowserKit/zipball/v2.3.1", + "reference": "v2.3.1", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/dom-crawler": ">=2.0,<3.0" + }, + "require-dev": { + "symfony/css-selector": ">=2.0,<3.0", + "symfony/process": ">=2.0,<3.0" + }, + "suggest": { + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\BrowserKit\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "Symfony BrowserKit Component", + "homepage": "http://symfony.com", + "time": "2013-05-15 15:16:47" + }, + { + "name": "symfony/console", + "version": "2.3.x-dev", + "target-dir": "Symfony/Component/Console", + "source": { + "type": "git", + "url": "https://github.com/symfony/Console.git", + "reference": "35da735fae40d43a199ed51b30ac3f073404d1c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/Console/zipball/35da735fae40d43a199ed51b30ac3f073404d1c6", + "reference": "35da735fae40d43a199ed51b30ac3f073404d1c6", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "symfony/event-dispatcher": ">=2.1,<3.0" + }, + "suggest": { + "symfony/event-dispatcher": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\Console\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "http://symfony.com", + "time": "2013-06-15 17:55:04" + }, + { + "name": "symfony/css-selector", + "version": "2.3.x-dev", + "target-dir": "Symfony/Component/CssSelector", + "source": { + "type": "git", + "url": "https://github.com/symfony/CssSelector.git", + "reference": "e4f7310ad25e71f2362236b8c1588b416b03c2be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/CssSelector/zipball/e4f7310ad25e71f2362236b8c1588b416b03c2be", + "reference": "e4f7310ad25e71f2362236b8c1588b416b03c2be", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\CssSelector\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + } + ], + "description": "Symfony CssSelector Component", + "homepage": "http://symfony.com", + "time": "2013-06-17 07:15:51" + }, + { + "name": "symfony/debug", + "version": "2.3.x-dev", + "target-dir": "Symfony/Component/Debug", + "source": { + "type": "git", + "url": "https://github.com/symfony/Debug.git", + "reference": "v2.3.1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/Debug/zipball/v2.3.1", + "reference": "v2.3.1", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "symfony/http-foundation": ">=2.1,<3.0", + "symfony/http-kernel": ">=2.1,<3.0" + }, + "suggest": { + "symfony/class-loader": "", + "symfony/http-foundation": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\Debug\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "Symfony Debug Component", + "homepage": "http://symfony.com", + "time": "2013-06-02 11:58:44" + }, + { + "name": "symfony/dom-crawler", + "version": "2.3.x-dev", + "target-dir": "Symfony/Component/DomCrawler", + "source": { + "type": "git", + "url": "https://github.com/symfony/DomCrawler.git", + "reference": "761ea57ee2839c79dd04fe39b73bacd2ba133f22" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/DomCrawler/zipball/761ea57ee2839c79dd04fe39b73bacd2ba133f22", + "reference": "761ea57ee2839c79dd04fe39b73bacd2ba133f22", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "symfony/css-selector": ">=2.0,<3.0" + }, + "suggest": { + "symfony/css-selector": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\DomCrawler\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "Symfony DomCrawler Component", + "homepage": "http://symfony.com", + "time": "2013-06-23 08:16:02" + }, + { + "name": "symfony/event-dispatcher", + "version": "2.3.x-dev", + "target-dir": "Symfony/Component/EventDispatcher", + "source": { + "type": "git", + "url": "https://github.com/symfony/EventDispatcher.git", + "reference": "v2.3.1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/v2.3.1", + "reference": "v2.3.1", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "symfony/dependency-injection": ">=2.0,<3.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "Symfony EventDispatcher Component", + "homepage": "http://symfony.com", + "time": "2013-05-13 14:36:40" + }, + { + "name": "symfony/filesystem", + "version": "dev-master", + "target-dir": "Symfony/Component/Filesystem", + "source": { + "type": "git", + "url": "https://github.com/symfony/Filesystem.git", + "reference": "7975f9df488adbc9cef2089bac2887f14085481f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/Filesystem/zipball/7975f9df488adbc9cef2089bac2887f14085481f", + "reference": "7975f9df488adbc9cef2089bac2887f14085481f", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\Filesystem\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "Symfony Filesystem Component", + "homepage": "http://symfony.com", + "time": "2013-06-11 07:15:38" + }, + { + "name": "symfony/finder", + "version": "2.3.x-dev", + "target-dir": "Symfony/Component/Finder", + "source": { + "type": "git", + "url": "https://github.com/symfony/Finder.git", + "reference": "efe739e6599b3f43610a4005818a364fbdd67ce8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/Finder/zipball/efe739e6599b3f43610a4005818a364fbdd67ce8", + "reference": "efe739e6599b3f43610a4005818a364fbdd67ce8", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\Finder\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "Symfony Finder Component", + "homepage": "http://symfony.com", + "time": "2013-06-13 07:51:49" + }, + { + "name": "symfony/http-foundation", + "version": "2.3.x-dev", + "target-dir": "Symfony/Component/HttpFoundation", + "source": { + "type": "git", + "url": "https://github.com/symfony/HttpFoundation.git", + "reference": "997715db218331076ef21c5a6ae622595755c6ef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/HttpFoundation/zipball/997715db218331076ef21c5a6ae622595755c6ef", + "reference": "997715db218331076ef21c5a6ae622595755c6ef", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "classmap": [ + "Symfony/Component/HttpFoundation/Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "Symfony HttpFoundation Component", + "homepage": "http://symfony.com", + "time": "2013-06-23 08:16:02" + }, + { + "name": "symfony/http-kernel", + "version": "2.3.x-dev", + "target-dir": "Symfony/Component/HttpKernel", + "source": { + "type": "git", + "url": "https://github.com/symfony/HttpKernel.git", + "reference": "98c849cd968571794d7cfc6edef21aa1363ce05c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/HttpKernel/zipball/98c849cd968571794d7cfc6edef21aa1363ce05c", + "reference": "98c849cd968571794d7cfc6edef21aa1363ce05c", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "psr/log": ">=1.0,<2.0", + "symfony/debug": ">=2.3,<3.0", + "symfony/event-dispatcher": ">=2.1,<3.0", + "symfony/http-foundation": ">=2.2,<3.0" + }, + "require-dev": { + "symfony/browser-kit": "2.2.*", + "symfony/class-loader": ">=2.1,<3.0", + "symfony/config": ">=2.0,<3.0", + "symfony/console": "2.2.*", + "symfony/dependency-injection": ">=2.0,<3.0", + "symfony/finder": ">=2.0,<3.0", + "symfony/process": ">=2.0,<3.0", + "symfony/routing": ">=2.2,<3.0", + "symfony/stopwatch": ">=2.2,<3.0" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/class-loader": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "", + "symfony/finder": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\HttpKernel\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "Symfony HttpKernel Component", + "homepage": "http://symfony.com", + "time": "2013-06-11 13:34:17" + }, + { + "name": "symfony/process", + "version": "2.3.x-dev", + "target-dir": "Symfony/Component/Process", + "source": { + "type": "git", + "url": "https://github.com/symfony/Process.git", + "reference": "f12e5857c60fa572b4f7d947276ffc2336ddea04" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/Process/zipball/f12e5857c60fa572b4f7d947276ffc2336ddea04", + "reference": "f12e5857c60fa572b4f7d947276ffc2336ddea04", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\Process\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "Symfony Process Component", + "homepage": "http://symfony.com", + "time": "2013-06-23 08:16:02" + }, + { + "name": "symfony/routing", + "version": "2.3.x-dev", + "target-dir": "Symfony/Component/Routing", + "source": { + "type": "git", + "url": "https://github.com/symfony/Routing.git", + "reference": "3deda53b19ee9d361b03de5268bc91533eb76235" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/Routing/zipball/3deda53b19ee9d361b03de5268bc91533eb76235", + "reference": "3deda53b19ee9d361b03de5268bc91533eb76235", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "doctrine/common": ">=2.2,<3.0", + "psr/log": ">=1.0,<2.0", + "symfony/config": ">=2.2,<3.0", + "symfony/yaml": ">=2.0,<3.0" + }, + "suggest": { + "doctrine/common": "", + "symfony/config": "", + "symfony/yaml": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\Routing\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "Symfony Routing Component", + "homepage": "http://symfony.com", + "time": "2013-06-23 08:16:02" + }, + { + "name": "symfony/translation", + "version": "2.3.x-dev", + "target-dir": "Symfony/Component/Translation", + "source": { + "type": "git", + "url": "https://github.com/symfony/Translation.git", + "reference": "v2.3.1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/Translation/zipball/v2.3.1", + "reference": "v2.3.1", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "symfony/config": ">=2.0,<3.0", + "symfony/yaml": ">=2.2,<3.0" + }, + "suggest": { + "symfony/config": "", + "symfony/yaml": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\Translation\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "Symfony Translation Component", + "homepage": "http://symfony.com", + "time": "2013-05-13 14:36:40" + } + ], + "packages-dev": [ + + ], + "aliases": [ + + ], + "minimum-stability": "dev", + "stability-flags": [ + + ], + "platform": [ + + ], + "platform-dev": [ + + ] +} diff --git a/phpunit.xml b/phpunit.xml new file mode 100755 index 0000000000..c42dc4f799 --- /dev/null +++ b/phpunit.xml @@ -0,0 +1,18 @@ + + + + + ./app/tests/ + + + \ No newline at end of file diff --git a/public/.htaccess b/public/.htaccess new file mode 100755 index 0000000000..cf675fbaff --- /dev/null +++ b/public/.htaccess @@ -0,0 +1,8 @@ + + Options -MultiViews + RewriteEngine On + + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^ index.php [L] + \ No newline at end of file diff --git a/public/assets/css/bootstrap-responsive.css b/public/assets/css/bootstrap-responsive.css new file mode 100755 index 0000000000..09e88ce3fe --- /dev/null +++ b/public/assets/css/bootstrap-responsive.css @@ -0,0 +1,1109 @@ +/*! + * Bootstrap Responsive v2.3.2 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */ + +.clearfix { + *zoom: 1; +} + +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +.clearfix:after { + clear: both; +} + +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.input-block-level { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +@-ms-viewport { + width: device-width; +} + +.hidden { + display: none; + visibility: hidden; +} + +.visible-phone { + display: none !important; +} + +.visible-tablet { + display: none !important; +} + +.hidden-desktop { + display: none !important; +} + +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + .hidden-desktop { + display: inherit !important; + } + .visible-desktop { + display: none !important ; + } + .visible-tablet { + display: inherit !important; + } + .hidden-tablet { + display: none !important; + } +} + +@media (max-width: 767px) { + .hidden-desktop { + display: inherit !important; + } + .visible-desktop { + display: none !important; + } + .visible-phone { + display: inherit !important; + } + .hidden-phone { + display: none !important; + } +} + +.visible-print { + display: none !important; +} + +@media print { + .visible-print { + display: inherit !important; + } + .hidden-print { + display: none !important; + } +} + +@media (min-width: 1200px) { + .row { + margin-left: -30px; + *zoom: 1; + } + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + .row:after { + clear: both; + } + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 30px; + } + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 1170px; + } + .span12 { + width: 1170px; + } + .span11 { + width: 1070px; + } + .span10 { + width: 970px; + } + .span9 { + width: 870px; + } + .span8 { + width: 770px; + } + .span7 { + width: 670px; + } + .span6 { + width: 570px; + } + .span5 { + width: 470px; + } + .span4 { + width: 370px; + } + .span3 { + width: 270px; + } + .span2 { + width: 170px; + } + .span1 { + width: 70px; + } + .offset12 { + margin-left: 1230px; + } + .offset11 { + margin-left: 1130px; + } + .offset10 { + margin-left: 1030px; + } + .offset9 { + margin-left: 930px; + } + .offset8 { + margin-left: 830px; + } + .offset7 { + margin-left: 730px; + } + .offset6 { + margin-left: 630px; + } + .offset5 { + margin-left: 530px; + } + .offset4 { + margin-left: 430px; + } + .offset3 { + margin-left: 330px; + } + .offset2 { + margin-left: 230px; + } + .offset1 { + margin-left: 130px; + } + .row-fluid { + width: 100%; + *zoom: 1; + } + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + .row-fluid:after { + clear: both; + } + .row-fluid [class*="span"] { + display: block; + float: left; + width: 100%; + min-height: 30px; + margin-left: 2.564102564102564%; + *margin-left: 2.5109110747408616%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.564102564102564%; + } + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + .row-fluid .span11 { + width: 91.45299145299145%; + *width: 91.39979996362975%; + } + .row-fluid .span10 { + width: 82.90598290598291%; + *width: 82.8527914166212%; + } + .row-fluid .span9 { + width: 74.35897435897436%; + *width: 74.30578286961266%; + } + .row-fluid .span8 { + width: 65.81196581196582%; + *width: 65.75877432260411%; + } + .row-fluid .span7 { + width: 57.26495726495726%; + *width: 57.21176577559556%; + } + .row-fluid .span6 { + width: 48.717948717948715%; + *width: 48.664757228587014%; + } + .row-fluid .span5 { + width: 40.17094017094017%; + *width: 40.11774868157847%; + } + .row-fluid .span4 { + width: 31.623931623931625%; + *width: 31.570740134569924%; + } + .row-fluid .span3 { + width: 23.076923076923077%; + *width: 23.023731587561375%; + } + .row-fluid .span2 { + width: 14.52991452991453%; + *width: 14.476723040552828%; + } + .row-fluid .span1 { + width: 5.982905982905983%; + *width: 5.929714493544281%; + } + .row-fluid .offset12 { + margin-left: 105.12820512820512%; + *margin-left: 105.02182214948171%; + } + .row-fluid .offset12:first-child { + margin-left: 102.56410256410257%; + *margin-left: 102.45771958537915%; + } + .row-fluid .offset11 { + margin-left: 96.58119658119658%; + *margin-left: 96.47481360247316%; + } + .row-fluid .offset11:first-child { + margin-left: 94.01709401709402%; + *margin-left: 93.91071103837061%; + } + .row-fluid .offset10 { + margin-left: 88.03418803418803%; + *margin-left: 87.92780505546462%; + } + .row-fluid .offset10:first-child { + margin-left: 85.47008547008548%; + *margin-left: 85.36370249136206%; + } + .row-fluid .offset9 { + margin-left: 79.48717948717949%; + *margin-left: 79.38079650845607%; + } + .row-fluid .offset9:first-child { + margin-left: 76.92307692307693%; + *margin-left: 76.81669394435352%; + } + .row-fluid .offset8 { + margin-left: 70.94017094017094%; + *margin-left: 70.83378796144753%; + } + .row-fluid .offset8:first-child { + margin-left: 68.37606837606839%; + *margin-left: 68.26968539734497%; + } + .row-fluid .offset7 { + margin-left: 62.393162393162385%; + *margin-left: 62.28677941443899%; + } + .row-fluid .offset7:first-child { + margin-left: 59.82905982905982%; + *margin-left: 59.72267685033642%; + } + .row-fluid .offset6 { + margin-left: 53.84615384615384%; + *margin-left: 53.739770867430444%; + } + .row-fluid .offset6:first-child { + margin-left: 51.28205128205128%; + *margin-left: 51.175668303327875%; + } + .row-fluid .offset5 { + margin-left: 45.299145299145295%; + *margin-left: 45.1927623204219%; + } + .row-fluid .offset5:first-child { + margin-left: 42.73504273504273%; + *margin-left: 42.62865975631933%; + } + .row-fluid .offset4 { + margin-left: 36.75213675213675%; + *margin-left: 36.645753773413354%; + } + .row-fluid .offset4:first-child { + margin-left: 34.18803418803419%; + *margin-left: 34.081651209310785%; + } + .row-fluid .offset3 { + margin-left: 28.205128205128204%; + *margin-left: 28.0987452264048%; + } + .row-fluid .offset3:first-child { + margin-left: 25.641025641025642%; + *margin-left: 25.53464266230224%; + } + .row-fluid .offset2 { + margin-left: 19.65811965811966%; + *margin-left: 19.551736679396257%; + } + .row-fluid .offset2:first-child { + margin-left: 17.094017094017094%; + *margin-left: 16.98763411529369%; + } + .row-fluid .offset1 { + margin-left: 11.11111111111111%; + *margin-left: 11.004728132387708%; + } + .row-fluid .offset1:first-child { + margin-left: 8.547008547008547%; + *margin-left: 8.440625568285142%; + } + input, + textarea, + .uneditable-input { + margin-left: 0; + } + .controls-row [class*="span"] + [class*="span"] { + margin-left: 30px; + } + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 1156px; + } + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 1056px; + } + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 956px; + } + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 856px; + } + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 756px; + } + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 656px; + } + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 556px; + } + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 456px; + } + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 356px; + } + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 256px; + } + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 156px; + } + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 56px; + } + .thumbnails { + margin-left: -30px; + } + .thumbnails > li { + margin-left: 30px; + } + .row-fluid .thumbnails { + margin-left: 0; + } +} + +@media (min-width: 768px) and (max-width: 979px) { + .row { + margin-left: -20px; + *zoom: 1; + } + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + .row:after { + clear: both; + } + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + .span12 { + width: 724px; + } + .span11 { + width: 662px; + } + .span10 { + width: 600px; + } + .span9 { + width: 538px; + } + .span8 { + width: 476px; + } + .span7 { + width: 414px; + } + .span6 { + width: 352px; + } + .span5 { + width: 290px; + } + .span4 { + width: 228px; + } + .span3 { + width: 166px; + } + .span2 { + width: 104px; + } + .span1 { + width: 42px; + } + .offset12 { + margin-left: 764px; + } + .offset11 { + margin-left: 702px; + } + .offset10 { + margin-left: 640px; + } + .offset9 { + margin-left: 578px; + } + .offset8 { + margin-left: 516px; + } + .offset7 { + margin-left: 454px; + } + .offset6 { + margin-left: 392px; + } + .offset5 { + margin-left: 330px; + } + .offset4 { + margin-left: 268px; + } + .offset3 { + margin-left: 206px; + } + .offset2 { + margin-left: 144px; + } + .offset1 { + margin-left: 82px; + } + .row-fluid { + width: 100%; + *zoom: 1; + } + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + .row-fluid:after { + clear: both; + } + .row-fluid [class*="span"] { + display: block; + float: left; + width: 100%; + min-height: 30px; + margin-left: 2.7624309392265194%; + *margin-left: 2.709239449864817%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + input, + textarea, + .uneditable-input { + margin-left: 0; + } + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} + +@media (max-width: 767px) { + body { + padding-right: 20px; + padding-left: 20px; + } + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + .container-fluid { + padding: 0; + } + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + .dl-horizontal dd { + margin-left: 0; + } + .container { + width: auto; + } + .row-fluid { + width: 100%; + } + .row, + .thumbnails { + margin-left: 0; + } + .thumbnails > li { + float: none; + margin-left: 0; + } + [class*="span"], + .uneditable-input[class*="span"], + .row-fluid [class*="span"] { + display: block; + float: none; + width: 100%; + margin-left: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + .input-large, + .input-xlarge, + .input-xxlarge, + input[class*="span"], + select[class*="span"], + textarea[class*="span"], + .uneditable-input { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + .modal.fade { + top: -100px; + } + .modal.fade.in { + top: 20px; + } +} + +@media (max-width: 480px) { + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + .page-header h1 small { + display: block; + line-height: 20px; + } + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + .form-horizontal .controls { + margin-left: 0; + } + .form-horizontal .control-list { + padding-top: 0; + } + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + .media-object { + margin-right: 0; + margin-left: 0; + } + .modal { + top: 10px; + right: 10px; + left: 10px; + } + .modal-header .close { + padding: 10px; + margin: -10px; + } + .carousel-caption { + position: static; + } +} + +@media (max-width: 979px) { + body { + padding-top: 0; + } + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + .navbar-fixed-top { + margin-bottom: 20px; + } + .navbar-fixed-bottom { + margin-top: 20px; + } + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + .navbar .container { + width: auto; + padding: 0; + } + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + .nav-collapse { + clear: both; + } + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + .nav-collapse .nav > li { + float: none; + } + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + .nav-collapse .nav > .divider-vertical { + display: none; + } + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + .nav-collapse .nav > li > a, + .nav-collapse .dropdown-menu a { + padding: 9px 15px; + font-weight: bold; + color: #777777; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + } + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + .nav-collapse .nav > li > a:hover, + .nav-collapse .nav > li > a:focus, + .nav-collapse .dropdown-menu a:hover, + .nav-collapse .dropdown-menu a:focus { + background-color: #f2f2f2; + } + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + .navbar-inverse .nav-collapse .nav > li > a:hover, + .navbar-inverse .nav-collapse .nav > li > a:focus, + .navbar-inverse .nav-collapse .dropdown-menu a:hover, + .navbar-inverse .nav-collapse .dropdown-menu a:focus { + background-color: #111111; + } + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + .nav-collapse .dropdown-menu { + position: static; + top: auto; + left: auto; + display: none; + float: none; + max-width: none; + padding: 0; + margin: 0 15px; + background-color: transparent; + border: none; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + } + .nav-collapse .open > .dropdown-menu { + display: block; + } + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + .nav-collapse .dropdown-menu .divider { + display: none; + } + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + .nav-collapse .navbar-form, + .nav-collapse .navbar-search { + float: none; + padding: 10px 15px; + margin: 10px 0; + border-top: 1px solid #f2f2f2; + border-bottom: 1px solid #f2f2f2; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + } + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + .navbar .btn-navbar { + display: block; + } + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} + +@media (min-width: 980px) { + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} diff --git a/public/assets/css/bootstrap-responsive.min.css b/public/assets/css/bootstrap-responsive.min.css new file mode 100755 index 0000000000..f4ede63f32 --- /dev/null +++ b/public/assets/css/bootstrap-responsive.min.css @@ -0,0 +1,9 @@ +/*! + * Bootstrap Responsive v2.3.2 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}@-ms-viewport{width:device-width}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}.visible-desktop{display:inherit!important}@media(min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}}@media(max-width:767px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-phone{display:inherit!important}.hidden-phone{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:inherit!important}.hidden-print{display:none!important}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:30px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.564102564102564%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%}.row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%}.row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%}.row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%}.row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%}.row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%}.row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%}.row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%}.row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%}.row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%}.row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%}.row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%}.row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%}.row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%}.row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%}.row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%}.row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%}.row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%}.row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%}.row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%}.row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%}.row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%}.row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%}.row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%}.row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%}.row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%}.row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%}.row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%}.row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%}.row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%}.row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%}.row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%}.row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%}.row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%}.row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:30px}input.span12,textarea.span12,.uneditable-input.span12{width:1156px}input.span11,textarea.span11,.uneditable-input.span11{width:1056px}input.span10,textarea.span10,.uneditable-input.span10{width:956px}input.span9,textarea.span9,.uneditable-input.span9{width:856px}input.span8,textarea.span8,.uneditable-input.span8{width:756px}input.span7,textarea.span7,.uneditable-input.span7{width:656px}input.span6,textarea.span6,.uneditable-input.span6{width:556px}input.span5,textarea.span5,.uneditable-input.span5{width:456px}input.span4,textarea.span4,.uneditable-input.span4{width:356px}input.span3,textarea.span3,.uneditable-input.span3{width:256px}input.span2,textarea.span2,.uneditable-input.span2{width:156px}input.span1,textarea.span1,.uneditable-input.span1{width:56px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.7624309392265194%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%}.row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%}.row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%}.row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%}.row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%}.row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%}.row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%}.row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%}.row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%}.row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%}.row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%}.row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%}.row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%}.row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%}.row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%}.row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%}.row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%}.row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%}.row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%}.row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%}.row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%}.row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%}.row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%}.row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%}.row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%}.row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%}.row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%}.row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%}.row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%}.row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%}.row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%}.row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%}.row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%}.row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%}.row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:710px}input.span11,textarea.span11,.uneditable-input.span11{width:648px}input.span10,textarea.span10,.uneditable-input.span10{width:586px}input.span9,textarea.span9,.uneditable-input.span9{width:524px}input.span8,textarea.span8,.uneditable-input.span8{width:462px}input.span7,textarea.span7,.uneditable-input.span7{width:400px}input.span6,textarea.span6,.uneditable-input.span6{width:338px}input.span5,textarea.span5,.uneditable-input.span5{width:276px}input.span4,textarea.span4,.uneditable-input.span4{width:214px}input.span3,textarea.span3,.uneditable-input.span3{width:152px}input.span2,textarea.span2,.uneditable-input.span2{width:90px}input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}.thumbnails>li{float:none;margin-left:0}[class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="offset"]:first-child{margin-left:0}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}.controls-row [class*="span"]+[class*="span"]{margin-left:0}.modal{position:fixed;top:20px;right:20px;left:20px;width:auto;margin:0}.modal.fade{top:-100px}.modal.fade.in{top:20px}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:20px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.media .pull-left,.media .pull-right{display:block;float:none;margin-bottom:10px}.media-object{margin-right:0;margin-left:0}.modal{top:10px;right:10px;left:10px}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top,.navbar-fixed-bottom{position:static}.navbar-fixed-top{margin-bottom:20px}.navbar-fixed-bottom{margin-top:20px}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 10px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#777;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .nav>li>a:focus,.nav-collapse .dropdown-menu a:hover,.nav-collapse .dropdown-menu a:focus{background-color:#f2f2f2}.navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .nav>li>a:focus,.navbar-inverse .nav-collapse .dropdown-menu a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:focus{background-color:#111}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:none;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .open>.dropdown-menu{display:block}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}.navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}} diff --git a/public/assets/css/bootstrap.css b/public/assets/css/bootstrap.css new file mode 100755 index 0000000000..b725064aab --- /dev/null +++ b/public/assets/css/bootstrap.css @@ -0,0 +1,6167 @@ +/*! + * Bootstrap v2.3.2 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */ + +.clearfix { + *zoom: 1; +} + +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +.clearfix:after { + clear: both; +} + +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.input-block-level { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +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 { + width: auto\9; + height: auto; + max-width: 100%; + vertical-align: middle; + border: 0; + -ms-interpolation-mode: bicubic; +} + +#map_canvas img, +.google-maps img { + max-width: none; +} + +button, +input, +select, +textarea { + margin: 0; + font-size: 100%; + vertical-align: middle; +} + +button, +input { + *overflow: visible; + line-height: normal; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + cursor: pointer; + -webkit-appearance: button; +} + +label, +select, +button, +input[type="button"], +input[type="reset"], +input[type="submit"], +input[type="radio"], +input[type="checkbox"] { + cursor: pointer; +} + +input[type="search"] { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield; +} + +input[type="search"]::-webkit-search-decoration, +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} + +textarea { + overflow: auto; + vertical-align: top; +} + +@media print { + * { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + .ir a:after, + a[href^="javascript:"]:after, + a[href^="#"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + @page { + margin: 0.5cm; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } +} + +body { + margin: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 20px; + color: #333333; + background-color: #ffffff; +} + +a { + color: #0088cc; + text-decoration: none; +} + +a:hover, +a:focus { + color: #005580; + text-decoration: underline; +} + +.img-rounded { + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.img-polaroid { + padding: 4px; + background-color: #fff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} + +.img-circle { + -webkit-border-radius: 500px; + -moz-border-radius: 500px; + border-radius: 500px; +} + +.row { + margin-left: -20px; + *zoom: 1; +} + +.row:before, +.row:after { + display: table; + line-height: 0; + content: ""; +} + +.row:after { + clear: both; +} + +[class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; +} + +.container, +.navbar-static-top .container, +.navbar-fixed-top .container, +.navbar-fixed-bottom .container { + width: 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; + line-height: 0; + content: ""; +} + +.row-fluid:after { + clear: both; +} + +.row-fluid [class*="span"] { + display: block; + float: left; + width: 100%; + min-height: 30px; + margin-left: 2.127659574468085%; + *margin-left: 2.074468085106383%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.row-fluid [class*="span"]:first-child { + margin-left: 0; +} + +.row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.127659574468085%; +} + +.row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; +} + +.row-fluid .span11 { + width: 91.48936170212765%; + *width: 91.43617021276594%; +} + +.row-fluid .span10 { + width: 82.97872340425532%; + *width: 82.92553191489361%; +} + +.row-fluid .span9 { + width: 74.46808510638297%; + *width: 74.41489361702126%; +} + +.row-fluid .span8 { + width: 65.95744680851064%; + *width: 65.90425531914893%; +} + +.row-fluid .span7 { + width: 57.44680851063829%; + *width: 57.39361702127659%; +} + +.row-fluid .span6 { + width: 48.93617021276595%; + *width: 48.88297872340425%; +} + +.row-fluid .span5 { + width: 40.42553191489362%; + *width: 40.37234042553192%; +} + +.row-fluid .span4 { + width: 31.914893617021278%; + *width: 31.861702127659576%; +} + +.row-fluid .span3 { + width: 23.404255319148934%; + *width: 23.351063829787233%; +} + +.row-fluid .span2 { + width: 14.893617021276595%; + *width: 14.840425531914894%; +} + +.row-fluid .span1 { + width: 6.382978723404255%; + *width: 6.329787234042553%; +} + +.row-fluid .offset12 { + margin-left: 104.25531914893617%; + *margin-left: 104.14893617021275%; +} + +.row-fluid .offset12:first-child { + margin-left: 102.12765957446808%; + *margin-left: 102.02127659574467%; +} + +.row-fluid .offset11 { + margin-left: 95.74468085106382%; + *margin-left: 95.6382978723404%; +} + +.row-fluid .offset11:first-child { + margin-left: 93.61702127659574%; + *margin-left: 93.51063829787232%; +} + +.row-fluid .offset10 { + margin-left: 87.23404255319149%; + *margin-left: 87.12765957446807%; +} + +.row-fluid .offset10:first-child { + margin-left: 85.1063829787234%; + *margin-left: 84.99999999999999%; +} + +.row-fluid .offset9 { + margin-left: 78.72340425531914%; + *margin-left: 78.61702127659572%; +} + +.row-fluid .offset9:first-child { + margin-left: 76.59574468085106%; + *margin-left: 76.48936170212764%; +} + +.row-fluid .offset8 { + margin-left: 70.2127659574468%; + *margin-left: 70.10638297872339%; +} + +.row-fluid .offset8:first-child { + margin-left: 68.08510638297872%; + *margin-left: 67.9787234042553%; +} + +.row-fluid .offset7 { + margin-left: 61.70212765957446%; + *margin-left: 61.59574468085106%; +} + +.row-fluid .offset7:first-child { + margin-left: 59.574468085106375%; + *margin-left: 59.46808510638297%; +} + +.row-fluid .offset6 { + margin-left: 53.191489361702125%; + *margin-left: 53.085106382978715%; +} + +.row-fluid .offset6:first-child { + margin-left: 51.063829787234035%; + *margin-left: 50.95744680851063%; +} + +.row-fluid .offset5 { + margin-left: 44.68085106382979%; + *margin-left: 44.57446808510638%; +} + +.row-fluid .offset5:first-child { + margin-left: 42.5531914893617%; + *margin-left: 42.4468085106383%; +} + +.row-fluid .offset4 { + margin-left: 36.170212765957444%; + *margin-left: 36.06382978723405%; +} + +.row-fluid .offset4:first-child { + margin-left: 34.04255319148936%; + *margin-left: 33.93617021276596%; +} + +.row-fluid .offset3 { + margin-left: 27.659574468085104%; + *margin-left: 27.5531914893617%; +} + +.row-fluid .offset3:first-child { + margin-left: 25.53191489361702%; + *margin-left: 25.425531914893618%; +} + +.row-fluid .offset2 { + margin-left: 19.148936170212764%; + *margin-left: 19.04255319148936%; +} + +.row-fluid .offset2:first-child { + margin-left: 17.02127659574468%; + *margin-left: 16.914893617021278%; +} + +.row-fluid .offset1 { + margin-left: 10.638297872340425%; + *margin-left: 10.53191489361702%; +} + +.row-fluid .offset1:first-child { + margin-left: 8.51063829787234%; + *margin-left: 8.404255319148938%; +} + +[class*="span"].hide, +.row-fluid [class*="span"].hide { + display: none; +} + +[class*="span"].pull-right, +.row-fluid [class*="span"].pull-right { + float: right; +} + +.container { + margin-right: auto; + margin-left: auto; + *zoom: 1; +} + +.container:before, +.container:after { + display: table; + line-height: 0; + content: ""; +} + +.container:after { + clear: both; +} + +.container-fluid { + padding-right: 20px; + padding-left: 20px; + *zoom: 1; +} + +.container-fluid:before, +.container-fluid:after { + display: table; + line-height: 0; + content: ""; +} + +.container-fluid:after { + clear: both; +} + +p { + margin: 0 0 10px; +} + +.lead { + margin-bottom: 20px; + font-size: 21px; + font-weight: 200; + line-height: 30px; +} + +small { + font-size: 85%; +} + +strong { + font-weight: bold; +} + +em { + font-style: italic; +} + +cite { + font-style: normal; +} + +.muted { + color: #999999; +} + +a.muted:hover, +a.muted:focus { + color: #808080; +} + +.text-warning { + color: #c09853; +} + +a.text-warning:hover, +a.text-warning:focus { + color: #a47e3c; +} + +.text-error { + color: #b94a48; +} + +a.text-error:hover, +a.text-error:focus { + color: #953b39; +} + +.text-info { + color: #3a87ad; +} + +a.text-info:hover, +a.text-info:focus { + color: #2d6987; +} + +.text-success { + color: #468847; +} + +a.text-success:hover, +a.text-success:focus { + color: #356635; +} + +.text-left { + text-align: left; +} + +.text-right { + text-align: right; +} + +.text-center { + text-align: center; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 10px 0; + font-family: inherit; + font-weight: bold; + line-height: 20px; + color: inherit; + text-rendering: optimizelegibility; +} + +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small { + font-weight: normal; + line-height: 1; + color: #999999; +} + +h1, +h2, +h3 { + line-height: 40px; +} + +h1 { + font-size: 38.5px; +} + +h2 { + font-size: 31.5px; +} + +h3 { + font-size: 24.5px; +} + +h4 { + font-size: 17.5px; +} + +h5 { + font-size: 14px; +} + +h6 { + font-size: 11.9px; +} + +h1 small { + font-size: 24.5px; +} + +h2 small { + font-size: 17.5px; +} + +h3 small { + font-size: 14px; +} + +h4 small { + font-size: 14px; +} + +.page-header { + padding-bottom: 9px; + margin: 20px 0 30px; + border-bottom: 1px solid #eeeeee; +} + +ul, +ol { + padding: 0; + margin: 0 0 10px 25px; +} + +ul ul, +ul ol, +ol ol, +ol ul { + margin-bottom: 0; +} + +li { + line-height: 20px; +} + +ul.unstyled, +ol.unstyled { + margin-left: 0; + list-style: none; +} + +ul.inline, +ol.inline { + margin-left: 0; + list-style: none; +} + +ul.inline > li, +ol.inline > li { + display: inline-block; + *display: inline; + padding-right: 5px; + padding-left: 5px; + *zoom: 1; +} + +dl { + margin-bottom: 20px; +} + +dt, +dd { + line-height: 20px; +} + +dt { + font-weight: bold; +} + +dd { + margin-left: 10px; +} + +.dl-horizontal { + *zoom: 1; +} + +.dl-horizontal:before, +.dl-horizontal:after { + display: table; + line-height: 0; + content: ""; +} + +.dl-horizontal:after { + clear: both; +} + +.dl-horizontal dt { + float: left; + width: 160px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; +} + +.dl-horizontal dd { + margin-left: 180px; +} + +hr { + margin: 20px 0; + border: 0; + border-top: 1px solid #eeeeee; + border-bottom: 1px solid #ffffff; +} + +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #999999; +} + +abbr.initialism { + font-size: 90%; + text-transform: uppercase; +} + +blockquote { + padding: 0 0 0 15px; + margin: 0 0 20px; + border-left: 5px solid #eeeeee; +} + +blockquote p { + margin-bottom: 0; + font-size: 17.5px; + font-weight: 300; + line-height: 1.25; +} + +blockquote small { + display: block; + line-height: 20px; + color: #999999; +} + +blockquote small:before { + content: '\2014 \00A0'; +} + +blockquote.pull-right { + float: right; + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #eeeeee; + border-left: 0; +} + +blockquote.pull-right p, +blockquote.pull-right small { + text-align: right; +} + +blockquote.pull-right small:before { + content: ''; +} + +blockquote.pull-right small:after { + content: '\00A0 \2014'; +} + +q:before, +q:after, +blockquote:before, +blockquote:after { + content: ""; +} + +address { + display: block; + margin-bottom: 20px; + font-style: normal; + line-height: 20px; +} + +code, +pre { + padding: 0 3px 2px; + font-family: Monaco, Menlo, Consolas, "Courier New", monospace; + font-size: 12px; + color: #333333; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +code { + padding: 2px 4px; + color: #d14; + white-space: nowrap; + background-color: #f7f7f9; + border: 1px solid #e1e1e8; +} + +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 20px; + word-break: break-all; + word-wrap: break-word; + white-space: pre; + white-space: pre-wrap; + background-color: #f5f5f5; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.15); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +pre.prettyprint { + margin-bottom: 20px; +} + +pre code { + padding: 0; + color: inherit; + white-space: pre; + white-space: pre-wrap; + background-color: transparent; + border: 0; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +form { + margin: 0 0 20px; +} + +fieldset { + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: 40px; + color: #333333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} + +legend small { + font-size: 15px; + color: #999999; +} + +label, +input, +button, +select, +textarea { + font-size: 14px; + font-weight: normal; + line-height: 20px; +} + +input, +button, +select, +textarea { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +label { + display: block; + margin-bottom: 5px; +} + +select, +textarea, +input[type="text"], +input[type="password"], +input[type="datetime"], +input[type="datetime-local"], +input[type="date"], +input[type="month"], +input[type="time"], +input[type="week"], +input[type="number"], +input[type="email"], +input[type="url"], +input[type="search"], +input[type="tel"], +input[type="color"], +.uneditable-input { + display: inline-block; + height: 20px; + padding: 4px 6px; + margin-bottom: 10px; + font-size: 14px; + line-height: 20px; + color: #555555; + vertical-align: middle; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +input, +textarea, +.uneditable-input { + width: 206px; +} + +textarea { + height: auto; +} + +textarea, +input[type="text"], +input[type="password"], +input[type="datetime"], +input[type="datetime-local"], +input[type="date"], +input[type="month"], +input[type="time"], +input[type="week"], +input[type="number"], +input[type="email"], +input[type="url"], +input[type="search"], +input[type="tel"], +input[type="color"], +.uneditable-input { + background-color: #ffffff; + border: 1px solid #cccccc; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border linear 0.2s, box-shadow linear 0.2s; + -moz-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; +} + +textarea:focus, +input[type="text"]:focus, +input[type="password"]:focus, +input[type="datetime"]:focus, +input[type="datetime-local"]:focus, +input[type="date"]:focus, +input[type="month"]:focus, +input[type="time"]:focus, +input[type="week"]:focus, +input[type="number"]:focus, +input[type="email"]:focus, +input[type="url"]:focus, +input[type="search"]:focus, +input[type="tel"]:focus, +input[type="color"]:focus, +.uneditable-input:focus { + border-color: rgba(82, 168, 236, 0.8); + outline: 0; + outline: thin dotted \9; + /* IE6-9 */ + + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 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); +} + +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + *margin-top: 0; + line-height: normal; +} + +input[type="file"], +input[type="image"], +input[type="submit"], +input[type="reset"], +input[type="button"], +input[type="radio"], +input[type="checkbox"] { + width: auto; +} + +select, +input[type="file"] { + height: 30px; + /* In IE7, the height of the select element cannot be changed by height, only font-size */ + + *margin-top: 4px; + /* For IE7, add top margin to align select with labels */ + + line-height: 30px; +} + +select { + width: 220px; + background-color: #ffffff; + border: 1px solid #cccccc; +} + +select[multiple], +select[size] { + height: auto; +} + +select:focus, +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +.uneditable-input, +.uneditable-textarea { + color: #999999; + cursor: not-allowed; + background-color: #fcfcfc; + border-color: #cccccc; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); +} + +.uneditable-input { + overflow: hidden; + white-space: nowrap; +} + +.uneditable-textarea { + width: auto; + height: auto; +} + +input:-moz-placeholder, +textarea:-moz-placeholder { + color: #999999; +} + +input:-ms-input-placeholder, +textarea:-ms-input-placeholder { + color: #999999; +} + +input::-webkit-input-placeholder, +textarea::-webkit-input-placeholder { + color: #999999; +} + +.radio, +.checkbox { + min-height: 20px; + padding-left: 20px; +} + +.radio input[type="radio"], +.checkbox input[type="checkbox"] { + float: left; + margin-left: -20px; +} + +.controls > .radio:first-child, +.controls > .checkbox:first-child { + padding-top: 5px; +} + +.radio.inline, +.checkbox.inline { + display: inline-block; + padding-top: 5px; + margin-bottom: 0; + vertical-align: middle; +} + +.radio.inline + .radio.inline, +.checkbox.inline + .checkbox.inline { + margin-left: 10px; +} + +.input-mini { + width: 60px; +} + +.input-small { + width: 90px; +} + +.input-medium { + width: 150px; +} + +.input-large { + width: 210px; +} + +.input-xlarge { + width: 270px; +} + +.input-xxlarge { + width: 530px; +} + +input[class*="span"], +select[class*="span"], +textarea[class*="span"], +.uneditable-input[class*="span"], +.row-fluid input[class*="span"], +.row-fluid select[class*="span"], +.row-fluid textarea[class*="span"], +.row-fluid .uneditable-input[class*="span"] { + float: none; + margin-left: 0; +} + +.input-append input[class*="span"], +.input-append .uneditable-input[class*="span"], +.input-prepend input[class*="span"], +.input-prepend .uneditable-input[class*="span"], +.row-fluid input[class*="span"], +.row-fluid select[class*="span"], +.row-fluid textarea[class*="span"], +.row-fluid .uneditable-input[class*="span"], +.row-fluid .input-prepend [class*="span"], +.row-fluid .input-append [class*="span"] { + display: inline-block; +} + +input, +textarea, +.uneditable-input { + margin-left: 0; +} + +.controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; +} + +input.span12, +textarea.span12, +.uneditable-input.span12 { + width: 926px; +} + +input.span11, +textarea.span11, +.uneditable-input.span11 { + width: 846px; +} + +input.span10, +textarea.span10, +.uneditable-input.span10 { + width: 766px; +} + +input.span9, +textarea.span9, +.uneditable-input.span9 { + width: 686px; +} + +input.span8, +textarea.span8, +.uneditable-input.span8 { + width: 606px; +} + +input.span7, +textarea.span7, +.uneditable-input.span7 { + width: 526px; +} + +input.span6, +textarea.span6, +.uneditable-input.span6 { + width: 446px; +} + +input.span5, +textarea.span5, +.uneditable-input.span5 { + width: 366px; +} + +input.span4, +textarea.span4, +.uneditable-input.span4 { + width: 286px; +} + +input.span3, +textarea.span3, +.uneditable-input.span3 { + width: 206px; +} + +input.span2, +textarea.span2, +.uneditable-input.span2 { + width: 126px; +} + +input.span1, +textarea.span1, +.uneditable-input.span1 { + width: 46px; +} + +.controls-row { + *zoom: 1; +} + +.controls-row:before, +.controls-row:after { + display: table; + line-height: 0; + content: ""; +} + +.controls-row:after { + clear: both; +} + +.controls-row [class*="span"], +.row-fluid .controls-row [class*="span"] { + float: left; +} + +.controls-row .checkbox[class*="span"], +.controls-row .radio[class*="span"] { + padding-top: 5px; +} + +input[disabled], +select[disabled], +textarea[disabled], +input[readonly], +select[readonly], +textarea[readonly] { + cursor: not-allowed; + background-color: #eeeeee; +} + +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"][readonly], +input[type="checkbox"][readonly] { + background-color: transparent; +} + +.control-group.warning .control-label, +.control-group.warning .help-block, +.control-group.warning .help-inline { + color: #c09853; +} + +.control-group.warning .checkbox, +.control-group.warning .radio, +.control-group.warning input, +.control-group.warning select, +.control-group.warning textarea { + color: #c09853; +} + +.control-group.warning input, +.control-group.warning select, +.control-group.warning textarea { + border-color: #c09853; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.warning input:focus, +.control-group.warning select:focus, +.control-group.warning textarea:focus { + border-color: #a47e3c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; +} + +.control-group.warning .input-prepend .add-on, +.control-group.warning .input-append .add-on { + color: #c09853; + background-color: #fcf8e3; + border-color: #c09853; +} + +.control-group.error .control-label, +.control-group.error .help-block, +.control-group.error .help-inline { + color: #b94a48; +} + +.control-group.error .checkbox, +.control-group.error .radio, +.control-group.error input, +.control-group.error select, +.control-group.error textarea { + color: #b94a48; +} + +.control-group.error input, +.control-group.error select, +.control-group.error textarea { + border-color: #b94a48; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.error input:focus, +.control-group.error select:focus, +.control-group.error textarea:focus { + border-color: #953b39; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; +} + +.control-group.error .input-prepend .add-on, +.control-group.error .input-append .add-on { + color: #b94a48; + background-color: #f2dede; + border-color: #b94a48; +} + +.control-group.success .control-label, +.control-group.success .help-block, +.control-group.success .help-inline { + color: #468847; +} + +.control-group.success .checkbox, +.control-group.success .radio, +.control-group.success input, +.control-group.success select, +.control-group.success textarea { + color: #468847; +} + +.control-group.success input, +.control-group.success select, +.control-group.success textarea { + border-color: #468847; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.success input:focus, +.control-group.success select:focus, +.control-group.success textarea:focus { + border-color: #356635; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; +} + +.control-group.success .input-prepend .add-on, +.control-group.success .input-append .add-on { + color: #468847; + background-color: #dff0d8; + border-color: #468847; +} + +.control-group.info .control-label, +.control-group.info .help-block, +.control-group.info .help-inline { + color: #3a87ad; +} + +.control-group.info .checkbox, +.control-group.info .radio, +.control-group.info input, +.control-group.info select, +.control-group.info textarea { + color: #3a87ad; +} + +.control-group.info input, +.control-group.info select, +.control-group.info textarea { + border-color: #3a87ad; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.info input:focus, +.control-group.info select:focus, +.control-group.info textarea:focus { + border-color: #2d6987; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; +} + +.control-group.info .input-prepend .add-on, +.control-group.info .input-append .add-on { + color: #3a87ad; + background-color: #d9edf7; + border-color: #3a87ad; +} + +input:focus:invalid, +textarea:focus:invalid, +select:focus:invalid { + color: #b94a48; + border-color: #ee5f5b; +} + +input:focus:invalid:focus, +textarea:focus:invalid:focus, +select:focus:invalid:focus { + border-color: #e9322d; + -webkit-box-shadow: 0 0 6px #f8b9b7; + -moz-box-shadow: 0 0 6px #f8b9b7; + box-shadow: 0 0 6px #f8b9b7; +} + +.form-actions { + padding: 19px 20px 20px; + margin-top: 20px; + margin-bottom: 20px; + background-color: #f5f5f5; + border-top: 1px solid #e5e5e5; + *zoom: 1; +} + +.form-actions:before, +.form-actions:after { + display: table; + line-height: 0; + content: ""; +} + +.form-actions:after { + clear: both; +} + +.help-block, +.help-inline { + color: #595959; +} + +.help-block { + display: block; + margin-bottom: 10px; +} + +.help-inline { + display: inline-block; + *display: inline; + padding-left: 5px; + vertical-align: middle; + *zoom: 1; +} + +.input-append, +.input-prepend { + display: inline-block; + margin-bottom: 10px; + font-size: 0; + white-space: nowrap; + vertical-align: middle; +} + +.input-append input, +.input-prepend input, +.input-append select, +.input-prepend select, +.input-append .uneditable-input, +.input-prepend .uneditable-input, +.input-append .dropdown-menu, +.input-prepend .dropdown-menu, +.input-append .popover, +.input-prepend .popover { + font-size: 14px; +} + +.input-append input, +.input-prepend input, +.input-append select, +.input-prepend select, +.input-append .uneditable-input, +.input-prepend .uneditable-input { + position: relative; + margin-bottom: 0; + *margin-left: 0; + vertical-align: top; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-append input:focus, +.input-prepend input:focus, +.input-append select:focus, +.input-prepend select:focus, +.input-append .uneditable-input:focus, +.input-prepend .uneditable-input:focus { + z-index: 2; +} + +.input-append .add-on, +.input-prepend .add-on { + display: inline-block; + width: auto; + height: 20px; + min-width: 16px; + padding: 4px 5px; + font-size: 14px; + font-weight: normal; + line-height: 20px; + text-align: center; + text-shadow: 0 1px 0 #ffffff; + background-color: #eeeeee; + border: 1px solid #ccc; +} + +.input-append .add-on, +.input-prepend .add-on, +.input-append .btn, +.input-prepend .btn, +.input-append .btn-group > .dropdown-toggle, +.input-prepend .btn-group > .dropdown-toggle { + vertical-align: top; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.input-append .active, +.input-prepend .active { + background-color: #a9dba9; + border-color: #46a546; +} + +.input-prepend .add-on, +.input-prepend .btn { + margin-right: -1px; +} + +.input-prepend .add-on:first-child, +.input-prepend .btn:first-child { + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.input-append input, +.input-append select, +.input-append .uneditable-input { + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.input-append input + .btn-group .btn:last-child, +.input-append select + .btn-group .btn:last-child, +.input-append .uneditable-input + .btn-group .btn:last-child { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-append .add-on, +.input-append .btn, +.input-append .btn-group { + margin-left: -1px; +} + +.input-append .add-on:last-child, +.input-append .btn:last-child, +.input-append .btn-group:last-child > .dropdown-toggle { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-prepend.input-append input, +.input-prepend.input-append select, +.input-prepend.input-append .uneditable-input { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.input-prepend.input-append input + .btn-group .btn, +.input-prepend.input-append select + .btn-group .btn, +.input-prepend.input-append .uneditable-input + .btn-group .btn { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-prepend.input-append .add-on:first-child, +.input-prepend.input-append .btn:first-child { + margin-right: -1px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.input-prepend.input-append .add-on:last-child, +.input-prepend.input-append .btn:last-child { + margin-left: -1px; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-prepend.input-append .btn-group:first-child { + margin-left: 0; +} + +input.search-query { + padding-right: 14px; + padding-right: 4px \9; + padding-left: 14px; + padding-left: 4px \9; + /* IE7-8 doesn't have border-radius, so don't indent the padding */ + + margin-bottom: 0; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} + +/* Allow for input prepend/append in search forms */ + +.form-search .input-append .search-query, +.form-search .input-prepend .search-query { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.form-search .input-append .search-query { + -webkit-border-radius: 14px 0 0 14px; + -moz-border-radius: 14px 0 0 14px; + border-radius: 14px 0 0 14px; +} + +.form-search .input-append .btn { + -webkit-border-radius: 0 14px 14px 0; + -moz-border-radius: 0 14px 14px 0; + border-radius: 0 14px 14px 0; +} + +.form-search .input-prepend .search-query { + -webkit-border-radius: 0 14px 14px 0; + -moz-border-radius: 0 14px 14px 0; + border-radius: 0 14px 14px 0; +} + +.form-search .input-prepend .btn { + -webkit-border-radius: 14px 0 0 14px; + -moz-border-radius: 14px 0 0 14px; + border-radius: 14px 0 0 14px; +} + +.form-search input, +.form-inline input, +.form-horizontal input, +.form-search textarea, +.form-inline textarea, +.form-horizontal textarea, +.form-search select, +.form-inline select, +.form-horizontal select, +.form-search .help-inline, +.form-inline .help-inline, +.form-horizontal .help-inline, +.form-search .uneditable-input, +.form-inline .uneditable-input, +.form-horizontal .uneditable-input, +.form-search .input-prepend, +.form-inline .input-prepend, +.form-horizontal .input-prepend, +.form-search .input-append, +.form-inline .input-append, +.form-horizontal .input-append { + display: inline-block; + *display: inline; + margin-bottom: 0; + vertical-align: middle; + *zoom: 1; +} + +.form-search .hide, +.form-inline .hide, +.form-horizontal .hide { + display: none; +} + +.form-search label, +.form-inline label, +.form-search .btn-group, +.form-inline .btn-group { + display: inline-block; +} + +.form-search .input-append, +.form-inline .input-append, +.form-search .input-prepend, +.form-inline .input-prepend { + margin-bottom: 0; +} + +.form-search .radio, +.form-search .checkbox, +.form-inline .radio, +.form-inline .checkbox { + padding-left: 0; + margin-bottom: 0; + vertical-align: middle; +} + +.form-search .radio input[type="radio"], +.form-search .checkbox input[type="checkbox"], +.form-inline .radio input[type="radio"], +.form-inline .checkbox input[type="checkbox"] { + float: left; + margin-right: 3px; + margin-left: 0; +} + +.control-group { + margin-bottom: 10px; +} + +legend + .control-group { + margin-top: 20px; + -webkit-margin-top-collapse: separate; +} + +.form-horizontal .control-group { + margin-bottom: 20px; + *zoom: 1; +} + +.form-horizontal .control-group:before, +.form-horizontal .control-group:after { + display: table; + line-height: 0; + content: ""; +} + +.form-horizontal .control-group:after { + clear: both; +} + +.form-horizontal .control-label { + float: left; + width: 160px; + padding-top: 5px; + text-align: right; +} + +.form-horizontal .controls { + *display: inline-block; + *padding-left: 20px; + margin-left: 180px; + *margin-left: 0; +} + +.form-horizontal .controls:first-child { + *padding-left: 180px; +} + +.form-horizontal .help-block { + margin-bottom: 0; +} + +.form-horizontal input + .help-block, +.form-horizontal select + .help-block, +.form-horizontal textarea + .help-block, +.form-horizontal .uneditable-input + .help-block, +.form-horizontal .input-prepend + .help-block, +.form-horizontal .input-append + .help-block { + margin-top: 10px; +} + +.form-horizontal .form-actions { + padding-left: 180px; +} + +table { + max-width: 100%; + background-color: transparent; + border-collapse: collapse; + border-spacing: 0; +} + +.table { + width: 100%; + margin-bottom: 20px; +} + +.table th, +.table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #dddddd; +} + +.table th { + font-weight: bold; +} + +.table thead th { + vertical-align: bottom; +} + +.table caption + thead tr:first-child th, +.table caption + thead tr:first-child td, +.table colgroup + thead tr:first-child th, +.table colgroup + thead tr:first-child td, +.table thead:first-child tr:first-child th, +.table thead:first-child tr:first-child td { + border-top: 0; +} + +.table tbody + tbody { + border-top: 2px solid #dddddd; +} + +.table .table { + background-color: #ffffff; +} + +.table-condensed th, +.table-condensed td { + padding: 4px 5px; +} + +.table-bordered { + border: 1px solid #dddddd; + border-collapse: separate; + *border-collapse: collapse; + border-left: 0; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.table-bordered th, +.table-bordered td { + border-left: 1px solid #dddddd; +} + +.table-bordered caption + thead tr:first-child th, +.table-bordered caption + tbody tr:first-child th, +.table-bordered caption + tbody tr:first-child td, +.table-bordered colgroup + thead tr:first-child th, +.table-bordered colgroup + tbody tr:first-child th, +.table-bordered colgroup + tbody tr:first-child td, +.table-bordered thead:first-child tr:first-child th, +.table-bordered tbody:first-child tr:first-child th, +.table-bordered tbody:first-child tr:first-child td { + border-top: 0; +} + +.table-bordered thead:first-child tr:first-child > th:first-child, +.table-bordered tbody:first-child tr:first-child > td:first-child, +.table-bordered tbody:first-child tr:first-child > th:first-child { + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; +} + +.table-bordered thead:first-child tr:first-child > th:last-child, +.table-bordered tbody:first-child tr:first-child > td:last-child, +.table-bordered tbody:first-child tr:first-child > th:last-child { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; +} + +.table-bordered thead:last-child tr:last-child > th:first-child, +.table-bordered tbody:last-child tr:last-child > td:first-child, +.table-bordered tbody:last-child tr:last-child > th:first-child, +.table-bordered tfoot:last-child tr:last-child > td:first-child, +.table-bordered tfoot:last-child tr:last-child > th:first-child { + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; +} + +.table-bordered thead:last-child tr:last-child > th:last-child, +.table-bordered tbody:last-child tr:last-child > td:last-child, +.table-bordered tbody:last-child tr:last-child > th:last-child, +.table-bordered tfoot:last-child tr:last-child > td:last-child, +.table-bordered tfoot:last-child tr:last-child > th:last-child { + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-bottomright: 4px; +} + +.table-bordered tfoot + tbody:last-child tr:last-child td:first-child { + -webkit-border-bottom-left-radius: 0; + border-bottom-left-radius: 0; + -moz-border-radius-bottomleft: 0; +} + +.table-bordered tfoot + tbody:last-child tr:last-child td:last-child { + -webkit-border-bottom-right-radius: 0; + border-bottom-right-radius: 0; + -moz-border-radius-bottomright: 0; +} + +.table-bordered caption + thead tr:first-child th:first-child, +.table-bordered caption + tbody tr:first-child td:first-child, +.table-bordered colgroup + thead tr:first-child th:first-child, +.table-bordered colgroup + tbody tr:first-child td:first-child { + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; +} + +.table-bordered caption + thead tr:first-child th:last-child, +.table-bordered caption + tbody tr:first-child td:last-child, +.table-bordered colgroup + thead tr:first-child th:last-child, +.table-bordered colgroup + tbody tr:first-child td:last-child { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; +} + +.table-striped tbody > tr:nth-child(odd) > td, +.table-striped tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; +} + +.table-hover tbody tr:hover > td, +.table-hover tbody tr:hover > th { + background-color: #f5f5f5; +} + +table td[class*="span"], +table th[class*="span"], +.row-fluid table td[class*="span"], +.row-fluid table th[class*="span"] { + display: table-cell; + float: none; + margin-left: 0; +} + +.table td.span1, +.table th.span1 { + float: none; + width: 44px; + margin-left: 0; +} + +.table td.span2, +.table th.span2 { + float: none; + width: 124px; + margin-left: 0; +} + +.table td.span3, +.table th.span3 { + float: none; + width: 204px; + margin-left: 0; +} + +.table td.span4, +.table th.span4 { + float: none; + width: 284px; + margin-left: 0; +} + +.table td.span5, +.table th.span5 { + float: none; + width: 364px; + margin-left: 0; +} + +.table td.span6, +.table th.span6 { + float: none; + width: 444px; + margin-left: 0; +} + +.table td.span7, +.table th.span7 { + float: none; + width: 524px; + margin-left: 0; +} + +.table td.span8, +.table th.span8 { + float: none; + width: 604px; + margin-left: 0; +} + +.table td.span9, +.table th.span9 { + float: none; + width: 684px; + margin-left: 0; +} + +.table td.span10, +.table th.span10 { + float: none; + width: 764px; + margin-left: 0; +} + +.table td.span11, +.table th.span11 { + float: none; + width: 844px; + margin-left: 0; +} + +.table td.span12, +.table th.span12 { + float: none; + width: 924px; + margin-left: 0; +} + +.table tbody tr.success > td { + background-color: #dff0d8; +} + +.table tbody tr.error > td { + background-color: #f2dede; +} + +.table tbody tr.warning > td { + background-color: #fcf8e3; +} + +.table tbody tr.info > td { + background-color: #d9edf7; +} + +.table-hover tbody tr.success:hover > td { + background-color: #d0e9c6; +} + +.table-hover tbody tr.error:hover > td { + background-color: #ebcccc; +} + +.table-hover tbody tr.warning:hover > td { + background-color: #faf2cc; +} + +.table-hover tbody tr.info:hover > td { + background-color: #c4e3f3; +} + +[class^="icon-"], +[class*=" icon-"] { + display: inline-block; + width: 14px; + height: 14px; + margin-top: 1px; + *margin-right: .3em; + line-height: 14px; + vertical-align: text-top; + background-image: url("../img/glyphicons-halflings.png"); + background-position: 14px 14px; + background-repeat: no-repeat; +} + +/* White icons with optional class, or on hover/focus/active states of certain elements */ + +.icon-white, +.nav-pills > .active > a > [class^="icon-"], +.nav-pills > .active > a > [class*=" icon-"], +.nav-list > .active > a > [class^="icon-"], +.nav-list > .active > a > [class*=" icon-"], +.navbar-inverse .nav > .active > a > [class^="icon-"], +.navbar-inverse .nav > .active > a > [class*=" icon-"], +.dropdown-menu > li > a:hover > [class^="icon-"], +.dropdown-menu > li > a:focus > [class^="icon-"], +.dropdown-menu > li > a:hover > [class*=" icon-"], +.dropdown-menu > li > a:focus > [class*=" icon-"], +.dropdown-menu > .active > a > [class^="icon-"], +.dropdown-menu > .active > a > [class*=" icon-"], +.dropdown-submenu:hover > a > [class^="icon-"], +.dropdown-submenu:focus > a > [class^="icon-"], +.dropdown-submenu:hover > a > [class*=" icon-"], +.dropdown-submenu:focus > a > [class*=" icon-"] { + 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 { + width: 16px; + 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 { + width: 16px; + background-position: -384px -120px; +} + +.icon-folder-open { + width: 16px; + background-position: -408px -120px; +} + +.icon-resize-vertical { + background-position: -432px -119px; +} + +.icon-resize-horizontal { + background-position: -456px -118px; +} + +.icon-hdd { + background-position: 0 -144px; +} + +.icon-bullhorn { + background-position: -24px -144px; +} + +.icon-bell { + background-position: -48px -144px; +} + +.icon-certificate { + background-position: -72px -144px; +} + +.icon-thumbs-up { + background-position: -96px -144px; +} + +.icon-thumbs-down { + background-position: -120px -144px; +} + +.icon-hand-right { + background-position: -144px -144px; +} + +.icon-hand-left { + background-position: -168px -144px; +} + +.icon-hand-up { + background-position: -192px -144px; +} + +.icon-hand-down { + background-position: -216px -144px; +} + +.icon-circle-arrow-right { + background-position: -240px -144px; +} + +.icon-circle-arrow-left { + background-position: -264px -144px; +} + +.icon-circle-arrow-up { + background-position: -288px -144px; +} + +.icon-circle-arrow-down { + background-position: -312px -144px; +} + +.icon-globe { + background-position: -336px -144px; +} + +.icon-wrench { + background-position: -360px -144px; +} + +.icon-tasks { + background-position: -384px -144px; +} + +.icon-filter { + background-position: -408px -144px; +} + +.icon-briefcase { + background-position: -432px -144px; +} + +.icon-fullscreen { + background-position: -456px -144px; +} + +.dropup, +.dropdown { + position: relative; +} + +.dropdown-toggle { + *margin-bottom: -3px; +} + +.dropdown-toggle:active, +.open .dropdown-toggle { + outline: 0; +} + +.caret { + display: inline-block; + width: 0; + height: 0; + vertical-align: top; + border-top: 4px solid #000000; + border-right: 4px solid transparent; + border-left: 4px solid transparent; + content: ""; +} + +.dropdown .caret { + margin-top: 8px; + margin-left: 2px; +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + list-style: none; + background-color: #ffffff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + *border-right-width: 2px; + *border-bottom-width: 2px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} + +.dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.dropdown-menu .divider { + *width: 100%; + height: 1px; + margin: 9px 1px; + *margin: -5px 0 5px; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; +} + +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 20px; + color: #333333; + white-space: nowrap; +} + +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus, +.dropdown-submenu:hover > a, +.dropdown-submenu:focus > a { + color: #ffffff; + text-decoration: none; + background-color: #0081c2; + background-image: -moz-linear-gradient(top, #0088cc, #0077b3); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); + background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); + background-image: -o-linear-gradient(top, #0088cc, #0077b3); + background-image: linear-gradient(to bottom, #0088cc, #0077b3); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); +} + +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #ffffff; + text-decoration: none; + background-color: #0081c2; + background-image: -moz-linear-gradient(top, #0088cc, #0077b3); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); + background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); + background-image: -o-linear-gradient(top, #0088cc, #0077b3); + background-image: linear-gradient(to bottom, #0088cc, #0077b3); + background-repeat: repeat-x; + outline: 0; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); +} + +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #999999; +} + +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: default; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.open { + *z-index: 1000; +} + +.open > .dropdown-menu { + display: block; +} + +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; +} + +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} + +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + border-top: 0; + border-bottom: 4px solid #000000; + content: ""; +} + +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; +} + +.dropdown-submenu { + position: relative; +} + +.dropdown-submenu > .dropdown-menu { + top: 0; + left: 100%; + margin-top: -6px; + margin-left: -1px; + -webkit-border-radius: 0 6px 6px 6px; + -moz-border-radius: 0 6px 6px 6px; + border-radius: 0 6px 6px 6px; +} + +.dropdown-submenu:hover > .dropdown-menu { + display: block; +} + +.dropup .dropdown-submenu > .dropdown-menu { + top: auto; + bottom: 0; + margin-top: 0; + margin-bottom: -2px; + -webkit-border-radius: 5px 5px 5px 0; + -moz-border-radius: 5px 5px 5px 0; + border-radius: 5px 5px 5px 0; +} + +.dropdown-submenu > a:after { + display: block; + float: right; + width: 0; + height: 0; + margin-top: 5px; + margin-right: -10px; + border-color: transparent; + border-left-color: #cccccc; + border-style: solid; + border-width: 5px 0 5px 5px; + content: " "; +} + +.dropdown-submenu:hover > a:after { + border-left-color: #ffffff; +} + +.dropdown-submenu.pull-left { + float: none; +} + +.dropdown-submenu.pull-left > .dropdown-menu { + left: -100%; + margin-left: 10px; + -webkit-border-radius: 6px 0 6px 6px; + -moz-border-radius: 6px 0 6px 6px; + border-radius: 6px 0 6px 6px; +} + +.dropdown .dropdown-menu .nav-header { + padding-right: 20px; + padding-left: 20px; +} + +.typeahead { + z-index: 1051; + 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 #e3e3e3; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} + +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} + +.well-large { + padding: 24px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.well-small { + padding: 9px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + -moz-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} + +.fade.in { + opacity: 1; +} + +.collapse { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height 0.35s ease; + -moz-transition: height 0.35s ease; + -o-transition: height 0.35s ease; + transition: height 0.35s ease; +} + +.collapse.in { + height: auto; +} + +.close { + float: right; + font-size: 20px; + font-weight: bold; + line-height: 20px; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); +} + +.close:hover, +.close:focus { + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.4; + filter: alpha(opacity=40); +} + +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} + +.btn { + display: inline-block; + *display: inline; + padding: 4px 12px; + margin-bottom: 0; + *margin-left: .3em; + font-size: 14px; + line-height: 20px; + color: #333333; + text-align: center; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + vertical-align: middle; + cursor: pointer; + background-color: #f5f5f5; + *background-color: #e6e6e6; + background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); + background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); + background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); + background-repeat: repeat-x; + border: 1px solid #cccccc; + *border: 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); + border-bottom-color: #b3b3b3; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + *zoom: 1; + -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); +} + +.btn:hover, +.btn:focus, +.btn:active, +.btn.active, +.btn.disabled, +.btn[disabled] { + color: #333333; + background-color: #e6e6e6; + *background-color: #d9d9d9; +} + +.btn:active, +.btn.active { + background-color: #cccccc \9; +} + +.btn:first-child { + *margin-left: 0; +} + +.btn:hover, +.btn:focus { + color: #333333; + text-decoration: none; + background-position: 0 -15px; + -webkit-transition: background-position 0.1s linear; + -moz-transition: background-position 0.1s linear; + -o-transition: background-position 0.1s linear; + transition: background-position 0.1s linear; +} + +.btn:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +.btn.active, +.btn:active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 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); +} + +.btn.disabled, +.btn[disabled] { + cursor: default; + background-image: none; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.btn-large { + padding: 11px 19px; + font-size: 17.5px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.btn-large [class^="icon-"], +.btn-large [class*=" icon-"] { + margin-top: 4px; +} + +.btn-small { + padding: 2px 10px; + font-size: 11.9px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.btn-small [class^="icon-"], +.btn-small [class*=" icon-"] { + margin-top: 0; +} + +.btn-mini [class^="icon-"], +.btn-mini [class*=" icon-"] { + margin-top: -1px; +} + +.btn-mini { + padding: 0 6px; + font-size: 10.5px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.btn-block { + display: block; + width: 100%; + padding-right: 0; + padding-left: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.btn-block + .btn-block { + margin-top: 5px; +} + +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} + +.btn-primary.active, +.btn-warning.active, +.btn-danger.active, +.btn-success.active, +.btn-info.active, +.btn-inverse.active { + color: rgba(255, 255, 255, 0.75); +} + +.btn-primary { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #006dcc; + *background-color: #0044cc; + background-image: -moz-linear-gradient(top, #0088cc, #0044cc); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); + background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); + background-image: -o-linear-gradient(top, #0088cc, #0044cc); + background-image: linear-gradient(to bottom, #0088cc, #0044cc); + background-repeat: repeat-x; + border-color: #0044cc #0044cc #002a80; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-primary:hover, +.btn-primary:focus, +.btn-primary:active, +.btn-primary.active, +.btn-primary.disabled, +.btn-primary[disabled] { + color: #ffffff; + background-color: #0044cc; + *background-color: #003bb3; +} + +.btn-primary:active, +.btn-primary.active { + background-color: #003399 \9; +} + +.btn-warning { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #faa732; + *background-color: #f89406; + background-image: -moz-linear-gradient(top, #fbb450, #f89406); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); + background-image: -webkit-linear-gradient(top, #fbb450, #f89406); + background-image: -o-linear-gradient(top, #fbb450, #f89406); + background-image: linear-gradient(to bottom, #fbb450, #f89406); + background-repeat: repeat-x; + 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(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-warning:hover, +.btn-warning:focus, +.btn-warning:active, +.btn-warning.active, +.btn-warning.disabled, +.btn-warning[disabled] { + color: #ffffff; + background-color: #f89406; + *background-color: #df8505; +} + +.btn-warning:active, +.btn-warning.active { + background-color: #c67605 \9; +} + +.btn-danger { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #da4f49; + *background-color: #bd362f; + background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); + background-image: linear-gradient(to bottom, #ee5f5b, #bd362f); + background-repeat: repeat-x; + 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(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-danger:hover, +.btn-danger:focus, +.btn-danger:active, +.btn-danger.active, +.btn-danger.disabled, +.btn-danger[disabled] { + color: #ffffff; + background-color: #bd362f; + *background-color: #a9302a; +} + +.btn-danger:active, +.btn-danger.active { + background-color: #942a25 \9; +} + +.btn-success { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #5bb75b; + *background-color: #51a351; + background-image: -moz-linear-gradient(top, #62c462, #51a351); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); + background-image: -webkit-linear-gradient(top, #62c462, #51a351); + background-image: -o-linear-gradient(top, #62c462, #51a351); + background-image: linear-gradient(to bottom, #62c462, #51a351); + background-repeat: repeat-x; + 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(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-success:hover, +.btn-success:focus, +.btn-success:active, +.btn-success.active, +.btn-success.disabled, +.btn-success[disabled] { + color: #ffffff; + background-color: #51a351; + *background-color: #499249; +} + +.btn-success:active, +.btn-success.active { + background-color: #408140 \9; +} + +.btn-info { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #49afcd; + *background-color: #2f96b4; + background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); + background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); + background-image: linear-gradient(to bottom, #5bc0de, #2f96b4); + background-repeat: repeat-x; + 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(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-info:hover, +.btn-info:focus, +.btn-info:active, +.btn-info.active, +.btn-info.disabled, +.btn-info[disabled] { + color: #ffffff; + background-color: #2f96b4; + *background-color: #2a85a0; +} + +.btn-info:active, +.btn-info.active { + background-color: #24748c \9; +} + +.btn-inverse { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #363636; + *background-color: #222222; + background-image: -moz-linear-gradient(top, #444444, #222222); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222)); + background-image: -webkit-linear-gradient(top, #444444, #222222); + background-image: -o-linear-gradient(top, #444444, #222222); + background-image: linear-gradient(to bottom, #444444, #222222); + background-repeat: repeat-x; + 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(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-inverse:hover, +.btn-inverse:focus, +.btn-inverse:active, +.btn-inverse.active, +.btn-inverse.disabled, +.btn-inverse[disabled] { + color: #ffffff; + background-color: #222222; + *background-color: #151515; +} + +.btn-inverse:active, +.btn-inverse.active { + background-color: #080808 \9; +} + +button.btn, +input[type="submit"].btn { + *padding-top: 3px; + *padding-bottom: 3px; +} + +button.btn::-moz-focus-inner, +input[type="submit"].btn::-moz-focus-inner { + padding: 0; + border: 0; +} + +button.btn.btn-large, +input[type="submit"].btn.btn-large { + *padding-top: 7px; + *padding-bottom: 7px; +} + +button.btn.btn-small, +input[type="submit"].btn.btn-small { + *padding-top: 3px; + *padding-bottom: 3px; +} + +button.btn.btn-mini, +input[type="submit"].btn.btn-mini { + *padding-top: 1px; + *padding-bottom: 1px; +} + +.btn-link, +.btn-link:active, +.btn-link[disabled] { + background-color: transparent; + background-image: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.btn-link { + color: #0088cc; + cursor: pointer; + border-color: transparent; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.btn-link:hover, +.btn-link:focus { + color: #005580; + text-decoration: underline; + background-color: transparent; +} + +.btn-link[disabled]:hover, +.btn-link[disabled]:focus { + color: #333333; + text-decoration: none; +} + +.btn-group { + position: relative; + display: inline-block; + *display: inline; + *margin-left: .3em; + font-size: 0; + white-space: nowrap; + vertical-align: middle; + *zoom: 1; +} + +.btn-group:first-child { + *margin-left: 0; +} + +.btn-group + .btn-group { + margin-left: 5px; +} + +.btn-toolbar { + margin-top: 10px; + margin-bottom: 10px; + font-size: 0; +} + +.btn-toolbar > .btn + .btn, +.btn-toolbar > .btn-group + .btn, +.btn-toolbar > .btn + .btn-group { + margin-left: 5px; +} + +.btn-group > .btn { + position: relative; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.btn-group > .btn + .btn { + margin-left: -1px; +} + +.btn-group > .btn, +.btn-group > .dropdown-menu, +.btn-group > .popover { + font-size: 14px; +} + +.btn-group > .btn-mini { + font-size: 10.5px; +} + +.btn-group > .btn-small { + font-size: 11.9px; +} + +.btn-group > .btn-large { + font-size: 17.5px; +} + +.btn-group > .btn:first-child { + margin-left: 0; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-topleft: 4px; +} + +.btn-group > .btn:last-child, +.btn-group > .dropdown-toggle { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-bottomright: 4px; +} + +.btn-group > .btn.large:first-child { + margin-left: 0; + -webkit-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -webkit-border-top-left-radius: 6px; + border-top-left-radius: 6px; + -moz-border-radius-bottomleft: 6px; + -moz-border-radius-topleft: 6px; +} + +.btn-group > .btn.large:last-child, +.btn-group > .large.dropdown-toggle { + -webkit-border-top-right-radius: 6px; + border-top-right-radius: 6px; + -webkit-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; + -moz-border-radius-topright: 6px; + -moz-border-radius-bottomright: 6px; +} + +.btn-group > .btn:hover, +.btn-group > .btn:focus, +.btn-group > .btn:active, +.btn-group > .btn.active { + z-index: 2; +} + +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + +.btn-group > .btn + .dropdown-toggle { + *padding-top: 5px; + padding-right: 8px; + *padding-bottom: 5px; + padding-left: 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); +} + +.btn-group > .btn-mini + .dropdown-toggle { + *padding-top: 2px; + padding-right: 5px; + *padding-bottom: 2px; + padding-left: 5px; +} + +.btn-group > .btn-small + .dropdown-toggle { + *padding-top: 5px; + *padding-bottom: 4px; +} + +.btn-group > .btn-large + .dropdown-toggle { + *padding-top: 7px; + padding-right: 12px; + *padding-bottom: 7px; + padding-left: 12px; +} + +.btn-group.open .dropdown-toggle { + 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); +} + +.btn-group.open .btn.dropdown-toggle { + background-color: #e6e6e6; +} + +.btn-group.open .btn-primary.dropdown-toggle { + background-color: #0044cc; +} + +.btn-group.open .btn-warning.dropdown-toggle { + background-color: #f89406; +} + +.btn-group.open .btn-danger.dropdown-toggle { + background-color: #bd362f; +} + +.btn-group.open .btn-success.dropdown-toggle { + background-color: #51a351; +} + +.btn-group.open .btn-info.dropdown-toggle { + background-color: #2f96b4; +} + +.btn-group.open .btn-inverse.dropdown-toggle { + background-color: #222222; +} + +.btn .caret { + margin-top: 8px; + margin-left: 0; +} + +.btn-large .caret { + margin-top: 6px; +} + +.btn-large .caret { + border-top-width: 5px; + border-right-width: 5px; + border-left-width: 5px; +} + +.btn-mini .caret, +.btn-small .caret { + margin-top: 8px; +} + +.dropup .btn-large .caret { + border-bottom-width: 5px; +} + +.btn-primary .caret, +.btn-warning .caret, +.btn-danger .caret, +.btn-info .caret, +.btn-success .caret, +.btn-inverse .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.btn-group-vertical { + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; +} + +.btn-group-vertical > .btn { + display: block; + float: none; + max-width: 100%; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.btn-group-vertical > .btn + .btn { + margin-top: -1px; + margin-left: 0; +} + +.btn-group-vertical > .btn:first-child { + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} + +.btn-group-vertical > .btn:last-child { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} + +.btn-group-vertical > .btn-large:first-child { + -webkit-border-radius: 6px 6px 0 0; + -moz-border-radius: 6px 6px 0 0; + border-radius: 6px 6px 0 0; +} + +.btn-group-vertical > .btn-large:last-child { + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; +} + +.alert { + padding: 8px 35px 8px 14px; + margin-bottom: 20px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + background-color: #fcf8e3; + border: 1px solid #fbeed5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.alert, +.alert h4 { + color: #c09853; +} + +.alert h4 { + margin: 0; +} + +.alert .close { + position: relative; + top: -2px; + right: -21px; + line-height: 20px; +} + +.alert-success { + color: #468847; + background-color: #dff0d8; + border-color: #d6e9c6; +} + +.alert-success h4 { + color: #468847; +} + +.alert-danger, +.alert-error { + color: #b94a48; + background-color: #f2dede; + border-color: #eed3d7; +} + +.alert-danger h4, +.alert-error h4 { + color: #b94a48; +} + +.alert-info { + color: #3a87ad; + background-color: #d9edf7; + border-color: #bce8f1; +} + +.alert-info h4 { + color: #3a87ad; +} + +.alert-block { + padding-top: 14px; + padding-bottom: 14px; +} + +.alert-block > p, +.alert-block > ul { + margin-bottom: 0; +} + +.alert-block p + p { + margin-top: 5px; +} + +.nav { + margin-bottom: 20px; + margin-left: 0; + list-style: none; +} + +.nav > li > a { + display: block; +} + +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} + +.nav > li > a > img { + max-width: none; +} + +.nav > .pull-right { + float: right; +} + +.nav-header { + display: block; + padding: 3px 15px; + font-size: 11px; + font-weight: bold; + line-height: 20px; + color: #999999; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + text-transform: uppercase; +} + +.nav li + .nav-header { + margin-top: 9px; +} + +.nav-list { + padding-right: 15px; + padding-left: 15px; + margin-bottom: 0; +} + +.nav-list > li > a, +.nav-list .nav-header { + margin-right: -15px; + margin-left: -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, +.nav-list > .active > a:focus { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); + background-color: #0088cc; +} + +.nav-list [class^="icon-"], +.nav-list [class*=" icon-"] { + margin-right: 2px; +} + +.nav-list .divider { + *width: 100%; + height: 1px; + margin: 9px 1px; + *margin: -5px 0 5px; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; +} + +.nav-tabs, +.nav-pills { + *zoom: 1; +} + +.nav-tabs:before, +.nav-pills:before, +.nav-tabs:after, +.nav-pills:after { + display: table; + line-height: 0; + 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: 20px; + border: 1px solid transparent; + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} + +.nav-tabs > li > a:hover, +.nav-tabs > li > a:focus { + border-color: #eeeeee #eeeeee #dddddd; +} + +.nav-tabs > .active > a, +.nav-tabs > .active > a:hover, +.nav-tabs > .active > a:focus { + color: #555555; + cursor: default; + background-color: #ffffff; + border: 1px solid #ddd; + border-bottom-color: transparent; +} + +.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, +.nav-pills > .active > a:focus { + color: #ffffff; + background-color: #0088cc; +} + +.nav-stacked > li { + float: none; +} + +.nav-stacked > li > a { + margin-right: 0; +} + +.nav-tabs.nav-stacked { + border-bottom: 0; +} + +.nav-tabs.nav-stacked > li > a { + border: 1px solid #ddd; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.nav-tabs.nav-stacked > li:first-child > a { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; +} + +.nav-tabs.nav-stacked > li:last-child > a { + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -moz-border-radius-bottomright: 4px; + -moz-border-radius-bottomleft: 4px; +} + +.nav-tabs.nav-stacked > li > a:hover, +.nav-tabs.nav-stacked > li > a:focus { + z-index: 2; + border-color: #ddd; +} + +.nav-pills.nav-stacked > li > a { + margin-bottom: 3px; +} + +.nav-pills.nav-stacked > li:last-child > a { + margin-bottom: 1px; +} + +.nav-tabs .dropdown-menu { + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; +} + +.nav-pills .dropdown-menu { + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.nav .dropdown-toggle .caret { + margin-top: 6px; + border-top-color: #0088cc; + border-bottom-color: #0088cc; +} + +.nav .dropdown-toggle:hover .caret, +.nav .dropdown-toggle:focus .caret { + border-top-color: #005580; + border-bottom-color: #005580; +} + +/* move down carets for tabs */ + +.nav-tabs .dropdown-toggle .caret { + margin-top: 8px; +} + +.nav .active .dropdown-toggle .caret { + border-top-color: #fff; + border-bottom-color: #fff; +} + +.nav-tabs .active .dropdown-toggle .caret { + border-top-color: #555555; + border-bottom-color: #555555; +} + +.nav > .dropdown.active > a:hover, +.nav > .dropdown.active > a:focus { + cursor: pointer; +} + +.nav-tabs .open .dropdown-toggle, +.nav-pills .open .dropdown-toggle, +.nav > li.dropdown.open.active > a:hover, +.nav > li.dropdown.open.active > a:focus { + color: #ffffff; + background-color: #999999; + border-color: #999999; +} + +.nav li.dropdown.open .caret, +.nav li.dropdown.open.active .caret, +.nav li.dropdown.open a:hover .caret, +.nav li.dropdown.open a:focus .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; + opacity: 1; + filter: alpha(opacity=100); +} + +.tabs-stacked .open > a:hover, +.tabs-stacked .open > a:focus { + border-color: #999999; +} + +.tabbable { + *zoom: 1; +} + +.tabbable:before, +.tabbable:after { + display: table; + line-height: 0; + content: ""; +} + +.tabbable:after { + clear: both; +} + +.tab-content { + overflow: auto; +} + +.tabs-below > .nav-tabs, +.tabs-right > .nav-tabs, +.tabs-left > .nav-tabs { + border-bottom: 0; +} + +.tab-content > .tab-pane, +.pill-content > .pill-pane { + display: none; +} + +.tab-content > .active, +.pill-content > .active { + display: block; +} + +.tabs-below > .nav-tabs { + border-top: 1px solid #ddd; +} + +.tabs-below > .nav-tabs > li { + margin-top: -1px; + margin-bottom: 0; +} + +.tabs-below > .nav-tabs > li > a { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} + +.tabs-below > .nav-tabs > li > a:hover, +.tabs-below > .nav-tabs > li > a:focus { + border-top-color: #ddd; + border-bottom-color: transparent; +} + +.tabs-below > .nav-tabs > .active > a, +.tabs-below > .nav-tabs > .active > a:hover, +.tabs-below > .nav-tabs > .active > a:focus { + 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, +.tabs-left > .nav-tabs > li > a:focus { + border-color: #eeeeee #dddddd #eeeeee #eeeeee; +} + +.tabs-left > .nav-tabs .active > a, +.tabs-left > .nav-tabs .active > a:hover, +.tabs-left > .nav-tabs .active > a:focus { + 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, +.tabs-right > .nav-tabs > li > a:focus { + border-color: #eeeeee #eeeeee #eeeeee #dddddd; +} + +.tabs-right > .nav-tabs .active > a, +.tabs-right > .nav-tabs .active > a:hover, +.tabs-right > .nav-tabs .active > a:focus { + border-color: #ddd #ddd #ddd transparent; + *border-left-color: #ffffff; +} + +.nav > .disabled > a { + color: #999999; +} + +.nav > .disabled > a:hover, +.nav > .disabled > a:focus { + text-decoration: none; + cursor: default; + background-color: transparent; +} + +.navbar { + *position: relative; + *z-index: 2; + margin-bottom: 20px; + overflow: visible; +} + +.navbar-inner { + min-height: 40px; + padding-right: 20px; + padding-left: 20px; + background-color: #fafafa; + background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2)); + background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2); + background-image: -o-linear-gradient(top, #ffffff, #f2f2f2); + background-image: linear-gradient(to bottom, #ffffff, #f2f2f2); + background-repeat: repeat-x; + border: 1px solid #d4d4d4; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0); + *zoom: 1; + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); +} + +.navbar-inner:before, +.navbar-inner:after { + display: table; + line-height: 0; + content: ""; +} + +.navbar-inner:after { + clear: both; +} + +.navbar .container { + width: auto; +} + +.nav-collapse.collapse { + height: auto; + overflow: visible; +} + +.navbar .brand { + display: block; + float: left; + padding: 10px 20px 10px; + margin-left: -20px; + font-size: 20px; + font-weight: 200; + color: #777777; + text-shadow: 0 1px 0 #ffffff; +} + +.navbar .brand:hover, +.navbar .brand:focus { + text-decoration: none; +} + +.navbar-text { + margin-bottom: 0; + line-height: 40px; + color: #777777; +} + +.navbar-link { + color: #777777; +} + +.navbar-link:hover, +.navbar-link:focus { + color: #333333; +} + +.navbar .divider-vertical { + height: 40px; + margin: 0 9px; + border-right: 1px solid #ffffff; + border-left: 1px solid #f2f2f2; +} + +.navbar .btn, +.navbar .btn-group { + margin-top: 5px; +} + +.navbar .btn-group .btn, +.navbar .input-prepend .btn, +.navbar .input-append .btn, +.navbar .input-prepend .btn-group, +.navbar .input-append .btn-group { + margin-top: 0; +} + +.navbar-form { + margin-bottom: 0; + *zoom: 1; +} + +.navbar-form:before, +.navbar-form:after { + display: table; + line-height: 0; + 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, +.navbar-form .btn { + display: inline-block; + margin-bottom: 0; +} + +.navbar-form input[type="image"], +.navbar-form input[type="checkbox"], +.navbar-form input[type="radio"] { + margin-top: 3px; +} + +.navbar-form .input-append, +.navbar-form .input-prepend { + margin-top: 5px; + white-space: nowrap; +} + +.navbar-form .input-append input, +.navbar-form .input-prepend input { + margin-top: 0; +} + +.navbar-search { + position: relative; + float: left; + margin-top: 5px; + margin-bottom: 0; +} + +.navbar-search .search-query { + padding: 4px 14px; + margin-bottom: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + font-weight: normal; + line-height: 1; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} + +.navbar-static-top { + position: static; + margin-bottom: 0; +} + +.navbar-static-top .navbar-inner { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; + margin-bottom: 0; +} + +.navbar-fixed-top .navbar-inner, +.navbar-static-top .navbar-inner { + border-width: 0 0 1px; +} + +.navbar-fixed-bottom .navbar-inner { + border-width: 1px 0 0; +} + +.navbar-fixed-top .navbar-inner, +.navbar-fixed-bottom .navbar-inner { + padding-right: 0; + padding-left: 0; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.navbar-static-top .container, +.navbar-fixed-top .container, +.navbar-fixed-bottom .container { + width: 940px; +} + +.navbar-fixed-top { + top: 0; +} + +.navbar-fixed-top .navbar-inner, +.navbar-static-top .navbar-inner { + -webkit-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); +} + +.navbar-fixed-bottom { + bottom: 0; +} + +.navbar-fixed-bottom .navbar-inner { + -webkit-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); + box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); +} + +.navbar .nav { + position: relative; + left: 0; + display: block; + float: left; + margin: 0 10px 0 0; +} + +.navbar .nav.pull-right { + float: right; + margin-right: 0; +} + +.navbar .nav > li { + float: left; +} + +.navbar .nav > li > a { + float: none; + padding: 10px 15px 10px; + color: #777777; + text-decoration: none; + text-shadow: 0 1px 0 #ffffff; +} + +.navbar .nav .dropdown-toggle .caret { + margin-top: 8px; +} + +.navbar .nav > li > a:focus, +.navbar .nav > li > a:hover { + color: #333333; + text-decoration: none; + background-color: transparent; +} + +.navbar .nav > .active > a, +.navbar .nav > .active > a:hover, +.navbar .nav > .active > a:focus { + color: #555555; + text-decoration: none; + background-color: #e5e5e5; + -webkit-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); + -moz-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); +} + +.navbar .btn-navbar { + display: none; + float: right; + padding: 7px 10px; + margin-right: 5px; + margin-left: 5px; + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #ededed; + *background-color: #e5e5e5; + background-image: -moz-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5)); + background-image: -webkit-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: -o-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: linear-gradient(to bottom, #f2f2f2, #e5e5e5); + background-repeat: repeat-x; + border-color: #e5e5e5 #e5e5e5 #bfbfbf; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0); + 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); +} + +.navbar .btn-navbar:hover, +.navbar .btn-navbar:focus, +.navbar .btn-navbar:active, +.navbar .btn-navbar.active, +.navbar .btn-navbar.disabled, +.navbar .btn-navbar[disabled] { + color: #ffffff; + background-color: #e5e5e5; + *background-color: #d9d9d9; +} + +.navbar .btn-navbar:active, +.navbar .btn-navbar.active { + background-color: #cccccc \9; +} + +.navbar .btn-navbar .icon-bar { + display: block; + width: 18px; + height: 2px; + background-color: #f5f5f5; + -webkit-border-radius: 1px; + -moz-border-radius: 1px; + border-radius: 1px; + -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); + -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); +} + +.btn-navbar .icon-bar + .icon-bar { + margin-top: 3px; +} + +.navbar .nav > li > .dropdown-menu:before { + position: absolute; + top: -7px; + left: 9px; + display: inline-block; + border-right: 7px solid transparent; + border-bottom: 7px solid #ccc; + border-left: 7px solid transparent; + border-bottom-color: rgba(0, 0, 0, 0.2); + content: ''; +} + +.navbar .nav > li > .dropdown-menu:after { + position: absolute; + top: -6px; + left: 10px; + display: inline-block; + border-right: 6px solid transparent; + border-bottom: 6px solid #ffffff; + border-left: 6px solid transparent; + content: ''; +} + +.navbar-fixed-bottom .nav > li > .dropdown-menu:before { + top: auto; + bottom: -7px; + border-top: 7px solid #ccc; + border-bottom: 0; + border-top-color: rgba(0, 0, 0, 0.2); +} + +.navbar-fixed-bottom .nav > li > .dropdown-menu:after { + top: auto; + bottom: -6px; + border-top: 6px solid #ffffff; + border-bottom: 0; +} + +.navbar .nav li.dropdown > a:hover .caret, +.navbar .nav li.dropdown > a:focus .caret { + border-top-color: #333333; + border-bottom-color: #333333; +} + +.navbar .nav li.dropdown.open > .dropdown-toggle, +.navbar .nav li.dropdown.active > .dropdown-toggle, +.navbar .nav li.dropdown.open.active > .dropdown-toggle { + color: #555555; + background-color: #e5e5e5; +} + +.navbar .nav li.dropdown > .dropdown-toggle .caret { + border-top-color: #777777; + border-bottom-color: #777777; +} + +.navbar .nav li.dropdown.open > .dropdown-toggle .caret, +.navbar .nav li.dropdown.active > .dropdown-toggle .caret, +.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret { + border-top-color: #555555; + border-bottom-color: #555555; +} + +.navbar .pull-right > li > .dropdown-menu, +.navbar .nav > li > .dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.navbar .pull-right > li > .dropdown-menu:before, +.navbar .nav > li > .dropdown-menu.pull-right:before { + right: 12px; + left: auto; +} + +.navbar .pull-right > li > .dropdown-menu:after, +.navbar .nav > li > .dropdown-menu.pull-right:after { + right: 13px; + left: auto; +} + +.navbar .pull-right > li > .dropdown-menu .dropdown-menu, +.navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu { + right: 100%; + left: auto; + margin-right: -1px; + margin-left: 0; + -webkit-border-radius: 6px 0 6px 6px; + -moz-border-radius: 6px 0 6px 6px; + border-radius: 6px 0 6px 6px; +} + +.navbar-inverse .navbar-inner { + background-color: #1b1b1b; + background-image: -moz-linear-gradient(top, #222222, #111111); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111)); + background-image: -webkit-linear-gradient(top, #222222, #111111); + background-image: -o-linear-gradient(top, #222222, #111111); + background-image: linear-gradient(to bottom, #222222, #111111); + background-repeat: repeat-x; + border-color: #252525; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0); +} + +.navbar-inverse .brand, +.navbar-inverse .nav > li > a { + color: #999999; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} + +.navbar-inverse .brand:hover, +.navbar-inverse .nav > li > a:hover, +.navbar-inverse .brand:focus, +.navbar-inverse .nav > li > a:focus { + color: #ffffff; +} + +.navbar-inverse .brand { + color: #999999; +} + +.navbar-inverse .navbar-text { + color: #999999; +} + +.navbar-inverse .nav > li > a:focus, +.navbar-inverse .nav > li > a:hover { + color: #ffffff; + background-color: transparent; +} + +.navbar-inverse .nav .active > a, +.navbar-inverse .nav .active > a:hover, +.navbar-inverse .nav .active > a:focus { + color: #ffffff; + background-color: #111111; +} + +.navbar-inverse .navbar-link { + color: #999999; +} + +.navbar-inverse .navbar-link:hover, +.navbar-inverse .navbar-link:focus { + color: #ffffff; +} + +.navbar-inverse .divider-vertical { + border-right-color: #222222; + border-left-color: #111111; +} + +.navbar-inverse .nav li.dropdown.open > .dropdown-toggle, +.navbar-inverse .nav li.dropdown.active > .dropdown-toggle, +.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { + color: #ffffff; + background-color: #111111; +} + +.navbar-inverse .nav li.dropdown > a:hover .caret, +.navbar-inverse .nav li.dropdown > a:focus .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret { + border-top-color: #999999; + border-bottom-color: #999999; +} + +.navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret, +.navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret, +.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.navbar-inverse .navbar-search .search-query { + color: #ffffff; + background-color: #515151; + border-color: #111111; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + -webkit-transition: none; + -moz-transition: none; + -o-transition: none; + transition: none; +} + +.navbar-inverse .navbar-search .search-query:-moz-placeholder { + color: #cccccc; +} + +.navbar-inverse .navbar-search .search-query:-ms-input-placeholder { + color: #cccccc; +} + +.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder { + color: #cccccc; +} + +.navbar-inverse .navbar-search .search-query:focus, +.navbar-inverse .navbar-search .search-query.focused { + padding: 5px 15px; + color: #333333; + text-shadow: 0 1px 0 #ffffff; + background-color: #ffffff; + border: 0; + outline: 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); +} + +.navbar-inverse .btn-navbar { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #0e0e0e; + *background-color: #040404; + background-image: -moz-linear-gradient(top, #151515, #040404); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404)); + background-image: -webkit-linear-gradient(top, #151515, #040404); + background-image: -o-linear-gradient(top, #151515, #040404); + background-image: linear-gradient(to bottom, #151515, #040404); + background-repeat: repeat-x; + border-color: #040404 #040404 #000000; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.navbar-inverse .btn-navbar:hover, +.navbar-inverse .btn-navbar:focus, +.navbar-inverse .btn-navbar:active, +.navbar-inverse .btn-navbar.active, +.navbar-inverse .btn-navbar.disabled, +.navbar-inverse .btn-navbar[disabled] { + color: #ffffff; + background-color: #040404; + *background-color: #000000; +} + +.navbar-inverse .btn-navbar:active, +.navbar-inverse .btn-navbar.active { + background-color: #000000 \9; +} + +.breadcrumb { + padding: 8px 15px; + margin: 0 0 20px; + list-style: none; + background-color: #f5f5f5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.breadcrumb > li { + display: inline-block; + *display: inline; + text-shadow: 0 1px 0 #ffffff; + *zoom: 1; +} + +.breadcrumb > li > .divider { + padding: 0 5px; + color: #ccc; +} + +.breadcrumb > .active { + color: #999999; +} + +.pagination { + margin: 20px 0; +} + +.pagination ul { + display: inline-block; + *display: inline; + margin-bottom: 0; + margin-left: 0; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + *zoom: 1; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.pagination ul > li { + display: inline; +} + +.pagination ul > li > a, +.pagination ul > li > span { + float: left; + padding: 4px 12px; + line-height: 20px; + text-decoration: none; + background-color: #ffffff; + border: 1px solid #dddddd; + border-left-width: 0; +} + +.pagination ul > li > a:hover, +.pagination ul > li > a:focus, +.pagination ul > .active > a, +.pagination ul > .active > span { + background-color: #f5f5f5; +} + +.pagination ul > .active > a, +.pagination ul > .active > span { + color: #999999; + cursor: default; +} + +.pagination ul > .disabled > span, +.pagination ul > .disabled > a, +.pagination ul > .disabled > a:hover, +.pagination ul > .disabled > a:focus { + color: #999999; + cursor: default; + background-color: transparent; +} + +.pagination ul > li:first-child > a, +.pagination ul > li:first-child > span { + border-left-width: 1px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-topleft: 4px; +} + +.pagination ul > li:last-child > a, +.pagination ul > li:last-child > span { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-bottomright: 4px; +} + +.pagination-centered { + text-align: center; +} + +.pagination-right { + text-align: right; +} + +.pagination-large ul > li > a, +.pagination-large ul > li > span { + padding: 11px 19px; + font-size: 17.5px; +} + +.pagination-large ul > li:first-child > a, +.pagination-large ul > li:first-child > span { + -webkit-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -webkit-border-top-left-radius: 6px; + border-top-left-radius: 6px; + -moz-border-radius-bottomleft: 6px; + -moz-border-radius-topleft: 6px; +} + +.pagination-large ul > li:last-child > a, +.pagination-large ul > li:last-child > span { + -webkit-border-top-right-radius: 6px; + border-top-right-radius: 6px; + -webkit-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; + -moz-border-radius-topright: 6px; + -moz-border-radius-bottomright: 6px; +} + +.pagination-mini ul > li:first-child > a, +.pagination-small ul > li:first-child > a, +.pagination-mini ul > li:first-child > span, +.pagination-small ul > li:first-child > span { + -webkit-border-bottom-left-radius: 3px; + border-bottom-left-radius: 3px; + -webkit-border-top-left-radius: 3px; + border-top-left-radius: 3px; + -moz-border-radius-bottomleft: 3px; + -moz-border-radius-topleft: 3px; +} + +.pagination-mini ul > li:last-child > a, +.pagination-small ul > li:last-child > a, +.pagination-mini ul > li:last-child > span, +.pagination-small ul > li:last-child > span { + -webkit-border-top-right-radius: 3px; + border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-bottom-right-radius: 3px; + -moz-border-radius-topright: 3px; + -moz-border-radius-bottomright: 3px; +} + +.pagination-small ul > li > a, +.pagination-small ul > li > span { + padding: 2px 10px; + font-size: 11.9px; +} + +.pagination-mini ul > li > a, +.pagination-mini ul > li > span { + padding: 0 6px; + font-size: 10.5px; +} + +.pager { + margin: 20px 0; + text-align: center; + list-style: none; + *zoom: 1; +} + +.pager:before, +.pager:after { + display: table; + line-height: 0; + content: ""; +} + +.pager:after { + clear: both; +} + +.pager li { + display: inline; +} + +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} + +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #f5f5f5; +} + +.pager .next > a, +.pager .next > span { + float: right; +} + +.pager .previous > a, +.pager .previous > span { + float: left; +} + +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #999999; + cursor: default; + background-color: #fff; +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000000; +} + +.modal-backdrop.fade { + opacity: 0; +} + +.modal-backdrop, +.modal-backdrop.fade.in { + opacity: 0.8; + filter: alpha(opacity=80); +} + +.modal { + position: fixed; + top: 10%; + left: 50%; + z-index: 1050; + width: 560px; + margin-left: -280px; + background-color: #ffffff; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, 0.3); + *border: 1px solid #999; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + outline: none; + -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 { + top: -25%; + -webkit-transition: opacity 0.3s linear, top 0.3s ease-out; + -moz-transition: opacity 0.3s linear, top 0.3s ease-out; + -o-transition: opacity 0.3s linear, top 0.3s ease-out; + transition: opacity 0.3s linear, top 0.3s ease-out; +} + +.modal.fade.in { + top: 10%; +} + +.modal-header { + padding: 9px 15px; + border-bottom: 1px solid #eee; +} + +.modal-header .close { + margin-top: 2px; +} + +.modal-header h3 { + margin: 0; + line-height: 30px; +} + +.modal-body { + position: relative; + max-height: 400px; + padding: 15px; + overflow-y: auto; +} + +.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; + *zoom: 1; + -webkit-box-shadow: inset 0 1px 0 #ffffff; + -moz-box-shadow: inset 0 1px 0 #ffffff; + box-shadow: inset 0 1px 0 #ffffff; +} + +.modal-footer:before, +.modal-footer:after { + display: table; + line-height: 0; + content: ""; +} + +.modal-footer:after { + clear: both; +} + +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} + +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} + +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} + +.tooltip { + position: absolute; + z-index: 1030; + display: block; + font-size: 11px; + line-height: 1.4; + opacity: 0; + filter: alpha(opacity=0); + visibility: visible; +} + +.tooltip.in { + opacity: 0.8; + filter: alpha(opacity=80); +} + +.tooltip.top { + padding: 5px 0; + margin-top: -3px; +} + +.tooltip.right { + padding: 0 5px; + margin-left: 3px; +} + +.tooltip.bottom { + padding: 5px 0; + margin-top: 3px; +} + +.tooltip.left { + padding: 0 5px; + margin-left: -3px; +} + +.tooltip-inner { + max-width: 200px; + padding: 8px; + color: #ffffff; + text-align: center; + text-decoration: none; + background-color: #000000; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-top-color: #000000; + border-width: 5px 5px 0; +} + +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-right-color: #000000; + border-width: 5px 5px 5px 0; +} + +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-left-color: #000000; + border-width: 5px 0 5px 5px; +} + +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-bottom-color: #000000; + border-width: 0 5px 5px; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1010; + display: none; + max-width: 276px; + padding: 1px; + text-align: left; + white-space: normal; + background-color: #ffffff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} + +.popover.top { + margin-top: -10px; +} + +.popover.right { + margin-left: 10px; +} + +.popover.bottom { + margin-top: 10px; +} + +.popover.left { + margin-left: -10px; +} + +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + font-weight: normal; + line-height: 18px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + -webkit-border-radius: 5px 5px 0 0; + -moz-border-radius: 5px 5px 0 0; + border-radius: 5px 5px 0 0; +} + +.popover-title:empty { + display: none; +} + +.popover-content { + padding: 9px 14px; +} + +.popover .arrow, +.popover .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.popover .arrow { + border-width: 11px; +} + +.popover .arrow:after { + border-width: 10px; + content: ""; +} + +.popover.top .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999; + border-top-color: rgba(0, 0, 0, 0.25); + border-bottom-width: 0; +} + +.popover.top .arrow:after { + bottom: 1px; + margin-left: -10px; + border-top-color: #ffffff; + border-bottom-width: 0; +} + +.popover.right .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999; + border-right-color: rgba(0, 0, 0, 0.25); + border-left-width: 0; +} + +.popover.right .arrow:after { + bottom: -10px; + left: 1px; + border-right-color: #ffffff; + border-left-width: 0; +} + +.popover.bottom .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, 0.25); + border-top-width: 0; +} + +.popover.bottom .arrow:after { + top: 1px; + margin-left: -10px; + border-bottom-color: #ffffff; + border-top-width: 0; +} + +.popover.left .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-left-color: #999; + border-left-color: rgba(0, 0, 0, 0.25); + border-right-width: 0; +} + +.popover.left .arrow:after { + right: 1px; + bottom: -10px; + border-left-color: #ffffff; + border-right-width: 0; +} + +.thumbnails { + margin-left: -20px; + list-style: none; + *zoom: 1; +} + +.thumbnails:before, +.thumbnails:after { + display: table; + line-height: 0; + content: ""; +} + +.thumbnails:after { + clear: both; +} + +.row-fluid .thumbnails { + margin-left: 0; +} + +.thumbnails > li { + float: left; + margin-bottom: 20px; + margin-left: 20px; +} + +.thumbnail { + display: block; + padding: 4px; + line-height: 20px; + border: 1px solid #ddd; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} + +a.thumbnail:hover, +a.thumbnail:focus { + 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-right: auto; + margin-left: auto; +} + +.thumbnail .caption { + padding: 9px; + color: #555555; +} + +.media, +.media-body { + overflow: hidden; + *overflow: visible; + zoom: 1; +} + +.media, +.media .media { + margin-top: 15px; +} + +.media:first-child { + margin-top: 0; +} + +.media-object { + display: block; +} + +.media-heading { + margin: 0 0 5px; +} + +.media > .pull-left { + margin-right: 10px; +} + +.media > .pull-right { + margin-left: 10px; +} + +.media-list { + margin-left: 0; + list-style: none; +} + +.label, +.badge { + display: inline-block; + padding: 2px 4px; + font-size: 11.844px; + font-weight: bold; + line-height: 14px; + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + white-space: nowrap; + vertical-align: baseline; + background-color: #999999; +} + +.label { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.badge { + padding-right: 9px; + padding-left: 9px; + -webkit-border-radius: 9px; + -moz-border-radius: 9px; + border-radius: 9px; +} + +.label:empty, +.badge:empty { + display: none; +} + +a.label:hover, +a.label:focus, +a.badge:hover, +a.badge:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} + +.label-important, +.badge-important { + background-color: #b94a48; +} + +.label-important[href], +.badge-important[href] { + background-color: #953b39; +} + +.label-warning, +.badge-warning { + background-color: #f89406; +} + +.label-warning[href], +.badge-warning[href] { + background-color: #c67605; +} + +.label-success, +.badge-success { + background-color: #468847; +} + +.label-success[href], +.badge-success[href] { + background-color: #356635; +} + +.label-info, +.badge-info { + background-color: #3a87ad; +} + +.label-info[href], +.badge-info[href] { + background-color: #2d6987; +} + +.label-inverse, +.badge-inverse { + background-color: #333333; +} + +.label-inverse[href], +.badge-inverse[href] { + background-color: #1a1a1a; +} + +.btn .label, +.btn .badge { + position: relative; + top: -1px; +} + +.btn-mini .label, +.btn-mini .badge { + top: 0; +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-moz-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-ms-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-o-keyframes progress-bar-stripes { + from { + background-position: 0 0; + } + to { + background-position: 40px 0; + } +} + +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #f7f7f7; + background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); + background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9); + background-repeat: repeat-x; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0); + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); +} + +.progress .bar { + float: left; + width: 0; + height: 100%; + font-size: 12px; + color: #ffffff; + text-align: center; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #0e90d2; + background-image: -moz-linear-gradient(top, #149bdf, #0480be); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); + background-image: -webkit-linear-gradient(top, #149bdf, #0480be); + background-image: -o-linear-gradient(top, #149bdf, #0480be); + background-image: linear-gradient(to bottom, #149bdf, #0480be); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0); + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-transition: width 0.6s ease; + -moz-transition: width 0.6s ease; + -o-transition: width 0.6s ease; + transition: width 0.6s ease; +} + +.progress .bar + .bar { + -webkit-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -moz-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); +} + +.progress-striped .bar { + background-color: #149bdf; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + -webkit-background-size: 40px 40px; + -moz-background-size: 40px 40px; + -o-background-size: 40px 40px; + background-size: 40px 40px; +} + +.progress.active .bar { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -moz-animation: progress-bar-stripes 2s linear infinite; + -ms-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} + +.progress-danger .bar, +.progress .bar-danger { + background-color: #dd514c; + background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); + background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0); +} + +.progress-danger.progress-striped .bar, +.progress-striped .bar-danger { + background-color: #ee5f5b; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-success .bar, +.progress .bar-success { + background-color: #5eb95e; + background-image: -moz-linear-gradient(top, #62c462, #57a957); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); + background-image: -webkit-linear-gradient(top, #62c462, #57a957); + background-image: -o-linear-gradient(top, #62c462, #57a957); + background-image: linear-gradient(to bottom, #62c462, #57a957); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0); +} + +.progress-success.progress-striped .bar, +.progress-striped .bar-success { + background-color: #62c462; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-info .bar, +.progress .bar-info { + background-color: #4bb1cf; + background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); + background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); + background-image: -o-linear-gradient(top, #5bc0de, #339bb9); + background-image: linear-gradient(to bottom, #5bc0de, #339bb9); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0); +} + +.progress-info.progress-striped .bar, +.progress-striped .bar-info { + background-color: #5bc0de; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-warning .bar, +.progress .bar-warning { + background-color: #faa732; + background-image: -moz-linear-gradient(top, #fbb450, #f89406); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); + background-image: -webkit-linear-gradient(top, #fbb450, #f89406); + background-image: -o-linear-gradient(top, #fbb450, #f89406); + background-image: linear-gradient(to bottom, #fbb450, #f89406); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); +} + +.progress-warning.progress-striped .bar, +.progress-striped .bar-warning { + background-color: #fbb450; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.accordion { + margin-bottom: 20px; +} + +.accordion-group { + margin-bottom: 2px; + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.accordion-heading { + border-bottom: 0; +} + +.accordion-heading .accordion-toggle { + display: block; + padding: 8px 15px; +} + +.accordion-toggle { + cursor: pointer; +} + +.accordion-inner { + padding: 9px 15px; + border-top: 1px solid #e5e5e5; +} + +.carousel { + position: relative; + margin-bottom: 20px; + line-height: 1; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: 0.6s ease-in-out left; + -moz-transition: 0.6s ease-in-out left; + -o-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; +} + +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + line-height: 1; +} + +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} + +.carousel-inner > .active { + left: 0; +} + +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} + +.carousel-inner > .next { + left: 100%; +} + +.carousel-inner > .prev { + left: -100%; +} + +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} + +.carousel-inner > .active.left { + left: -100%; +} + +.carousel-inner > .active.right { + left: 100%; +} + +.carousel-control { + position: absolute; + top: 40%; + left: 15px; + width: 40px; + height: 40px; + margin-top: -20px; + font-size: 60px; + font-weight: 100; + line-height: 30px; + color: #ffffff; + text-align: center; + background: #222222; + border: 3px solid #ffffff; + -webkit-border-radius: 23px; + -moz-border-radius: 23px; + border-radius: 23px; + opacity: 0.5; + filter: alpha(opacity=50); +} + +.carousel-control.right { + right: 15px; + left: auto; +} + +.carousel-control:hover, +.carousel-control:focus { + color: #ffffff; + text-decoration: none; + opacity: 0.9; + filter: alpha(opacity=90); +} + +.carousel-indicators { + position: absolute; + top: 15px; + right: 15px; + z-index: 5; + margin: 0; + list-style: none; +} + +.carousel-indicators li { + display: block; + float: left; + width: 10px; + height: 10px; + margin-left: 5px; + text-indent: -999px; + background-color: #ccc; + background-color: rgba(255, 255, 255, 0.25); + border-radius: 5px; +} + +.carousel-indicators .active { + background-color: #fff; +} + +.carousel-caption { + position: absolute; + right: 0; + bottom: 0; + left: 0; + padding: 15px; + background: #333333; + background: rgba(0, 0, 0, 0.75); +} + +.carousel-caption h4, +.carousel-caption p { + line-height: 20px; + color: #ffffff; +} + +.carousel-caption h4 { + margin: 0 0 5px; +} + +.carousel-caption p { + margin-bottom: 0; +} + +.hero-unit { + padding: 60px; + margin-bottom: 30px; + font-size: 18px; + font-weight: 200; + line-height: 30px; + color: inherit; + background-color: #eeeeee; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.hero-unit h1 { + margin-bottom: 0; + font-size: 60px; + line-height: 1; + letter-spacing: -1px; + color: inherit; +} + +.hero-unit li { + line-height: 30px; +} + +.pull-right { + float: right; +} + +.pull-left { + float: left; +} + +.hide { + display: none; +} + +.show { + display: block; +} + +.invisible { + visibility: hidden; +} + +.affix { + position: fixed; +} diff --git a/public/assets/css/bootstrap.min.css b/public/assets/css/bootstrap.min.css new file mode 100755 index 0000000000..b6428e6958 --- /dev/null +++ b/public/assets/css/bootstrap.min.css @@ -0,0 +1,9 @@ +/*! + * Bootstrap v2.3.2 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}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{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333;background-color:#fff}a{color:#08c;text-decoration:none}a:hover,a:focus{color:#005580;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width: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;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#999}a.muted:hover,a.muted:focus{color:#808080}.text-warning{color:#c09853}a.text-warning:hover,a.text-warning:focus{color:#a47e3c}.text-error{color:#b94a48}a.text-error:hover,a.text-error:focus{color:#953b39}.text-info{color:#3a87ad}a.text-info:hover,a.text-info:focus{color:#2d6987}.text-success{color:#468847}a.text-success:hover,a.text-success:focus{color:#356635}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;padding-right:5px;padding-left:5px;*zoom:1}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:17.5px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:20px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;white-space:nowrap;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#555;vertical-align:middle;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,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)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;background-color:#fff;border:1px solid #ccc}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;cursor:not-allowed;background-color:#fcfcfc;border-color:#ccc;-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)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#595959}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{display:inline-block;margin-bottom:10px;font-size:0;white-space:nowrap;vertical-align:middle}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:14px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#f5f5f5}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#dff0d8}.table tbody tr.error>td{background-color:#f2dede}.table tbody tr.warning>td{background-color:#fcf8e3}.table tbody tr.info>td{background-color:#d9edf7}.table-hover tbody tr.success:hover>td{background-color:#d0e9c6}.table-hover tbody tr.error:hover>td{background-color:#ebcccc}.table-hover tbody tr.warning:hover>td{background-color:#faf2cc}.table-hover tbody tr.info:hover>td{background-color:#c4e3f3}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{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{width:16px;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{width:16px;background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;outline:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open{*z-index:1000}.open>.dropdown-menu{display:block}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#ccc;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;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 #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;*border: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);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-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)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,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)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#006dcc;*background-color:#04c;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;border-color:#04c #04c #002a80;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(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.btn-primary:active,.btn-primary.active{background-color:#039 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#faa732;*background-color:#f89406;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;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(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#da4f49;*background-color:#bd362f;background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(to bottom,#ee5f5b,#bd362f);background-repeat:repeat-x;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(startColorstr='#ffee5f5b',endColorstr='#ffbd362f',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#5bb75b;*background-color:#51a351;background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(to bottom,#62c462,#51a351);background-repeat:repeat-x;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(startColorstr='#ff62c462',endColorstr='#ff51a351',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#49afcd;*background-color:#2f96b4;background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(to bottom,#5bc0de,#2f96b4);background-repeat:repeat-x;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(startColorstr='#ff5bc0de',endColorstr='#ff2f96b4',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#363636;*background-color:#222;background-image:-moz-linear-gradient(top,#444,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#444),to(#222));background-image:-webkit-linear-gradient(top,#444,#222);background-image:-o-linear-gradient(top,#444,#222);background-image:linear-gradient(to bottom,#444,#222);background-repeat:repeat-x;border-color:#222 #222 #000;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(startColorstr='#ff444444',endColorstr='#ff222222',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#08c;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#005580;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#333;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10px;margin-bottom:10px;font-size:0}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left: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)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{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)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#04c}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406}.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.alert,.alert h4{color:#c09853}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success h4{color:#468847}.alert-danger,.alert-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger h4,.alert-error h4{color:#b94a48}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info h4{color:#3a87ad}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-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,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#08c}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;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:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.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,.nav-pills>.active>a:focus{color:#fff;background-color:#08c}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#08c;border-bottom-color:#08c}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#005580;border-bottom-color:#005580}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#999}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{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,.tabs-left>.nav-tabs>li>a:focus{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.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,.tabs-right>.nav-tabs>li>a:focus{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#999}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:20px;overflow:visible}.navbar-inner{min-height:40px;padding-right:20px;padding-left:20px;background-color:#fafafa;background-image:-moz-linear-gradient(top,#fff,#f2f2f2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#f2f2f2));background-image:-webkit-linear-gradient(top,#fff,#f2f2f2);background-image:-o-linear-gradient(top,#fff,#f2f2f2);background-image:linear-gradient(to bottom,#fff,#f2f2f2);background-repeat:repeat-x;border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff2f2f2',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;float:left;padding:10px 20px 10px;margin-left:-20px;font-size:20px;font-weight:200;color:#777;text-shadow:0 1px 0 #fff}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:40px;color:#777}.navbar-link{color:#777}.navbar-link:hover,.navbar-link:focus{color:#333}.navbar .divider-vertical{height:40px;margin:0 9px;border-right:1px solid #fff;border-left:1px solid #f2f2f2}.navbar .btn,.navbar .btn-group{margin-top:5px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;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,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:10px 15px 10px;color:#777;text-decoration:none;text-shadow:0 1px 0 #fff}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#333;text-decoration:none;background-color:transparent}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555;text-decoration:none;background-color:#e5e5e5;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ededed;*background-color:#e5e5e5;background-image:-moz-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#e5e5e5));background-image:-webkit-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-o-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:linear-gradient(to bottom,#f2f2f2,#e5e5e5);background-repeat:repeat-x;border-color:#e5e5e5 #e5e5e5 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2',endColorstr='#ffe5e5e5',GradientType=0);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)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#e5e5e5;*background-color:#d9d9d9}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#ccc \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#555;background-color:#e5e5e5}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#777;border-bottom-color:#777}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top,#222,#111);background-image:-webkit-gradient(linear,0 0,0 100%,from(#222),to(#111));background-image:-webkit-linear-gradient(top,#222,#111);background-image:-o-linear-gradient(top,#222,#111);background-image:linear-gradient(to bottom,#222,#111);background-repeat:repeat-x;border-color:#252525;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222',endColorstr='#ff111111',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}.navbar-inverse .brand{color:#999}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#111}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#222;border-left-color:#111}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#111}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#515151;border-color:#111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline: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)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e0e0e;*background-color:#040404;background-image:-moz-linear-gradient(top,#151515,#040404);background-image:-webkit-gradient(linear,0 0,0 100%,from(#151515),to(#040404));background-image:-webkit-linear-gradient(top,#151515,#040404);background-image:-o-linear-gradient(top,#151515,#040404);background-image:linear-gradient(to bottom,#151515,#040404);background-repeat:repeat-x;border-color:#040404 #040404 #000;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(startColorstr='#ff151515',endColorstr='#ff040404',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#040404;*background-color:#000}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb>li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5}.pagination ul>.active>a,.pagination ul>.active>span{color:#999;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#999;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:3px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px}.pager{margin:20px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:default;background-color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-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{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;max-height:400px;padding:15px;overflow-y:auto}.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;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1030;display:block;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#08c;-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-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#555}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#999}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-right:9px;padding-left:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f89406}.label-warning[href],.badge-warning[href]{background-color:#c67605}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#3a87ad}.label-info[href],.badge-info[href]{background-color:#2d6987}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress .bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#333;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:20px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:inherit}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed} diff --git a/public/assets/ico/apple-touch-icon-114-precomposed.png b/public/assets/ico/apple-touch-icon-114-precomposed.png new file mode 100755 index 0000000000000000000000000000000000000000..790a64f758bfa2c40f11d0341e7d0e3b3dbae937 GIT binary patch literal 11392 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 literal 0 HcmV?d00001 diff --git a/public/assets/img/glyphicons-halflings-white.png b/public/assets/img/glyphicons-halflings-white.png new file mode 100755 index 0000000000000000000000000000000000000000..3bf6484a29d8da269f9bc874b25493a45fae3bae GIT binary patch literal 8777 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 B7G?kd literal 0 HcmV?d00001 diff --git a/public/assets/img/glyphicons-halflings.png b/public/assets/img/glyphicons-halflings.png new file mode 100755 index 0000000000000000000000000000000000000000..a9969993201f9cee63cf9f49217646347297b643 GIT binary patch literal 12799 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 literal 0 HcmV?d00001 diff --git a/public/assets/img/social/fb_login.png b/public/assets/img/social/fb_login.png new file mode 100755 index 0000000000000000000000000000000000000000..d44ce97256eb26eabeb22676f9367cd5c330428b GIT binary patch literal 8156 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 literal 0 HcmV?d00001 diff --git a/public/assets/js/bootstrap/bootstrap.js b/public/assets/js/bootstrap/bootstrap.js new file mode 100755 index 0000000000..643e71cdf0 --- /dev/null +++ b/public/assets/js/bootstrap/bootstrap.js @@ -0,0 +1,2280 @@ +/* =================================================== + * bootstrap-transition.js v2.3.2 + * http://twitter.github.com/bootstrap/javascript.html#transitions + * =================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================== */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* CSS TRANSITION SUPPORT (http://www.modernizr.com/) + * ======================================================= */ + + $(function () { + + $.support.transition = (function () { + + var transitionEnd = (function () { + + var el = document.createElement('bootstrap') + , transEndEventNames = { + 'WebkitTransition' : 'webkitTransitionEnd' + , 'MozTransition' : 'transitionend' + , 'OTransition' : 'oTransitionEnd otransitionend' + , 'transition' : 'transitionend' + } + , name + + for (name in transEndEventNames){ + if (el.style[name] !== undefined) { + return transEndEventNames[name] + } + } + + }()) + + return transitionEnd && { + end: transitionEnd + } + + })() + + }) + +}(window.jQuery);/* ========================================================== + * bootstrap-alert.js v2.3.2 + * http://twitter.github.com/bootstrap/javascript.html#alerts + * ========================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================== */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* ALERT CLASS DEFINITION + * ====================== */ + + var dismiss = '[data-dismiss="alert"]' + , Alert = function (el) { + $(el).on('click', dismiss, this.close) + } + + Alert.prototype.close = function (e) { + var $this = $(this) + , selector = $this.attr('data-target') + , $parent + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 + } + + $parent = $(selector) + + e && e.preventDefault() + + $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent()) + + $parent.trigger(e = $.Event('close')) + + if (e.isDefaultPrevented()) return + + $parent.removeClass('in') + + function removeElement() { + $parent + .trigger('closed') + .remove() + } + + $.support.transition && $parent.hasClass('fade') ? + $parent.on($.support.transition.end, removeElement) : + removeElement() + } + + + /* ALERT PLUGIN DEFINITION + * ======================= */ + + var old = $.fn.alert + + $.fn.alert = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('alert') + if (!data) $this.data('alert', (data = new Alert(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + $.fn.alert.Constructor = Alert + + + /* ALERT NO CONFLICT + * ================= */ + + $.fn.alert.noConflict = function () { + $.fn.alert = old + return this + } + + + /* ALERT DATA-API + * ============== */ + + $(document).on('click.alert.data-api', dismiss, Alert.prototype.close) + +}(window.jQuery);/* ============================================================ + * bootstrap-button.js v2.3.2 + * http://twitter.github.com/bootstrap/javascript.html#buttons + * ============================================================ + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================ */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* BUTTON PUBLIC CLASS DEFINITION + * ============================== */ + + var Button = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, $.fn.button.defaults, options) + } + + Button.prototype.setState = function (state) { + var d = 'disabled' + , $el = this.$element + , data = $el.data() + , val = $el.is('input') ? 'val' : 'html' + + state = state + 'Text' + data.resetText || $el.data('resetText', $el[val]()) + + $el[val](data[state] || this.options[state]) + + // push to event loop to allow forms to submit + setTimeout(function () { + state == 'loadingText' ? + $el.addClass(d).attr(d, d) : + $el.removeClass(d).removeAttr(d) + }, 0) + } + + Button.prototype.toggle = function () { + var $parent = this.$element.closest('[data-toggle="buttons-radio"]') + + $parent && $parent + .find('.active') + .removeClass('active') + + this.$element.toggleClass('active') + } + + + /* BUTTON PLUGIN DEFINITION + * ======================== */ + + var old = $.fn.button + + $.fn.button = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('button') + , options = typeof option == 'object' && option + if (!data) $this.data('button', (data = new Button(this, options))) + if (option == 'toggle') data.toggle() + else if (option) data.setState(option) + }) + } + + $.fn.button.defaults = { + loadingText: 'loading...' + } + + $.fn.button.Constructor = Button + + + /* BUTTON NO CONFLICT + * ================== */ + + $.fn.button.noConflict = function () { + $.fn.button = old + return this + } + + + /* BUTTON DATA-API + * =============== */ + + $(document).on('click.button.data-api', '[data-toggle^=button]', function (e) { + var $btn = $(e.target) + if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') + $btn.button('toggle') + }) + +}(window.jQuery);/* ========================================================== + * bootstrap-carousel.js v2.3.2 + * http://twitter.github.com/bootstrap/javascript.html#carousel + * ========================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================== */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* CAROUSEL CLASS DEFINITION + * ========================= */ + + var Carousel = function (element, options) { + this.$element = $(element) + this.$indicators = this.$element.find('.carousel-indicators') + this.options = options + this.options.pause == 'hover' && this.$element + .on('mouseenter', $.proxy(this.pause, this)) + .on('mouseleave', $.proxy(this.cycle, this)) + } + + Carousel.prototype = { + + cycle: function (e) { + if (!e) this.paused = false + if (this.interval) clearInterval(this.interval); + this.options.interval + && !this.paused + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) + return this + } + + , getActiveIndex: function () { + this.$active = this.$element.find('.item.active') + this.$items = this.$active.parent().children() + return this.$items.index(this.$active) + } + + , to: function (pos) { + var activeIndex = this.getActiveIndex() + , that = this + + if (pos > (this.$items.length - 1) || pos < 0) return + + if (this.sliding) { + return this.$element.one('slid', function () { + that.to(pos) + }) + } + + if (activeIndex == pos) { + return this.pause().cycle() + } + + return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) + } + + , pause: function (e) { + if (!e) this.paused = true + if (this.$element.find('.next, .prev').length && $.support.transition.end) { + this.$element.trigger($.support.transition.end) + this.cycle(true) + } + clearInterval(this.interval) + this.interval = null + return this + } + + , next: function () { + if (this.sliding) return + return this.slide('next') + } + + , prev: function () { + if (this.sliding) return + return this.slide('prev') + } + + , slide: function (type, next) { + var $active = this.$element.find('.item.active') + , $next = next || $active[type]() + , isCycling = this.interval + , direction = type == 'next' ? 'left' : 'right' + , fallback = type == 'next' ? 'first' : 'last' + , that = this + , e + + this.sliding = true + + isCycling && this.pause() + + $next = $next.length ? $next : this.$element.find('.item')[fallback]() + + e = $.Event('slide', { + relatedTarget: $next[0] + , direction: direction + }) + + if ($next.hasClass('active')) return + + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + this.$element.one('slid', function () { + var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) + $nextIndicator && $nextIndicator.addClass('active') + }) + } + + if ($.support.transition && this.$element.hasClass('slide')) { + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + this.$element.one($.support.transition.end, function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { that.$element.trigger('slid') }, 0) + }) + } else { + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger('slid') + } + + isCycling && this.cycle() + + return this + } + + } + + + /* CAROUSEL PLUGIN DEFINITION + * ========================== */ + + var old = $.fn.carousel + + $.fn.carousel = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('carousel') + , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option) + , action = typeof option == 'string' ? option : options.slide + if (!data) $this.data('carousel', (data = new Carousel(this, options))) + if (typeof option == 'number') data.to(option) + else if (action) data[action]() + else if (options.interval) data.pause().cycle() + }) + } + + $.fn.carousel.defaults = { + interval: 5000 + , pause: 'hover' + } + + $.fn.carousel.Constructor = Carousel + + + /* CAROUSEL NO CONFLICT + * ==================== */ + + $.fn.carousel.noConflict = function () { + $.fn.carousel = old + return this + } + + /* CAROUSEL DATA-API + * ================= */ + + $(document).on('click.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { + var $this = $(this), href + , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 + , options = $.extend({}, $target.data(), $this.data()) + , slideIndex + + $target.carousel(options) + + if (slideIndex = $this.attr('data-slide-to')) { + $target.data('carousel').pause().to(slideIndex).cycle() + } + + e.preventDefault() + }) + +}(window.jQuery);/* ============================================================= + * bootstrap-collapse.js v2.3.2 + * http://twitter.github.com/bootstrap/javascript.html#collapse + * ============================================================= + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================ */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* COLLAPSE PUBLIC CLASS DEFINITION + * ================================ */ + + var Collapse = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, $.fn.collapse.defaults, options) + + if (this.options.parent) { + this.$parent = $(this.options.parent) + } + + this.options.toggle && this.toggle() + } + + Collapse.prototype = { + + constructor: Collapse + + , dimension: function () { + var hasWidth = this.$element.hasClass('width') + return hasWidth ? 'width' : 'height' + } + + , show: function () { + var dimension + , scroll + , actives + , hasData + + if (this.transitioning || this.$element.hasClass('in')) return + + dimension = this.dimension() + scroll = $.camelCase(['scroll', dimension].join('-')) + actives = this.$parent && this.$parent.find('> .accordion-group > .in') + + if (actives && actives.length) { + hasData = actives.data('collapse') + if (hasData && hasData.transitioning) return + actives.collapse('hide') + hasData || actives.data('collapse', null) + } + + this.$element[dimension](0) + this.transition('addClass', $.Event('show'), 'shown') + $.support.transition && this.$element[dimension](this.$element[0][scroll]) + } + + , hide: function () { + var dimension + if (this.transitioning || !this.$element.hasClass('in')) return + dimension = this.dimension() + this.reset(this.$element[dimension]()) + this.transition('removeClass', $.Event('hide'), 'hidden') + this.$element[dimension](0) + } + + , reset: function (size) { + var dimension = this.dimension() + + this.$element + .removeClass('collapse') + [dimension](size || 'auto') + [0].offsetWidth + + this.$element[size !== null ? 'addClass' : 'removeClass']('collapse') + + return this + } + + , transition: function (method, startEvent, completeEvent) { + var that = this + , complete = function () { + if (startEvent.type == 'show') that.reset() + that.transitioning = 0 + that.$element.trigger(completeEvent) + } + + this.$element.trigger(startEvent) + + if (startEvent.isDefaultPrevented()) return + + this.transitioning = 1 + + this.$element[method]('in') + + $.support.transition && this.$element.hasClass('collapse') ? + this.$element.one($.support.transition.end, complete) : + complete() + } + + , toggle: function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() + } + + } + + + /* COLLAPSE PLUGIN DEFINITION + * ========================== */ + + var old = $.fn.collapse + + $.fn.collapse = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('collapse') + , options = $.extend({}, $.fn.collapse.defaults, $this.data(), typeof option == 'object' && option) + if (!data) $this.data('collapse', (data = new Collapse(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.collapse.defaults = { + toggle: true + } + + $.fn.collapse.Constructor = Collapse + + + /* COLLAPSE NO CONFLICT + * ==================== */ + + $.fn.collapse.noConflict = function () { + $.fn.collapse = old + return this + } + + + /* COLLAPSE DATA-API + * ================= */ + + $(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) { + var $this = $(this), href + , target = $this.attr('data-target') + || e.preventDefault() + || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 + , option = $(target).data('collapse') ? 'toggle' : $this.data() + $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed') + $(target).collapse(option) + }) + +}(window.jQuery);/* ============================================================ + * bootstrap-dropdown.js v2.3.2 + * http://twitter.github.com/bootstrap/javascript.html#dropdowns + * ============================================================ + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================ */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* DROPDOWN CLASS DEFINITION + * ========================= */ + + var toggle = '[data-toggle=dropdown]' + , Dropdown = function (element) { + var $el = $(element).on('click.dropdown.data-api', this.toggle) + $('html').on('click.dropdown.data-api', function () { + $el.parent().removeClass('open') + }) + } + + Dropdown.prototype = { + + constructor: Dropdown + + , toggle: function (e) { + var $this = $(this) + , $parent + , isActive + + if ($this.is('.disabled, :disabled')) return + + $parent = getParent($this) + + isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) { + if ('ontouchstart' in document.documentElement) { + // if mobile we we use a backdrop because click events don't delegate + $('