Skip to content
This repository
Browse code

Info with AngularJS

  • Loading branch information...
commit 79e795e72da64d25b4cc7a6780cb85c15f5d0e0a 1 parent 438c484
Soo Hwan Park authored

Showing 38 changed files with 22,036 additions and 129 deletions. Show diff stats Hide diff stats

  1. +2 0  Procfile
  2. +7 0 README.md
  3. +1 1  Rakefile
  4. +18 0 lib/lib/config.js
  5. +23 60 lib/lib/futon_server.js
  6. +10 6 lib/lib/main_controller.js
  7. +15 1 lib/lib/redis_interface.js
  8. +1 3 package.json
  9. +12 0 public/app/app.js
  10. +22 0 public/app/controllers.js
  11. +2 0  public/app/filters.js
  12. +2 0  public/app/services.js
  13. 0  public/css/.gitignore
  14. +11 0 public/css/app.css
  15. +808 0 public/css/bootstrap-responsive.css
  16. +9 0 public/css/bootstrap-responsive.min.css
  17. +4,960 0 public/css/bootstrap.css
  18. +9 0 public/css/bootstrap.min.css
  19. 0  public/img/.gitignore
  20. BIN  public/img/glyphicons-halflings-white.png
  21. BIN  public/img/glyphicons-halflings.png
  22. +42 1 public/index.html
  23. +171 0 public/lib/angular/angular-cookies.js
  24. +7 0 public/lib/angular/angular-cookies.min.js
  25. +276 0 public/lib/angular/angular-loader.js
  26. +7 0 public/lib/angular/angular-loader.min.js
  27. +428 0 public/lib/angular/angular-resource.js
  28. +10 0 public/lib/angular/angular-resource.min.js
  29. +535 0 public/lib/angular/angular-sanitize.js
  30. +13 0 public/lib/angular/angular-sanitize.min.js
  31. +14,401 0 public/lib/angular/angular.js
  32. +158 0 public/lib/angular/angular.min.js
  33. +1 0  public/lib/angular/version.txt
  34. +29 0 public/template/info.html
  35. +16 3 src/lib/config.coffee
  36. +16 40 src/lib/futon_server.coffee
  37. +6 8 src/lib/main_controller.coffee
  38. +8 6 src/lib/redis_interface.coffee
2  Procfile
... ... @@ -0,0 +1,2 @@
  1 +redis: redis-server
  2 +monitor: rake run
7 README.md
Source Rendered
@@ -14,3 +14,10 @@ A Web Interface for Redis - The goal for this app provides a couchdb-futon like
14 14 * AngularJS
15 15 * NodeJS
16 16 * CoffeeScript
  17 +
  18 +
  19 +## How to start
  20 +
  21 + foreman start
  22 +
  23 +
2  Rakefile
@@ -59,7 +59,7 @@ task :compress => [:compile] do
59 59 end
60 60
61 61 hdoc 'run', 'run main coffee'
62   -task :run do
  62 +task :run => [:compile] do
