ASTERIXDB-1375 - New Query UI implementation

Implemented UI using bootstrap according to specification
Wrote the client side logic using Angular JS
Using CodeMirror and custom mode to do syntax highlighting.
Modified HTTP API to support CORS.
Custom servlet to host new Web Ui on port 19006.
CHANGES
Changed resource folder name to "queryui"
Fixed SonarQube problems
Dynamic HTTP API port, instead of hardcoded value
... Jul 5 2016
Using JSONObject for Dynamic HTTP APi Port
Improved Animations
Added Collapsable side panal
Updated LICENSE file
... Aug 7 2016
Fixed Logger level to Error
... Aug 16 2016
Rebased
Change-Id: Id9aa6fb0a6bebaaa58f288e621dbfe76a604c689
Reviewed-on: https://asterix-gerrit.ics.uci.edu/935
Sonar-Qube: Jenkins <jenk...@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <jenk...@fulliautomatix.ics.uci.edu>
Integration-Tests: Jenkins <jenk...@fulliautomatix.ics.uci.edu>
Reviewed-by: Ian Maxon <ima...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/a4815d35
Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/a4815d35
Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/a4815d35

Branch: refs/heads/master
Commit: a4815d35375e249615e76679bbd8a0dd47f7b129
Parents: 7a180bc
Author: Kaveen Rodrigo <u.k.k.rodr...@gmail.com>
Authored: Wed Aug 17 23:30:49 2016 +0530
Committer: Ian Maxon <ima...@apache.org>
Committed: Fri Aug 19 16:00:24 2016 -0700

----------------------------------------------------------------------
 .gitignore                                      |    2 +
 asterixdb/LICENSE                               |  160 +
 .../http/servlet/QueryWebInterfaceServlet.java  |  133 +
 .../api/http/servlet/RESTAPIServlet.java        |    4 +
 .../bootstrap/CCApplicationEntryPoint.java      |   19 +-
 .../queryui/css/bootstrap-theme.min.css         |    6 +
 .../resources/queryui/css/bootstrap.min.css     |    6 +
 .../main/resources/queryui/css/codemirror.css   |  337 +
 .../queryui/css/json-formatter.min.css          |    6 +
 .../src/main/resources/queryui/css/master.css   |  241 +
 .../fonts/glyphicons-halflings-regular.eot      |  Bin 0 -> 20127 bytes
 .../fonts/glyphicons-halflings-regular.svg      |  288 +
 .../fonts/glyphicons-halflings-regular.ttf      |  Bin 0 -> 45404 bytes
 .../fonts/glyphicons-halflings-regular.woff     |  Bin 0 -> 23424 bytes
 .../fonts/glyphicons-halflings-regular.woff2    |  Bin 0 -> 18028 bytes
 .../queryui/img/asterixlogo-collapsed.png       |  Bin 0 -> 9255 bytes
 .../resources/queryui/img/finalasterixlogo.png  |  Bin 0 -> 37859 bytes
 .../main/resources/queryui/js/angular.min.js    |  314 +
 .../src/main/resources/queryui/js/aql-mode.js   |   66 +
 .../main/resources/queryui/js/bootstrap.min.js  |    7 +
 .../src/main/resources/queryui/js/codemirror.js | 8908 ++++++++++++++++++
 .../src/main/resources/queryui/js/javascript.js |  748 ++
 .../resources/queryui/js/jquery-1.12.4.min.js   |    5 +
 .../resources/queryui/js/json-formatter.min.js  |    7 +
 .../src/main/resources/queryui/js/main.js       |  245 +
 .../main/resources/queryui/js/ui-codemirror.js  |  150 +
 .../src/main/resources/queryui/queryui.html     |  159 +
 .../config/AsterixExternalProperties.java       |    8 +
 .../resources/conf/asterix-configuration.xml    |    7 +
 29 files changed, 11825 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/a4815d35/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
index b4129bf..11d149b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -48,5 +48,7 @@ output
 tmp
 dist
 *~
+.DS_Store
 *.swp
 .m2*
+ß
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/a4815d35/asterixdb/LICENSE
----------------------------------------------------------------------
diff --git a/asterixdb/LICENSE b/asterixdb/LICENSE
index 578fa00..427fa0a 100644
--- a/asterixdb/LICENSE
+++ b/asterixdb/LICENSE
@@ -346,3 +346,163 @@ Released under MIT License
 
 Source: https://github.com/anomal/RainbowVis-JS
 
+For portions of the AsterixDB QueryUI at:
+asterix-app/src/main/resources/queryui/js/jquery-1.12.4.min.js
+
+    Copyright jQuery Foundation and other contributors, https://jquery.org/
+
+    This software consists of voluntary contributions made by many
+    individuals. For exact contribution history, see the revision history
+    available at https://github.com/jquery/jquery
+
+    The following license applies to all parts of this software except as
+    documented below:
+
+    ====
+
+    Permission is hereby granted, free of charge, to any person obtaining
+    a copy of this software and associated documentation files (the
+    "Software"), to deal in the Software without restriction, including
+    without limitation the rights to use, copy, modify, merge, publish,
+    distribute, sublicense, and/or sell copies of the Software, and to
+    permit persons to whom the Software is furnished to do so, subject to
+    the following conditions:
+
+    The above copyright notice and this permission notice shall be
+    included in all copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+    LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+    OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+    WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+    ====
+
+    All files located in the node_modules and external directories are
+    externally maintained libraries used by this software which have their
+    own licenses; we recommend you read them, as their terms may differ from
+    the terms above.
+
+For more portions of the AsterixDB QueryUI at:
+asterix-app/src/main/resources/queryui/js/bootstrap.min.js
+asterix-app/src/main/resources/queryui/css/bootstrap.min.css
+asterix-app/src/main/resources/queryui/css/bootstrap-theme.min.css
+
+    The MIT License (MIT)
+
+    Copyright (c) 2011-2016 Twitter, Inc.
+
+    Permission is hereby granted, free of charge, to any person obtaining a 
copy
+    of this software and associated documentation files (the "Software"), to 
deal
+    in the Software without restriction, including without limitation the 
rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+    THE SOFTWARE.
+
+For more portions of the AsterixDB QueryUI at:
+asterix-app/src/main/resources/queryui/js/angular.min.js
+
+    The MIT License
+
+    Copyright (c) 2010-2016 Google, Inc. http://angularjs.org
+
+    Permission is hereby granted, free of charge, to any person obtaining a 
copy
+    of this software and associated documentation files (the "Software"), to 
deal
+    in the Software without restriction, including without limitation the 
rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+    THE SOFTWARE.
+
+For more portions of the AsterixDB QueryUI at:
+asterix-app/src/main/resources/queryui/js/codemirror.js
+asterix-app/src/main/resources/queryui/js/javascript.js
+asterix-app/src/main/resources/queryui/css/codemirror.css
+
+    Copyright (C) 2016 by Marijn Haverbeke <mari...@gmail.com> and others
+
+    Permission is hereby granted, free of charge, to any person obtaining a 
copy
+    of this software and associated documentation files (the "Software"), to 
deal
+    in the Software without restriction, including without limitation the 
rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+    THE SOFTWARE.
+    Status API Training Shop Blog About
+
+For more portions of the AsterixDB QueryUI at:
+asterix-app/src/main/resources/queryui/js/ui-codemirror.js
+
+    The MIT License
+
+    Copyright (c) 2012 the AngularUI Team, http://angular-ui.github.com
+
+    Permission is hereby granted, free of charge, to any person obtaining a 
copy
+    of this software and associated documentation files (the "Software"), to 
deal
+    in the Software without restriction, including without limitation the 
rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+    THE SOFTWARE.
+
+For more portions of the AsterixDB QueryUI at:
+asterix-app/src/main/resources/queryui/js/json-formatter.min.js
+asterix-app/src/main/resources/queryui/css/json-formatter.min.css
+
+    Copyright 2014 Mohsen Azimi
+
+    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.

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/a4815d35/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/QueryWebInterfaceServlet.java
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/QueryWebInterfaceServlet.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/QueryWebInterfaceServlet.java
new file mode 100644
index 0000000..92c8e8a
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/QueryWebInterfaceServlet.java
@@ -0,0 +1,133 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+package org.apache.asterix.api.http.servlet;
+
+import org.apache.asterix.common.config.AsterixExternalProperties;
+import org.apache.asterix.om.util.AsterixAppContextInfo;
+import org.apache.commons.io.IOUtils;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.log4j.Level;
+import org.apache.log4j.LogManager;
+import org.codehaus.jettison.json.JSONObject;
+
+public class QueryWebInterfaceServlet extends HttpServlet {
+    private static final long serialVersionUID = 1L;
+    private static final HashMap<String, String> fileMimePair = new 
HashMap<>();
+    private static final Log LOG = 
LogFactory.getLog(QueryWebInterfaceServlet.class);
+
+    public QueryWebInterfaceServlet() {
+        fileMimePair.put("png", "image/png");
+        fileMimePair.put("eot", "application/vnd.ms-fontobject");
+        fileMimePair.put("svg", "image/svg+xml\t");
+        fileMimePair.put("ttf", "application/x-font-ttf");
+        fileMimePair.put("woff", "application/x-font-woff");
+        fileMimePair.put("woff2", "application/x-font-woff");
+        fileMimePair.put("html", "text/html");
+        fileMimePair.put("css", "text/css");
+        fileMimePair.put("js", "application/javascript");
+    }
+
+    @Override
+    public void doGet(HttpServletRequest request, HttpServletResponse 
response) throws IOException, ServletException {
+        String resourcePath = null;
+        String requestURI = request.getRequestURI();
+
+        if ("/".equals(requestURI)) {
+            response.setContentType("text/html");
+            resourcePath = "/queryui/queryui.html";
+        } else {
+            resourcePath = requestURI;
+        }
+
+        try (InputStream is = 
APIServlet.class.getResourceAsStream(resourcePath)) {
+            if (is == null) {
+                try {
+                    response.sendError(HttpServletResponse.SC_NOT_FOUND);
+                } catch (IllegalStateException | IOException e) {
+                    LOG.error(e);
+                }
+                return;
+            }
+            // Multiple MIME type support
+            for (Map.Entry<String, String> entry : fileMimePair.entrySet()) {
+                OutputStream out = null;
+                if (resourcePath.endsWith(entry.getKey())) {
+                    response.setContentType(entry.getValue());
+                    try {
+                        out = response.getOutputStream();
+                        IOUtils.copy(is, out);
+
+                    } catch (IOException e) {
+                        LOG.info(e);
+                    } finally {
+
+                        if (out != null) {
+                            IOUtils.closeQuietly(out);
+                        }
+                        IOUtils.closeQuietly(is);
+
+                    }
+                    return;
+                }
+            }
+            try {
+                response.sendError(HttpServletResponse.SC_BAD_REQUEST);
+            } catch (IllegalStateException | IOException e) {
+                LOG.error(e);
+            }
+        }
+    }
+
+    @Override
+    public void doPost(HttpServletRequest request, HttpServletResponse 
response) throws IOException {
+        response.setCharacterEncoding("utf-8");
+        response.setContentType("application/json");
+        AsterixExternalProperties externalProperties = 
AsterixAppContextInfo.getInstance().getExternalProperties();
+        JSONObject obj = new JSONObject();
+        try {
+            PrintWriter out = response.getWriter();
+            obj.put("api_port", 
String.valueOf(externalProperties.getAPIServerPort()));
+            out.println(obj.toString());
+            return;
+        } catch (Exception e) {
+            LOG.error(e);
+        }
+
+        try {
+            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+        } catch (IllegalStateException | IOException e) {
+            LOG.error(e);
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/a4815d35/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/RESTAPIServlet.java
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/RESTAPIServlet.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/RESTAPIServlet.java
index 1045124..81bf21d 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/RESTAPIServlet.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/servlet/RESTAPIServlet.java
@@ -168,6 +168,10 @@ abstract class RESTAPIServlet extends HttpServlet {
 
     public void handleRequest(HttpServletRequest request, HttpServletResponse 
response, String query)
             throws IOException {
+        // enable cross-origin resource sharing
+        response.addHeader("Access-Control-Allow-Origin", "*");
+        response.addHeader("Access-Control-Allow-Headers", "Origin, 
X-Requested-With, Content-Type, Accept");
+
         SessionConfig sessionConfig = initResponse(request, response);
         QueryTranslator.ResultDelivery resultDelivery = 
whichResultDelivery(request);
 

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/a4815d35/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplicationEntryPoint.java
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplicationEntryPoint.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplicationEntryPoint.java
index 28cbe11..3ab6f3d 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplicationEntryPoint.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplicationEntryPoint.java
@@ -26,6 +26,7 @@ import java.util.logging.Logger;
 import javax.servlet.Servlet;
 
 import org.apache.asterix.api.http.servlet.APIServlet;
+import org.apache.asterix.api.http.servlet.QueryWebInterfaceServlet;
 import org.apache.asterix.api.http.servlet.AQLAPIServlet;
 import org.apache.asterix.api.http.servlet.ClusterAPIServlet;
 import org.apache.asterix.api.http.servlet.ConnectorAPIServlet;
@@ -129,6 +130,7 @@ public class CCApplicationEntryPoint implements 
ICCApplicationEntryPoint {
         serverList.add(setupWebServer(externalProperties));
         serverList.add(setupJSONAPIServer(externalProperties));
         serverList.add(setupFeedServer(externalProperties));
+        serverList.add(setupQueryWebServer(externalProperties));
         return serverList;
     }
 
@@ -207,6 +209,21 @@ public class CCApplicationEntryPoint implements 
ICCApplicationEntryPoint {
         return jsonAPIServer;
     }
 
+    private Server setupQueryWebServer(AsterixExternalProperties 
externalProperties) throws Exception {
+
+        Server queryWebServer = new 
Server(externalProperties.getQueryWebInterfacePort());
+
+        ServletContextHandler context = new 
ServletContextHandler(ServletContextHandler.SESSIONS);
+        context.setContextPath("/");
+
+        IHyracksClientConnection hcc = getNewHyracksClientConnection();
+        context.setAttribute(HYRACKS_CONNECTION_ATTR, hcc);
+
+        queryWebServer.setHandler(context);
+        context.addServlet(new ServletHolder(new QueryWebInterfaceServlet()), 
"/*");
+        return queryWebServer;
+    }
+
     protected void addServlet(ServletContextHandler context, Servlet servlet, 
String path) {
         context.addServlet(new ServletHolder(servlet), path);
     }
@@ -277,4 +294,4 @@ public class CCApplicationEntryPoint implements 
ICCApplicationEntryPoint {
                     ClusterState.ACTIVE);
         }
     }
-}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/a4815d35/asterixdb/asterix-app/src/main/resources/queryui/css/bootstrap-theme.min.css
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/resources/queryui/css/bootstrap-theme.min.css 
b/asterixdb/asterix-app/src/main/resources/queryui/css/bootstrap-theme.min.css
new file mode 100644
index 0000000..dc95d8e
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/main/resources/queryui/css/bootstrap-theme.min.css
@@ -0,0 +1,6 @@
+/*!
+ * Bootstrap v3.3.6 (http://getbootstrap.com)
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ 
*/.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0
 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 
1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 
1px 
rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset
 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px 
rgba(0,0,0,.125)}.btn-danger.disabled,.btn-danger[disabled],.btn-default.disabled,.btn-default[disabled],.btn-info.disabled,.btn-info[disabled],.btn-primary.disabled,.btn-primary[disabled],.btn-success.disabled,.btn-success[disabled],.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled]
 .btn-danger,fieldset[disabled] .btn-default,fieldset[disabled] 
.btn-info,fieldset[disabled] .btn-primary,fieldset[disab
 led] .btn-success,fieldset[disabled] 
.btn-warning{-webkit-box-shadow:none;box-shadow:none}.btn-danger 
.badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success 
.badge,.btn-warning 
.badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{text-shadow:0
 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 
100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 
100%);background-image:-webkit-gradient(linear,left top,left 
bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 
0,#e0e0e0 
100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',
 endColorstr='#ffe0e0e0', 
GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:focus,.btn-default:hover{background-color:#e0e0e0;background-position:0
 -15px}.btn-default.active,.btn-default:active{background-color:#e0e0e0;border-c
 
olor:#dbdbdb}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled]
 .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] 
.btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] 
.btn-default:focus,fieldset[disabled] 
.btn-default:hover{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7
 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 
100%);background-image:-webkit-gradient(linear,left top,left 
bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to 
bottom,#337ab7 0,#265a88 
100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7',
 
 endColorstr='#ff265a88', 
GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:focus,.btn-primary:hover{background-color:#265a88;background-position:0
 
-15px}.btn-primary.active,.btn-primary:active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled]
 .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] 
.btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] 
.btn-primary:focus,fieldset[disabled] 
.btn-primary:hover{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5c
 b85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 
100%);background-image:-webkit-gradient(linear,left top,left 
bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to 
bottom,#5cb85c 0,#419641 
100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c',
 endColorstr='#ff419641', 
GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:focus,.btn-success:hover{background-color:#419641;background-position:0
 
-15px}.btn-success.active,.btn-success:active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disab
 led] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] 
.btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] 
.btn-success:focus,fieldset[disabled] 
.btn-success:hover{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de
 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 
100%);background-image:-webkit-gradient(linear,left top,left 
bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to 
bottom,#5bc0de 0,#2aabd2 
100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',
 endColorstr='#ff2aabd2', 
GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:focus,.btn-info:hover{background-color:#2aabd2;background-position:0
 
-15px}.btn-info.active,.btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info.disabled.active,
 
.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled]
 .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] 
.btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] 
.btn-info:focus,fieldset[disabled] 
.btn-info:hover{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e
 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 
100%);background-image:-webkit-gradient(linear,left top,left 
bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to 
bottom,#f0ad4e 0,#eb9316 
100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e',
 endColorstr='#ffeb9316', 
GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);backgr
 
ound-repeat:repeat-x;border-color:#e38d13}.btn-warning:focus,.btn-warning:hover{background-color:#eb9316;background-position:0
 