63 63 sh "#{CoffeeBin} src/main.coffee"
64 64 end
65 65
18 lib/lib/config.js
@@ -7,6 +7,24 @@ global.config = {
7 7
8 8 global._ = require('underscore');
9 9
  10 +global.async = require('async');
  11 +
10 12 global.FutonServer = require('./futon_server');
11 13
12 14 global.logger = new (require('./logger'))("redis_futon");
  15 +
  16 +if (String.prototype.chomp == null) {
  17 + String.prototype.chomp = function() {
  18 + return this.replace(/(\n|\r)+$/, '');
  19 + };
  20 +}
  21 +
  22 +if (String.prototype.strip == null) {
  23 + String.prototype.strip = String.prototype.trim;
  24 +}
  25 +
  26 +if (String.prototype.contains == null) {
  27 + String.prototype.contains = function(partial) {
  28 + return this.indexOf(partial) !== -1;
  29 + };
  30 +}
83 lib/lib/futon_server.js
@@ -10,13 +10,16 @@ MainController = require('./main_controller');
10 10 FutonServer = (function() {
11 11
12 12 function FutonServer() {
13   - this.app = express.createServer();
14   - this.main_controller = new MainController();
  13 + this.app = express();
  14 + this.controller = new MainController();
15 15 this.configure(this.app);
16 16 }
17 17
18 18 FutonServer.prototype.configure = function(app) {
  19 + var api, self, _fn, _i, _len, _ref;
19 20 app.configure(function() {
  21 + app.use(express.cookieParser());
  22 + app.use(express.bodyParser());
20 23 app.use(express.methodOverride());
21 24 app.use(app.router);
22 25 app.use(express["static"](__dirname + '/../../public'));
@@ -25,7 +28,24 @@ FutonServer = (function() {
25 28 showStack: true
26 29 }));
27 30 });
28   - app.get('/info', this.process('info', this.main_controller));
  31 + self = this;
  32 + _ref = this.controller.routes;
  33 + _fn = function(api) {
  34 + var fn_handler;
  35 + fn_handler = function(req, res) {
  36 + try {
  37 + return self.controller[api.method](req, res);
  38 + } catch (error) {
  39 + return res.json(error);
  40 + }
  41 + };
  42 + app[api.http_method](api.path, fn_handler);
  43 + return logger.info("route: " + (api.http_method.toUpperCase()) + " " + api.path + " => " + api.method);
  44 + };
  45 + for (_i = 0, _len = _ref.length; _i < _len; _i++) {
  46 + api = _ref[_i];
  47 + _fn(api);
  48 + }
29 49 };
30 50
31 51 FutonServer.prototype.start = function() {
@@ -33,63 +53,6 @@ FutonServer = (function() {
33 53 return logger.info("Server is listening to " + config.LISTEN_PORT);
34 54 };
35 55
36   - FutonServer.prototype.process = function(path, handler) {
37   - var _this = this;
38   - return function(req, res) {
39   - var fn_handler;
40   - try {
41   - fn_handler = function(req, res) {
42   - return handler[path](req, res);
43   - };
44   - return _this.parse_post_body(req, res, fn_handler);
45   - } catch (err) {
46   - logger.error("process Error", err);
47   - return res.json({
48   - error: true,
49   - reason: 'express error',
50   - message: err.message
51   - });
52   - }
53   - };
54   - };
55   -
56   - FutonServer.prototype.parse_post_body = function(req, res, callback) {
57   - var body_buffer;
58   - if (req.method === 'POST') {
59   - body_buffer = '';
60   - req.on('data', function(data) {
61   - return body_buffer += data;
62   - });
63   - return req.on('end', function() {
64   - var content_type;
65   - content_type = req.headers['content-type'];
66   - logger.debug("[Server] Content-Type: " + content_type);
67   - try {
68   - req.body = (function() {
69   - switch (content_type) {
70   - case "application/json":
71   - case "json":
72   - return JSON.parse(body_buffer);
73   - case "application/x-www-form-urlencoded":
74   - return querystring.parse(body_buffer);
75   - default:
76   - return body_buffer;
77   - }
78   - })();
79   - return callback(req, res);
80   - } catch (err) {
81   - logger.error("[Server] parse_post_body", err);
82   - if (err.type === 'unexpected_token') {
83   - logger.error("[Server] Illegal JSON String", body_buffer);
84   - }
85   - throw err;
86   - }
87   - });
88   - } else {
89   - return callback(req, res);
90   - }
91   - };
92   -
93 56 return FutonServer;
94 57
95 58 })();
16 lib/lib/main_controller.js
@@ -7,15 +7,19 @@ MainController = (function() {
7 7
8 8 function MainController() {
9 9 this.redis = new RedisInterface();
  10 + this.routes = [
  11 + {
  12 + path: "/redis/info",
  13 + http_method: "get",
  14 + method: "redis_info"
  15 + }
  16 + ];
  17 + return;
10 18 }
11 19
12   - MainController.prototype.info = function(req, res) {
  20 + MainController.prototype.redis_info = function(req, res) {
13 21 return this.redis.info(function(err, resp) {
14   - return res.json({
15   - app: "Redis Futon",
16   - version: "0.0.1",
17   - server_info: resp
18   - });
  22 + return res.json(resp);
19 23 });
20 24 };
21 25
16 lib/lib/redis_interface.js
@@ -16,7 +16,21 @@ RedisInterface = (function() {
16 16
17 17 RedisInterface.prototype.info = function(callback) {
18 18 return this.client.info(function(err, resp) {
19   - return callback(err, resp);
  19 + var lines, redis_info;
  20 + if (err) {
  21 + return callback(err);
  22 + }
  23 + lines = resp.split("\n");
  24 + lines = resp.trim().split("\n");
  25 + redis_info = _.map(lines, function(val) {
  26 + var kv;
  27 + kv = val.split(":");
  28 + return {
  29 + key: kv[0],
  30 + value: kv[1].trim()
  31 + };
  32 + });
  33 + return callback(err, redis_info);
20 34 });
21 35 };
22 36
4 package.json
@@ -10,12 +10,10 @@
10 10 "async": "0.1.22",
11 11 "phantomjs": "0.2.0",
12 12 "step": "0.0.5",
13   - "express": "2.5.9",
14   - "ejs": "0.7.1",
  13 + "express": "3.0.2",
15 14 "winston": "0.5.11",
16 15 "request": "2.9.202",
17 16 "jasmine-node": "1.0.26",
18   - "sprintf": ">= 0.1.1",
19 17 "uglify-js": "1.3.0"
20 18 },
21 19 "directories": {
12 public/app/app.js
... ... @@ -0,0 +1,12 @@
  1 +
  2 +
  3 +'use strict';
  4 +
  5 +/* App Module */
  6 +
  7 +angular.module('futon', []).
  8 + config(['$routeProvider', function($routeProvider) {
  9 + $routeProvider.
  10 + when('/info', {templateUrl: '/template/info.html', controller: InfoCtrl}).
  11 + otherwise({redirectTo: '/info'});
  12 +}]);
22 public/app/controllers.js
... ... @@ -0,0 +1,22 @@
  1 +'use strict';
  2 +
  3 +/* Controllers */
  4 +
  5 +function NavCtrl($scope, $http, $rootScope) {
  6 + $rootScope.database = 0;
  7 +}
  8 +
  9 +function InfoCtrl($scope, $http, $rootScope) {
  10 + $http.get("/redis/info").success(function(data){
  11 + $scope.redis_info = data;
  12 + });
  13 +
  14 + $scope.getDatabase = function() {
  15 + return $rootScope.database;
  16 + };
  17 +
  18 +
  19 +}
  20 +
  21 +//MainCtrl.$inject = ['$scope', '$http'];
  22 +
2  public/app/filters.js
... ... @@ -0,0 +1,2 @@
  1 +'use strict';
  2 +
2  public/app/services.js
... ... @@ -0,0 +1,2 @@
  1 +'use strict';
  2 +
0  public/css/.gitignore
No changes.
11 public/css/app.css
... ... @@ -0,0 +1,11 @@
  1 +/* app css stylesheet */
  2 +
  3 +body {
  4 +
  5 +}
  6 +
  7 +.futon-container {
  8 + margin-top: 10px;
  9 +}
  10 +
  11 +
808 public/css/bootstrap-responsive.css
... ... @@ -0,0 +1,808 @@
  1 +/*!
  2 + * Bootstrap Responsive v2.0.3
  3 + *
  4 + * Copyright 2012 Twitter, Inc
  5 + * Licensed under the Apache License v2.0
  6 + * http://www.apache.org/licenses/LICENSE-2.0
  7 + *
  8 + * Designed and built with all the love in the world @twitter by @mdo and @fat.
  9 + */
  10 +
  11 +.clearfix {
  12 + *zoom: 1;
  13 +}
  14 +
  15 +.clearfix:before,
  16 +.clearfix:after {
  17 + display: table;
  18 + content: "";
  19 +}
  20 +
  21 +.clearfix:after {
  22 + clear: both;
  23 +}
  24 +
  25 +.hide-text {
  26 + font: 0/0 a;
  27 + color: transparent;
  28 + text-shadow: none;
  29 + background-color: transparent;
  30 + border: 0;
  31 +}
  32 +
  33 +.input-block-level {
  34 + display: block;
  35 + width: 100%;
  36 + min-height: 28px;
  37 + -webkit-box-sizing: border-box;
  38 + -moz-box-sizing: border-box;
  39 + -ms-box-sizing: border-box;
  40 + box-sizing: border-box;
  41 +}
  42 +
  43 +.hidden {
  44 + display: none;
  45 + visibility: hidden;
  46 +}
  47 +
  48 +.visible-phone {
  49 + display: none !important;
  50 +}
  51 +
  52 +.visible-tablet {
  53 + display: none !important;
  54 +}
  55 +
  56 +.hidden-desktop {
  57 + display: none !important;
  58 +}
  59 +
  60 +@media (max-width: 767px) {
  61 + .visible-phone {
  62 + display: inherit !important;
  63 + }
  64 + .hidden-phone {
  65 + display: none !important;
  66 + }
  67 + .hidden-desktop {
  68 + display: inherit !important;
  69 + }
  70 + .visible-desktop {
  71 + display: none !important;
  72 + }
  73 +}
  74 +
  75 +@media (min-width: 768px) and (max-width: 979px) {
  76 + .visible-tablet {
  77 + display: inherit !important;
  78 + }
  79 + .hidden-tablet {
  80 + display: none !important;
  81 + }
  82 + .hidden-desktop {
  83 + display: inherit !important;
  84 + }
  85 + .visible-desktop {
  86 + display: none !important ;
  87 + }
  88 +}
  89 +
  90 +@media (max-width: 480px) {
  91 + .nav-collapse {
  92 + -webkit-transform: translate3d(0, 0, 0);
  93 + }
  94 + .page-header h1 small {
  95 + display: block;
  96 + line-height: 18px;
  97 + }
  98 + input[type="checkbox"],
  99 + input[type="radio"] {
  100 + border: 1px solid #ccc;
  101 + }
  102 + .form-horizontal .control-group > label {
  103 + float: none;
  104 + width: auto;
  105 + padding-top: 0;
  106 + text-align: left;
  107 + }
  108 + .form-horizontal .controls {
  109 + margin-left: 0;
  110 + }
  111 + .form-horizontal .control-list {
  112 + padding-top: 0;
  113 + }
  114 + .form-horizontal .form-actions {
  115 + padding-right: 10px;
  116 + padding-left: 10px;
  117 + }
  118 + .modal {
  119 + position: absolute;
  120 + top: 10px;
  121 + right: 10px;
  122 + left: 10px;
  123 + width: auto;
  124 + margin: 0;
  125 + }
  126 + .modal.fade.in {
  127 + top: auto;
  128 + }
  129 + .modal-header .close {
  130 + padding: 10px;
  131 + margin: -10px;
  132 + }
  133 + .carousel-caption {
  134 + position: static;
  135 + }
  136 +}
  137 +
  138 +@media (max-width: 767px) {
  139 + body {
  140 + padding-right: 20px;
  141 + padding-left: 20px;
  142 + }
  143 + .navbar-fixed-top,
  144 + .navbar-fixed-bottom {
  145 + margin-right: -20px;
  146 + margin-left: -20px;
  147 + }
  148 + .container-fluid {
  149 + padding: 0;
  150 + }
  151 + .dl-horizontal dt {
  152 + float: none;
  153 + width: auto;
  154 + clear: none;
  155 + text-align: left;
  156 + }
  157 + .dl-horizontal dd {
  158 + margin-left: 0;
  159 + }
  160 + .container {
  161 + width: auto;
  162 + }
  163 + .row-fluid {
  164 + width: 100%;
  165 + }
  166 + .row,
  167 + .thumbnails {
  168 + margin-left: 0;
  169 + }
  170 + [class*="span"],
  171 + .row-fluid [class*="span"] {
  172 + display: block;
  173 + float: none;
  174 + width: auto;
  175 + margin-left: 0;
  176 + }
  177 + .input-large,
  178 + .input-xlarge,
  179 + .input-xxlarge,
  180 + input[class*="span"],
  181 + select[class*="span"],
  182 + textarea[class*="span"],
  183 + .uneditable-input {
  184 + display: block;
  185 + width: 100%;
  186 + min-height: 28px;
  187 + -webkit-box-sizing: border-box;
  188 + -moz-box-sizing: border-box;
  189 + -ms-box-sizing: border-box;
  190 + box-sizing: border-box;
  191 + }
  192 + .input-prepend input,
  193 + .input-append input,
  194 + .input-prepend input[class*="span"],
  195 + .input-append input[class*="span"] {
  196 + display: inline-block;
  197 + width: auto;
  198 + }
  199 +}
  200 +
  201 +@media (min-width: 768px) and (max-width: 979px) {
  202 + .row {
  203 + margin-left: -20px;
  204 + *zoom: 1;
  205 + }
  206 + .row:before,
  207 + .row:after {
  208 + display: table;
  209 + content: "";
  210 + }
  211 + .row:after {
  212 + clear: both;
  213 + }
  214 + [class*="span"] {
  215 + float: left;
  216 + margin-left: 20px;
  217 + }
  218 + .container,
  219 + .navbar-fixed-top .container,
  220 + .navbar-fixed-bottom .container {
  221 + width: 724px;
  222 + }
  223 + .span12 {
  224 + width: 724px;
  225 + }
  226 + .span11 {
  227 + width: 662px;
  228 + }
  229 + .span10 {
  230 + width: 600px;
  231 + }
  232 + .span9 {
  233 + width: 538px;
  234 + }
  235 + .span8 {
  236 + width: 476px;
  237 + }
  238 + .span7 {
  239 + width: 414px;
  240 + }
  241 + .span6 {
  242 + width: 352px;
  243 + }
  244 + .span5 {
  245 + width: 290px;
  246 + }
  247 + .span4 {
  248 + width: 228px;
  249 + }
  250 + .span3 {
  251 + width: 166px;
  252 + }
  253 + .span2 {
  254 + width: 104px;
  255 + }
  256 + .span1 {
  257 + width: 42px;
  258 + }
  259 + .offset12 {
  260 + margin-left: 764px;
  261 + }
  262 + .offset11 {
  263 + margin-left: 702px;
  264 + }
  265 + .offset10 {
  266 + margin-left: 640px;
  267 + }
  268 + .offset9 {
  269 + margin-left: 578px;
  270 + }
  271 + .offset8 {
  272 + margin-left: 516px;
  273 + }
  274 + .offset7 {
  275 + margin-left: 454px;
  276 + }
  277 + .offset6 {
  278 + margin-left: 392px;
  279 + }
  280 + .offset5 {
  281 + margin-left: 330px;
  282 + }
  283 + .offset4 {
  284 + margin-left: 268px;
  285 + }
  286 + .offset3 {
  287 + margin-left: 206px;
  288 + }
  289 + .offset2 {
  290 + margin-left: 144px;
  291 + }
  292 + .offset1 {
  293 + margin-left: 82px;
  294 + }
  295 + .row-fluid {
  296 + width: 100%;
  297 + *zoom: 1;
  298 + }
  299 + .row-fluid:before,
  300 + .row-fluid:after {
  301 + display: table;
  302 + content: "";
  303 + }
  304 + .row-fluid:after {
  305 + clear: both;
  306 + }
  307 + .row-fluid [class*="span"] {
  308 + display: block;
  309 + float: left;
  310 + width: 100%;
  311 + min-height: 28px;
  312 + margin-left: 2.762430939%;
  313 + *margin-left: 2.709239449638298%;
  314 + -webkit-box-sizing: border-box;
  315 + -moz-box-sizing: border-box;
  316 + -ms-box-sizing: border-box;
  317 + box-sizing: border-box;
  318 + }
  319 + .row-fluid [class*="span"]:first-child {
  320 + margin-left: 0;
  321 + }
  322 + .row-fluid .span12 {
  323 + width: 99.999999993%;
  324 + *width: 99.9468085036383%;
  325 + }
  326 + .row-fluid .span11 {
  327 + width: 91.436464082%;
  328 + *width: 91.38327259263829%;
  329 + }
  330 + .row-fluid .span10 {
  331 + width: 82.87292817100001%;
  332 + *width: 82.8197366816383%;
  333 + }
  334 + .row-fluid .span9 {
  335 + width: 74.30939226%;
  336 + *width: 74.25620077063829%;
  337 + }
  338 + .row-fluid .span8 {
  339 + width: 65.74585634900001%;
  340 + *width: 65.6926648596383%;
  341 + }
  342 + .row-fluid .span7 {
  343 + width: 57.182320438000005%;
  344 + *width: 57.129128948638304%;
  345 + }
  346 + .row-fluid .span6 {
  347 + width: 48.618784527%;
  348 + *width: 48.5655930376383%;
  349 + }
  350 + .row-fluid .span5 {
  351 + width: 40.055248616%;
  352 + *width: 40.0020571266383%;
  353 + }
  354 + .row-fluid .span4 {
  355 + width: 31.491712705%;
  356 + *width: 31.4385212156383%;
  357 + }
  358 + .row-fluid .span3 {
  359 + width: 22.928176794%;
  360 + *width: 22.874985304638297%;
  361 + }
  362 + .row-fluid .span2 {
  363 + width: 14.364640883%;
  364 + *width: 14.311449393638298%;
  365 + }
  366 + .row-fluid .span1 {
  367 + width: 5.801104972%;
  368 + *width: 5.747913482638298%;
  369 + }
  370 + input,
  371 + textarea,
  372 + .uneditable-input {
  373 + margin-left: 0;
  374 + }
  375 + input.span12,
  376 + textarea.span12,
  377 + .uneditable-input.span12 {
  378 + width: 714px;
  379 + }
  380 + input.span11,
  381 + textarea.span11,
  382 + .uneditable-input.span11 {
  383 + width: 652px;
  384 + }
  385 + input.span10,
  386 + textarea.span10,
  387 + .uneditable-input.span10 {
  388 + width: 590px;
  389 + }
  390 + input.span9,
  391 + textarea.span9,
  392 + .uneditable-input.span9 {
  393 + width: 528px;
  394 + }
  395 + input.span8,
  396 + textarea.span8,
  397 + .uneditable-input.span8 {
  398 + width: 466px;
  399 + }
  400 + input.span7,
  401 + textarea.span7,
  402 + .uneditable-input.span7 {
  403 + width: 404px;
  404 + }
  405 + input.span6,
  406 + textarea.span6,
  407 + .uneditable-input.span6 {
  408 + width: 342px;
  409 + }
  410 + input.span5,
  411 + textarea.span5,
  412 + .uneditable-input.span5 {
  413 + width: 280px;
  414 + }
  415 + input.span4,
  416 + textarea.span4,
  417 + .uneditable-input.span4 {
  418 + width: 218px;
  419 + }
  420 + input.span3,
  421 + textarea.span3,
  422 + .uneditable-input.span3 {
  423 + width: 156px;
  424 + }
  425 + input.span2,
  426 + textarea.span2,
  427 + .uneditable-input.span2 {
  428 + width: 94px;
  429 + }
  430 + input.span1,
  431 + textarea.span1,
  432 + .uneditable-input.span1 {
  433 + width: 32px;
  434 + }
  435 +}
  436 +
  437 +@media (min-width: 1200px) {
  438 + .row {
  439 + margin-left: -30px;
  440 + *zoom: 1;
  441 + }
  442 + .row:before,
  443 + .row:after {
  444 + display: table;
  445 + content: "";
  446 + }
  447 + .row:after {
  448 + clear: both;
  449 + }
  450 + [class*="span"] {
  451 + float: left;
  452 + margin-left: 30px;
  453 + }
  454 + .container,
  455 + .navbar-fixed-top .container,
  456 + .navbar-fixed-bottom .container {
  457 + width: 1170px;
  458 + }
  459 + .span12 {
  460 + width: 1170px;
  461 + }
  462 + .span11 {
  463 + width: 1070px;
  464 + }
  465 + .span10 {
  466 + width: 970px;
  467 + }
  468 + .span9 {
  469 + width: 870px;
  470 + }
  471 + .span8 {
  472 + width: 770px;
  473 + }
  474 + .span7 {
  475 + width: 670px;
  476 + }
  477 + .span6 {
  478 + width: 570px;
  479 + }
  480 + .span5 {
  481 + width: 470px;
  482 + }
  483 + .span4 {
  484 + width: 370px;
  485 + }
  486 + .span3 {
  487 + width: 270px;
  488 + }
  489 + .span2 {
  490 + width: 170px;
  491 + }
  492 + .span1 {
  493 + width: 70px;
  494 + }
  495 + .offset12 {
  496 + margin-left: 1230px;
  497 + }
  498 + .offset11 {
  499 + margin-left: 1130px;
  500 + }
  501 + .offset10 {
  502 + margin-left: 1030px;
  503 + }
  504 + .offset9 {
  505 + margin-left: 930px;
  506 + }
  507 + .offset8 {
  508 + margin-left: 830px;
  509 + }
  510 + .offset7 {
  511 + margin-left: 730px;
  512 + }
  513 + .offset6 {
  514 + margin-left: 630px;
  515 + }
  516 + .offset5 {
  517 + margin-left: 530px;
  518 + }
  519 + .offset4 {
  520 + margin-left: 430px;
  521 + }
  522 + .offset3 {
  523 + margin-left: 330px;
  524 + }
  525 + .offset2 {
  526 + margin-left: 230px;
  527 + }
  528 + .offset1 {
  529 + margin-left: 130px;
  530 + }
  531 + .row-fluid {
  532 + width: 100%;
  533 + *zoom: 1;
  534 + }
  535 + .row-fluid:before,
  536 + .row-fluid:after {
  537 + display: table;
  538 + content: "";
  539 + }
  540 + .row-fluid:after {
  541 + clear: both;
  542 + }
  543 + .row-fluid [class*="span"] {
  544 + display: block;
  545 + float: left;
  546 + width: 100%;
  547 + min-height: 28px;
  548 + margin-left: 2.564102564%;
  549 + *margin-left: 2.510911074638298%;
  550 + -webkit-box-sizing: border-box;
  551 + -moz-box-sizing: border-box;
  552 + -ms-box-sizing: border-box;
  553 + box-sizing: border-box;
  554 + }
  555 + .row-fluid [class*="span"]:first-child {
  556 + margin-left: 0;
  557 + }
  558 + .row-fluid .span12 {
  559 + width: 100%;
  560 + *width: 99.94680851063829%;
  561 + }
  562 + .row-fluid .span11 {
  563 + width: 91.45299145300001%;
  564 + *width: 91.3997999636383%;
  565 + }
  566 + .row-fluid .span10 {
  567 + width: 82.905982906%;
  568 + *width: 82.8527914166383%;
  569 + }
  570 + .row-fluid .span9 {
  571 + width: 74.358974359%;
  572 + *width: 74.30578286963829%;
  573 + }
  574 + .row-fluid .span8 {
  575 + width: 65.81196581200001%;
  576 + *width: 65.7587743226383%;
  577 + }
  578 + .row-fluid .span7 {
  579 + width: 57.264957265%;
  580 + *width: 57.2117657756383%;
  581 + }
  582 + .row-fluid .span6 {
  583 + width: 48.717948718%;
  584 + *width: 48.6647572286383%;
  585 + }
  586 + .row-fluid .span5 {
  587 + width: 40.170940171000005%;
  588 + *width: 40.117748681638304%;
  589 + }
  590 + .row-fluid .span4 {
  591 + width: 31.623931624%;
  592 + *width: 31.5707401346383%;
  593 + }
  594 + .row-fluid .span3 {
  595 + width: 23.076923077%;
  596 + *width: 23.0237315876383%;
  597 + }
  598 + .row-fluid .span2 {
  599 + width: 14.529914530000001%;
  600 + *width: 14.4767230406383%;
  601 + }
  602 + .row-fluid .span1 {
  603 + width: 5.982905983%;
  604 + *width: 5.929714493638298%;
  605 + }
  606 + input,
  607 + textarea,
  608 + .uneditable-input {
  609 + margin-left: 0;
  610 + }
  611 + input.span12,
  612 + textarea.span12,
  613 + .uneditable-input.span12 {
  614 + width: 1160px;
  615 + }
  616 + input.span11,
  617 + textarea.span11,
  618 + .uneditable-input.span11 {
  619 + width: 1060px;
  620 + }
  621 + input.span10,
  622 + textarea.span10,
  623 + .uneditable-input.span10 {
  624 + width: 960px;
  625 + }
  626 + input.span9,
  627 + textarea.span9,
  628 + .uneditable-input.span9 {
  629 + width: 860px;
  630 + }
  631 + input.span8,
  632 + textarea.span8,
  633 + .uneditable-input.span8 {
  634 + width: 760px;
  635 + }
  636 + input.span7,
  637 + textarea.span7,
  638 + .uneditable-input.span7 {
  639 + width: 660px;
  640 + }
  641 + input.span6,
  642 + textarea.span6,
  643 + .uneditable-input.span6 {
  644 + width: 560px;
  645 + }
  646 + input.span5,
  647 + textarea.span5,
  648 + .uneditable-input.span5 {
  649 + width: 460px;
  650 + }
  651 + input.span4,
  652 + textarea.span4,
  653 + .uneditable-input.span4 {
  654 + width: 360px;
  655 + }
  656 + input.span3,
  657 + textarea.span3,
  658 + .uneditable-input.span3 {
  659 + width: 260px;
  660 + }
  661 + input.span2,
  662 + textarea.span2,
  663 + .uneditable-input.span2 {
  664 + width: 160px;
  665 + }
  666 + input.span1,
  667 + textarea.span1,
  668 + .uneditable-input.span1 {
  669 + width: 60px;
  670 + }
  671 + .thumbnails {
  672 + margin-left: -30px;
  673 + }
  674 + .thumbnails > li {
  675 + margin-left: 30px;
  676 + }
  677 + .row-fluid .thumbnails {
  678 + margin-left: 0;
  679 + }
  680 +}
  681 +
  682 +@media (max-width: 979px) {
  683 + body {
  684 + padding-top: 0;
  685 + }
  686 + .navbar-fixed-top {
  687 + position: static;
  688 + margin-bottom: 18px;
  689 + }
  690 + .navbar-fixed-top .navbar-inner {
  691 + padding: 5px;
  692 + }
  693 + .navbar .container {
  694 + width: auto;
  695 + padding: 0;
  696 + }
  697 + .navbar .brand {
  698 + padding-right: 10px;
  699 + padding-left: 10px;
  700 + margin: 0 0 0 -5px;
  701 + }
  702 + .nav-collapse {
  703 + clear: both;
  704 + }
  705 + .nav-collapse .nav {
  706 + float: none;
  707 + margin: 0 0 9px;
  708 + }
  709 + .nav-collapse .nav > li {
  710 + float: none;
  711 + }
  712 + .nav-collapse .nav > li > a {
  713 + margin-bottom: 2px;
  714 + }
  715 + .nav-collapse .nav > .divider-vertical {
  716 + display: none;
  717 + }
  718 + .nav-collapse .nav .nav-header {
  719 + color: #999999;
  720 + text-shadow: none;
  721 + }
  722 + .nav-collapse .nav > li > a,
  723 + .nav-collapse .dropdown-menu a {
  724 + padding: 6px 15px;
  725 + font-weight: bold;
  726 + color: #999999;
  727 + -webkit-border-radius: 3px;
  728 + -moz-border-radius: 3px;
  729 + border-radius: 3px;
  730 + }
  731 + .nav-collapse .btn {
  732 + padding: 4px 10px 4px;
  733 + font-weight: normal;
  734 + -webkit-border-radius: 4px;
  735 + -moz-border-radius: 4px;
  736 + border-radius: 4px;
  737 + }
  738 + .nav-collapse .dropdown-menu li + li a {
  739 + margin-bottom: 2px;
  740 + }
  741 + .nav-collapse .nav > li > a:hover,
  742 + .nav-collapse .dropdown-menu a:hover {
  743 + background-color: #222222;
  744 + }
  745 + .nav-collapse.in .btn-group {
  746 + padding: 0;
  747 + margin-top: 5px;
  748 + }
  749 + .nav-collapse .dropdown-menu {
  750 + position: static;
  751 + top: auto;
  752 + left: auto;
  753 + display: block;
  754 + float: none;
  755 + max-width: none;
  756 + padding: 0;
  757 + margin: 0 15px;
  758 + background-color: transparent;
  759 + border: none;
  760 + -webkit-border-radius: 0;
  761 + -moz-border-radius: 0;
  762 + border-radius: 0;
  763 + -webkit-box-shadow: none;
  764 + -moz-box-shadow: none;
  765 + box-shadow: none;
  766 + }
  767 + .nav-collapse .dropdown-menu:before,
  768 + .nav-collapse .dropdown-menu:after {
  769 + display: none;
  770 + }
  771 + .nav-collapse .dropdown-menu .divider {
  772 + display: none;
  773 + }
  774 + .nav-collapse .navbar-form,
  775 + .nav-collapse .navbar-search {
  776 + float: none;
  777 + padding: 9px 15px;
  778 + margin: 9px 0;
  779 + border-top: 1px solid #222222;
  780 + border-bottom: 1px solid #222222;
  781 + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
  782 + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
  783 + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
  784 + }
  785 + .navbar .nav-collapse .nav.pull-right {
  786 + float: none;
  787 + margin-left: 0;
  788 + }
  789 + .nav-collapse,
  790 + .nav-collapse.collapse {
  791 + height: 0;
  792 + overflow: hidden;
  793 + }
  794 + .navbar .btn-navbar {
  795 + display: block;
  796 + }
  797 + .navbar-static .navbar-inner {
  798 + padding-right: 10px;
  799 + padding-left: 10px;
  800 + }
  801 +}
  802 +
  803 +@media (min-width: 980px) {
  804 + .nav-collapse.collapse {
  805 + height: auto !important;
  806 + overflow: visible !important;
  807 + }
  808 +}
9 public/css/bootstrap-responsive.min.css
... ... @@ -0,0 +1,9 @@
  1 +/*!
  2 + * Bootstrap Responsive v2.0.3
  3 + *
  4 + * Copyright 2012 Twitter, Inc
  5 + * Licensed under the Apache License v2.0
  6 + * http://www.apache.org/licenses/LICENSE-2.0
  7 + *
  8 + * Designed and built with all the love in the world @twitter by @mdo and @fat.
  9 + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;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:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}@media(max-width:767px){.visible-phone{display:inherit!important}.hidden-phone{display:none!important}.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}}@media(min-width:768px) and (max-width:979px){.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:18px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-group>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}.modal{position:absolute;top:10px;right:10px;left:10px;width:auto;margin:0}.modal.fade.in{top:auto}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom{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}[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:auto;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:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-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}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;content:""}.row:after{clear:both}[class*="span"]{float:left;margin-left:20px}.container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:28px;margin-left:2.762430939%;*margin-left:2.709239449638298%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .span12{width:99.999999993%;*width:99.9468085036383%}.row-fluid .span11{width:91.436464082%;*width:91.38327259263829%}.row-fluid .span10{width:82.87292817100001%;*width:82.8197366816383%}.row-fluid .span9{width:74.30939226%;*width:74.25620077063829%}.row-fluid .span8{width:65.74585634900001%;*width:65.6926648596383%}.row-fluid .span7{width:57.182320438000005%;*width:57.129128948638304%}.row-fluid .span6{width:48.618784527%;*width:48.5655930376383%}.row-fluid .span5{width:40.055248616%;*width:40.0020571266383%}.row-fluid .span4{width:31.491712705%;*width:31.4385212156383%}.row-fluid .span3{width:22.928176794%;*width:22.874985304638297%}.row-fluid .span2{width:14.364640883%;*width:14.311449393638298%}.row-fluid .span1{width:5.801104972%;*width:5.747913482638298%}input,textarea,.uneditable-input{margin-left:0}input.span12,textarea.span12,.uneditable-input.span12{width:714px}input.span11,textarea.span11,.uneditable-input.span11{width:652px}input.span10,textarea.span10,.uneditable-input.span10{width:590px}input.span9,textarea.span9,.uneditable-input.span9{width:528px}input.span8,textarea.span8,.uneditable-input.span8{width:466px}input.span7,textarea.span7,.uneditable-input.span7{width:404px}input.span6,textarea.span6,.uneditable-input.span6{width:342px}input.span5,textarea.span5,.uneditable-input.span5{width:280px}input.span4,textarea.span4,.uneditable-input.span4{width:218px}input.span3,textarea.span3,.uneditable-input.span3{width:156px}input.span2,textarea.span2,.uneditable-input.span2{width:94px}input.span1,textarea.span1,.uneditable-input.span1{width:32px}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;content:""}.row:after{clear:both}[class*="span"]{float:left;margin-left:30px}.container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:28px;margin-left:2.564102564%;*margin-left:2.510911074638298%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145300001%;*width:91.3997999636383%}.row-fluid .span10{width:82.905982906%;*width:82.8527914166383%}.row-fluid .span9{width:74.358974359%;*width:74.30578286963829%}.row-fluid .span8{width:65.81196581200001%;*width:65.7587743226383%}.row-fluid .span7{width:57.264957265%;*width:57.2117657756383%}.row-fluid .span6{width:48.717948718%;*width:48.6647572286383%}.row-fluid .span5{width:40.170940171000005%;*width:40.117748681638304%}.row-fluid .span4{width:31.623931624%;*width:31.5707401346383%}.row-fluid .span3{width:23.076923077%;*width:23.0237315876383%}.row-fluid .span2{width:14.529914530000001%;*width:14.4767230406383%}.row-fluid .span1{width:5.982905983%;*width:5.929714493638298%}input,textarea,.uneditable-input{margin-left:0}input.span12,textarea.span12,.uneditable-input.span12{width:1160px}input.span11,textarea.span11,.uneditable-input.span11{width:1060px}input.span10,textarea.span10,.uneditable-input.span10{width:960px}input.span9,textarea.span9,.uneditable-input.span9{width:860px}input.span8,textarea.span8,.uneditable-input.span8{width:760px}input.span7,textarea.span7,.uneditable-input.span7{width:660px}input.span6,textarea.span6,.uneditable-input.span6{width:560px}input.span5,textarea.span5,.uneditable-input.span5{width:460px}input.span4,textarea.span4,.uneditable-input.span4{width:360px}input.span3,textarea.span3,.uneditable-input.span3{width:260px}input.span2,textarea.span2,.uneditable-input.span2{width:160px}input.span1,textarea.span1,.uneditable-input.span1{width:60px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top{position:static;margin-bottom:18px}.navbar-fixed-top .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 9px}.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:#999;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:6px 15px;font-weight:bold;color:#999;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .dropdown-menu a:hover{background-color:#222}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:block;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 .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:9px 15px;margin:9px 0;border-top:1px solid #222;border-bottom:1px solid #222;-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 .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}}
4,960 public/css/bootstrap.css
4,960 additions, 0 deletions not shown
9 public/css/bootstrap.min.css
... ... @@ -0,0 +1,9 @@
  1 +/*!
  2 + * Bootstrap v2.0.3
  3 + *
  4 + * Copyright 2012 Twitter, Inc
  5 + * Licensed under the Apache License v2.0
  6 + * http://www.apache.org/licenses/LICENSE-2.0
  7 + *
  8 + * Designed and built with all the love in the world @twitter by @mdo and @fat.
  9 + */article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}input[type="search"]{-webkit-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}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;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:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:18px;color:#333;background-color:#fff}a{color:#08c;text-decoration:none}a:hover{color:#005580;text-decoration:underline}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;content:""}.row:after{clear:both}[class*="span"]{float:left;margin-left:20px}.container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:28px;margin-left:2.127659574%;*margin-left:2.0744680846382977%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .span12{width:99.99999998999999%;*width:99.94680850063828%}.row-fluid .span11{width:91.489361693%;*width:91.4361702036383%}.row-fluid .span10{width:82.97872339599999%;*width:82.92553190663828%}.row-fluid .span9{width:74.468085099%;*width:74.4148936096383%}.row-fluid .span8{width:65.95744680199999%;*width:65.90425531263828%}.row-fluid .span7{width:57.446808505%;*width:57.3936170156383%}.row-fluid .span6{width:48.93617020799999%;*width:48.88297871863829%}.row-fluid .span5{width:40.425531911%;*width:40.3723404216383%}.row-fluid .span4{width:31.914893614%;*width:31.8617021246383%}.row-fluid .span3{width:23.404255317%;*width:23.3510638276383%}.row-fluid .span2{width:14.89361702%;*width:14.8404255306383%}.row-fluid .span1{width:6.382978723%;*width:6.329787233638298%}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;content:""}.container-fluid:after{clear:both}p{margin:0 0 9px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:18px}p small{font-size:11px;color:#999}.lead{margin-bottom:18px;font-size:20px;font-weight:200;line-height:27px}h1,h2,h3,h4,h5,h6{margin:0;font-family:inherit;font-weight:bold;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;color:#999}h1{font-size:30px;line-height:36px}h1 small{font-size:18px}h2{font-size:24px;line-height:36px}h2 small{font-size:18px}h3{font-size:18px;line-height:27px}h3 small{font-size:14px}h4,h5,h6{line-height:18px}h4{font-size:14px}h4 small{font-size:12px}h5{font-size:12px}h6{font-size:11px;color:#999;text-transform:uppercase}.page-header{padding-bottom:17px;margin:18px 0;border-bottom:1px solid #eee}.page-header h1{line-height:1}ul,ol{padding:0;margin:0 0 9px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}ul{list-style:disc}ol{list-style:decimal}li{line-height:18px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}dl{margin-bottom:18px}dt,dd{line-height:18px}dt{font-weight:bold;line-height:17px}dd{margin-left:9px}.dl-horizontal dt{float:left;width:120px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:130px}hr{margin:18px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}strong{font-weight:bold}em{font-style:italic}.muted{color:#999}abbr[title]{cursor:help;border-bottom:1px dotted #ddd}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 18px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:16px;font-weight:300;line-height:22.5px}blockquote small{display:block;line-height:18px;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}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:18px;font-style:normal;line-height:18px}small{font-size:100%}cite{font-style:normal}code,pre{padding:0 3px 2px;font-family:Menlo,Monaco,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;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:8.5px;margin:0 0 9px;font-size:12.025px;line-height:18px;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:18px}pre code{padding:0;color:inherit;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 18px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:27px;font-size:19.5px;line-height:36px;color:#333;border:0;border-bottom:1px solid #eee}legend small{font-size:13.5px;color:#999}label,input,button,select,textarea{font-size:13px;font-weight:normal;line-height:18px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px;color:#333}input,textarea,select,.uneditable-input{display:inline-block;width:210px;height:18px;padding:4px;margin-bottom:9px;font-size:13px;line-height:18px;color:#555;background-color:#fff;border:1px solid #ccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.uneditable-textarea{width:auto;height:auto}label input,label textarea,label select{display:block}input[type="image"],input[type="checkbox"],input[type="radio"]{width:auto;height:auto;padding:0;margin:3px 0;*margin-top:0;line-height:normal;cursor:pointer;background-color:transparent;border:0 \9;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}input[type="image"]{border:0}input[type="file"]{width:auto;padding:initial;line-height:initial;background-color:#fff;background-color:initial;border:initial;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}input[type="button"],input[type="reset"],input[type="submit"]{width:auto;height:auto}select,input[type="file"]{height:28px;*margin-top:4px;line-height:28px}input[type="file"]{line-height:18px \9}select{width:220px;background-color:#fff}select[multiple],select[size]{height:auto}input[type="image"]{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}textarea{height:auto}input[type="hidden"]{display:none}.radio,.checkbox{min-height:18px;padding-left:18px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-18px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}input,textarea{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-ms-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}input:focus,textarea: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="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus,select:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.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,textarea,.uneditable-input{margin-left:0}input.span12,textarea.span12,.uneditable-input.span12{width:930px}input.span11,textarea.span11,.uneditable-input.span11{width:850px}input.span10,textarea.span10,.uneditable-input.span10{width:770px}input.span9,textarea.span9,.uneditable-input.span9{width:690px}input.span8,textarea.span8,.uneditable-input.span8{width:610px}input.span7,textarea.span7,.uneditable-input.span7{width:530px}input.span6,textarea.span6,.uneditable-input.span6{width:450px}input.span5,textarea.span5,.uneditable-input.span5{width:370px}input.span4,textarea.span4,.uneditable-input.span4{width:290px}input.span3,textarea.span3,.uneditable-input.span3{width:210px}input.span2,textarea.span2,.uneditable-input.span2{width:130px}input.span1,textarea.span1,.uneditable-input.span1{width:50px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee;border-color:#ddd}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning>label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853;border-color:#c09853}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:0 0 6px #dbc59e;-moz-box-shadow:0 0 6px #dbc59e;box-shadow:0 0 6px #dbc59e}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.control-group.error>label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48;border-color:#b94a48}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:0 0 6px #d59392;-moz-box-shadow:0 0 6px #d59392;box-shadow:0 0 6px #d59392}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.control-group.success>label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847;border-color:#468847}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:0 0 6px #7aba7b;-moz-box-shadow:0 0 6px #7aba7b;box-shadow:0 0 6px #7aba7b}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847}input:focus:required:invalid,textarea:focus:required:invalid,select:focus:required:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:required:invalid:focus,textarea:focus:required:invalid:focus,select:focus:required:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:17px 20px 18px;margin-top:18px;margin-bottom:18px;background-color:#f5f5f5;border-top:1px solid #ddd;*zoom:1}.form-actions:before,.form-actions:after{display:table;content:""}.form-actions:after{clear:both}.uneditable-input{overflow:hidden;white-space:nowrap;cursor:not-allowed;background-color:#fff;border-color:#eee;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}:-moz-placeholder{color:#999}::-webkit-input-placeholder{color:#999}.help-block,.help-inline{color:#555}.help-block{display:block;margin-bottom:9px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-prepend,.input-append{margin-bottom:5px}.input-prepend input,.input-append input,.input-prepend select,.input-append select,.input-prepend .uneditable-input,.input-append .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:middle;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-prepend input:focus,.input-append input:focus,.input-prepend select:focus,.input-append select:focus,.input-prepend .uneditable-input:focus,.input-append .uneditable-input:focus{z-index:2}.input-prepend .uneditable-input,.input-append .uneditable-input{border-left-color:#ccc}.input-prepend .add-on,.input-append .add-on{display:inline-block;width:auto;height:18px;min-width:16px;padding:4px 5px;font-weight:normal;line-height:18px;text-align:center;text-shadow:0 1px 0 #fff;vertical-align:middle;background-color:#eee;border:1px solid #ccc}.input-prepend .add-on,.input-append .add-on,.input-prepend .btn,.input-append .btn{margin-left:-1px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend .active,.input-append .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:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-append .uneditable-input{border-right-color:#ccc;border-left-color:#eee}.input-append .add-on:last-child,.input-append .btn:last-child{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:14px;-moz-border-radius:14px;border-radius:14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:9px}legend+.control-group{margin-top:18px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:18px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:140px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:160px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:160px}.form-horizontal .help-block{margin-top:9px;margin-bottom:0}.form-horizontal .form-actions{padding-left:160px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:18px}.table th,.table td{padding:8px;line-height:18px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-chil