-15px}.btn-warning.active,.btn-warning:active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled]
 .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] 
.btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] 
.btn-warning:focus,fieldset[disabled] 
.btn-warning:hover{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f
 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 
100%);background-image:-webkit-gra
 dient(linear,left top,left 
bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to 
bottom,#d9534f 0,#c12e2a 
100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f',
 endColorstr='#ffc12e2a', 
GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:focus,.btn-danger:hover{background-color:#c12e2a;background-position:0
 
-15px}.btn-danger.active,.btn-danger:active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled]
 .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] 
.btn-danger.focus,fieldset[disabled] .btn-danger:active
 ,fieldset[disabled] .btn-danger:focus,fieldset[disabled] 
.btn-danger:hover{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0
 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px 
rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5
 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 
100%);background-image:-webkit-gradient(linear,left top,left 
bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to 
bottom,#f5f5f5 0,#e8e8e8 
100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',
 endColorstr='#ffe8e8e8', 
GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7
 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 
100%);backgroun
 d-image:-webkit-gradient(linear,left top,left 
bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to 
bottom,#337ab7 0,#2e6da4 
100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7',
 endColorstr='#ff2e6da4', 
GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff
 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 
100%);background-image:-webkit-gradient(linear,left top,left 
bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 
0,#f8f8f8 
100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',
 endColorstr='#fff8f8f8', 
GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset
 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 
1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default 
.navbar-nav>
 .active>a,.navbar-default 
.navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#dbdbdb 
0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 
100%);background-image:-webkit-gradient(linear,left top,left 
bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to 
bottom,#dbdbdb 0,#e2e2e2 
100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb',
 endColorstr='#ffe2e2e2', 
GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px 
rgba(0,0,0,.075);box-shadow:inset 0 3px 9px 
rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 
rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c
 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 
100%);background-image:-webkit-gradient(linear,left top,left 
bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to 
bottom,#3c3c3c 0,#222 
100%);filter:progid:DXImageTransform.Microsoft.gradient(start
 Colorstr='#ff3c3c3c', endColorstr='#ff222222', 
GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px}.navbar-inverse
 .navbar-nav>.active>a,.navbar-inverse 
.navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 
0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 
100%);background-image:-webkit-gradient(linear,left top,left 
bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to 
bottom,#080808 0,#0f0f0f 
100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808',
 endColorstr='#ff0f0f0f', 
GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px 
rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse 
.navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 
rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media
 (max-width:767px){.navbar .navbar-nav .op
 en .dropdown-menu>.active>a,.navbar .navbar-nav .open 
.dropdown-menu>.active>a:focus,.navbar .navbar-nav .open 
.dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7
 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 
100%);background-image:-webkit-gradient(linear,left top,left 
bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to 
bottom,#337ab7 0,#2e6da4 
100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7',
 endColorstr='#ff2e6da4', 
GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 
rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 
1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 
2px 
rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8
 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 
100%);background-image:-webkit-gradient(linear,left top,left bott
 om,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to 
bottom,#dff0d8 0,#c8e5bc 
100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8',
 endColorstr='#ffc8e5bc', 
GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7
 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 
100%);background-image:-webkit-gradient(linear,left top,left 
bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to 
bottom,#d9edf7 0,#b9def0 
100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7',
 endColorstr='#ffb9def0', 
GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3
 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 
100%);background-image:-webkit-gradient(linear,left top,left 
bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradie
 nt(to bottom,#fcf8e3 0,#f8efc0 
100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3',
 endColorstr='#fff8efc0', 
GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede
 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 
100%);background-image:-webkit-gradient(linear,left top,left 
bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to 
bottom,#f2dede 0,#e7c3c3 
100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede',
 endColorstr='#ffe7c3c3', 
GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb
 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 
100%);background-image:-webkit-gradient(linear,left top,left 
bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to 
bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTrans
 form.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', 
GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7
 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 
100%);background-image:-webkit-gradient(linear,left top,left 
bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to 
bottom,#337ab7 0,#286090 
100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7',
 endColorstr='#ff286090', 
GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c
 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 
100%);background-image:-webkit-gradient(linear,left top,left 
bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to 
bottom,#5cb85c 0,#449d44 
100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c',
 endColorstr='#ff449d44', GradientType=0);b
 
ackground-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de
 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 
100%);background-image:-webkit-gradient(linear,left top,left 
bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to 
bottom,#5bc0de 0,#31b0d5 
100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',
 endColorstr='#ff31b0d5', 
GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e
 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 
100%);background-image:-webkit-gradient(linear,left top,left 
bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to 
bottom,#f0ad4e 0,#ec971f 
100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e',
 endColorstr='#ffec971f', 
GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(
 top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 
0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left 
bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to 
bottom,#d9534f 0,#c9302c 
100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f',
 endColorstr='#ffc9302c', 
GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15)
 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 
50%,rgba(255,255,255,.15) 75%,transparent 
75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15)
 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 
50%,rgba(255,255,255,.15) 75%,transparent 
75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 
25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 
50%,rgba(255,255,255,.15) 75%,transparent 
75%,transparent)}.list-group{border-radius:4px;-webkit
 -box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px 
rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{text-shadow:0
 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 
100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 
100%);background-image:-webkit-gradient(linear,left top,left 
bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to 
bottom,#337ab7 0,#2b669a 
100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7',
 endColorstr='#ff2b669a', 
GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active
 .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover 
.badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px 
rgba(0,0,0,.05);box-shadow:0 1px 2px 
rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5
 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f
 5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left 
bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to 
bottom,#f5f5f5 0,#e8e8e8 
100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',
 endColorstr='#ffe8e8e8', 
GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7
 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 
100%);background-image:-webkit-gradient(linear,left top,left 
bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to 
bottom,#337ab7 0,#2e6da4 
100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7',
 endColorstr='#ff2e6da4', 
GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8
 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 
100%);background-image:-webkit-gradient(linear,left t
 op,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to 
bottom,#dff0d8 0,#d0e9c6 
100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8',
 endColorstr='#ffd0e9c6', 
GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7
 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 
100%);background-image:-webkit-gradient(linear,left top,left 
bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to 
bottom,#d9edf7 0,#c4e3f3 
100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7',
 endColorstr='#ffc4e3f3', 
GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3
 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 
100%);background-image:-webkit-gradient(linear,left top,left 
bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradie
 nt(to bottom,#fcf8e3 0,#faf2cc 
100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3',
 endColorstr='#fffaf2cc', 
GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede
 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 
100%);background-image:-webkit-gradient(linear,left top,left 
bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to 
bottom,#f2dede 0,#ebcccc 
100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede',
 endColorstr='#ffebcccc', 
GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8
 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 
100%);background-image:-webkit-gradient(linear,left top,left 
bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to 
bottom,#e8e8e8 0,#f5f5f5 
100%);filter:progid:DXImageTransform.Microsoft.gradient(startCo
 lorstr='#ffe8e8e8', endColorstr='#fff5f5f5', 
GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset
 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 
3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)}
+/*# sourceMappingURL=bootstrap-theme.min.css.map */
\ No newline at end of file

Reply via email to