##// END OF EJS Templates
Merge pull request #7128 from minrk/more-v-less-m...
Thomas Kluyver -
r19383:aacc2374 merge
parent child Browse files
Show More
@@ -0,0 +1,202 b''
1 // Copyright (c) IPython Development Team.
2 // Distributed under the terms of the Modified BSD License.
3
4 define([
5 'base/js/namespace',
6 'jquery',
7 'base/js/utils',
8 'base/js/dialog',
9 'base/js/keyboard',
10 'moment',
11 ], function(IPython, $, utils, dialog, keyboard, moment) {
12 "use strict";
13
14 var SaveWidget = function (selector, options) {
15 this.editor = undefined;
16 this.selector = selector;
17 this.events = options.events;
18 this.editor = options.editor;
19 this._last_modified = undefined;
20 this.keyboard_manager = options.keyboard_manager;
21 if (this.selector !== undefined) {
22 this.element = $(selector);
23 this.bind_events();
24 }
25 };
26
27
28 SaveWidget.prototype.bind_events = function () {
29 var that = this;
30 this.element.find('span.filename').click(function () {
31 that.rename();
32 });
33 this.events.on('file_loaded.Editor', function (evt, model) {
34 that.update_filename(model.name);
35 that.update_document_title(model.name);
36 that.update_last_modified(model.last_modified);
37 });
38 this.events.on('file_saved.Editor', function (evt, model) {
39 that.update_filename(model.name);
40 that.update_document_title(model.name);
41 that.update_last_modified(model.last_modified);
42 });
43 this.events.on('file_renamed.Editor', function (evt, model) {
44 that.update_filename(model.name);
45 that.update_document_title(model.name);
46 that.update_address_bar(model.path);
47 });
48 this.events.on('file_save_failed.Editor', function () {
49 that.set_save_status('Save Failed!');
50 });
51 };
52
53
54 SaveWidget.prototype.rename = function (options) {
55 options = options || {};
56 var that = this;
57 var dialog_body = $('<div/>').append(
58 $("<p/>").addClass("rename-message")
59 .text('Enter a new filename:')
60 ).append(
61 $("<br/>")
62 ).append(
63 $('<input/>').attr('type','text').attr('size','25').addClass('form-control')
64 .val(that.editor.get_filename())
65 );
66 var d = dialog.modal({
67 title: "Rename File",
68 body: dialog_body,
69 buttons : {
70 "OK": {
71 class: "btn-primary",
72 click: function () {
73 var new_name = d.find('input').val();
74 d.find('.rename-message').text("Renaming...");
75 d.find('input[type="text"]').prop('disabled', true);
76 that.editor.rename(new_name).then(
77 function () {
78 d.modal('hide');
79 }, function (error) {
80 d.find('.rename-message').text(error.message || 'Unknown error');
81 d.find('input[type="text"]').prop('disabled', false).focus().select();
82 }
83 );
84 return false;
85 }
86 },
87 "Cancel": {}
88 },
89 open : function () {
90 // Upon ENTER, click the OK button.
91 d.find('input[type="text"]').keydown(function (event) {
92 if (event.which === keyboard.keycodes.enter) {
93 d.find('.btn-primary').first().click();
94 return false;
95 }
96 });
97 d.find('input[type="text"]').focus().select();
98 }
99 });
100 };
101
102
103 SaveWidget.prototype.update_filename = function (filename) {
104 this.element.find('span.filename').text(filename);
105 };
106
107 SaveWidget.prototype.update_document_title = function (filename) {
108 document.title = filename;
109 };
110
111 SaveWidget.prototype.update_address_bar = function (path) {
112 var state = {path : path};
113 window.history.replaceState(state, "", utils.url_join_encode(
114 this.editor.base_url,
115 "edit",
116 path)
117 );
118 };
119
120 SaveWidget.prototype.update_last_modified = function (last_modified) {
121 if (last_modified) {
122 this._last_modified = new Date(last_modified);
123 } else {
124 this._last_modified = null;
125 }
126 this._render_last_modified();
127 };
128
129 SaveWidget.prototype._render_last_modified = function () {
130 /** actually set the text in the element, from our _last_modified value
131
132 called directly, and periodically in timeouts.
133 */
134 this._schedule_render_last_modified();
135 var el = this.element.find('span.last_modified');
136 if (!this._last_modified) {
137 el.text('').attr('title', 'never saved');
138 return;
139 }
140 var chkd = moment(this._last_modified);
141 var long_date = chkd.format('llll');
142 var human_date;
143 var tdelta = Math.ceil(new Date() - this._last_modified);
144 if (tdelta < 24 * H){
145 // less than 24 hours old, use relative date
146 human_date = chkd.fromNow();
147 } else {
148 // otherwise show calendar
149 // otherwise update every hour and show
150 // <Today | yesterday|...> at hh,mm,ss
151 human_date = chkd.calendar();
152 }
153 el.text(human_date).attr('title', long_date);
154 };
155
156
157 var S = 1000;
158 var M = 60*S;
159 var H = 60*M;
160 var thresholds = {
161 s: 45 * S,
162 m: 45 * M,
163 h: 22 * H
164 };
165 var _timeout_from_dt = function (ms) {
166 /** compute a timeout to update the last-modified timeout
167
168 based on the delta in milliseconds
169 */
170 if (ms < thresholds.s) {
171 return 5 * S;
172 } else if (ms < thresholds.m) {
173 return M;
174 } else {
175 return 5 * M;
176 }
177 };
178
179 SaveWidget.prototype._schedule_render_last_modified = function () {
180 /** schedule the next update to relative date
181
182 periodically updated, so short values like 'a few seconds ago' don't get stale.
183 */
184 var that = this;
185 if (!this._last_modified) {
186 return;
187 }
188 if ((this._last_modified_timeout)) {
189 clearTimeout(this._last_modified_timeout);
190 }
191 var dt = Math.ceil(new Date() - this._last_modified);
192 if (dt < 24 * H) {
193 this._last_modified_timeout = setTimeout(
194 $.proxy(this._render_last_modified, this),
195 _timeout_from_dt(dt)
196 );
197 }
198 };
199
200 return {'SaveWidget': SaveWidget};
201
202 });
@@ -0,0 +1,9 b''
1 #texteditor-container {
2 border-bottom: 1px solid #ccc;
3 }
4
5 #filename {
6 font-size: 16pt;
7 display: table;
8 padding: 0px 5px;
9 }
@@ -0,0 +1,14 b''
1 .selected-keymap {
2 i.fa {
3 padding: 0px 5px;
4 }
5 i.fa:before {
6 content: @fa-var-check;
7 }
8 }
9
10 #mode-menu {
11 // truncate mode-menu, so it doesn't get longer than the screen
12 overflow: auto;
13 max-height: 20em;
14 } No newline at end of file
@@ -0,0 +1,7 b''
1 /*!
2 *
3 * IPython text editor webapp
4 *
5 */
6 @import "menubar.less";
7 @import "edit.less";
@@ -1,507 +1,508 b''
1 """Base Tornado handlers for the notebook server."""
1 """Base Tornado handlers for the notebook server."""
2
2
3 # Copyright (c) IPython Development Team.
3 # Copyright (c) IPython Development Team.
4 # Distributed under the terms of the Modified BSD License.
4 # Distributed under the terms of the Modified BSD License.
5
5
6 import functools
6 import functools
7 import json
7 import json
8 import logging
8 import logging
9 import os
9 import os
10 import re
10 import re
11 import sys
11 import sys
12 import traceback
12 import traceback
13 try:
13 try:
14 # py3
14 # py3
15 from http.client import responses
15 from http.client import responses
16 except ImportError:
16 except ImportError:
17 from httplib import responses
17 from httplib import responses
18
18
19 from jinja2 import TemplateNotFound
19 from jinja2 import TemplateNotFound
20 from tornado import web
20 from tornado import web
21
21
22 try:
22 try:
23 from tornado.log import app_log
23 from tornado.log import app_log
24 except ImportError:
24 except ImportError:
25 app_log = logging.getLogger()
25 app_log = logging.getLogger()
26
26
27 import IPython
27 import IPython
28 from IPython.utils.sysinfo import get_sys_info
28 from IPython.utils.sysinfo import get_sys_info
29
29
30 from IPython.config import Application
30 from IPython.config import Application
31 from IPython.utils.path import filefind
31 from IPython.utils.path import filefind
32 from IPython.utils.py3compat import string_types
32 from IPython.utils.py3compat import string_types
33 from IPython.html.utils import is_hidden, url_path_join, url_escape
33 from IPython.html.utils import is_hidden, url_path_join, url_escape
34
34
35 from IPython.html.services.security import csp_report_uri
35 from IPython.html.services.security import csp_report_uri
36
36
37 #-----------------------------------------------------------------------------
37 #-----------------------------------------------------------------------------
38 # Top-level handlers
38 # Top-level handlers
39 #-----------------------------------------------------------------------------
39 #-----------------------------------------------------------------------------
40 non_alphanum = re.compile(r'[^A-Za-z0-9]')
40 non_alphanum = re.compile(r'[^A-Za-z0-9]')
41
41
42 sys_info = json.dumps(get_sys_info())
42 sys_info = json.dumps(get_sys_info())
43
43
44 class AuthenticatedHandler(web.RequestHandler):
44 class AuthenticatedHandler(web.RequestHandler):
45 """A RequestHandler with an authenticated user."""
45 """A RequestHandler with an authenticated user."""
46
46
47 def set_default_headers(self):
47 def set_default_headers(self):
48 headers = self.settings.get('headers', {})
48 headers = self.settings.get('headers', {})
49
49
50 if "Content-Security-Policy" not in headers:
50 if "Content-Security-Policy" not in headers:
51 headers["Content-Security-Policy"] = (
51 headers["Content-Security-Policy"] = (
52 "frame-ancestors 'self'; "
52 "frame-ancestors 'self'; "
53 # Make sure the report-uri is relative to the base_url
53 # Make sure the report-uri is relative to the base_url
54 "report-uri " + url_path_join(self.base_url, csp_report_uri) + ";"
54 "report-uri " + url_path_join(self.base_url, csp_report_uri) + ";"
55 )
55 )
56
56
57 # Allow for overriding headers
57 # Allow for overriding headers
58 for header_name,value in headers.items() :
58 for header_name,value in headers.items() :
59 try:
59 try:
60 self.set_header(header_name, value)
60 self.set_header(header_name, value)
61 except Exception as e:
61 except Exception as e:
62 # tornado raise Exception (not a subclass)
62 # tornado raise Exception (not a subclass)
63 # if method is unsupported (websocket and Access-Control-Allow-Origin
63 # if method is unsupported (websocket and Access-Control-Allow-Origin
64 # for example, so just ignore)
64 # for example, so just ignore)
65 self.log.debug(e)
65 self.log.debug(e)
66
66
67 def clear_login_cookie(self):
67 def clear_login_cookie(self):
68 self.clear_cookie(self.cookie_name)
68 self.clear_cookie(self.cookie_name)
69
69
70 def get_current_user(self):
70 def get_current_user(self):
71 if self.login_handler is None:
71 if self.login_handler is None:
72 return 'anonymous'
72 return 'anonymous'
73 return self.login_handler.get_user(self)
73 return self.login_handler.get_user(self)
74
74
75 @property
75 @property
76 def cookie_name(self):
76 def cookie_name(self):
77 default_cookie_name = non_alphanum.sub('-', 'username-{}'.format(
77 default_cookie_name = non_alphanum.sub('-', 'username-{}'.format(
78 self.request.host
78 self.request.host
79 ))
79 ))
80 return self.settings.get('cookie_name', default_cookie_name)
80 return self.settings.get('cookie_name', default_cookie_name)
81
81
82 @property
82 @property
83 def logged_in(self):
83 def logged_in(self):
84 """Is a user currently logged in?"""
84 """Is a user currently logged in?"""
85 user = self.get_current_user()
85 user = self.get_current_user()
86 return (user and not user == 'anonymous')
86 return (user and not user == 'anonymous')
87
87
88 @property
88 @property
89 def login_handler(self):
89 def login_handler(self):
90 """Return the login handler for this application, if any."""
90 """Return the login handler for this application, if any."""
91 return self.settings.get('login_handler_class', None)
91 return self.settings.get('login_handler_class', None)
92
92
93 @property
93 @property
94 def login_available(self):
94 def login_available(self):
95 """May a user proceed to log in?
95 """May a user proceed to log in?
96
96
97 This returns True if login capability is available, irrespective of
97 This returns True if login capability is available, irrespective of
98 whether the user is already logged in or not.
98 whether the user is already logged in or not.
99
99
100 """
100 """
101 if self.login_handler is None:
101 if self.login_handler is None:
102 return False
102 return False
103 return bool(self.login_handler.login_available(self.settings))
103 return bool(self.login_handler.login_available(self.settings))
104
104
105
105
106 class IPythonHandler(AuthenticatedHandler):
106 class IPythonHandler(AuthenticatedHandler):
107 """IPython-specific extensions to authenticated handling
107 """IPython-specific extensions to authenticated handling
108
108
109 Mostly property shortcuts to IPython-specific settings.
109 Mostly property shortcuts to IPython-specific settings.
110 """
110 """
111
111
112 @property
112 @property
113 def config(self):
113 def config(self):
114 return self.settings.get('config', None)
114 return self.settings.get('config', None)
115
115
116 @property
116 @property
117 def log(self):
117 def log(self):
118 """use the IPython log by default, falling back on tornado's logger"""
118 """use the IPython log by default, falling back on tornado's logger"""
119 if Application.initialized():
119 if Application.initialized():
120 return Application.instance().log
120 return Application.instance().log
121 else:
121 else:
122 return app_log
122 return app_log
123
123
124 #---------------------------------------------------------------
124 #---------------------------------------------------------------
125 # URLs
125 # URLs
126 #---------------------------------------------------------------
126 #---------------------------------------------------------------
127
127
128 @property
128 @property
129 def version_hash(self):
129 def version_hash(self):
130 """The version hash to use for cache hints for static files"""
130 """The version hash to use for cache hints for static files"""
131 return self.settings.get('version_hash', '')
131 return self.settings.get('version_hash', '')
132
132
133 @property
133 @property
134 def mathjax_url(self):
134 def mathjax_url(self):
135 return self.settings.get('mathjax_url', '')
135 return self.settings.get('mathjax_url', '')
136
136
137 @property
137 @property
138 def base_url(self):
138 def base_url(self):
139 return self.settings.get('base_url', '/')
139 return self.settings.get('base_url', '/')
140
140
141 @property
141 @property
142 def ws_url(self):
142 def ws_url(self):
143 return self.settings.get('websocket_url', '')
143 return self.settings.get('websocket_url', '')
144
144
145 @property
145 @property
146 def contents_js_source(self):
146 def contents_js_source(self):
147 self.log.debug("Using contents: %s", self.settings.get('contents_js_source',
147 self.log.debug("Using contents: %s", self.settings.get('contents_js_source',
148 'services/contents'))
148 'services/contents'))
149 return self.settings.get('contents_js_source', 'services/contents')
149 return self.settings.get('contents_js_source', 'services/contents')
150
150
151 #---------------------------------------------------------------
151 #---------------------------------------------------------------
152 # Manager objects
152 # Manager objects
153 #---------------------------------------------------------------
153 #---------------------------------------------------------------
154
154
155 @property
155 @property
156 def kernel_manager(self):
156 def kernel_manager(self):
157 return self.settings['kernel_manager']
157 return self.settings['kernel_manager']
158
158
159 @property
159 @property
160 def contents_manager(self):
160 def contents_manager(self):
161 return self.settings['contents_manager']
161 return self.settings['contents_manager']
162
162
163 @property
163 @property
164 def cluster_manager(self):
164 def cluster_manager(self):
165 return self.settings['cluster_manager']
165 return self.settings['cluster_manager']
166
166
167 @property
167 @property
168 def session_manager(self):
168 def session_manager(self):
169 return self.settings['session_manager']
169 return self.settings['session_manager']
170
170
171 @property
171 @property
172 def terminal_manager(self):
172 def terminal_manager(self):
173 return self.settings['terminal_manager']
173 return self.settings['terminal_manager']
174
174
175 @property
175 @property
176 def kernel_spec_manager(self):
176 def kernel_spec_manager(self):
177 return self.settings['kernel_spec_manager']
177 return self.settings['kernel_spec_manager']
178
178
179 @property
179 @property
180 def config_manager(self):
180 def config_manager(self):
181 return self.settings['config_manager']
181 return self.settings['config_manager']
182
182
183 #---------------------------------------------------------------
183 #---------------------------------------------------------------
184 # CORS
184 # CORS
185 #---------------------------------------------------------------
185 #---------------------------------------------------------------
186
186
187 @property
187 @property
188 def allow_origin(self):
188 def allow_origin(self):
189 """Normal Access-Control-Allow-Origin"""
189 """Normal Access-Control-Allow-Origin"""
190 return self.settings.get('allow_origin', '')
190 return self.settings.get('allow_origin', '')
191
191
192 @property
192 @property
193 def allow_origin_pat(self):
193 def allow_origin_pat(self):
194 """Regular expression version of allow_origin"""
194 """Regular expression version of allow_origin"""
195 return self.settings.get('allow_origin_pat', None)
195 return self.settings.get('allow_origin_pat', None)
196
196
197 @property
197 @property
198 def allow_credentials(self):
198 def allow_credentials(self):
199 """Whether to set Access-Control-Allow-Credentials"""
199 """Whether to set Access-Control-Allow-Credentials"""
200 return self.settings.get('allow_credentials', False)
200 return self.settings.get('allow_credentials', False)
201
201
202 def set_default_headers(self):
202 def set_default_headers(self):
203 """Add CORS headers, if defined"""
203 """Add CORS headers, if defined"""
204 super(IPythonHandler, self).set_default_headers()
204 super(IPythonHandler, self).set_default_headers()
205 if self.allow_origin:
205 if self.allow_origin:
206 self.set_header("Access-Control-Allow-Origin", self.allow_origin)
206 self.set_header("Access-Control-Allow-Origin", self.allow_origin)
207 elif self.allow_origin_pat:
207 elif self.allow_origin_pat:
208 origin = self.get_origin()
208 origin = self.get_origin()
209 if origin and self.allow_origin_pat.match(origin):
209 if origin and self.allow_origin_pat.match(origin):
210 self.set_header("Access-Control-Allow-Origin", origin)
210 self.set_header("Access-Control-Allow-Origin", origin)
211 if self.allow_credentials:
211 if self.allow_credentials:
212 self.set_header("Access-Control-Allow-Credentials", 'true')
212 self.set_header("Access-Control-Allow-Credentials", 'true')
213
213
214 def get_origin(self):
214 def get_origin(self):
215 # Handle WebSocket Origin naming convention differences
215 # Handle WebSocket Origin naming convention differences
216 # The difference between version 8 and 13 is that in 8 the
216 # The difference between version 8 and 13 is that in 8 the
217 # client sends a "Sec-Websocket-Origin" header and in 13 it's
217 # client sends a "Sec-Websocket-Origin" header and in 13 it's
218 # simply "Origin".
218 # simply "Origin".
219 if "Origin" in self.request.headers:
219 if "Origin" in self.request.headers:
220 origin = self.request.headers.get("Origin")
220 origin = self.request.headers.get("Origin")
221 else:
221 else:
222 origin = self.request.headers.get("Sec-Websocket-Origin", None)
222 origin = self.request.headers.get("Sec-Websocket-Origin", None)
223 return origin
223 return origin
224
224
225 #---------------------------------------------------------------
225 #---------------------------------------------------------------
226 # template rendering
226 # template rendering
227 #---------------------------------------------------------------
227 #---------------------------------------------------------------
228
228
229 def get_template(self, name):
229 def get_template(self, name):
230 """Return the jinja template object for a given name"""
230 """Return the jinja template object for a given name"""
231 return self.settings['jinja2_env'].get_template(name)
231 return self.settings['jinja2_env'].get_template(name)
232
232
233 def render_template(self, name, **ns):
233 def render_template(self, name, **ns):
234 ns.update(self.template_namespace)
234 ns.update(self.template_namespace)
235 template = self.get_template(name)
235 template = self.get_template(name)
236 return template.render(**ns)
236 return template.render(**ns)
237
237
238 @property
238 @property
239 def template_namespace(self):
239 def template_namespace(self):
240 return dict(
240 return dict(
241 base_url=self.base_url,
241 base_url=self.base_url,
242 ws_url=self.ws_url,
242 ws_url=self.ws_url,
243 logged_in=self.logged_in,
243 logged_in=self.logged_in,
244 login_available=self.login_available,
244 login_available=self.login_available,
245 static_url=self.static_url,
245 static_url=self.static_url,
246 sys_info=sys_info,
246 sys_info=sys_info,
247 contents_js_source=self.contents_js_source,
247 contents_js_source=self.contents_js_source,
248 version_hash=self.version_hash,
248 version_hash=self.version_hash,
249 )
249 )
250
250
251 def get_json_body(self):
251 def get_json_body(self):
252 """Return the body of the request as JSON data."""
252 """Return the body of the request as JSON data."""
253 if not self.request.body:
253 if not self.request.body:
254 return None
254 return None
255 # Do we need to call body.decode('utf-8') here?
255 # Do we need to call body.decode('utf-8') here?
256 body = self.request.body.strip().decode(u'utf-8')
256 body = self.request.body.strip().decode(u'utf-8')
257 try:
257 try:
258 model = json.loads(body)
258 model = json.loads(body)
259 except Exception:
259 except Exception:
260 self.log.debug("Bad JSON: %r", body)
260 self.log.debug("Bad JSON: %r", body)
261 self.log.error("Couldn't parse JSON", exc_info=True)
261 self.log.error("Couldn't parse JSON", exc_info=True)
262 raise web.HTTPError(400, u'Invalid JSON in body of request')
262 raise web.HTTPError(400, u'Invalid JSON in body of request')
263 return model
263 return model
264
264
265 def write_error(self, status_code, **kwargs):
265 def write_error(self, status_code, **kwargs):
266 """render custom error pages"""
266 """render custom error pages"""
267 exc_info = kwargs.get('exc_info')
267 exc_info = kwargs.get('exc_info')
268 message = ''
268 message = ''
269 status_message = responses.get(status_code, 'Unknown HTTP Error')
269 status_message = responses.get(status_code, 'Unknown HTTP Error')
270 if exc_info:
270 if exc_info:
271 exception = exc_info[1]
271 exception = exc_info[1]
272 # get the custom message, if defined
272 # get the custom message, if defined
273 try:
273 try:
274 message = exception.log_message % exception.args
274 message = exception.log_message % exception.args
275 except Exception:
275 except Exception:
276 pass
276 pass
277
277
278 # construct the custom reason, if defined
278 # construct the custom reason, if defined
279 reason = getattr(exception, 'reason', '')
279 reason = getattr(exception, 'reason', '')
280 if reason:
280 if reason:
281 status_message = reason
281 status_message = reason
282
282
283 # build template namespace
283 # build template namespace
284 ns = dict(
284 ns = dict(
285 status_code=status_code,
285 status_code=status_code,
286 status_message=status_message,
286 status_message=status_message,
287 message=message,
287 message=message,
288 exception=exception,
288 exception=exception,
289 )
289 )
290
290
291 self.set_header('Content-Type', 'text/html')
291 self.set_header('Content-Type', 'text/html')
292 # render the template
292 # render the template
293 try:
293 try:
294 html = self.render_template('%s.html' % status_code, **ns)
294 html = self.render_template('%s.html' % status_code, **ns)
295 except TemplateNotFound:
295 except TemplateNotFound:
296 self.log.debug("No template for %d", status_code)
296 self.log.debug("No template for %d", status_code)
297 html = self.render_template('error.html', **ns)
297 html = self.render_template('error.html', **ns)
298
298
299 self.write(html)
299 self.write(html)
300
300
301
301
302
302
303 class Template404(IPythonHandler):
303 class Template404(IPythonHandler):
304 """Render our 404 template"""
304 """Render our 404 template"""
305 def prepare(self):
305 def prepare(self):
306 raise web.HTTPError(404)
306 raise web.HTTPError(404)
307
307
308
308
309 class AuthenticatedFileHandler(IPythonHandler, web.StaticFileHandler):
309 class AuthenticatedFileHandler(IPythonHandler, web.StaticFileHandler):
310 """static files should only be accessible when logged in"""
310 """static files should only be accessible when logged in"""
311
311
312 @web.authenticated
312 @web.authenticated
313 def get(self, path):
313 def get(self, path):
314 if os.path.splitext(path)[1] == '.ipynb':
314 if os.path.splitext(path)[1] == '.ipynb':
315 name = path.rsplit('/', 1)[-1]
315 name = path.rsplit('/', 1)[-1]
316 self.set_header('Content-Type', 'application/json')
316 self.set_header('Content-Type', 'application/json')
317 self.set_header('Content-Disposition','attachment; filename="%s"' % name)
317 self.set_header('Content-Disposition','attachment; filename="%s"' % name)
318
318
319 return web.StaticFileHandler.get(self, path)
319 return web.StaticFileHandler.get(self, path)
320
320
321 def set_headers(self):
321 def set_headers(self):
322 super(AuthenticatedFileHandler, self).set_headers()
322 super(AuthenticatedFileHandler, self).set_headers()
323 # disable browser caching, rely on 304 replies for savings
323 # disable browser caching, rely on 304 replies for savings
324 if "v" not in self.request.arguments:
324 if "v" not in self.request.arguments:
325 self.add_header("Cache-Control", "no-cache")
325 self.add_header("Cache-Control", "no-cache")
326
326
327 def compute_etag(self):
327 def compute_etag(self):
328 return None
328 return None
329
329
330 def validate_absolute_path(self, root, absolute_path):
330 def validate_absolute_path(self, root, absolute_path):
331 """Validate and return the absolute path.
331 """Validate and return the absolute path.
332
332
333 Requires tornado 3.1
333 Requires tornado 3.1
334
334
335 Adding to tornado's own handling, forbids the serving of hidden files.
335 Adding to tornado's own handling, forbids the serving of hidden files.
336 """
336 """
337 abs_path = super(AuthenticatedFileHandler, self).validate_absolute_path(root, absolute_path)
337 abs_path = super(AuthenticatedFileHandler, self).validate_absolute_path(root, absolute_path)
338 abs_root = os.path.abspath(root)
338 abs_root = os.path.abspath(root)
339 if is_hidden(abs_path, abs_root):
339 if is_hidden(abs_path, abs_root):
340 self.log.info("Refusing to serve hidden file, via 404 Error")
340 self.log.info("Refusing to serve hidden file, via 404 Error")
341 raise web.HTTPError(404)
341 raise web.HTTPError(404)
342 return abs_path
342 return abs_path
343
343
344
344
345 def json_errors(method):
345 def json_errors(method):
346 """Decorate methods with this to return GitHub style JSON errors.
346 """Decorate methods with this to return GitHub style JSON errors.
347
347
348 This should be used on any JSON API on any handler method that can raise HTTPErrors.
348 This should be used on any JSON API on any handler method that can raise HTTPErrors.
349
349
350 This will grab the latest HTTPError exception using sys.exc_info
350 This will grab the latest HTTPError exception using sys.exc_info
351 and then:
351 and then:
352
352
353 1. Set the HTTP status code based on the HTTPError
353 1. Set the HTTP status code based on the HTTPError
354 2. Create and return a JSON body with a message field describing
354 2. Create and return a JSON body with a message field describing
355 the error in a human readable form.
355 the error in a human readable form.
356 """
356 """
357 @functools.wraps(method)
357 @functools.wraps(method)
358 def wrapper(self, *args, **kwargs):
358 def wrapper(self, *args, **kwargs):
359 try:
359 try:
360 result = method(self, *args, **kwargs)
360 result = method(self, *args, **kwargs)
361 except web.HTTPError as e:
361 except web.HTTPError as e:
362 status = e.status_code
362 status = e.status_code
363 message = e.log_message
363 message = e.log_message
364 self.log.warn(message)
364 self.log.warn(message)
365 self.set_status(e.status_code)
365 self.set_status(e.status_code)
366 self.finish(json.dumps(dict(message=message)))
366 reply = dict(message=message, reason=e.reason)
367 self.finish(json.dumps(reply))
367 except Exception:
368 except Exception:
368 self.log.error("Unhandled error in API request", exc_info=True)
369 self.log.error("Unhandled error in API request", exc_info=True)
369 status = 500
370 status = 500
370 message = "Unknown server error"
371 message = "Unknown server error"
371 t, value, tb = sys.exc_info()
372 t, value, tb = sys.exc_info()
372 self.set_status(status)
373 self.set_status(status)
373 tb_text = ''.join(traceback.format_exception(t, value, tb))
374 tb_text = ''.join(traceback.format_exception(t, value, tb))
374 reply = dict(message=message, traceback=tb_text)
375 reply = dict(message=message, reason=None, traceback=tb_text)
375 self.finish(json.dumps(reply))
376 self.finish(json.dumps(reply))
376 else:
377 else:
377 return result
378 return result
378 return wrapper
379 return wrapper
379
380
380
381
381
382
382 #-----------------------------------------------------------------------------
383 #-----------------------------------------------------------------------------
383 # File handler
384 # File handler
384 #-----------------------------------------------------------------------------
385 #-----------------------------------------------------------------------------
385
386
386 # to minimize subclass changes:
387 # to minimize subclass changes:
387 HTTPError = web.HTTPError
388 HTTPError = web.HTTPError
388
389
389 class FileFindHandler(web.StaticFileHandler):
390 class FileFindHandler(web.StaticFileHandler):
390 """subclass of StaticFileHandler for serving files from a search path"""
391 """subclass of StaticFileHandler for serving files from a search path"""
391
392
392 # cache search results, don't search for files more than once
393 # cache search results, don't search for files more than once
393 _static_paths = {}
394 _static_paths = {}
394
395
395 def set_headers(self):
396 def set_headers(self):
396 super(FileFindHandler, self).set_headers()
397 super(FileFindHandler, self).set_headers()
397 # disable browser caching, rely on 304 replies for savings
398 # disable browser caching, rely on 304 replies for savings
398 if "v" not in self.request.arguments or \
399 if "v" not in self.request.arguments or \
399 any(self.request.path.startswith(path) for path in self.no_cache_paths):
400 any(self.request.path.startswith(path) for path in self.no_cache_paths):
400 self.add_header("Cache-Control", "no-cache")
401 self.add_header("Cache-Control", "no-cache")
401
402
402 def initialize(self, path, default_filename=None, no_cache_paths=None):
403 def initialize(self, path, default_filename=None, no_cache_paths=None):
403 self.no_cache_paths = no_cache_paths or []
404 self.no_cache_paths = no_cache_paths or []
404
405
405 if isinstance(path, string_types):
406 if isinstance(path, string_types):
406 path = [path]
407 path = [path]
407
408
408 self.root = tuple(
409 self.root = tuple(
409 os.path.abspath(os.path.expanduser(p)) + os.sep for p in path
410 os.path.abspath(os.path.expanduser(p)) + os.sep for p in path
410 )
411 )
411 self.default_filename = default_filename
412 self.default_filename = default_filename
412
413
413 def compute_etag(self):
414 def compute_etag(self):
414 return None
415 return None
415
416
416 @classmethod
417 @classmethod
417 def get_absolute_path(cls, roots, path):
418 def get_absolute_path(cls, roots, path):
418 """locate a file to serve on our static file search path"""
419 """locate a file to serve on our static file search path"""
419 with cls._lock:
420 with cls._lock:
420 if path in cls._static_paths:
421 if path in cls._static_paths:
421 return cls._static_paths[path]
422 return cls._static_paths[path]
422 try:
423 try:
423 abspath = os.path.abspath(filefind(path, roots))
424 abspath = os.path.abspath(filefind(path, roots))
424 except IOError:
425 except IOError:
425 # IOError means not found
426 # IOError means not found
426 return ''
427 return ''
427
428
428 cls._static_paths[path] = abspath
429 cls._static_paths[path] = abspath
429 return abspath
430 return abspath
430
431
431 def validate_absolute_path(self, root, absolute_path):
432 def validate_absolute_path(self, root, absolute_path):
432 """check if the file should be served (raises 404, 403, etc.)"""
433 """check if the file should be served (raises 404, 403, etc.)"""
433 if absolute_path == '':
434 if absolute_path == '':
434 raise web.HTTPError(404)
435 raise web.HTTPError(404)
435
436
436 for root in self.root:
437 for root in self.root:
437 if (absolute_path + os.sep).startswith(root):
438 if (absolute_path + os.sep).startswith(root):
438 break
439 break
439
440
440 return super(FileFindHandler, self).validate_absolute_path(root, absolute_path)
441 return super(FileFindHandler, self).validate_absolute_path(root, absolute_path)
441
442
442
443
443 class ApiVersionHandler(IPythonHandler):
444 class ApiVersionHandler(IPythonHandler):
444
445
445 @json_errors
446 @json_errors
446 def get(self):
447 def get(self):
447 # not authenticated, so give as few info as possible
448 # not authenticated, so give as few info as possible
448 self.finish(json.dumps({"version":IPython.__version__}))
449 self.finish(json.dumps({"version":IPython.__version__}))
449
450
450
451
451 class TrailingSlashHandler(web.RequestHandler):
452 class TrailingSlashHandler(web.RequestHandler):
452 """Simple redirect handler that strips trailing slashes
453 """Simple redirect handler that strips trailing slashes
453
454
454 This should be the first, highest priority handler.
455 This should be the first, highest priority handler.
455 """
456 """
456
457
457 def get(self):
458 def get(self):
458 self.redirect(self.request.uri.rstrip('/'))
459 self.redirect(self.request.uri.rstrip('/'))
459
460
460 post = put = get
461 post = put = get
461
462
462
463
463 class FilesRedirectHandler(IPythonHandler):
464 class FilesRedirectHandler(IPythonHandler):
464 """Handler for redirecting relative URLs to the /files/ handler"""
465 """Handler for redirecting relative URLs to the /files/ handler"""
465 def get(self, path=''):
466 def get(self, path=''):
466 cm = self.contents_manager
467 cm = self.contents_manager
467 if cm.dir_exists(path):
468 if cm.dir_exists(path):
468 # it's a *directory*, redirect to /tree
469 # it's a *directory*, redirect to /tree
469 url = url_path_join(self.base_url, 'tree', path)
470 url = url_path_join(self.base_url, 'tree', path)
470 else:
471 else:
471 orig_path = path
472 orig_path = path
472 # otherwise, redirect to /files
473 # otherwise, redirect to /files
473 parts = path.split('/')
474 parts = path.split('/')
474
475
475 if not cm.file_exists(path=path) and 'files' in parts:
476 if not cm.file_exists(path=path) and 'files' in parts:
476 # redirect without files/ iff it would 404
477 # redirect without files/ iff it would 404
477 # this preserves pre-2.0-style 'files/' links
478 # this preserves pre-2.0-style 'files/' links
478 self.log.warn("Deprecated files/ URL: %s", orig_path)
479 self.log.warn("Deprecated files/ URL: %s", orig_path)
479 parts.remove('files')
480 parts.remove('files')
480 path = '/'.join(parts)
481 path = '/'.join(parts)
481
482
482 if not cm.file_exists(path=path):
483 if not cm.file_exists(path=path):
483 raise web.HTTPError(404)
484 raise web.HTTPError(404)
484
485
485 url = url_path_join(self.base_url, 'files', path)
486 url = url_path_join(self.base_url, 'files', path)
486 url = url_escape(url)
487 url = url_escape(url)
487 self.log.debug("Redirecting %s to %s", self.request.path, url)
488 self.log.debug("Redirecting %s to %s", self.request.path, url)
488 self.redirect(url)
489 self.redirect(url)
489
490
490
491
491 #-----------------------------------------------------------------------------
492 #-----------------------------------------------------------------------------
492 # URL pattern fragments for re-use
493 # URL pattern fragments for re-use
493 #-----------------------------------------------------------------------------
494 #-----------------------------------------------------------------------------
494
495
495 # path matches any number of `/foo[/bar...]` or just `/` or ''
496 # path matches any number of `/foo[/bar...]` or just `/` or ''
496 path_regex = r"(?P<path>(?:(?:/[^/]+)+|/?))"
497 path_regex = r"(?P<path>(?:(?:/[^/]+)+|/?))"
497 notebook_path_regex = r"(?P<path>(?:/[^/]+)+\.ipynb)"
498 notebook_path_regex = r"(?P<path>(?:/[^/]+)+\.ipynb)"
498
499
499 #-----------------------------------------------------------------------------
500 #-----------------------------------------------------------------------------
500 # URL to handler mappings
501 # URL to handler mappings
501 #-----------------------------------------------------------------------------
502 #-----------------------------------------------------------------------------
502
503
503
504
504 default_handlers = [
505 default_handlers = [
505 (r".*/", TrailingSlashHandler),
506 (r".*/", TrailingSlashHandler),
506 (r"api", ApiVersionHandler)
507 (r"api", ApiVersionHandler)
507 ]
508 ]
@@ -1,622 +1,622 b''
1 """A contents manager that uses the local file system for storage."""
1 """A contents manager that uses the local file system for storage."""
2
2
3 # Copyright (c) IPython Development Team.
3 # Copyright (c) IPython Development Team.
4 # Distributed under the terms of the Modified BSD License.
4 # Distributed under the terms of the Modified BSD License.
5
5
6 import base64
6 import base64
7 import errno
7 import errno
8 import io
8 import io
9 import os
9 import os
10 import shutil
10 import shutil
11 from contextlib import contextmanager
11 from contextlib import contextmanager
12 import mimetypes
12 import mimetypes
13
13
14 from tornado import web
14 from tornado import web
15
15
16 from .manager import ContentsManager
16 from .manager import ContentsManager
17 from IPython import nbformat
17 from IPython import nbformat
18 from IPython.utils.io import atomic_writing
18 from IPython.utils.io import atomic_writing
19 from IPython.utils.path import ensure_dir_exists
19 from IPython.utils.path import ensure_dir_exists
20 from IPython.utils.traitlets import Unicode, Bool, TraitError
20 from IPython.utils.traitlets import Unicode, Bool, TraitError
21 from IPython.utils.py3compat import getcwd, str_to_unicode
21 from IPython.utils.py3compat import getcwd, str_to_unicode
22 from IPython.utils import tz
22 from IPython.utils import tz
23 from IPython.html.utils import is_hidden, to_os_path, to_api_path
23 from IPython.html.utils import is_hidden, to_os_path, to_api_path
24
24
25
25
26 class FileContentsManager(ContentsManager):
26 class FileContentsManager(ContentsManager):
27
27
28 root_dir = Unicode(config=True)
28 root_dir = Unicode(config=True)
29
29
30 def _root_dir_default(self):
30 def _root_dir_default(self):
31 try:
31 try:
32 return self.parent.notebook_dir
32 return self.parent.notebook_dir
33 except AttributeError:
33 except AttributeError:
34 return getcwd()
34 return getcwd()
35
35
36 @contextmanager
36 @contextmanager
37 def perm_to_403(self, os_path=''):
37 def perm_to_403(self, os_path=''):
38 """context manager for turning permission errors into 403"""
38 """context manager for turning permission errors into 403"""
39 try:
39 try:
40 yield
40 yield
41 except OSError as e:
41 except OSError as e:
42 if e.errno in {errno.EPERM, errno.EACCES}:
42 if e.errno in {errno.EPERM, errno.EACCES}:
43 # make 403 error message without root prefix
43 # make 403 error message without root prefix
44 # this may not work perfectly on unicode paths on Python 2,
44 # this may not work perfectly on unicode paths on Python 2,
45 # but nobody should be doing that anyway.
45 # but nobody should be doing that anyway.
46 if not os_path:
46 if not os_path:
47 os_path = str_to_unicode(e.filename or 'unknown file')
47 os_path = str_to_unicode(e.filename or 'unknown file')
48 path = to_api_path(os_path, self.root_dir)
48 path = to_api_path(os_path, self.root_dir)
49 raise web.HTTPError(403, u'Permission denied: %s' % path)
49 raise web.HTTPError(403, u'Permission denied: %s' % path)
50 else:
50 else:
51 raise
51 raise
52
52
53 @contextmanager
53 @contextmanager
54 def open(self, os_path, *args, **kwargs):
54 def open(self, os_path, *args, **kwargs):
55 """wrapper around io.open that turns permission errors into 403"""
55 """wrapper around io.open that turns permission errors into 403"""
56 with self.perm_to_403(os_path):
56 with self.perm_to_403(os_path):
57 with io.open(os_path, *args, **kwargs) as f:
57 with io.open(os_path, *args, **kwargs) as f:
58 yield f
58 yield f
59
59
60 @contextmanager
60 @contextmanager
61 def atomic_writing(self, os_path, *args, **kwargs):
61 def atomic_writing(self, os_path, *args, **kwargs):
62 """wrapper around atomic_writing that turns permission errors into 403"""
62 """wrapper around atomic_writing that turns permission errors into 403"""
63 with self.perm_to_403(os_path):
63 with self.perm_to_403(os_path):
64 with atomic_writing(os_path, *args, **kwargs) as f:
64 with atomic_writing(os_path, *args, **kwargs) as f:
65 yield f
65 yield f
66
66
67 save_script = Bool(False, config=True, help='DEPRECATED, IGNORED')
67 save_script = Bool(False, config=True, help='DEPRECATED, IGNORED')
68 def _save_script_changed(self):
68 def _save_script_changed(self):
69 self.log.warn("""
69 self.log.warn("""
70 Automatically saving notebooks as scripts has been removed.
70 Automatically saving notebooks as scripts has been removed.
71 Use `ipython nbconvert --to python [notebook]` instead.
71 Use `ipython nbconvert --to python [notebook]` instead.
72 """)
72 """)
73
73
74 def _root_dir_changed(self, name, old, new):
74 def _root_dir_changed(self, name, old, new):
75 """Do a bit of validation of the root_dir."""
75 """Do a bit of validation of the root_dir."""
76 if not os.path.isabs(new):
76 if not os.path.isabs(new):
77 # If we receive a non-absolute path, make it absolute.
77 # If we receive a non-absolute path, make it absolute.
78 self.root_dir = os.path.abspath(new)
78 self.root_dir = os.path.abspath(new)
79 return
79 return
80 if not os.path.isdir(new):
80 if not os.path.isdir(new):
81 raise TraitError("%r is not a directory" % new)
81 raise TraitError("%r is not a directory" % new)
82
82
83 checkpoint_dir = Unicode('.ipynb_checkpoints', config=True,
83 checkpoint_dir = Unicode('.ipynb_checkpoints', config=True,
84 help="""The directory name in which to keep file checkpoints
84 help="""The directory name in which to keep file checkpoints
85
85
86 This is a path relative to the file's own directory.
86 This is a path relative to the file's own directory.
87
87
88 By default, it is .ipynb_checkpoints
88 By default, it is .ipynb_checkpoints
89 """
89 """
90 )
90 )
91
91
92 def _copy(self, src, dest):
92 def _copy(self, src, dest):
93 """copy src to dest
93 """copy src to dest
94
94
95 like shutil.copy2, but log errors in copystat
95 like shutil.copy2, but log errors in copystat
96 """
96 """
97 shutil.copyfile(src, dest)
97 shutil.copyfile(src, dest)
98 try:
98 try:
99 shutil.copystat(src, dest)
99 shutil.copystat(src, dest)
100 except OSError as e:
100 except OSError as e:
101 self.log.debug("copystat on %s failed", dest, exc_info=True)
101 self.log.debug("copystat on %s failed", dest, exc_info=True)
102
102
103 def _get_os_path(self, path):
103 def _get_os_path(self, path):
104 """Given an API path, return its file system path.
104 """Given an API path, return its file system path.
105
105
106 Parameters
106 Parameters
107 ----------
107 ----------
108 path : string
108 path : string
109 The relative API path to the named file.
109 The relative API path to the named file.
110
110
111 Returns
111 Returns
112 -------
112 -------
113 path : string
113 path : string
114 Native, absolute OS path to for a file.
114 Native, absolute OS path to for a file.
115 """
115 """
116 return to_os_path(path, self.root_dir)
116 return to_os_path(path, self.root_dir)
117
117
118 def dir_exists(self, path):
118 def dir_exists(self, path):
119 """Does the API-style path refer to an extant directory?
119 """Does the API-style path refer to an extant directory?
120
120
121 API-style wrapper for os.path.isdir
121 API-style wrapper for os.path.isdir
122
122
123 Parameters
123 Parameters
124 ----------
124 ----------
125 path : string
125 path : string
126 The path to check. This is an API path (`/` separated,
126 The path to check. This is an API path (`/` separated,
127 relative to root_dir).
127 relative to root_dir).
128
128
129 Returns
129 Returns
130 -------
130 -------
131 exists : bool
131 exists : bool
132 Whether the path is indeed a directory.
132 Whether the path is indeed a directory.
133 """
133 """
134 path = path.strip('/')
134 path = path.strip('/')
135 os_path = self._get_os_path(path=path)
135 os_path = self._get_os_path(path=path)
136 return os.path.isdir(os_path)
136 return os.path.isdir(os_path)
137
137
138 def is_hidden(self, path):
138 def is_hidden(self, path):
139 """Does the API style path correspond to a hidden directory or file?
139 """Does the API style path correspond to a hidden directory or file?
140
140
141 Parameters
141 Parameters
142 ----------
142 ----------
143 path : string
143 path : string
144 The path to check. This is an API path (`/` separated,
144 The path to check. This is an API path (`/` separated,
145 relative to root_dir).
145 relative to root_dir).
146
146
147 Returns
147 Returns
148 -------
148 -------
149 hidden : bool
149 hidden : bool
150 Whether the path exists and is hidden.
150 Whether the path exists and is hidden.
151 """
151 """
152 path = path.strip('/')
152 path = path.strip('/')
153 os_path = self._get_os_path(path=path)
153 os_path = self._get_os_path(path=path)
154 return is_hidden(os_path, self.root_dir)
154 return is_hidden(os_path, self.root_dir)
155
155
156 def file_exists(self, path):
156 def file_exists(self, path):
157 """Returns True if the file exists, else returns False.
157 """Returns True if the file exists, else returns False.
158
158
159 API-style wrapper for os.path.isfile
159 API-style wrapper for os.path.isfile
160
160
161 Parameters
161 Parameters
162 ----------
162 ----------
163 path : string
163 path : string
164 The relative path to the file (with '/' as separator)
164 The relative path to the file (with '/' as separator)
165
165
166 Returns
166 Returns
167 -------
167 -------
168 exists : bool
168 exists : bool
169 Whether the file exists.
169 Whether the file exists.
170 """
170 """
171 path = path.strip('/')
171 path = path.strip('/')
172 os_path = self._get_os_path(path)
172 os_path = self._get_os_path(path)
173 return os.path.isfile(os_path)
173 return os.path.isfile(os_path)
174
174
175 def exists(self, path):
175 def exists(self, path):
176 """Returns True if the path exists, else returns False.
176 """Returns True if the path exists, else returns False.
177
177
178 API-style wrapper for os.path.exists
178 API-style wrapper for os.path.exists
179
179
180 Parameters
180 Parameters
181 ----------
181 ----------
182 path : string
182 path : string
183 The API path to the file (with '/' as separator)
183 The API path to the file (with '/' as separator)
184
184
185 Returns
185 Returns
186 -------
186 -------
187 exists : bool
187 exists : bool
188 Whether the target exists.
188 Whether the target exists.
189 """
189 """
190 path = path.strip('/')
190 path = path.strip('/')
191 os_path = self._get_os_path(path=path)
191 os_path = self._get_os_path(path=path)
192 return os.path.exists(os_path)
192 return os.path.exists(os_path)
193
193
194 def _base_model(self, path):
194 def _base_model(self, path):
195 """Build the common base of a contents model"""
195 """Build the common base of a contents model"""
196 os_path = self._get_os_path(path)
196 os_path = self._get_os_path(path)
197 info = os.stat(os_path)
197 info = os.stat(os_path)
198 last_modified = tz.utcfromtimestamp(info.st_mtime)
198 last_modified = tz.utcfromtimestamp(info.st_mtime)
199 created = tz.utcfromtimestamp(info.st_ctime)
199 created = tz.utcfromtimestamp(info.st_ctime)
200 # Create the base model.
200 # Create the base model.
201 model = {}
201 model = {}
202 model['name'] = path.rsplit('/', 1)[-1]
202 model['name'] = path.rsplit('/', 1)[-1]
203 model['path'] = path
203 model['path'] = path
204 model['last_modified'] = last_modified
204 model['last_modified'] = last_modified
205 model['created'] = created
205 model['created'] = created
206 model['content'] = None
206 model['content'] = None
207 model['format'] = None
207 model['format'] = None
208 model['mimetype'] = None
208 model['mimetype'] = None
209 try:
209 try:
210 model['writable'] = os.access(os_path, os.W_OK)
210 model['writable'] = os.access(os_path, os.W_OK)
211 except OSError:
211 except OSError:
212 self.log.error("Failed to check write permissions on %s", os_path)
212 self.log.error("Failed to check write permissions on %s", os_path)
213 model['writable'] = False
213 model['writable'] = False
214 return model
214 return model
215
215
216 def _dir_model(self, path, content=True):
216 def _dir_model(self, path, content=True):
217 """Build a model for a directory
217 """Build a model for a directory
218
218
219 if content is requested, will include a listing of the directory
219 if content is requested, will include a listing of the directory
220 """
220 """
221 os_path = self._get_os_path(path)
221 os_path = self._get_os_path(path)
222
222
223 four_o_four = u'directory does not exist: %r' % path
223 four_o_four = u'directory does not exist: %r' % path
224
224
225 if not os.path.isdir(os_path):
225 if not os.path.isdir(os_path):
226 raise web.HTTPError(404, four_o_four)
226 raise web.HTTPError(404, four_o_four)
227 elif is_hidden(os_path, self.root_dir):
227 elif is_hidden(os_path, self.root_dir):
228 self.log.info("Refusing to serve hidden directory %r, via 404 Error",
228 self.log.info("Refusing to serve hidden directory %r, via 404 Error",
229 os_path
229 os_path
230 )
230 )
231 raise web.HTTPError(404, four_o_four)
231 raise web.HTTPError(404, four_o_four)
232
232
233 model = self._base_model(path)
233 model = self._base_model(path)
234 model['type'] = 'directory'
234 model['type'] = 'directory'
235 if content:
235 if content:
236 model['content'] = contents = []
236 model['content'] = contents = []
237 os_dir = self._get_os_path(path)
237 os_dir = self._get_os_path(path)
238 for name in os.listdir(os_dir):
238 for name in os.listdir(os_dir):
239 os_path = os.path.join(os_dir, name)
239 os_path = os.path.join(os_dir, name)
240 # skip over broken symlinks in listing
240 # skip over broken symlinks in listing
241 if not os.path.exists(os_path):
241 if not os.path.exists(os_path):
242 self.log.warn("%s doesn't exist", os_path)
242 self.log.warn("%s doesn't exist", os_path)
243 continue
243 continue
244 elif not os.path.isfile(os_path) and not os.path.isdir(os_path):
244 elif not os.path.isfile(os_path) and not os.path.isdir(os_path):
245 self.log.debug("%s not a regular file", os_path)
245 self.log.debug("%s not a regular file", os_path)
246 continue
246 continue
247 if self.should_list(name) and not is_hidden(os_path, self.root_dir):
247 if self.should_list(name) and not is_hidden(os_path, self.root_dir):
248 contents.append(self.get(
248 contents.append(self.get(
249 path='%s/%s' % (path, name),
249 path='%s/%s' % (path, name),
250 content=False)
250 content=False)
251 )
251 )
252
252
253 model['format'] = 'json'
253 model['format'] = 'json'
254
254
255 return model
255 return model
256
256
257 def _file_model(self, path, content=True, format=None):
257 def _file_model(self, path, content=True, format=None):
258 """Build a model for a file
258 """Build a model for a file
259
259
260 if content is requested, include the file contents.
260 if content is requested, include the file contents.
261
261
262 format:
262 format:
263 If 'text', the contents will be decoded as UTF-8.
263 If 'text', the contents will be decoded as UTF-8.
264 If 'base64', the raw bytes contents will be encoded as base64.
264 If 'base64', the raw bytes contents will be encoded as base64.
265 If not specified, try to decode as UTF-8, and fall back to base64
265 If not specified, try to decode as UTF-8, and fall back to base64
266 """
266 """
267 model = self._base_model(path)
267 model = self._base_model(path)
268 model['type'] = 'file'
268 model['type'] = 'file'
269
269
270 os_path = self._get_os_path(path)
270 os_path = self._get_os_path(path)
271
271
272 if content:
272 if content:
273 if not os.path.isfile(os_path):
273 if not os.path.isfile(os_path):
274 # could be FIFO
274 # could be FIFO
275 raise web.HTTPError(400, "Cannot get content of non-file %s" % os_path)
275 raise web.HTTPError(400, "Cannot get content of non-file %s" % os_path)
276 with self.open(os_path, 'rb') as f:
276 with self.open(os_path, 'rb') as f:
277 bcontent = f.read()
277 bcontent = f.read()
278
278
279 if format != 'base64':
279 if format != 'base64':
280 try:
280 try:
281 model['content'] = bcontent.decode('utf8')
281 model['content'] = bcontent.decode('utf8')
282 except UnicodeError as e:
282 except UnicodeError as e:
283 if format == 'text':
283 if format == 'text':
284 raise web.HTTPError(400, "%s is not UTF-8 encoded" % path)
284 raise web.HTTPError(400, "%s is not UTF-8 encoded" % path, reason='bad format')
285 else:
285 else:
286 model['format'] = 'text'
286 model['format'] = 'text'
287 default_mime = 'text/plain'
287 default_mime = 'text/plain'
288
288
289 if model['content'] is None:
289 if model['content'] is None:
290 model['content'] = base64.encodestring(bcontent).decode('ascii')
290 model['content'] = base64.encodestring(bcontent).decode('ascii')
291 model['format'] = 'base64'
291 model['format'] = 'base64'
292 default_mime = 'application/octet-stream'
292 default_mime = 'application/octet-stream'
293
293
294 model['mimetype'] = mimetypes.guess_type(os_path)[0] or default_mime
294 model['mimetype'] = mimetypes.guess_type(os_path)[0] or default_mime
295
295
296 return model
296 return model
297
297
298
298
299 def _notebook_model(self, path, content=True):
299 def _notebook_model(self, path, content=True):
300 """Build a notebook model
300 """Build a notebook model
301
301
302 if content is requested, the notebook content will be populated
302 if content is requested, the notebook content will be populated
303 as a JSON structure (not double-serialized)
303 as a JSON structure (not double-serialized)
304 """
304 """
305 model = self._base_model(path)
305 model = self._base_model(path)
306 model['type'] = 'notebook'
306 model['type'] = 'notebook'
307 if content:
307 if content:
308 os_path = self._get_os_path(path)
308 os_path = self._get_os_path(path)
309 with self.open(os_path, 'r', encoding='utf-8') as f:
309 with self.open(os_path, 'r', encoding='utf-8') as f:
310 try:
310 try:
311 nb = nbformat.read(f, as_version=4)
311 nb = nbformat.read(f, as_version=4)
312 except Exception as e:
312 except Exception as e:
313 raise web.HTTPError(400, u"Unreadable Notebook: %s %r" % (os_path, e))
313 raise web.HTTPError(400, u"Unreadable Notebook: %s %r" % (os_path, e))
314 self.mark_trusted_cells(nb, path)
314 self.mark_trusted_cells(nb, path)
315 model['content'] = nb
315 model['content'] = nb
316 model['format'] = 'json'
316 model['format'] = 'json'
317 self.validate_notebook_model(model)
317 self.validate_notebook_model(model)
318 return model
318 return model
319
319
320 def get(self, path, content=True, type_=None, format=None):
320 def get(self, path, content=True, type_=None, format=None):
321 """ Takes a path for an entity and returns its model
321 """ Takes a path for an entity and returns its model
322
322
323 Parameters
323 Parameters
324 ----------
324 ----------
325 path : str
325 path : str
326 the API path that describes the relative path for the target
326 the API path that describes the relative path for the target
327 content : bool
327 content : bool
328 Whether to include the contents in the reply
328 Whether to include the contents in the reply
329 type_ : str, optional
329 type_ : str, optional
330 The requested type - 'file', 'notebook', or 'directory'.
330 The requested type - 'file', 'notebook', or 'directory'.
331 Will raise HTTPError 400 if the content doesn't match.
331 Will raise HTTPError 400 if the content doesn't match.
332 format : str, optional
332 format : str, optional
333 The requested format for file contents. 'text' or 'base64'.
333 The requested format for file contents. 'text' or 'base64'.
334 Ignored if this returns a notebook or directory model.
334 Ignored if this returns a notebook or directory model.
335
335
336 Returns
336 Returns
337 -------
337 -------
338 model : dict
338 model : dict
339 the contents model. If content=True, returns the contents
339 the contents model. If content=True, returns the contents
340 of the file or directory as well.
340 of the file or directory as well.
341 """
341 """
342 path = path.strip('/')
342 path = path.strip('/')
343
343
344 if not self.exists(path):
344 if not self.exists(path):
345 raise web.HTTPError(404, u'No such file or directory: %s' % path)
345 raise web.HTTPError(404, u'No such file or directory: %s' % path)
346
346
347 os_path = self._get_os_path(path)
347 os_path = self._get_os_path(path)
348 if os.path.isdir(os_path):
348 if os.path.isdir(os_path):
349 if type_ not in (None, 'directory'):
349 if type_ not in (None, 'directory'):
350 raise web.HTTPError(400,
350 raise web.HTTPError(400,
351 u'%s is a directory, not a %s' % (path, type_))
351 u'%s is a directory, not a %s' % (path, type_), reason='bad type')
352 model = self._dir_model(path, content=content)
352 model = self._dir_model(path, content=content)
353 elif type_ == 'notebook' or (type_ is None and path.endswith('.ipynb')):
353 elif type_ == 'notebook' or (type_ is None and path.endswith('.ipynb')):
354 model = self._notebook_model(path, content=content)
354 model = self._notebook_model(path, content=content)
355 else:
355 else:
356 if type_ == 'directory':
356 if type_ == 'directory':
357 raise web.HTTPError(400,
357 raise web.HTTPError(400,
358 u'%s is not a directory')
358 u'%s is not a directory', reason='bad type')
359 model = self._file_model(path, content=content, format=format)
359 model = self._file_model(path, content=content, format=format)
360 return model
360 return model
361
361
362 def _save_notebook(self, os_path, model, path=''):
362 def _save_notebook(self, os_path, model, path=''):
363 """save a notebook file"""
363 """save a notebook file"""
364 # Save the notebook file
364 # Save the notebook file
365 nb = nbformat.from_dict(model['content'])
365 nb = nbformat.from_dict(model['content'])
366
366
367 self.check_and_sign(nb, path)
367 self.check_and_sign(nb, path)
368
368
369 with self.atomic_writing(os_path, encoding='utf-8') as f:
369 with self.atomic_writing(os_path, encoding='utf-8') as f:
370 nbformat.write(nb, f, version=nbformat.NO_CONVERT)
370 nbformat.write(nb, f, version=nbformat.NO_CONVERT)
371
371
372 def _save_file(self, os_path, model, path=''):
372 def _save_file(self, os_path, model, path=''):
373 """save a non-notebook file"""
373 """save a non-notebook file"""
374 fmt = model.get('format', None)
374 fmt = model.get('format', None)
375 if fmt not in {'text', 'base64'}:
375 if fmt not in {'text', 'base64'}:
376 raise web.HTTPError(400, "Must specify format of file contents as 'text' or 'base64'")
376 raise web.HTTPError(400, "Must specify format of file contents as 'text' or 'base64'")
377 try:
377 try:
378 content = model['content']
378 content = model['content']
379 if fmt == 'text':
379 if fmt == 'text':
380 bcontent = content.encode('utf8')
380 bcontent = content.encode('utf8')
381 else:
381 else:
382 b64_bytes = content.encode('ascii')
382 b64_bytes = content.encode('ascii')
383 bcontent = base64.decodestring(b64_bytes)
383 bcontent = base64.decodestring(b64_bytes)
384 except Exception as e:
384 except Exception as e:
385 raise web.HTTPError(400, u'Encoding error saving %s: %s' % (os_path, e))
385 raise web.HTTPError(400, u'Encoding error saving %s: %s' % (os_path, e))
386 with self.atomic_writing(os_path, text=False) as f:
386 with self.atomic_writing(os_path, text=False) as f:
387 f.write(bcontent)
387 f.write(bcontent)
388
388
389 def _save_directory(self, os_path, model, path=''):
389 def _save_directory(self, os_path, model, path=''):
390 """create a directory"""
390 """create a directory"""
391 if is_hidden(os_path, self.root_dir):
391 if is_hidden(os_path, self.root_dir):
392 raise web.HTTPError(400, u'Cannot create hidden directory %r' % os_path)
392 raise web.HTTPError(400, u'Cannot create hidden directory %r' % os_path)
393 if not os.path.exists(os_path):
393 if not os.path.exists(os_path):
394 with self.perm_to_403():
394 with self.perm_to_403():
395 os.mkdir(os_path)
395 os.mkdir(os_path)
396 elif not os.path.isdir(os_path):
396 elif not os.path.isdir(os_path):
397 raise web.HTTPError(400, u'Not a directory: %s' % (os_path))
397 raise web.HTTPError(400, u'Not a directory: %s' % (os_path))
398 else:
398 else:
399 self.log.debug("Directory %r already exists", os_path)
399 self.log.debug("Directory %r already exists", os_path)
400
400
401 def save(self, model, path=''):
401 def save(self, model, path=''):
402 """Save the file model and return the model with no content."""
402 """Save the file model and return the model with no content."""
403 path = path.strip('/')
403 path = path.strip('/')
404
404
405 if 'type' not in model:
405 if 'type' not in model:
406 raise web.HTTPError(400, u'No file type provided')
406 raise web.HTTPError(400, u'No file type provided')
407 if 'content' not in model and model['type'] != 'directory':
407 if 'content' not in model and model['type'] != 'directory':
408 raise web.HTTPError(400, u'No file content provided')
408 raise web.HTTPError(400, u'No file content provided')
409
409
410 # One checkpoint should always exist
410 # One checkpoint should always exist
411 if self.file_exists(path) and not self.list_checkpoints(path):
411 if self.file_exists(path) and not self.list_checkpoints(path):
412 self.create_checkpoint(path)
412 self.create_checkpoint(path)
413
413
414 os_path = self._get_os_path(path)
414 os_path = self._get_os_path(path)
415 self.log.debug("Saving %s", os_path)
415 self.log.debug("Saving %s", os_path)
416 try:
416 try:
417 if model['type'] == 'notebook':
417 if model['type'] == 'notebook':
418 self._save_notebook(os_path, model, path)
418 self._save_notebook(os_path, model, path)
419 elif model['type'] == 'file':
419 elif model['type'] == 'file':
420 self._save_file(os_path, model, path)
420 self._save_file(os_path, model, path)
421 elif model['type'] == 'directory':
421 elif model['type'] == 'directory':
422 self._save_directory(os_path, model, path)
422 self._save_directory(os_path, model, path)
423 else:
423 else:
424 raise web.HTTPError(400, "Unhandled contents type: %s" % model['type'])
424 raise web.HTTPError(400, "Unhandled contents type: %s" % model['type'])
425 except web.HTTPError:
425 except web.HTTPError:
426 raise
426 raise
427 except Exception as e:
427 except Exception as e:
428 self.log.error(u'Error while saving file: %s %s', path, e, exc_info=True)
428 self.log.error(u'Error while saving file: %s %s', path, e, exc_info=True)
429 raise web.HTTPError(500, u'Unexpected error while saving file: %s %s' % (path, e))
429 raise web.HTTPError(500, u'Unexpected error while saving file: %s %s' % (path, e))
430
430
431 validation_message = None
431 validation_message = None
432 if model['type'] == 'notebook':
432 if model['type'] == 'notebook':
433 self.validate_notebook_model(model)
433 self.validate_notebook_model(model)
434 validation_message = model.get('message', None)
434 validation_message = model.get('message', None)
435
435
436 model = self.get(path, content=False)
436 model = self.get(path, content=False)
437 if validation_message:
437 if validation_message:
438 model['message'] = validation_message
438 model['message'] = validation_message
439 return model
439 return model
440
440
441 def update(self, model, path):
441 def update(self, model, path):
442 """Update the file's path
442 """Update the file's path
443
443
444 For use in PATCH requests, to enable renaming a file without
444 For use in PATCH requests, to enable renaming a file without
445 re-uploading its contents. Only used for renaming at the moment.
445 re-uploading its contents. Only used for renaming at the moment.
446 """
446 """
447 path = path.strip('/')
447 path = path.strip('/')
448 new_path = model.get('path', path).strip('/')
448 new_path = model.get('path', path).strip('/')
449 if path != new_path:
449 if path != new_path:
450 self.rename(path, new_path)
450 self.rename(path, new_path)
451 model = self.get(new_path, content=False)
451 model = self.get(new_path, content=False)
452 return model
452 return model
453
453
454 def delete(self, path):
454 def delete(self, path):
455 """Delete file at path."""
455 """Delete file at path."""
456 path = path.strip('/')
456 path = path.strip('/')
457 os_path = self._get_os_path(path)
457 os_path = self._get_os_path(path)
458 rm = os.unlink
458 rm = os.unlink
459 if os.path.isdir(os_path):
459 if os.path.isdir(os_path):
460 listing = os.listdir(os_path)
460 listing = os.listdir(os_path)
461 # don't delete non-empty directories (checkpoints dir doesn't count)
461 # don't delete non-empty directories (checkpoints dir doesn't count)
462 if listing and listing != [self.checkpoint_dir]:
462 if listing and listing != [self.checkpoint_dir]:
463 raise web.HTTPError(400, u'Directory %s not empty' % os_path)
463 raise web.HTTPError(400, u'Directory %s not empty' % os_path)
464 elif not os.path.isfile(os_path):
464 elif not os.path.isfile(os_path):
465 raise web.HTTPError(404, u'File does not exist: %s' % os_path)
465 raise web.HTTPError(404, u'File does not exist: %s' % os_path)
466
466
467 # clear checkpoints
467 # clear checkpoints
468 for checkpoint in self.list_checkpoints(path):
468 for checkpoint in self.list_checkpoints(path):
469 checkpoint_id = checkpoint['id']
469 checkpoint_id = checkpoint['id']
470 cp_path = self.get_checkpoint_path(checkpoint_id, path)
470 cp_path = self.get_checkpoint_path(checkpoint_id, path)
471 if os.path.isfile(cp_path):
471 if os.path.isfile(cp_path):
472 self.log.debug("Unlinking checkpoint %s", cp_path)
472 self.log.debug("Unlinking checkpoint %s", cp_path)
473 with self.perm_to_403():
473 with self.perm_to_403():
474 rm(cp_path)
474 rm(cp_path)
475
475
476 if os.path.isdir(os_path):
476 if os.path.isdir(os_path):
477 self.log.debug("Removing directory %s", os_path)
477 self.log.debug("Removing directory %s", os_path)
478 with self.perm_to_403():
478 with self.perm_to_403():
479 shutil.rmtree(os_path)
479 shutil.rmtree(os_path)
480 else:
480 else:
481 self.log.debug("Unlinking file %s", os_path)
481 self.log.debug("Unlinking file %s", os_path)
482 with self.perm_to_403():
482 with self.perm_to_403():
483 rm(os_path)
483 rm(os_path)
484
484
485 def rename(self, old_path, new_path):
485 def rename(self, old_path, new_path):
486 """Rename a file."""
486 """Rename a file."""
487 old_path = old_path.strip('/')
487 old_path = old_path.strip('/')
488 new_path = new_path.strip('/')
488 new_path = new_path.strip('/')
489 if new_path == old_path:
489 if new_path == old_path:
490 return
490 return
491
491
492 new_os_path = self._get_os_path(new_path)
492 new_os_path = self._get_os_path(new_path)
493 old_os_path = self._get_os_path(old_path)
493 old_os_path = self._get_os_path(old_path)
494
494
495 # Should we proceed with the move?
495 # Should we proceed with the move?
496 if os.path.exists(new_os_path):
496 if os.path.exists(new_os_path):
497 raise web.HTTPError(409, u'File already exists: %s' % new_path)
497 raise web.HTTPError(409, u'File already exists: %s' % new_path)
498
498
499 # Move the file
499 # Move the file
500 try:
500 try:
501 with self.perm_to_403():
501 with self.perm_to_403():
502 shutil.move(old_os_path, new_os_path)
502 shutil.move(old_os_path, new_os_path)
503 except web.HTTPError:
503 except web.HTTPError:
504 raise
504 raise
505 except Exception as e:
505 except Exception as e:
506 raise web.HTTPError(500, u'Unknown error renaming file: %s %s' % (old_path, e))
506 raise web.HTTPError(500, u'Unknown error renaming file: %s %s' % (old_path, e))
507
507
508 # Move the checkpoints
508 # Move the checkpoints
509 old_checkpoints = self.list_checkpoints(old_path)
509 old_checkpoints = self.list_checkpoints(old_path)
510 for cp in old_checkpoints:
510 for cp in old_checkpoints:
511 checkpoint_id = cp['id']
511 checkpoint_id = cp['id']
512 old_cp_path = self.get_checkpoint_path(checkpoint_id, old_path)
512 old_cp_path = self.get_checkpoint_path(checkpoint_id, old_path)
513 new_cp_path = self.get_checkpoint_path(checkpoint_id, new_path)
513 new_cp_path = self.get_checkpoint_path(checkpoint_id, new_path)
514 if os.path.isfile(old_cp_path):
514 if os.path.isfile(old_cp_path):
515 self.log.debug("Renaming checkpoint %s -> %s", old_cp_path, new_cp_path)
515 self.log.debug("Renaming checkpoint %s -> %s", old_cp_path, new_cp_path)
516 with self.perm_to_403():
516 with self.perm_to_403():
517 shutil.move(old_cp_path, new_cp_path)
517 shutil.move(old_cp_path, new_cp_path)
518
518
519 # Checkpoint-related utilities
519 # Checkpoint-related utilities
520
520
521 def get_checkpoint_path(self, checkpoint_id, path):
521 def get_checkpoint_path(self, checkpoint_id, path):
522 """find the path to a checkpoint"""
522 """find the path to a checkpoint"""
523 path = path.strip('/')
523 path = path.strip('/')
524 parent, name = ('/' + path).rsplit('/', 1)
524 parent, name = ('/' + path).rsplit('/', 1)
525 parent = parent.strip('/')
525 parent = parent.strip('/')
526 basename, ext = os.path.splitext(name)
526 basename, ext = os.path.splitext(name)
527 filename = u"{name}-{checkpoint_id}{ext}".format(
527 filename = u"{name}-{checkpoint_id}{ext}".format(
528 name=basename,
528 name=basename,
529 checkpoint_id=checkpoint_id,
529 checkpoint_id=checkpoint_id,
530 ext=ext,
530 ext=ext,
531 )
531 )
532 os_path = self._get_os_path(path=parent)
532 os_path = self._get_os_path(path=parent)
533 cp_dir = os.path.join(os_path, self.checkpoint_dir)
533 cp_dir = os.path.join(os_path, self.checkpoint_dir)
534 with self.perm_to_403():
534 with self.perm_to_403():
535 ensure_dir_exists(cp_dir)
535 ensure_dir_exists(cp_dir)
536 cp_path = os.path.join(cp_dir, filename)
536 cp_path = os.path.join(cp_dir, filename)
537 return cp_path
537 return cp_path
538
538
539 def get_checkpoint_model(self, checkpoint_id, path):
539 def get_checkpoint_model(self, checkpoint_id, path):
540 """construct the info dict for a given checkpoint"""
540 """construct the info dict for a given checkpoint"""
541 path = path.strip('/')
541 path = path.strip('/')
542 cp_path = self.get_checkpoint_path(checkpoint_id, path)
542 cp_path = self.get_checkpoint_path(checkpoint_id, path)
543 stats = os.stat(cp_path)
543 stats = os.stat(cp_path)
544 last_modified = tz.utcfromtimestamp(stats.st_mtime)
544 last_modified = tz.utcfromtimestamp(stats.st_mtime)
545 info = dict(
545 info = dict(
546 id = checkpoint_id,
546 id = checkpoint_id,
547 last_modified = last_modified,
547 last_modified = last_modified,
548 )
548 )
549 return info
549 return info
550
550
551 # public checkpoint API
551 # public checkpoint API
552
552
553 def create_checkpoint(self, path):
553 def create_checkpoint(self, path):
554 """Create a checkpoint from the current state of a file"""
554 """Create a checkpoint from the current state of a file"""
555 path = path.strip('/')
555 path = path.strip('/')
556 if not self.file_exists(path):
556 if not self.file_exists(path):
557 raise web.HTTPError(404)
557 raise web.HTTPError(404)
558 src_path = self._get_os_path(path)
558 src_path = self._get_os_path(path)
559 # only the one checkpoint ID:
559 # only the one checkpoint ID:
560 checkpoint_id = u"checkpoint"
560 checkpoint_id = u"checkpoint"
561 cp_path = self.get_checkpoint_path(checkpoint_id, path)
561 cp_path = self.get_checkpoint_path(checkpoint_id, path)
562 self.log.debug("creating checkpoint for %s", path)
562 self.log.debug("creating checkpoint for %s", path)
563 with self.perm_to_403():
563 with self.perm_to_403():
564 self._copy(src_path, cp_path)
564 self._copy(src_path, cp_path)
565
565
566 # return the checkpoint info
566 # return the checkpoint info
567 return self.get_checkpoint_model(checkpoint_id, path)
567 return self.get_checkpoint_model(checkpoint_id, path)
568
568
569 def list_checkpoints(self, path):
569 def list_checkpoints(self, path):
570 """list the checkpoints for a given file
570 """list the checkpoints for a given file
571
571
572 This contents manager currently only supports one checkpoint per file.
572 This contents manager currently only supports one checkpoint per file.
573 """
573 """
574 path = path.strip('/')
574 path = path.strip('/')
575 checkpoint_id = "checkpoint"
575 checkpoint_id = "checkpoint"
576 os_path = self.get_checkpoint_path(checkpoint_id, path)
576 os_path = self.get_checkpoint_path(checkpoint_id, path)
577 if not os.path.exists(os_path):
577 if not os.path.exists(os_path):
578 return []
578 return []
579 else:
579 else:
580 return [self.get_checkpoint_model(checkpoint_id, path)]
580 return [self.get_checkpoint_model(checkpoint_id, path)]
581
581
582
582
583 def restore_checkpoint(self, checkpoint_id, path):
583 def restore_checkpoint(self, checkpoint_id, path):
584 """restore a file to a checkpointed state"""
584 """restore a file to a checkpointed state"""
585 path = path.strip('/')
585 path = path.strip('/')
586 self.log.info("restoring %s from checkpoint %s", path, checkpoint_id)
586 self.log.info("restoring %s from checkpoint %s", path, checkpoint_id)
587 nb_path = self._get_os_path(path)
587 nb_path = self._get_os_path(path)
588 cp_path = self.get_checkpoint_path(checkpoint_id, path)
588 cp_path = self.get_checkpoint_path(checkpoint_id, path)
589 if not os.path.isfile(cp_path):
589 if not os.path.isfile(cp_path):
590 self.log.debug("checkpoint file does not exist: %s", cp_path)
590 self.log.debug("checkpoint file does not exist: %s", cp_path)
591 raise web.HTTPError(404,
591 raise web.HTTPError(404,
592 u'checkpoint does not exist: %s@%s' % (path, checkpoint_id)
592 u'checkpoint does not exist: %s@%s' % (path, checkpoint_id)
593 )
593 )
594 # ensure notebook is readable (never restore from an unreadable notebook)
594 # ensure notebook is readable (never restore from an unreadable notebook)
595 if cp_path.endswith('.ipynb'):
595 if cp_path.endswith('.ipynb'):
596 with self.open(cp_path, 'r', encoding='utf-8') as f:
596 with self.open(cp_path, 'r', encoding='utf-8') as f:
597 nbformat.read(f, as_version=4)
597 nbformat.read(f, as_version=4)
598 self.log.debug("copying %s -> %s", cp_path, nb_path)
598 self.log.debug("copying %s -> %s", cp_path, nb_path)
599 with self.perm_to_403():
599 with self.perm_to_403():
600 self._copy(cp_path, nb_path)
600 self._copy(cp_path, nb_path)
601
601
602 def delete_checkpoint(self, checkpoint_id, path):
602 def delete_checkpoint(self, checkpoint_id, path):
603 """delete a file's checkpoint"""
603 """delete a file's checkpoint"""
604 path = path.strip('/')
604 path = path.strip('/')
605 cp_path = self.get_checkpoint_path(checkpoint_id, path)
605 cp_path = self.get_checkpoint_path(checkpoint_id, path)
606 if not os.path.isfile(cp_path):
606 if not os.path.isfile(cp_path):
607 raise web.HTTPError(404,
607 raise web.HTTPError(404,
608 u'Checkpoint does not exist: %s@%s' % (path, checkpoint_id)
608 u'Checkpoint does not exist: %s@%s' % (path, checkpoint_id)
609 )
609 )
610 self.log.debug("unlinking %s", cp_path)
610 self.log.debug("unlinking %s", cp_path)
611 os.unlink(cp_path)
611 os.unlink(cp_path)
612
612
613 def info_string(self):
613 def info_string(self):
614 return "Serving notebooks from local directory: %s" % self.root_dir
614 return "Serving notebooks from local directory: %s" % self.root_dir
615
615
616 def get_kernel_path(self, path, model=None):
616 def get_kernel_path(self, path, model=None):
617 """Return the initial API path of a kernel associated with a given notebook"""
617 """Return the initial API path of a kernel associated with a given notebook"""
618 if '/' in path:
618 if '/' in path:
619 parent_dir = path.rsplit('/', 1)[0]
619 parent_dir = path.rsplit('/', 1)[0]
620 else:
620 else:
621 parent_dir = ''
621 parent_dir = ''
622 return parent_dir
622 return parent_dir
@@ -1,265 +1,266 b''
1 """Tornado handlers for the contents web service."""
1 """Tornado handlers for the contents web service."""
2
2
3 # Copyright (c) IPython Development Team.
3 # Copyright (c) IPython Development Team.
4 # Distributed under the terms of the Modified BSD License.
4 # Distributed under the terms of the Modified BSD License.
5
5
6 import json
6 import json
7
7
8 from tornado import web
8 from tornado import web
9
9
10 from IPython.html.utils import url_path_join, url_escape
10 from IPython.html.utils import url_path_join, url_escape
11 from IPython.utils.jsonutil import date_default
11 from IPython.utils.jsonutil import date_default
12
12
13 from IPython.html.base.handlers import (
13 from IPython.html.base.handlers import (
14 IPythonHandler, json_errors, path_regex,
14 IPythonHandler, json_errors, path_regex,
15 )
15 )
16
16
17
17
18 def sort_key(model):
18 def sort_key(model):
19 """key function for case-insensitive sort by name and type"""
19 """key function for case-insensitive sort by name and type"""
20 iname = model['name'].lower()
20 iname = model['name'].lower()
21 type_key = {
21 type_key = {
22 'directory' : '0',
22 'directory' : '0',
23 'notebook' : '1',
23 'notebook' : '1',
24 'file' : '2',
24 'file' : '2',
25 }.get(model['type'], '9')
25 }.get(model['type'], '9')
26 return u'%s%s' % (type_key, iname)
26 return u'%s%s' % (type_key, iname)
27
27
28 class ContentsHandler(IPythonHandler):
28 class ContentsHandler(IPythonHandler):
29
29
30 SUPPORTED_METHODS = (u'GET', u'PUT', u'PATCH', u'POST', u'DELETE')
30 SUPPORTED_METHODS = (u'GET', u'PUT', u'PATCH', u'POST', u'DELETE')
31
31
32 def location_url(self, path):
32 def location_url(self, path):
33 """Return the full URL location of a file.
33 """Return the full URL location of a file.
34
34
35 Parameters
35 Parameters
36 ----------
36 ----------
37 path : unicode
37 path : unicode
38 The API path of the file, such as "foo/bar.txt".
38 The API path of the file, such as "foo/bar.txt".
39 """
39 """
40 return url_escape(url_path_join(
40 return url_escape(url_path_join(
41 self.base_url, 'api', 'contents', path
41 self.base_url, 'api', 'contents', path
42 ))
42 ))
43
43
44 def _finish_model(self, model, location=True):
44 def _finish_model(self, model, location=True):
45 """Finish a JSON request with a model, setting relevant headers, etc."""
45 """Finish a JSON request with a model, setting relevant headers, etc."""
46 if location:
46 if location:
47 location = self.location_url(model['path'])
47 location = self.location_url(model['path'])
48 self.set_header('Location', location)
48 self.set_header('Location', location)
49 self.set_header('Last-Modified', model['last_modified'])
49 self.set_header('Last-Modified', model['last_modified'])
50 self.set_header('Content-Type', 'application/json')
50 self.finish(json.dumps(model, default=date_default))
51 self.finish(json.dumps(model, default=date_default))
51
52
52 @web.authenticated
53 @web.authenticated
53 @json_errors
54 @json_errors
54 def get(self, path=''):
55 def get(self, path=''):
55 """Return a model for a file or directory.
56 """Return a model for a file or directory.
56
57
57 A directory model contains a list of models (without content)
58 A directory model contains a list of models (without content)
58 of the files and directories it contains.
59 of the files and directories it contains.
59 """
60 """
60 path = path or ''
61 path = path or ''
61 type_ = self.get_query_argument('type', default=None)
62 type_ = self.get_query_argument('type', default=None)
62 if type_ not in {None, 'directory', 'file', 'notebook'}:
63 if type_ not in {None, 'directory', 'file', 'notebook'}:
63 raise web.HTTPError(400, u'Type %r is invalid' % type_)
64 raise web.HTTPError(400, u'Type %r is invalid' % type_)
64
65
65 format = self.get_query_argument('format', default=None)
66 format = self.get_query_argument('format', default=None)
66 if format not in {None, 'text', 'base64'}:
67 if format not in {None, 'text', 'base64'}:
67 raise web.HTTPError(400, u'Format %r is invalid' % format)
68 raise web.HTTPError(400, u'Format %r is invalid' % format)
68
69
69 model = self.contents_manager.get(path=path, type_=type_, format=format)
70 model = self.contents_manager.get(path=path, type_=type_, format=format)
70 if model['type'] == 'directory':
71 if model['type'] == 'directory':
71 # group listing by type, then by name (case-insensitive)
72 # group listing by type, then by name (case-insensitive)
72 # FIXME: sorting should be done in the frontends
73 # FIXME: sorting should be done in the frontends
73 model['content'].sort(key=sort_key)
74 model['content'].sort(key=sort_key)
74 self._finish_model(model, location=False)
75 self._finish_model(model, location=False)
75
76
76 @web.authenticated
77 @web.authenticated
77 @json_errors
78 @json_errors
78 def patch(self, path=''):
79 def patch(self, path=''):
79 """PATCH renames a file or directory without re-uploading content."""
80 """PATCH renames a file or directory without re-uploading content."""
80 cm = self.contents_manager
81 cm = self.contents_manager
81 model = self.get_json_body()
82 model = self.get_json_body()
82 if model is None:
83 if model is None:
83 raise web.HTTPError(400, u'JSON body missing')
84 raise web.HTTPError(400, u'JSON body missing')
84 model = cm.update(model, path)
85 model = cm.update(model, path)
85 self._finish_model(model)
86 self._finish_model(model)
86
87
87 def _copy(self, copy_from, copy_to=None):
88 def _copy(self, copy_from, copy_to=None):
88 """Copy a file, optionally specifying a target directory."""
89 """Copy a file, optionally specifying a target directory."""
89 self.log.info(u"Copying {copy_from} to {copy_to}".format(
90 self.log.info(u"Copying {copy_from} to {copy_to}".format(
90 copy_from=copy_from,
91 copy_from=copy_from,
91 copy_to=copy_to or '',
92 copy_to=copy_to or '',
92 ))
93 ))
93 model = self.contents_manager.copy(copy_from, copy_to)
94 model = self.contents_manager.copy(copy_from, copy_to)
94 self.set_status(201)
95 self.set_status(201)
95 self._finish_model(model)
96 self._finish_model(model)
96
97
97 def _upload(self, model, path):
98 def _upload(self, model, path):
98 """Handle upload of a new file to path"""
99 """Handle upload of a new file to path"""
99 self.log.info(u"Uploading file to %s", path)
100 self.log.info(u"Uploading file to %s", path)
100 model = self.contents_manager.new(model, path)
101 model = self.contents_manager.new(model, path)
101 self.set_status(201)
102 self.set_status(201)
102 self._finish_model(model)
103 self._finish_model(model)
103
104
104 def _new_untitled(self, path, type='', ext=''):
105 def _new_untitled(self, path, type='', ext=''):
105 """Create a new, empty untitled entity"""
106 """Create a new, empty untitled entity"""
106 self.log.info(u"Creating new %s in %s", type or 'file', path)
107 self.log.info(u"Creating new %s in %s", type or 'file', path)
107 model = self.contents_manager.new_untitled(path=path, type=type, ext=ext)
108 model = self.contents_manager.new_untitled(path=path, type=type, ext=ext)
108 self.set_status(201)
109 self.set_status(201)
109 self._finish_model(model)
110 self._finish_model(model)
110
111
111 def _save(self, model, path):
112 def _save(self, model, path):
112 """Save an existing file."""
113 """Save an existing file."""
113 self.log.info(u"Saving file at %s", path)
114 self.log.info(u"Saving file at %s", path)
114 model = self.contents_manager.save(model, path)
115 model = self.contents_manager.save(model, path)
115 self._finish_model(model)
116 self._finish_model(model)
116
117
117 @web.authenticated
118 @web.authenticated
118 @json_errors
119 @json_errors
119 def post(self, path=''):
120 def post(self, path=''):
120 """Create a new file in the specified path.
121 """Create a new file in the specified path.
121
122
122 POST creates new files. The server always decides on the name.
123 POST creates new files. The server always decides on the name.
123
124
124 POST /api/contents/path
125 POST /api/contents/path
125 New untitled, empty file or directory.
126 New untitled, empty file or directory.
126 POST /api/contents/path
127 POST /api/contents/path
127 with body {"copy_from" : "/path/to/OtherNotebook.ipynb"}
128 with body {"copy_from" : "/path/to/OtherNotebook.ipynb"}
128 New copy of OtherNotebook in path
129 New copy of OtherNotebook in path
129 """
130 """
130
131
131 cm = self.contents_manager
132 cm = self.contents_manager
132
133
133 if cm.file_exists(path):
134 if cm.file_exists(path):
134 raise web.HTTPError(400, "Cannot POST to files, use PUT instead.")
135 raise web.HTTPError(400, "Cannot POST to files, use PUT instead.")
135
136
136 if not cm.dir_exists(path):
137 if not cm.dir_exists(path):
137 raise web.HTTPError(404, "No such directory: %s" % path)
138 raise web.HTTPError(404, "No such directory: %s" % path)
138
139
139 model = self.get_json_body()
140 model = self.get_json_body()
140
141
141 if model is not None:
142 if model is not None:
142 copy_from = model.get('copy_from')
143 copy_from = model.get('copy_from')
143 ext = model.get('ext', '')
144 ext = model.get('ext', '')
144 type = model.get('type', '')
145 type = model.get('type', '')
145 if copy_from:
146 if copy_from:
146 self._copy(copy_from, path)
147 self._copy(copy_from, path)
147 else:
148 else:
148 self._new_untitled(path, type=type, ext=ext)
149 self._new_untitled(path, type=type, ext=ext)
149 else:
150 else:
150 self._new_untitled(path)
151 self._new_untitled(path)
151
152
152 @web.authenticated
153 @web.authenticated
153 @json_errors
154 @json_errors
154 def put(self, path=''):
155 def put(self, path=''):
155 """Saves the file in the location specified by name and path.
156 """Saves the file in the location specified by name and path.
156
157
157 PUT is very similar to POST, but the requester specifies the name,
158 PUT is very similar to POST, but the requester specifies the name,
158 whereas with POST, the server picks the name.
159 whereas with POST, the server picks the name.
159
160
160 PUT /api/contents/path/Name.ipynb
161 PUT /api/contents/path/Name.ipynb
161 Save notebook at ``path/Name.ipynb``. Notebook structure is specified
162 Save notebook at ``path/Name.ipynb``. Notebook structure is specified
162 in `content` key of JSON request body. If content is not specified,
163 in `content` key of JSON request body. If content is not specified,
163 create a new empty notebook.
164 create a new empty notebook.
164 """
165 """
165 model = self.get_json_body()
166 model = self.get_json_body()
166 if model:
167 if model:
167 if model.get('copy_from'):
168 if model.get('copy_from'):
168 raise web.HTTPError(400, "Cannot copy with PUT, only POST")
169 raise web.HTTPError(400, "Cannot copy with PUT, only POST")
169 if self.contents_manager.file_exists(path):
170 if self.contents_manager.file_exists(path):
170 self._save(model, path)
171 self._save(model, path)
171 else:
172 else:
172 self._upload(model, path)
173 self._upload(model, path)
173 else:
174 else:
174 self._new_untitled(path)
175 self._new_untitled(path)
175
176
176 @web.authenticated
177 @web.authenticated
177 @json_errors
178 @json_errors
178 def delete(self, path=''):
179 def delete(self, path=''):
179 """delete a file in the given path"""
180 """delete a file in the given path"""
180 cm = self.contents_manager
181 cm = self.contents_manager
181 self.log.warn('delete %s', path)
182 self.log.warn('delete %s', path)
182 cm.delete(path)
183 cm.delete(path)
183 self.set_status(204)
184 self.set_status(204)
184 self.finish()
185 self.finish()
185
186
186
187
187 class CheckpointsHandler(IPythonHandler):
188 class CheckpointsHandler(IPythonHandler):
188
189
189 SUPPORTED_METHODS = ('GET', 'POST')
190 SUPPORTED_METHODS = ('GET', 'POST')
190
191
191 @web.authenticated
192 @web.authenticated
192 @json_errors
193 @json_errors
193 def get(self, path=''):
194 def get(self, path=''):
194 """get lists checkpoints for a file"""
195 """get lists checkpoints for a file"""
195 cm = self.contents_manager
196 cm = self.contents_manager
196 checkpoints = cm.list_checkpoints(path)
197 checkpoints = cm.list_checkpoints(path)
197 data = json.dumps(checkpoints, default=date_default)
198 data = json.dumps(checkpoints, default=date_default)
198 self.finish(data)
199 self.finish(data)
199
200
200 @web.authenticated
201 @web.authenticated
201 @json_errors
202 @json_errors
202 def post(self, path=''):
203 def post(self, path=''):
203 """post creates a new checkpoint"""
204 """post creates a new checkpoint"""
204 cm = self.contents_manager
205 cm = self.contents_manager
205 checkpoint = cm.create_checkpoint(path)
206 checkpoint = cm.create_checkpoint(path)
206 data = json.dumps(checkpoint, default=date_default)
207 data = json.dumps(checkpoint, default=date_default)
207 location = url_path_join(self.base_url, 'api/contents',
208 location = url_path_join(self.base_url, 'api/contents',
208 path, 'checkpoints', checkpoint['id'])
209 path, 'checkpoints', checkpoint['id'])
209 self.set_header('Location', url_escape(location))
210 self.set_header('Location', url_escape(location))
210 self.set_status(201)
211 self.set_status(201)
211 self.finish(data)
212 self.finish(data)
212
213
213
214
214 class ModifyCheckpointsHandler(IPythonHandler):
215 class ModifyCheckpointsHandler(IPythonHandler):
215
216
216 SUPPORTED_METHODS = ('POST', 'DELETE')
217 SUPPORTED_METHODS = ('POST', 'DELETE')
217
218
218 @web.authenticated
219 @web.authenticated
219 @json_errors
220 @json_errors
220 def post(self, path, checkpoint_id):
221 def post(self, path, checkpoint_id):
221 """post restores a file from a checkpoint"""
222 """post restores a file from a checkpoint"""
222 cm = self.contents_manager
223 cm = self.contents_manager
223 cm.restore_checkpoint(checkpoint_id, path)
224 cm.restore_checkpoint(checkpoint_id, path)
224 self.set_status(204)
225 self.set_status(204)
225 self.finish()
226 self.finish()
226
227
227 @web.authenticated
228 @web.authenticated
228 @json_errors
229 @json_errors
229 def delete(self, path, checkpoint_id):
230 def delete(self, path, checkpoint_id):
230 """delete clears a checkpoint for a given file"""
231 """delete clears a checkpoint for a given file"""
231 cm = self.contents_manager
232 cm = self.contents_manager
232 cm.delete_checkpoint(checkpoint_id, path)
233 cm.delete_checkpoint(checkpoint_id, path)
233 self.set_status(204)
234 self.set_status(204)
234 self.finish()
235 self.finish()
235
236
236
237
237 class NotebooksRedirectHandler(IPythonHandler):
238 class NotebooksRedirectHandler(IPythonHandler):
238 """Redirect /api/notebooks to /api/contents"""
239 """Redirect /api/notebooks to /api/contents"""
239 SUPPORTED_METHODS = ('GET', 'PUT', 'PATCH', 'POST', 'DELETE')
240 SUPPORTED_METHODS = ('GET', 'PUT', 'PATCH', 'POST', 'DELETE')
240
241
241 def get(self, path):
242 def get(self, path):
242 self.log.warn("/api/notebooks is deprecated, use /api/contents")
243 self.log.warn("/api/notebooks is deprecated, use /api/contents")
243 self.redirect(url_path_join(
244 self.redirect(url_path_join(
244 self.base_url,
245 self.base_url,
245 'api/contents',
246 'api/contents',
246 path
247 path
247 ))
248 ))
248
249
249 put = patch = post = delete = get
250 put = patch = post = delete = get
250
251
251
252
252 #-----------------------------------------------------------------------------
253 #-----------------------------------------------------------------------------
253 # URL to handler mappings
254 # URL to handler mappings
254 #-----------------------------------------------------------------------------
255 #-----------------------------------------------------------------------------
255
256
256
257
257 _checkpoint_id_regex = r"(?P<checkpoint_id>[\w-]+)"
258 _checkpoint_id_regex = r"(?P<checkpoint_id>[\w-]+)"
258
259
259 default_handlers = [
260 default_handlers = [
260 (r"/api/contents%s/checkpoints" % path_regex, CheckpointsHandler),
261 (r"/api/contents%s/checkpoints" % path_regex, CheckpointsHandler),
261 (r"/api/contents%s/checkpoints/%s" % (path_regex, _checkpoint_id_regex),
262 (r"/api/contents%s/checkpoints/%s" % (path_regex, _checkpoint_id_regex),
262 ModifyCheckpointsHandler),
263 ModifyCheckpointsHandler),
263 (r"/api/contents%s" % path_regex, ContentsHandler),
264 (r"/api/contents%s" % path_regex, ContentsHandler),
264 (r"/api/notebooks/?(.*)", NotebooksRedirectHandler),
265 (r"/api/notebooks/?(.*)", NotebooksRedirectHandler),
265 ]
266 ]
@@ -1,76 +1,190 b''
1 // Copyright (c) IPython Development Team.
1 // Copyright (c) IPython Development Team.
2 // Distributed under the terms of the Modified BSD License.
2 // Distributed under the terms of the Modified BSD License.
3
3
4 define([
4 define([
5 'jquery',
5 'jquery',
6 'base/js/utils',
6 'base/js/utils',
7 'codemirror/lib/codemirror',
7 'codemirror/lib/codemirror',
8 'codemirror/mode/meta',
8 'codemirror/mode/meta',
9 'codemirror/addon/search/search'
9 'codemirror/addon/comment/comment',
10 'codemirror/addon/dialog/dialog',
11 'codemirror/addon/edit/closebrackets',
12 'codemirror/addon/edit/matchbrackets',
13 'codemirror/addon/search/searchcursor',
14 'codemirror/addon/search/search',
15 'codemirror/keymap/emacs',
16 'codemirror/keymap/sublime',
17 'codemirror/keymap/vim',
10 ],
18 ],
11 function($,
19 function($,
12 utils,
20 utils,
13 CodeMirror
21 CodeMirror
14 ) {
22 ) {
23 "use strict";
24
15 var Editor = function(selector, options) {
25 var Editor = function(selector, options) {
26 var that = this;
16 this.selector = selector;
27 this.selector = selector;
17 this.contents = options.contents;
28 this.contents = options.contents;
18 this.events = options.events;
29 this.events = options.events;
19 this.base_url = options.base_url;
30 this.base_url = options.base_url;
20 this.file_path = options.file_path;
31 this.file_path = options.file_path;
21
32 this.config = options.config;
22 this.codemirror = CodeMirror($(this.selector)[0]);
33 this.codemirror = new CodeMirror($(this.selector)[0]);
34 this.generation = -1;
23
35
24 // It appears we have to set commands on the CodeMirror class, not the
36 // It appears we have to set commands on the CodeMirror class, not the
25 // instance. I'd like to be wrong, but since there should only be one CM
37 // instance. I'd like to be wrong, but since there should only be one CM
26 // instance on the page, this is good enough for now.
38 // instance on the page, this is good enough for now.
27 CodeMirror.commands.save = $.proxy(this.save, this);
39 CodeMirror.commands.save = $.proxy(this.save, this);
28
40
29 this.save_enabled = false;
41 this.save_enabled = false;
42
43 this.config.loaded.then(function () {
44 // load codemirror config
45 var cfg = that.config.data.Editor || {};
46 var cmopts = $.extend(true, {}, // true = recursive copy
47 Editor.default_codemirror_options,
48 cfg.codemirror_options || {}
49 );
50 that._set_codemirror_options(cmopts);
51 that.events.trigger('config_changed.Editor', {config: that.config});
52 });
53 };
54
55 // default CodeMirror options
56 Editor.default_codemirror_options = {
57 extraKeys: {
58 "Tab" : "indentMore",
59 },
60 indentUnit: 4,
61 theme: "ipython",
62 lineNumbers: true,
63 lineWrapping: true,
30 };
64 };
31
65
32 Editor.prototype.load = function() {
66 Editor.prototype.load = function() {
67 /** load the file */
33 var that = this;
68 var that = this;
34 var cm = this.codemirror;
69 var cm = this.codemirror;
35 this.contents.get(this.file_path, {type: 'file', format: 'text'})
70 return this.contents.get(this.file_path, {type: 'file', format: 'text'})
36 .then(function(model) {
71 .then(function(model) {
37 cm.setValue(model.content);
72 cm.setValue(model.content);
38
73
39 // Setting the file's initial value creates a history entry,
74 // Setting the file's initial value creates a history entry,
40 // which we don't want.
75 // which we don't want.
41 cm.clearHistory();
76 cm.clearHistory();
42
77 that._set_mode_for_model(model);
43 // Find and load the highlighting mode
44 utils.requireCodeMirrorMode(model.mimetype, function(spec) {
45 var mode = CodeMirror.getMode({}, spec);
46 cm.setOption('mode', mode);
47 });
48 that.save_enabled = true;
78 that.save_enabled = true;
79 that.generation = cm.changeGeneration();
80 that.events.trigger("file_loaded.Editor", model);
49 },
81 },
50 function(error) {
82 function(error) {
83 that.events.trigger("file_load_failed.Editor", error);
84 if (error.xhr.responseJSON.reason === 'bad format') {
85 window.location = utils.url_path_join(
86 that.base_url,
87 'files',
88 that.file_path
89 );
90 }
51 cm.setValue("Error! " + error.message +
91 cm.setValue("Error! " + error.message +
52 "\nSaving disabled.");
92 "\nSaving disabled.");
53 that.save_enabled = false;
93 that.save_enabled = false;
54 }
94 }
55 );
95 );
56 };
96 };
57
97
98 Editor.prototype._set_mode_for_model = function (model) {
99 /** Set the CodeMirror mode based on the file model */
100
101 // Find and load the highlighting mode,
102 // first by mime-type, then by file extension
103 var modeinfo = CodeMirror.findModeByMIME(model.mimetype);
104 if (modeinfo.mode === "null") {
105 // find by mime failed, use find by ext
106 var ext_idx = model.name.lastIndexOf('.');
107
108 if (ext_idx > 0) {
109 // CodeMirror.findModeByExtension wants extension without '.'
110 modeinfo = CodeMirror.findModeByExtension(model.name.slice(ext_idx + 1));
111 }
112 }
113 if (modeinfo) {
114 this.set_codemirror_mode(modeinfo);
115 }
116 };
117
118 Editor.prototype.set_codemirror_mode = function (modeinfo) {
119 /** set the codemirror mode from a modeinfo struct */
120 var that = this;
121 utils.requireCodeMirrorMode(modeinfo, function () {
122 that.codemirror.setOption('mode', modeinfo.mode);
123 that.events.trigger("mode_changed.Editor", modeinfo);
124 });
125 };
126
127 Editor.prototype.get_filename = function () {
128 return utils.url_path_split(this.file_path)[1];
129 };
130
131 Editor.prototype.rename = function (new_name) {
132 /** rename the file */
133 var that = this;
134 var parent = utils.url_path_split(this.file_path)[0];
135 var new_path = utils.url_path_join(parent, new_name);
136 return this.contents.rename(this.file_path, new_path).then(
137 function (model) {
138 that.file_path = model.path;
139 that.events.trigger('file_renamed.Editor', model);
140 that._set_mode_for_model(model);
141 }
142 );
143 };
144
58 Editor.prototype.save = function() {
145 Editor.prototype.save = function () {
146 /** save the file */
59 if (!this.save_enabled) {
147 if (!this.save_enabled) {
60 console.log("Not saving, save disabled");
148 console.log("Not saving, save disabled");
61 return;
149 return;
62 }
150 }
63 var model = {
151 var model = {
64 path: this.file_path,
152 path: this.file_path,
65 type: 'file',
153 type: 'file',
66 format: 'text',
154 format: 'text',
67 content: this.codemirror.getValue(),
155 content: this.codemirror.getValue(),
68 };
156 };
69 var that = this;
157 var that = this;
70 this.contents.save(this.file_path, model).then(function() {
158 // record change generation for isClean
71 that.events.trigger("save_succeeded.TextEditor");
159 this.generation = this.codemirror.changeGeneration();
160 return this.contents.save(this.file_path, model).then(function(data) {
161 that.events.trigger("file_saved.Editor", data);
162 });
163 };
164
165 Editor.prototype._set_codemirror_options = function (options) {
166 // update codemirror options from a dict
167 var codemirror = this.codemirror;
168 $.map(options, function (value, opt) {
169 if (value === null) {
170 value = CodeMirror.defaults[opt];
171 }
172 codemirror.setOption(opt, value);
72 });
173 });
73 };
174 };
74
175
176 Editor.prototype.update_codemirror_options = function (options) {
177 /** update codemirror options locally and save changes in config */
178 var that = this;
179 this._set_codemirror_options(options);
180 return this.config.update({
181 Editor: {
182 codemirror_options: options
183 }
184 }).then(
185 that.events.trigger('config_changed.Editor', {config: that.config})
186 );
187 };
188
75 return {Editor: Editor};
189 return {Editor: Editor};
76 });
190 });
@@ -1,64 +1,81 b''
1 // Copyright (c) IPython Development Team.
1 // Copyright (c) IPython Development Team.
2 // Distributed under the terms of the Modified BSD License.
2 // Distributed under the terms of the Modified BSD License.
3
3
4 require([
4 require([
5 'base/js/namespace',
5 'base/js/namespace',
6 'base/js/utils',
6 'base/js/utils',
7 'base/js/page',
7 'base/js/page',
8 'base/js/events',
8 'base/js/events',
9 'contents',
9 'contents',
10 'services/config',
10 'services/config',
11 'edit/js/editor',
11 'edit/js/editor',
12 'edit/js/menubar',
12 'edit/js/menubar',
13 'edit/js/savewidget',
13 'edit/js/notificationarea',
14 'edit/js/notificationarea',
14 'custom/custom',
15 'custom/custom',
15 ], function(
16 ], function(
16 IPython,
17 IPython,
17 utils,
18 utils,
18 page,
19 page,
19 events,
20 events,
20 contents,
21 contents,
21 configmod,
22 configmod,
22 editor,
23 editmod,
23 menubar,
24 menubar,
25 savewidget,
24 notificationarea
26 notificationarea
25 ){
27 ){
26 page = new page.Page();
28 page = new page.Page();
27
29
28 var base_url = utils.get_body_data('baseUrl');
30 var base_url = utils.get_body_data('baseUrl');
29 var file_path = utils.get_body_data('filePath');
31 var file_path = utils.get_body_data('filePath');
30 contents = new contents.Contents({base_url: base_url});
32 contents = new contents.Contents({base_url: base_url});
31 var config = new configmod.ConfigSection('edit', {base_url: base_url})
33 var config = new configmod.ConfigSection('edit', {base_url: base_url});
32 config.load();
34 config.load();
33
35
34 var editor = new editor.Editor('#texteditor-container', {
36 var editor = new editmod.Editor('#texteditor-container', {
35 base_url: base_url,
37 base_url: base_url,
36 events: events,
38 events: events,
37 contents: contents,
39 contents: contents,
38 file_path: file_path,
40 file_path: file_path,
41 config: config,
39 });
42 });
40
43
41 // Make it available for debugging
44 // Make it available for debugging
42 IPython.editor = editor;
45 IPython.editor = editor;
43
46
47 var save_widget = new savewidget.SaveWidget('span#save_widget', {
48 editor: editor,
49 events: events,
50 });
51
44 var menus = new menubar.MenuBar('#menubar', {
52 var menus = new menubar.MenuBar('#menubar', {
45 base_url: base_url,
53 base_url: base_url,
46 editor: editor,
54 editor: editor,
55 events: events,
56 save_widget: save_widget,
47 });
57 });
48
58
49 var notification_area = new notificationarea.EditorNotificationArea(
59 var notification_area = new notificationarea.EditorNotificationArea(
50 '#notification_area', {
60 '#notification_area', {
51 events: events,
61 events: events,
52 });
62 });
53 notification_area.init_notification_widgets();
63 notification_area.init_notification_widgets();
54
64
55 config.loaded.then(function() {
65 config.loaded.then(function() {
56 if (config.data.load_extensions) {
66 if (config.data.load_extensions) {
57 var nbextension_paths = Object.getOwnPropertyNames(
67 var nbextension_paths = Object.getOwnPropertyNames(
58 config.data.load_extensions);
68 config.data.load_extensions);
59 IPython.load_extensions.apply(this, nbextension_paths);
69 IPython.load_extensions.apply(this, nbextension_paths);
60 }
70 }
61 });
71 });
62 editor.load();
72 editor.load();
63 page.show();
73 page.show();
74
75 window.onbeforeunload = function () {
76 if (editor.save_enabled && !editor.codemirror.isClean(editor.generation)) {
77 return "Unsaved changes will be lost. Close anyway?";
78 }
79 };
80
64 });
81 });
@@ -1,50 +1,155 b''
1 // Copyright (c) IPython Development Team.
1 // Copyright (c) IPython Development Team.
2 // Distributed under the terms of the Modified BSD License.
2 // Distributed under the terms of the Modified BSD License.
3
3
4 define([
4 define([
5 'base/js/namespace',
6 'jquery',
5 'jquery',
6 'base/js/namespace',
7 'base/js/utils',
7 'base/js/utils',
8 'base/js/dialog',
9 'codemirror/lib/codemirror',
10 'codemirror/mode/meta',
8 'bootstrap',
11 'bootstrap',
9 ], function(IPython, $, utils, bootstrap) {
12 ], function($, IPython, utils, dialog, CodeMirror) {
10 "use strict";
13 "use strict";
11
14
12 var MenuBar = function (selector, options) {
15 var MenuBar = function (selector, options) {
13 /**
16 /**
14 * Constructor
17 * Constructor
15 *
18 *
16 * A MenuBar Class to generate the menubar of IPython notebook
19 * A MenuBar Class to generate the menubar of IPython notebook
17 *
20 *
18 * Parameters:
21 * Parameters:
19 * selector: string
22 * selector: string
20 * options: dictionary
23 * options: dictionary
21 * Dictionary of keyword arguments.
24 * Dictionary of keyword arguments.
22 * codemirror: CodeMirror instance
25 * codemirror: CodeMirror instance
23 * contents: ContentManager instance
26 * contents: ContentManager instance
24 * events: $(Events) instance
27 * events: $(Events) instance
25 * base_url : string
28 * base_url : string
26 * file_path : string
29 * file_path : string
27 */
30 */
28 options = options || {};
31 options = options || {};
29 this.base_url = options.base_url || utils.get_body_data("baseUrl");
32 this.base_url = options.base_url || utils.get_body_data("baseUrl");
30 this.selector = selector;
33 this.selector = selector;
31 this.editor = options.editor;
34 this.editor = options.editor;
35 this.events = options.events;
36 this.save_widget = options.save_widget;
32
37
33 if (this.selector !== undefined) {
38 if (this.selector !== undefined) {
34 this.element = $(selector);
39 this.element = $(selector);
35 this.bind_events();
40 this.bind_events();
36 }
41 }
42 this._load_mode_menu();
43 Object.seal(this);
37 };
44 };
38
45
39 MenuBar.prototype.bind_events = function () {
46 MenuBar.prototype.bind_events = function () {
40 /**
41 * File
42 */
43 var that = this;
47 var that = this;
44 this.element.find('#save_file').click(function () {
48 var editor = that.editor;
45 that.editor.save();
49
50 // File
51 this.element.find('#new-file').click(function () {
52 var w = window.open();
53 // Create a new file in the current directory
54 var parent = utils.url_path_split(editor.file_path)[0];
55 editor.contents.new_untitled(parent, {type: "file"}).then(
56 function (data) {
57 w.location = utils.url_join_encode(
58 that.base_url, 'edit', data.path
59 );
60 },
61 function(error) {
62 w.close();
63 dialog.modal({
64 title : 'Creating New File Failed',
65 body : "The error was: " + error.message,
66 buttons : {'OK' : {'class' : 'btn-primary'}}
67 });
68 }
69 );
70 });
71 this.element.find('#save-file').click(function () {
72 editor.save();
73 });
74 this.element.find('#rename-file').click(function () {
75 that.save_widget.rename();
76 });
77
78 // Edit
79 this.element.find('#menu-find').click(function () {
80 editor.codemirror.execCommand("find");
81 });
82 this.element.find('#menu-replace').click(function () {
83 editor.codemirror.execCommand("replace");
84 });
85 this.element.find('#menu-keymap-default').click(function () {
86 editor.update_codemirror_options({
87 vimMode: false,
88 keyMap: 'default'
89 });
90 });
91 this.element.find('#menu-keymap-sublime').click(function () {
92 editor.update_codemirror_options({
93 vimMode: false,
94 keyMap: 'sublime'
95 });
46 });
96 });
97 this.element.find('#menu-keymap-emacs').click(function () {
98 editor.update_codemirror_options({
99 vimMode: false,
100 keyMap: 'emacs'
101 });
102 });
103 this.element.find('#menu-keymap-vim').click(function () {
104 editor.update_codemirror_options({
105 vimMode: true,
106 keyMap: 'vim'
107 });
108 });
109
110 // View
111 this.element.find('#menu-line-numbers').click(function () {
112 var current = editor.codemirror.getOption('lineNumbers');
113 var value = Boolean(1-current);
114 editor.update_codemirror_options({lineNumbers: value});
115 });
116
117 this.events.on("config_changed.Editor", function () {
118 var keyMap = editor.codemirror.getOption('keyMap') || "default";
119 that.element.find(".selected-keymap").removeClass("selected-keymap");
120 that.element.find("#menu-keymap-" + keyMap).addClass("selected-keymap");
121 });
122
123 this.events.on("mode_changed.Editor", function (evt, modeinfo) {
124 that.element.find("#current-mode")
125 .text(modeinfo.name)
126 .attr(
127 'title',
128 "The current language is " + modeinfo.name
129 );
130 });
131 };
132
133 MenuBar.prototype._load_mode_menu = function () {
134 var list = this.element.find("#mode-menu");
135 var editor = this.editor;
136 function make_set_mode(info) {
137 return function () {
138 editor.set_codemirror_mode(info);
139 };
140 }
141 for (var i = 0; i < CodeMirror.modeInfo.length; i++) {
142 var info = CodeMirror.modeInfo[i];
143 list.append($("<li>").append(
144 $("<a>").attr("href", "#")
145 .text(info.name)
146 .click(make_set_mode(info))
147 .attr('title',
148 "Set language to " + info.name
149 )
150 ));
151 }
47 };
152 };
48
153
49 return {'MenuBar': MenuBar};
154 return {'MenuBar': MenuBar};
50 });
155 });
@@ -1,260 +1,260 b''
1 // Copyright (c) IPython Development Team.
1 // Copyright (c) IPython Development Team.
2 // Distributed under the terms of the Modified BSD License.
2 // Distributed under the terms of the Modified BSD License.
3
3
4 define([
4 define([
5 'base/js/namespace',
5 'base/js/namespace',
6 'jquery',
6 'jquery',
7 'base/js/utils',
7 'base/js/utils',
8 'base/js/dialog',
8 'base/js/dialog',
9 'base/js/keyboard',
9 'base/js/keyboard',
10 'moment',
10 'moment',
11 ], function(IPython, $, utils, dialog, keyboard, moment) {
11 ], function(IPython, $, utils, dialog, keyboard, moment) {
12 "use strict";
12 "use strict";
13
13
14 var SaveWidget = function (selector, options) {
14 var SaveWidget = function (selector, options) {
15 /**
15 /**
16 * TODO: Remove circular ref.
16 * TODO: Remove circular ref.
17 */
17 */
18 this.notebook = undefined;
18 this.notebook = undefined;
19 this.selector = selector;
19 this.selector = selector;
20 this.events = options.events;
20 this.events = options.events;
21 this._checkpoint_date = undefined;
21 this._checkpoint_date = undefined;
22 this.keyboard_manager = options.keyboard_manager;
22 this.keyboard_manager = options.keyboard_manager;
23 if (this.selector !== undefined) {
23 if (this.selector !== undefined) {
24 this.element = $(selector);
24 this.element = $(selector);
25 this.bind_events();
25 this.bind_events();
26 }
26 }
27 };
27 };
28
28
29
29
30 SaveWidget.prototype.bind_events = function () {
30 SaveWidget.prototype.bind_events = function () {
31 var that = this;
31 var that = this;
32 this.element.find('span#notebook_name').click(function () {
32 this.element.find('span.filename').click(function () {
33 that.rename_notebook({notebook: that.notebook});
33 that.rename_notebook({notebook: that.notebook});
34 });
34 });
35 this.events.on('notebook_loaded.Notebook', function () {
35 this.events.on('notebook_loaded.Notebook', function () {
36 that.update_notebook_name();
36 that.update_notebook_name();
37 that.update_document_title();
37 that.update_document_title();
38 });
38 });
39 this.events.on('notebook_saved.Notebook', function () {
39 this.events.on('notebook_saved.Notebook', function () {
40 that.update_notebook_name();
40 that.update_notebook_name();
41 that.update_document_title();
41 that.update_document_title();
42 });
42 });
43 this.events.on('notebook_renamed.Notebook', function () {
43 this.events.on('notebook_renamed.Notebook', function () {
44 that.update_notebook_name();
44 that.update_notebook_name();
45 that.update_document_title();
45 that.update_document_title();
46 that.update_address_bar();
46 that.update_address_bar();
47 });
47 });
48 this.events.on('notebook_save_failed.Notebook', function () {
48 this.events.on('notebook_save_failed.Notebook', function () {
49 that.set_save_status('Autosave Failed!');
49 that.set_save_status('Autosave Failed!');
50 });
50 });
51 this.events.on('notebook_read_only.Notebook', function () {
51 this.events.on('notebook_read_only.Notebook', function () {
52 that.set_save_status('(read only)');
52 that.set_save_status('(read only)');
53 // disable future set_save_status
53 // disable future set_save_status
54 that.set_save_status = function () {};
54 that.set_save_status = function () {};
55 });
55 });
56 this.events.on('checkpoints_listed.Notebook', function (event, data) {
56 this.events.on('checkpoints_listed.Notebook', function (event, data) {
57 that._set_last_checkpoint(data[0]);
57 that._set_last_checkpoint(data[0]);
58 });
58 });
59
59
60 this.events.on('checkpoint_created.Notebook', function (event, data) {
60 this.events.on('checkpoint_created.Notebook', function (event, data) {
61 that._set_last_checkpoint(data);
61 that._set_last_checkpoint(data);
62 });
62 });
63 this.events.on('set_dirty.Notebook', function (event, data) {
63 this.events.on('set_dirty.Notebook', function (event, data) {
64 that.set_autosaved(data.value);
64 that.set_autosaved(data.value);
65 });
65 });
66 };
66 };
67
67
68
68
69 SaveWidget.prototype.rename_notebook = function (options) {
69 SaveWidget.prototype.rename_notebook = function (options) {
70 options = options || {};
70 options = options || {};
71 var that = this;
71 var that = this;
72 var dialog_body = $('<div/>').append(
72 var dialog_body = $('<div/>').append(
73 $("<p/>").addClass("rename-message")
73 $("<p/>").addClass("rename-message")
74 .text('Enter a new notebook name:')
74 .text('Enter a new notebook name:')
75 ).append(
75 ).append(
76 $("<br/>")
76 $("<br/>")
77 ).append(
77 ).append(
78 $('<input/>').attr('type','text').attr('size','25').addClass('form-control')
78 $('<input/>').attr('type','text').attr('size','25').addClass('form-control')
79 .val(options.notebook.get_notebook_name())
79 .val(options.notebook.get_notebook_name())
80 );
80 );
81 var d = dialog.modal({
81 var d = dialog.modal({
82 title: "Rename Notebook",
82 title: "Rename Notebook",
83 body: dialog_body,
83 body: dialog_body,
84 notebook: options.notebook,
84 notebook: options.notebook,
85 keyboard_manager: this.keyboard_manager,
85 keyboard_manager: this.keyboard_manager,
86 buttons : {
86 buttons : {
87 "OK": {
87 "OK": {
88 class: "btn-primary",
88 class: "btn-primary",
89 click: function () {
89 click: function () {
90 var new_name = d.find('input').val();
90 var new_name = d.find('input').val();
91 if (!options.notebook.test_notebook_name(new_name)) {
91 if (!options.notebook.test_notebook_name(new_name)) {
92 d.find('.rename-message').text(
92 d.find('.rename-message').text(
93 "Invalid notebook name. Notebook names must "+
93 "Invalid notebook name. Notebook names must "+
94 "have 1 or more characters and can contain any characters " +
94 "have 1 or more characters and can contain any characters " +
95 "except :/\\. Please enter a new notebook name:"
95 "except :/\\. Please enter a new notebook name:"
96 );
96 );
97 return false;
97 return false;
98 } else {
98 } else {
99 d.find('.rename-message').text("Renaming...");
99 d.find('.rename-message').text("Renaming...");
100 d.find('input[type="text"]').prop('disabled', true);
100 d.find('input[type="text"]').prop('disabled', true);
101 that.notebook.rename(new_name).then(
101 that.notebook.rename(new_name).then(
102 function () {
102 function () {
103 d.modal('hide');
103 d.modal('hide');
104 }, function (error) {
104 }, function (error) {
105 d.find('.rename-message').text(error.message || 'Unknown error');
105 d.find('.rename-message').text(error.message || 'Unknown error');
106 d.find('input[type="text"]').prop('disabled', false).focus().select();
106 d.find('input[type="text"]').prop('disabled', false).focus().select();
107 }
107 }
108 );
108 );
109 return false;
109 return false;
110 }
110 }
111 }
111 }
112 },
112 },
113 "Cancel": {}
113 "Cancel": {}
114 },
114 },
115 open : function () {
115 open : function () {
116 /**
116 /**
117 * Upon ENTER, click the OK button.
117 * Upon ENTER, click the OK button.
118 */
118 */
119 d.find('input[type="text"]').keydown(function (event) {
119 d.find('input[type="text"]').keydown(function (event) {
120 if (event.which === keyboard.keycodes.enter) {
120 if (event.which === keyboard.keycodes.enter) {
121 d.find('.btn-primary').first().click();
121 d.find('.btn-primary').first().click();
122 return false;
122 return false;
123 }
123 }
124 });
124 });
125 d.find('input[type="text"]').focus().select();
125 d.find('input[type="text"]').focus().select();
126 }
126 }
127 });
127 });
128 };
128 };
129
129
130
130
131 SaveWidget.prototype.update_notebook_name = function () {
131 SaveWidget.prototype.update_notebook_name = function () {
132 var nbname = this.notebook.get_notebook_name();
132 var nbname = this.notebook.get_notebook_name();
133 this.element.find('span#notebook_name').text(nbname);
133 this.element.find('span.filename').text(nbname);
134 };
134 };
135
135
136
136
137 SaveWidget.prototype.update_document_title = function () {
137 SaveWidget.prototype.update_document_title = function () {
138 var nbname = this.notebook.get_notebook_name();
138 var nbname = this.notebook.get_notebook_name();
139 document.title = nbname;
139 document.title = nbname;
140 };
140 };
141
141
142 SaveWidget.prototype.update_address_bar = function(){
142 SaveWidget.prototype.update_address_bar = function(){
143 var base_url = this.notebook.base_url;
143 var base_url = this.notebook.base_url;
144 var path = this.notebook.notebook_path;
144 var path = this.notebook.notebook_path;
145 var state = {path : path};
145 var state = {path : path};
146 window.history.replaceState(state, "", utils.url_join_encode(
146 window.history.replaceState(state, "", utils.url_join_encode(
147 base_url,
147 base_url,
148 "notebooks",
148 "notebooks",
149 path)
149 path)
150 );
150 );
151 };
151 };
152
152
153
153
154 SaveWidget.prototype.set_save_status = function (msg) {
154 SaveWidget.prototype.set_save_status = function (msg) {
155 this.element.find('span#autosave_status').text(msg);
155 this.element.find('span.autosave_status').text(msg);
156 };
156 };
157
157
158 SaveWidget.prototype._set_checkpoint_status = function (human_date, iso_date) {
158 SaveWidget.prototype._set_checkpoint_status = function (human_date, iso_date) {
159 var el = this.element.find('span#checkpoint_status');
159 var el = this.element.find('span.checkpoint_status');
160 if(human_date){
160 if(human_date){
161 el.text("Last Checkpoint: "+human_date).attr('title',iso_date);
161 el.text("Last Checkpoint: "+human_date).attr('title',iso_date);
162 } else {
162 } else {
163 el.text('').attr('title', 'no-checkpoint');
163 el.text('').attr('title', 'no-checkpoint');
164 }
164 }
165 };
165 };
166
166
167 // compute (roughly) the remaining time in millisecond until the next
167 // compute (roughly) the remaining time in millisecond until the next
168 // moment.js relative time update of the string, which by default
168 // moment.js relative time update of the string, which by default
169 // happend at
169 // happend at
170 // (a few seconds ago)
170 // (a few seconds ago)
171 // - 45sec,
171 // - 45sec,
172 // (a minute ago)
172 // (a minute ago)
173 // - 90sec,
173 // - 90sec,
174 // ( x minutes ago)
174 // ( x minutes ago)
175 // - then every minutes until
175 // - then every minutes until
176 // - 45 min,
176 // - 45 min,
177 // (an hour ago)
177 // (an hour ago)
178 // - 1h45,
178 // - 1h45,
179 // (x hours ago )
179 // (x hours ago )
180 // - then every hours
180 // - then every hours
181 // - 22 hours ago
181 // - 22 hours ago
182 var _next_timeago_update = function(deltatime_ms){
182 var _next_timeago_update = function(deltatime_ms){
183 var s = 1000;
183 var s = 1000;
184 var m = 60*s;
184 var m = 60*s;
185 var h = 60*m;
185 var h = 60*m;
186
186
187 var mtt = moment.relativeTimeThreshold;
187 var mtt = moment.relativeTimeThreshold;
188
188
189 if(deltatime_ms < mtt.s*s){
189 if(deltatime_ms < mtt.s*s){
190 return mtt.s*s-deltatime_ms;
190 return mtt.s*s-deltatime_ms;
191 } else if (deltatime_ms < (mtt.s*s+m)) {
191 } else if (deltatime_ms < (mtt.s*s+m)) {
192 return (mtt.s*s+m)-deltatime_ms;
192 return (mtt.s*s+m)-deltatime_ms;
193 } else if (deltatime_ms < mtt.m*m){
193 } else if (deltatime_ms < mtt.m*m){
194 return m;
194 return m;
195 } else if (deltatime_ms < (mtt.m*m+h)){
195 } else if (deltatime_ms < (mtt.m*m+h)){
196 return (mtt.m*m+h)-deltatime_ms;
196 return (mtt.m*m+h)-deltatime_ms;
197 } else {
197 } else {
198 return h;
198 return h;
199 }
199 }
200 };
200 };
201
201
202 SaveWidget.prototype._regularly_update_checkpoint_date = function(){
202 SaveWidget.prototype._regularly_update_checkpoint_date = function(){
203 if (!this._checkpoint_date) {
203 if (!this._checkpoint_date) {
204 this._set_checkpoint_status(null);
204 this._set_checkpoint_status(null);
205 console.log('no checkpoint done');
205 console.log('no checkpoint done');
206 return;
206 return;
207 }
207 }
208 var chkd = moment(this._checkpoint_date);
208 var chkd = moment(this._checkpoint_date);
209 var longdate = chkd.format('llll');
209 var longdate = chkd.format('llll');
210
210
211 var that = this;
211 var that = this;
212 var recall = function(t){
212 var recall = function(t){
213 /**
213 /**
214 * recall slightly later (1s) as long timeout in js might be imprecise,
214 * recall slightly later (1s) as long timeout in js might be imprecise,
215 * and you want to be call **after** the change of formatting should happend.
215 * and you want to be call **after** the change of formatting should happend.
216 */
216 */
217 return setTimeout(
217 return setTimeout(
218 $.proxy(that._regularly_update_checkpoint_date, that),
218 $.proxy(that._regularly_update_checkpoint_date, that),
219 t + 1000
219 t + 1000
220 );
220 );
221 };
221 };
222 var tdelta = Math.ceil(new Date()-this._checkpoint_date);
222 var tdelta = Math.ceil(new Date()-this._checkpoint_date);
223
223
224 // update regularly for the first 6hours and show
224 // update regularly for the first 6hours and show
225 // <x time> ago
225 // <x time> ago
226 if(tdelta < tdelta < 6*3600*1000){
226 if(tdelta < 6*3600*1000){
227 recall(_next_timeago_update(tdelta));
227 recall(_next_timeago_update(tdelta));
228 this._set_checkpoint_status(chkd.fromNow(), longdate);
228 this._set_checkpoint_status(chkd.fromNow(), longdate);
229 // otherwise update every hour and show
229 // otherwise update every hour and show
230 // <Today | yesterday|...> at hh,mm,ss
230 // <Today | yesterday|...> at hh,mm,ss
231 } else {
231 } else {
232 recall(1*3600*1000);
232 recall(1*3600*1000);
233 this._set_checkpoint_status(chkd.calendar(), longdate);
233 this._set_checkpoint_status(chkd.calendar(), longdate);
234 }
234 }
235 };
235 };
236
236
237 SaveWidget.prototype._set_last_checkpoint = function (checkpoint) {
237 SaveWidget.prototype._set_last_checkpoint = function (checkpoint) {
238 if (checkpoint) {
238 if (checkpoint) {
239 this._checkpoint_date = new Date(checkpoint.last_modified);
239 this._checkpoint_date = new Date(checkpoint.last_modified);
240 } else {
240 } else {
241 this._checkpoint_date = null;
241 this._checkpoint_date = null;
242 }
242 }
243 this._regularly_update_checkpoint_date();
243 this._regularly_update_checkpoint_date();
244
244
245 };
245 };
246
246
247 SaveWidget.prototype.set_autosaved = function (dirty) {
247 SaveWidget.prototype.set_autosaved = function (dirty) {
248 if (dirty) {
248 if (dirty) {
249 this.set_save_status("(unsaved changes)");
249 this.set_save_status("(unsaved changes)");
250 } else {
250 } else {
251 this.set_save_status("(autosaved)");
251 this.set_save_status("(autosaved)");
252 }
252 }
253 };
253 };
254
254
255 // Backwards compatibility.
255 // Backwards compatibility.
256 IPython.SaveWidget = SaveWidget;
256 IPython.SaveWidget = SaveWidget;
257
257
258 return {'SaveWidget': SaveWidget};
258 return {'SaveWidget': SaveWidget};
259
259
260 });
260 });
@@ -1,93 +1,79 b''
1
1
2 body {
2 body {
3 background-color: @body-bg;
3 background-color: @body-bg;
4 }
4 }
5
5
6 @media (max-width: 767px) {
6 @media (max-width: 767px) {
7 // remove bootstrap-responsive's body padding on small screens
7 // remove bootstrap-responsive's body padding on small screens
8 body.notebook_app {
8 body.notebook_app {
9 padding-left: 0px;
9 padding-left: 0px;
10 padding-right: 0px;
10 padding-right: 0px;
11 }
11 }
12 }
12 }
13
13
14 #ipython-main-app {
14 #ipython-main-app {
15 .border-box-sizing();
15 .border-box-sizing();
16 }
16 }
17
17
18 span#notebook_name {
19 height: 1em;
20 line-height: 1em;
21 padding: 3px;
22 border: none;
23 font-size: 146.5%;
24 &:hover{
25 // ensure body is lighter on dark palette,
26 // and vice versa
27 background-color:contrast(@body-bg, lighten(@body-bg,30%), darken(@body-bg,10%));
28 }
29 .corner-all;
30 }
31
32 div#notebook_panel {
18 div#notebook_panel {
33 margin: 0px 0px 0px 0px;
19 margin: 0px 0px 0px 0px;
34 padding: 0px;
20 padding: 0px;
35 .border-box-sizing();
21 .border-box-sizing();
36 }
22 }
37 div#notebook {
23 div#notebook {
38 font-size: @notebook_font_size;
24 font-size: @notebook_font_size;
39 line-height: @notebook_line_height;
25 line-height: @notebook_line_height;
40 overflow-y: hidden;
26 overflow-y: hidden;
41 overflow-x: auto;
27 overflow-x: auto;
42 width: 100%;
28 width: 100%;
43 /* This spaces the cell away from the edge of the notebook area */
29 /* This spaces the cell away from the edge of the notebook area */
44 padding: 2em 0 2em 0;
30 padding: 2em 0 2em 0;
45 margin: 0px;
31 margin: 0px;
46 outline: none;
32 outline: none;
47 .border-box-sizing();
33 .border-box-sizing();
48 }
34 }
49
35
50 div.ui-widget-content {
36 div.ui-widget-content {
51 border: 1px solid @border_color;
37 border: 1px solid @border_color;
52 outline: none;
38 outline: none;
53 }
39 }
54
40
55 pre.dialog {
41 pre.dialog {
56 background-color: @cell_background;
42 background-color: @cell_background;
57 border: 1px solid #ddd;
43 border: 1px solid #ddd;
58 .corner-all;
44 .corner-all;
59 padding: 0.4em;
45 padding: 0.4em;
60 padding-left: 2em;
46 padding-left: 2em;
61 }
47 }
62
48
63 p.dialog {
49 p.dialog {
64 padding : 0.2em;
50 padding : 0.2em;
65 }
51 }
66
52
67 /* Word-wrap output correctly. This is the CSS3 spelling, though Firefox seems
53 /* Word-wrap output correctly. This is the CSS3 spelling, though Firefox seems
68 to not honor it correctly. Webkit browsers (Chrome, rekonq, Safari) do.
54 to not honor it correctly. Webkit browsers (Chrome, rekonq, Safari) do.
69 */
55 */
70 pre, code, kbd, samp { white-space: pre-wrap; }
56 pre, code, kbd, samp { white-space: pre-wrap; }
71
57
72 #fonttest {
58 #fonttest {
73 font-family: @font-family-monospace;
59 font-family: @font-family-monospace;
74 }
60 }
75
61
76 p {
62 p {
77 margin-bottom:0;
63 margin-bottom:0;
78 }
64 }
79
65
80 .end_space {
66 .end_space {
81 height: 200px;
67 height: 200px;
82 }
68 }
83
69
84 .lower-header-bar {
70 .lower-header-bar {
85 width: 100%;
71 width: 100%;
86 height: 0px;
72 height: 0px;
87 border-bottom: 1px solid @navbar-default-border;
73 border-bottom: 1px solid @navbar-default-border;
88 margin-bottom: -1px;
74 margin-bottom: -1px;
89 }
75 }
90
76
91 .notebook_app #header {
77 .notebook_app #header {
92 .box-shadow(@notebook-shadow);
78 .box-shadow(@notebook-shadow);
93 }
79 }
@@ -1,33 +1,41 b''
1 span#save_widget {
1 span.save_widget {
2 margin-top: 6px;
2 margin-top: 6px;
3
4 span.filename {
5 height: 1em;
6 line-height: 1em;
7 padding: 3px;
8 border: none;
9 font-size: 146.5%;
10 &:hover{
11 // ensure body is lighter on dark palette,
12 // and vice versa
13 background-color:contrast(@body-bg, lighten(@body-bg,30%), darken(@body-bg,10%));
14 }
15 .corner-all;
16 }
3 }
17 }
4
18
5 span#checkpoint_status, span#autosave_status {
19 span.checkpoint_status, span.autosave_status {
6 font-size: small;
20 font-size: small;
7 }
21 }
8
22
9 @media (max-width: 767px) {
23 @media (max-width: 767px) {
10 span#save_widget {
24 span.save_widget {
11 font-size: small;
25 font-size: small;
12 }
26 }
13 span#checkpoint_status, span#autosave_status {
27 span.checkpoint_status, span.autosave_status {
14 font-size: x-small;
15 }
16 }
17
18 @media (max-width: 767px) {
19 span#checkpoint_status, span#autosave_status {
20 display: none;
28 display: none;
21 }
29 }
22 }
30 }
23
31
24 @media (min-width: 768px) and (max-width: 979px) {
32 @media (min-width: 768px) and (max-width: 979px) {
25 span#checkpoint_status {
33 span.checkpoint_status {
26 display: none;
34 display: none;
27 }
35 }
28 span#autosave_status {
36 span.autosave_status {
29 font-size: x-small;
37 font-size: x-small;
30 }
38 }
31 }
39 }
32
40
33
41
@@ -1,251 +1,252 b''
1 // Copyright (c) IPython Development Team.
1 // Copyright (c) IPython Development Team.
2 // Distributed under the terms of the Modified BSD License.
2 // Distributed under the terms of the Modified BSD License.
3
3
4 define([
4 define([
5 'base/js/namespace',
5 'base/js/namespace',
6 'jquery',
6 'jquery',
7 'base/js/utils',
7 'base/js/utils',
8 ], function(IPython, $, utils) {
8 ], function(IPython, $, utils) {
9 "use strict";
9 "use strict";
10 var Contents = function(options) {
10 var Contents = function(options) {
11 /**
11 /**
12 * Constructor
12 * Constructor
13 *
13 *
14 * A contents handles passing file operations
14 * A contents handles passing file operations
15 * to the back-end. This includes checkpointing
15 * to the back-end. This includes checkpointing
16 * with the normal file operations.
16 * with the normal file operations.
17 *
17 *
18 * Parameters:
18 * Parameters:
19 * options: dictionary
19 * options: dictionary
20 * Dictionary of keyword arguments.
20 * Dictionary of keyword arguments.
21 * base_url: string
21 * base_url: string
22 */
22 */
23 this.base_url = options.base_url;
23 this.base_url = options.base_url;
24 };
24 };
25
25
26 /** Error type */
26 /** Error type */
27 Contents.DIRECTORY_NOT_EMPTY_ERROR = 'DirectoryNotEmptyError';
27 Contents.DIRECTORY_NOT_EMPTY_ERROR = 'DirectoryNotEmptyError';
28
28
29 Contents.DirectoryNotEmptyError = function() {
29 Contents.DirectoryNotEmptyError = function() {
30 // Constructor
30 // Constructor
31 //
31 //
32 // An error representing the result of attempting to delete a non-empty
32 // An error representing the result of attempting to delete a non-empty
33 // directory.
33 // directory.
34 this.message = 'A directory must be empty before being deleted.';
34 this.message = 'A directory must be empty before being deleted.';
35 };
35 };
36
36
37 Contents.DirectoryNotEmptyError.prototype = Object.create(Error.prototype);
37 Contents.DirectoryNotEmptyError.prototype = Object.create(Error.prototype);
38 Contents.DirectoryNotEmptyError.prototype.name =
38 Contents.DirectoryNotEmptyError.prototype.name =
39 Contents.DIRECTORY_NOT_EMPTY_ERROR;
39 Contents.DIRECTORY_NOT_EMPTY_ERROR;
40
40
41
41
42 Contents.prototype.api_url = function() {
42 Contents.prototype.api_url = function() {
43 var url_parts = [this.base_url, 'api/contents'].concat(
43 var url_parts = [this.base_url, 'api/contents'].concat(
44 Array.prototype.slice.apply(arguments));
44 Array.prototype.slice.apply(arguments));
45 return utils.url_join_encode.apply(null, url_parts);
45 return utils.url_join_encode.apply(null, url_parts);
46 };
46 };
47
47
48 /**
48 /**
49 * Creates a basic error handler that wraps a jqXHR error as an Error.
49 * Creates a basic error handler that wraps a jqXHR error as an Error.
50 *
50 *
51 * Takes a callback that accepts an Error, and returns a callback that can
51 * Takes a callback that accepts an Error, and returns a callback that can
52 * be passed directly to $.ajax, which will wrap the error from jQuery
52 * be passed directly to $.ajax, which will wrap the error from jQuery
53 * as an Error, and pass that to the original callback.
53 * as an Error, and pass that to the original callback.
54 *
54 *
55 * @method create_basic_error_handler
55 * @method create_basic_error_handler
56 * @param{Function} callback
56 * @param{Function} callback
57 * @return{Function}
57 * @return{Function}
58 */
58 */
59 Contents.prototype.create_basic_error_handler = function(callback) {
59 Contents.prototype.create_basic_error_handler = function(callback) {
60 if (!callback) {
60 if (!callback) {
61 return utils.log_ajax_error;
61 return utils.log_ajax_error;
62 }
62 }
63 return function(xhr, status, error) {
63 return function(xhr, status, error) {
64 callback(utils.wrap_ajax_error(xhr, status, error));
64 callback(utils.wrap_ajax_error(xhr, status, error));
65 };
65 };
66 };
66 };
67
67
68 /**
68 /**
69 * File Functions (including notebook operations)
69 * File Functions (including notebook operations)
70 */
70 */
71
71
72 /**
72 /**
73 * Get a file.
73 * Get a file.
74 *
74 *
75 * Calls success with file JSON model, or error with error.
75 * Calls success with file JSON model, or error with error.
76 *
76 *
77 * @method get
77 * @method get
78 * @param {String} path
78 * @param {String} path
79 * @param {Object} options
79 * @param {Object} options
80 * type : 'notebook', 'file', or 'directory'
80 * type : 'notebook', 'file', or 'directory'
81 * format: 'text' or 'base64'; only relevant for type: 'file'
81 * format: 'text' or 'base64'; only relevant for type: 'file'
82 */
82 */
83 Contents.prototype.get = function (path, options) {
83 Contents.prototype.get = function (path, options) {
84 /**
84 /**
85 * We do the call with settings so we can set cache to false.
85 * We do the call with settings so we can set cache to false.
86 */
86 */
87 var settings = {
87 var settings = {
88 processData : false,
88 processData : false,
89 cache : false,
89 cache : false,
90 type : "GET",
90 type : "GET",
91 dataType : "json",
91 dataType : "json",
92 };
92 };
93 var url = this.api_url(path);
93 var url = this.api_url(path);
94 var params = {};
94 var params = {};
95 if (options.type) { params.type = options.type; }
95 if (options.type) { params.type = options.type; }
96 if (options.format) { params.format = options.format; }
96 if (options.format) { params.format = options.format; }
97 return utils.promising_ajax(url + '?' + $.param(params), settings);
97 return utils.promising_ajax(url + '?' + $.param(params), settings);
98 };
98 };
99
99
100
100
101 /**
101 /**
102 * Creates a new untitled file or directory in the specified directory path.
102 * Creates a new untitled file or directory in the specified directory path.
103 *
103 *
104 * @method new
104 * @method new
105 * @param {String} path: the directory in which to create the new file/directory
105 * @param {String} path: the directory in which to create the new file/directory
106 * @param {Object} options:
106 * @param {Object} options:
107 * ext: file extension to use
107 * ext: file extension to use
108 * type: model type to create ('notebook', 'file', or 'directory')
108 * type: model type to create ('notebook', 'file', or 'directory')
109 */
109 */
110 Contents.prototype.new_untitled = function(path, options) {
110 Contents.prototype.new_untitled = function(path, options) {
111 var data = JSON.stringify({
111 var data = JSON.stringify({
112 ext: options.ext,
112 ext: options.ext,
113 type: options.type
113 type: options.type
114 });
114 });
115
115
116 var settings = {
116 var settings = {
117 processData : false,
117 processData : false,
118 type : "POST",
118 type : "POST",
119 data: data,
119 data: data,
120 dataType : "json",
120 dataType : "json",
121 };
121 };
122 return utils.promising_ajax(this.api_url(path), settings);
122 return utils.promising_ajax(this.api_url(path), settings);
123 };
123 };
124
124
125 Contents.prototype.delete = function(path) {
125 Contents.prototype.delete = function(path) {
126 var settings = {
126 var settings = {
127 processData : false,
127 processData : false,
128 type : "DELETE",
128 type : "DELETE",
129 dataType : "json",
129 dataType : "json",
130 };
130 };
131 var url = this.api_url(path);
131 var url = this.api_url(path);
132 return utils.promising_ajax(url, settings).catch(
132 return utils.promising_ajax(url, settings).catch(
133 // Translate certain errors to more specific ones.
133 // Translate certain errors to more specific ones.
134 function(error) {
134 function(error) {
135 // TODO: update IPEP27 to specify errors more precisely, so
135 // TODO: update IPEP27 to specify errors more precisely, so
136 // that error types can be detected here with certainty.
136 // that error types can be detected here with certainty.
137 if (error.xhr.status === 400) {
137 if (error.xhr.status === 400) {
138 throw new Contents.DirectoryNotEmptyError();
138 throw new Contents.DirectoryNotEmptyError();
139 }
139 }
140 throw error;
140 throw error;
141 }
141 }
142 );
142 );
143 };
143 };
144
144
145 Contents.prototype.rename = function(path, new_path) {
145 Contents.prototype.rename = function(path, new_path) {
146 var data = {path: new_path};
146 var data = {path: new_path};
147 var settings = {
147 var settings = {
148 processData : false,
148 processData : false,
149 type : "PATCH",
149 type : "PATCH",
150 data : JSON.stringify(data),
150 data : JSON.stringify(data),
151 dataType: "json",
151 dataType: "json",
152 contentType: 'application/json',
152 contentType: 'application/json',
153 };
153 };
154 var url = this.api_url(path);
154 var url = this.api_url(path);
155 return utils.promising_ajax(url, settings);
155 return utils.promising_ajax(url, settings);
156 };
156 };
157
157
158 Contents.prototype.save = function(path, model) {
158 Contents.prototype.save = function(path, model) {
159 /**
159 /**
160 * We do the call with settings so we can set cache to false.
160 * We do the call with settings so we can set cache to false.
161 */
161 */
162 var settings = {
162 var settings = {
163 processData : false,
163 processData : false,
164 type : "PUT",
164 type : "PUT",
165 dataType: "json",
165 data : JSON.stringify(model),
166 data : JSON.stringify(model),
166 contentType: 'application/json',
167 contentType: 'application/json',
167 };
168 };
168 var url = this.api_url(path);
169 var url = this.api_url(path);
169 return utils.promising_ajax(url, settings);
170 return utils.promising_ajax(url, settings);
170 };
171 };
171
172
172 Contents.prototype.copy = function(from_file, to_dir) {
173 Contents.prototype.copy = function(from_file, to_dir) {
173 /**
174 /**
174 * Copy a file into a given directory via POST
175 * Copy a file into a given directory via POST
175 * The server will select the name of the copied file
176 * The server will select the name of the copied file
176 */
177 */
177 var url = this.api_url(to_dir);
178 var url = this.api_url(to_dir);
178
179
179 var settings = {
180 var settings = {
180 processData : false,
181 processData : false,
181 type: "POST",
182 type: "POST",
182 data: JSON.stringify({copy_from: from_file}),
183 data: JSON.stringify({copy_from: from_file}),
183 dataType : "json",
184 dataType : "json",
184 };
185 };
185 return utils.promising_ajax(url, settings);
186 return utils.promising_ajax(url, settings);
186 };
187 };
187
188
188 /**
189 /**
189 * Checkpointing Functions
190 * Checkpointing Functions
190 */
191 */
191
192
192 Contents.prototype.create_checkpoint = function(path) {
193 Contents.prototype.create_checkpoint = function(path) {
193 var url = this.api_url(path, 'checkpoints');
194 var url = this.api_url(path, 'checkpoints');
194 var settings = {
195 var settings = {
195 type : "POST",
196 type : "POST",
196 dataType : "json",
197 dataType : "json",
197 };
198 };
198 return utils.promising_ajax(url, settings);
199 return utils.promising_ajax(url, settings);
199 };
200 };
200
201
201 Contents.prototype.list_checkpoints = function(path) {
202 Contents.prototype.list_checkpoints = function(path) {
202 var url = this.api_url(path, 'checkpoints');
203 var url = this.api_url(path, 'checkpoints');
203 var settings = {
204 var settings = {
204 type : "GET",
205 type : "GET",
205 cache: false,
206 cache: false,
206 dataType: "json",
207 dataType: "json",
207 };
208 };
208 return utils.promising_ajax(url, settings);
209 return utils.promising_ajax(url, settings);
209 };
210 };
210
211
211 Contents.prototype.restore_checkpoint = function(path, checkpoint_id) {
212 Contents.prototype.restore_checkpoint = function(path, checkpoint_id) {
212 var url = this.api_url(path, 'checkpoints', checkpoint_id);
213 var url = this.api_url(path, 'checkpoints', checkpoint_id);
213 var settings = {
214 var settings = {
214 type : "POST",
215 type : "POST",
215 };
216 };
216 return utils.promising_ajax(url, settings);
217 return utils.promising_ajax(url, settings);
217 };
218 };
218
219
219 Contents.prototype.delete_checkpoint = function(path, checkpoint_id) {
220 Contents.prototype.delete_checkpoint = function(path, checkpoint_id) {
220 var url = this.api_url(path, 'checkpoints', checkpoint_id);
221 var url = this.api_url(path, 'checkpoints', checkpoint_id);
221 var settings = {
222 var settings = {
222 type : "DELETE",
223 type : "DELETE",
223 };
224 };
224 return utils.promising_ajax(url, settings);
225 return utils.promising_ajax(url, settings);
225 };
226 };
226
227
227 /**
228 /**
228 * File management functions
229 * File management functions
229 */
230 */
230
231
231 /**
232 /**
232 * List notebooks and directories at a given path
233 * List notebooks and directories at a given path
233 *
234 *
234 * On success, load_callback is called with an array of dictionaries
235 * On success, load_callback is called with an array of dictionaries
235 * representing individual files or directories. Each dictionary has
236 * representing individual files or directories. Each dictionary has
236 * the keys:
237 * the keys:
237 * type: "notebook" or "directory"
238 * type: "notebook" or "directory"
238 * created: created date
239 * created: created date
239 * last_modified: last modified dat
240 * last_modified: last modified dat
240 * @method list_notebooks
241 * @method list_notebooks
241 * @param {String} path The path to list notebooks in
242 * @param {String} path The path to list notebooks in
242 */
243 */
243 Contents.prototype.list_contents = function(path) {
244 Contents.prototype.list_contents = function(path) {
244 return this.get(path, {type: 'directory'});
245 return this.get(path, {type: 'directory'});
245 };
246 };
246
247
247
248
248 IPython.Contents = Contents;
249 IPython.Contents = Contents;
249
250
250 return {'Contents': Contents};
251 return {'Contents': Contents};
251 });
252 });
@@ -1,29 +1,32 b''
1 /*!
1 /*!
2 *
2 *
3 * Twitter Bootstrap
3 * Twitter Bootstrap
4 *
4 *
5 */
5 */
6 @import "../components/bootstrap/less/bootstrap.less";
6 @import "../components/bootstrap/less/bootstrap.less";
7
7
8 /*!
8 /*!
9 *
9 *
10 * Font Awesome
10 * Font Awesome
11 *
11 *
12 */
12 */
13 @import "../components/font-awesome/less/font-awesome.less";
13 @import "../components/font-awesome/less/font-awesome.less";
14 @fa-font-path: "../components/font-awesome/fonts";
14 @fa-font-path: "../components/font-awesome/fonts";
15
15
16 // base
16 // base
17 @import "../base/less/style.less";
17 @import "../base/less/style.less";
18 @import "../base/less/page.less";
18 @import "../base/less/page.less";
19
19
20 // auth
20 // auth
21 @import "../auth/less/style.less";
21 @import "../auth/less/style.less";
22
22
23 // tree
23 // tree
24 @import "../tree/less/style.less";
24 @import "../tree/less/style.less";
25
25
26 // edit
27 @import "../edit/less/style.less";
28
26 // notebook
29 // notebook
27 @import "../notebook/less/style.less";
30 @import "../notebook/less/style.less";
28
31
29 @import "../notebook/less/terminal.less";
32 @import "../notebook/less/terminal.less";
@@ -1,10394 +1,10407 b''
1 /*!
1 /*!
2 *
2 *
3 * Twitter Bootstrap
3 * Twitter Bootstrap
4 *
4 *
5 */
5 */
6 /*! normalize.css v3.0.0 | MIT License | git.io/normalize */
6 /*! normalize.css v3.0.0 | MIT License | git.io/normalize */
7 html {
7 html {
8 font-family: sans-serif;
8 font-family: sans-serif;
9 -ms-text-size-adjust: 100%;
9 -ms-text-size-adjust: 100%;
10 -webkit-text-size-adjust: 100%;
10 -webkit-text-size-adjust: 100%;
11 }
11 }
12 body {
12 body {
13 margin: 0;
13 margin: 0;
14 }
14 }
15 article,
15 article,
16 aside,
16 aside,
17 details,
17 details,
18 figcaption,
18 figcaption,
19 figure,
19 figure,
20 footer,
20 footer,
21 header,
21 header,
22 hgroup,
22 hgroup,
23 main,
23 main,
24 nav,
24 nav,
25 section,
25 section,
26 summary {
26 summary {
27 display: block;
27 display: block;
28 }
28 }
29 audio,
29 audio,
30 canvas,
30 canvas,
31 progress,
31 progress,
32 video {
32 video {
33 display: inline-block;
33 display: inline-block;
34 vertical-align: baseline;
34 vertical-align: baseline;
35 }
35 }
36 audio:not([controls]) {
36 audio:not([controls]) {
37 display: none;
37 display: none;
38 height: 0;
38 height: 0;
39 }
39 }
40 [hidden],
40 [hidden],
41 template {
41 template {
42 display: none;
42 display: none;
43 }
43 }
44 a {
44 a {
45 background: transparent;
45 background: transparent;
46 }
46 }
47 a:active,
47 a:active,
48 a:hover {
48 a:hover {
49 outline: 0;
49 outline: 0;
50 }
50 }
51 abbr[title] {
51 abbr[title] {
52 border-bottom: 1px dotted;
52 border-bottom: 1px dotted;
53 }
53 }
54 b,
54 b,
55 strong {
55 strong {
56 font-weight: bold;
56 font-weight: bold;
57 }
57 }
58 dfn {
58 dfn {
59 font-style: italic;
59 font-style: italic;
60 }
60 }
61 h1 {
61 h1 {
62 font-size: 2em;
62 font-size: 2em;
63 margin: 0.67em 0;
63 margin: 0.67em 0;
64 }
64 }
65 mark {
65 mark {
66 background: #ff0;
66 background: #ff0;
67 color: #000;
67 color: #000;
68 }
68 }
69 small {
69 small {
70 font-size: 80%;
70 font-size: 80%;
71 }
71 }
72 sub,
72 sub,
73 sup {
73 sup {
74 font-size: 75%;
74 font-size: 75%;
75 line-height: 0;
75 line-height: 0;
76 position: relative;
76 position: relative;
77 vertical-align: baseline;
77 vertical-align: baseline;
78 }
78 }
79 sup {
79 sup {
80 top: -0.5em;
80 top: -0.5em;
81 }
81 }
82 sub {
82 sub {
83 bottom: -0.25em;
83 bottom: -0.25em;
84 }
84 }
85 img {
85 img {
86 border: 0;
86 border: 0;
87 }
87 }
88 svg:not(:root) {
88 svg:not(:root) {
89 overflow: hidden;
89 overflow: hidden;
90 }
90 }
91 figure {
91 figure {
92 margin: 1em 40px;
92 margin: 1em 40px;
93 }
93 }
94 hr {
94 hr {
95 -moz-box-sizing: content-box;
95 -moz-box-sizing: content-box;
96 box-sizing: content-box;
96 box-sizing: content-box;
97 height: 0;
97 height: 0;
98 }
98 }
99 pre {
99 pre {
100 overflow: auto;
100 overflow: auto;
101 }
101 }
102 code,
102 code,
103 kbd,
103 kbd,
104 pre,
104 pre,
105 samp {
105 samp {
106 font-family: monospace, monospace;
106 font-family: monospace, monospace;
107 font-size: 1em;
107 font-size: 1em;
108 }
108 }
109 button,
109 button,
110 input,
110 input,
111 optgroup,
111 optgroup,
112 select,
112 select,
113 textarea {
113 textarea {
114 color: inherit;
114 color: inherit;
115 font: inherit;
115 font: inherit;
116 margin: 0;
116 margin: 0;
117 }
117 }
118 button {
118 button {
119 overflow: visible;
119 overflow: visible;
120 }
120 }
121 button,
121 button,
122 select {
122 select {
123 text-transform: none;
123 text-transform: none;
124 }
124 }
125 button,
125 button,
126 html input[type="button"],
126 html input[type="button"],
127 input[type="reset"],
127 input[type="reset"],
128 input[type="submit"] {
128 input[type="submit"] {
129 -webkit-appearance: button;
129 -webkit-appearance: button;
130 cursor: pointer;
130 cursor: pointer;
131 }
131 }
132 button[disabled],
132 button[disabled],
133 html input[disabled] {
133 html input[disabled] {
134 cursor: default;
134 cursor: default;
135 }
135 }
136 button::-moz-focus-inner,
136 button::-moz-focus-inner,
137 input::-moz-focus-inner {
137 input::-moz-focus-inner {
138 border: 0;
138 border: 0;
139 padding: 0;
139 padding: 0;
140 }
140 }
141 input {
141 input {
142 line-height: normal;
142 line-height: normal;
143 }
143 }
144 input[type="checkbox"],
144 input[type="checkbox"],
145 input[type="radio"] {
145 input[type="radio"] {
146 box-sizing: border-box;
146 box-sizing: border-box;
147 padding: 0;
147 padding: 0;
148 }
148 }
149 input[type="number"]::-webkit-inner-spin-button,
149 input[type="number"]::-webkit-inner-spin-button,
150 input[type="number"]::-webkit-outer-spin-button {
150 input[type="number"]::-webkit-outer-spin-button {
151 height: auto;
151 height: auto;
152 }
152 }
153 input[type="search"] {
153 input[type="search"] {
154 -webkit-appearance: textfield;
154 -webkit-appearance: textfield;
155 -moz-box-sizing: content-box;
155 -moz-box-sizing: content-box;
156 -webkit-box-sizing: content-box;
156 -webkit-box-sizing: content-box;
157 box-sizing: content-box;
157 box-sizing: content-box;
158 }
158 }
159 input[type="search"]::-webkit-search-cancel-button,
159 input[type="search"]::-webkit-search-cancel-button,
160 input[type="search"]::-webkit-search-decoration {
160 input[type="search"]::-webkit-search-decoration {
161 -webkit-appearance: none;
161 -webkit-appearance: none;
162 }
162 }
163 fieldset {
163 fieldset {
164 border: 1px solid #c0c0c0;
164 border: 1px solid #c0c0c0;
165 margin: 0 2px;
165 margin: 0 2px;
166 padding: 0.35em 0.625em 0.75em;
166 padding: 0.35em 0.625em 0.75em;
167 }
167 }
168 legend {
168 legend {
169 border: 0;
169 border: 0;
170 padding: 0;
170 padding: 0;
171 }
171 }
172 textarea {
172 textarea {
173 overflow: auto;
173 overflow: auto;
174 }
174 }
175 optgroup {
175 optgroup {
176 font-weight: bold;
176 font-weight: bold;
177 }
177 }
178 table {
178 table {
179 border-collapse: collapse;
179 border-collapse: collapse;
180 border-spacing: 0;
180 border-spacing: 0;
181 }
181 }
182 td,
182 td,
183 th {
183 th {
184 padding: 0;
184 padding: 0;
185 }
185 }
186 @media print {
186 @media print {
187 * {
187 * {
188 text-shadow: none !important;
188 text-shadow: none !important;
189 color: #000 !important;
189 color: #000 !important;
190 background: transparent !important;
190 background: transparent !important;
191 box-shadow: none !important;
191 box-shadow: none !important;
192 }
192 }
193 a,
193 a,
194 a:visited {
194 a:visited {
195 text-decoration: underline;
195 text-decoration: underline;
196 }
196 }
197 a[href]:after {
197 a[href]:after {
198 content: " (" attr(href) ")";
198 content: " (" attr(href) ")";
199 }
199 }
200 abbr[title]:after {
200 abbr[title]:after {
201 content: " (" attr(title) ")";
201 content: " (" attr(title) ")";
202 }
202 }
203 a[href^="javascript:"]:after,
203 a[href^="javascript:"]:after,
204 a[href^="#"]:after {
204 a[href^="#"]:after {
205 content: "";
205 content: "";
206 }
206 }
207 pre,
207 pre,
208 blockquote {
208 blockquote {
209 border: 1px solid #999;
209 border: 1px solid #999;
210 page-break-inside: avoid;
210 page-break-inside: avoid;
211 }
211 }
212 thead {
212 thead {
213 display: table-header-group;
213 display: table-header-group;
214 }
214 }
215 tr,
215 tr,
216 img {
216 img {
217 page-break-inside: avoid;
217 page-break-inside: avoid;
218 }
218 }
219 img {
219 img {
220 max-width: 100% !important;
220 max-width: 100% !important;
221 }
221 }
222 p,
222 p,
223 h2,
223 h2,
224 h3 {
224 h3 {
225 orphans: 3;
225 orphans: 3;
226 widows: 3;
226 widows: 3;
227 }
227 }
228 h2,
228 h2,
229 h3 {
229 h3 {
230 page-break-after: avoid;
230 page-break-after: avoid;
231 }
231 }
232 select {
232 select {
233 background: #fff !important;
233 background: #fff !important;
234 }
234 }
235 .navbar {
235 .navbar {
236 display: none;
236 display: none;
237 }
237 }
238 .table td,
238 .table td,
239 .table th {
239 .table th {
240 background-color: #fff !important;
240 background-color: #fff !important;
241 }
241 }
242 .btn > .caret,
242 .btn > .caret,
243 .dropup > .btn > .caret {
243 .dropup > .btn > .caret {
244 border-top-color: #000 !important;
244 border-top-color: #000 !important;
245 }
245 }
246 .label {
246 .label {
247 border: 1px solid #000;
247 border: 1px solid #000;
248 }
248 }
249 .table {
249 .table {
250 border-collapse: collapse !important;
250 border-collapse: collapse !important;
251 }
251 }
252 .table-bordered th,
252 .table-bordered th,
253 .table-bordered td {
253 .table-bordered td {
254 border: 1px solid #ddd !important;
254 border: 1px solid #ddd !important;
255 }
255 }
256 }
256 }
257 * {
257 * {
258 -webkit-box-sizing: border-box;
258 -webkit-box-sizing: border-box;
259 -moz-box-sizing: border-box;
259 -moz-box-sizing: border-box;
260 box-sizing: border-box;
260 box-sizing: border-box;
261 }
261 }
262 *:before,
262 *:before,
263 *:after {
263 *:after {
264 -webkit-box-sizing: border-box;
264 -webkit-box-sizing: border-box;
265 -moz-box-sizing: border-box;
265 -moz-box-sizing: border-box;
266 box-sizing: border-box;
266 box-sizing: border-box;
267 }
267 }
268 html {
268 html {
269 font-size: 62.5%;
269 font-size: 62.5%;
270 -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
270 -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
271 }
271 }
272 body {
272 body {
273 font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
273 font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
274 font-size: 13px;
274 font-size: 13px;
275 line-height: 1.42857143;
275 line-height: 1.42857143;
276 color: #000000;
276 color: #000000;
277 background-color: #ffffff;
277 background-color: #ffffff;
278 }
278 }
279 input,
279 input,
280 button,
280 button,
281 select,
281 select,
282 textarea {
282 textarea {
283 font-family: inherit;
283 font-family: inherit;
284 font-size: inherit;
284 font-size: inherit;
285 line-height: inherit;
285 line-height: inherit;
286 }
286 }
287 a {
287 a {
288 color: #428bca;
288 color: #428bca;
289 text-decoration: none;
289 text-decoration: none;
290 }
290 }
291 a:hover,
291 a:hover,
292 a:focus {
292 a:focus {
293 color: #2a6496;
293 color: #2a6496;
294 text-decoration: underline;
294 text-decoration: underline;
295 }
295 }
296 a:focus {
296 a:focus {
297 outline: thin dotted;
297 outline: thin dotted;
298 outline: 5px auto -webkit-focus-ring-color;
298 outline: 5px auto -webkit-focus-ring-color;
299 outline-offset: -2px;
299 outline-offset: -2px;
300 }
300 }
301 figure {
301 figure {
302 margin: 0;
302 margin: 0;
303 }
303 }
304 img {
304 img {
305 vertical-align: middle;
305 vertical-align: middle;
306 }
306 }
307 .img-responsive,
307 .img-responsive,
308 .thumbnail > img,
308 .thumbnail > img,
309 .thumbnail a > img,
309 .thumbnail a > img,
310 .carousel-inner > .item > img,
310 .carousel-inner > .item > img,
311 .carousel-inner > .item > a > img {
311 .carousel-inner > .item > a > img {
312 display: block;
312 display: block;
313 max-width: 100%;
313 max-width: 100%;
314 height: auto;
314 height: auto;
315 }
315 }
316 .img-rounded {
316 .img-rounded {
317 border-radius: 6px;
317 border-radius: 6px;
318 }
318 }
319 .img-thumbnail {
319 .img-thumbnail {
320 padding: 4px;
320 padding: 4px;
321 line-height: 1.42857143;
321 line-height: 1.42857143;
322 background-color: #ffffff;
322 background-color: #ffffff;
323 border: 1px solid #dddddd;
323 border: 1px solid #dddddd;
324 border-radius: 4px;
324 border-radius: 4px;
325 -webkit-transition: all 0.2s ease-in-out;
325 -webkit-transition: all 0.2s ease-in-out;
326 transition: all 0.2s ease-in-out;
326 transition: all 0.2s ease-in-out;
327 display: inline-block;
327 display: inline-block;
328 max-width: 100%;
328 max-width: 100%;
329 height: auto;
329 height: auto;
330 }
330 }
331 .img-circle {
331 .img-circle {
332 border-radius: 50%;
332 border-radius: 50%;
333 }
333 }
334 hr {
334 hr {
335 margin-top: 18px;
335 margin-top: 18px;
336 margin-bottom: 18px;
336 margin-bottom: 18px;
337 border: 0;
337 border: 0;
338 border-top: 1px solid #eeeeee;
338 border-top: 1px solid #eeeeee;
339 }
339 }
340 .sr-only {
340 .sr-only {
341 position: absolute;
341 position: absolute;
342 width: 1px;
342 width: 1px;
343 height: 1px;
343 height: 1px;
344 margin: -1px;
344 margin: -1px;
345 padding: 0;
345 padding: 0;
346 overflow: hidden;
346 overflow: hidden;
347 clip: rect(0, 0, 0, 0);
347 clip: rect(0, 0, 0, 0);
348 border: 0;
348 border: 0;
349 }
349 }
350 h1,
350 h1,
351 h2,
351 h2,
352 h3,
352 h3,
353 h4,
353 h4,
354 h5,
354 h5,
355 h6,
355 h6,
356 .h1,
356 .h1,
357 .h2,
357 .h2,
358 .h3,
358 .h3,
359 .h4,
359 .h4,
360 .h5,
360 .h5,
361 .h6 {
361 .h6 {
362 font-family: inherit;
362 font-family: inherit;
363 font-weight: 500;
363 font-weight: 500;
364 line-height: 1.1;
364 line-height: 1.1;
365 color: inherit;
365 color: inherit;
366 }
366 }
367 h1 small,
367 h1 small,
368 h2 small,
368 h2 small,
369 h3 small,
369 h3 small,
370 h4 small,
370 h4 small,
371 h5 small,
371 h5 small,
372 h6 small,
372 h6 small,
373 .h1 small,
373 .h1 small,
374 .h2 small,
374 .h2 small,
375 .h3 small,
375 .h3 small,
376 .h4 small,
376 .h4 small,
377 .h5 small,
377 .h5 small,
378 .h6 small,
378 .h6 small,
379 h1 .small,
379 h1 .small,
380 h2 .small,
380 h2 .small,
381 h3 .small,
381 h3 .small,
382 h4 .small,
382 h4 .small,
383 h5 .small,
383 h5 .small,
384 h6 .small,
384 h6 .small,
385 .h1 .small,
385 .h1 .small,
386 .h2 .small,
386 .h2 .small,
387 .h3 .small,
387 .h3 .small,
388 .h4 .small,
388 .h4 .small,
389 .h5 .small,
389 .h5 .small,
390 .h6 .small {
390 .h6 .small {
391 font-weight: normal;
391 font-weight: normal;
392 line-height: 1;
392 line-height: 1;
393 color: #999999;
393 color: #999999;
394 }
394 }
395 h1,
395 h1,
396 .h1,
396 .h1,
397 h2,
397 h2,
398 .h2,
398 .h2,
399 h3,
399 h3,
400 .h3 {
400 .h3 {
401 margin-top: 18px;
401 margin-top: 18px;
402 margin-bottom: 9px;
402 margin-bottom: 9px;
403 }
403 }
404 h1 small,
404 h1 small,
405 .h1 small,
405 .h1 small,
406 h2 small,
406 h2 small,
407 .h2 small,
407 .h2 small,
408 h3 small,
408 h3 small,
409 .h3 small,
409 .h3 small,
410 h1 .small,
410 h1 .small,
411 .h1 .small,
411 .h1 .small,
412 h2 .small,
412 h2 .small,
413 .h2 .small,
413 .h2 .small,
414 h3 .small,
414 h3 .small,
415 .h3 .small {
415 .h3 .small {
416 font-size: 65%;
416 font-size: 65%;
417 }
417 }
418 h4,
418 h4,
419 .h4,
419 .h4,
420 h5,
420 h5,
421 .h5,
421 .h5,
422 h6,
422 h6,
423 .h6 {
423 .h6 {
424 margin-top: 9px;
424 margin-top: 9px;
425 margin-bottom: 9px;
425 margin-bottom: 9px;
426 }
426 }
427 h4 small,
427 h4 small,
428 .h4 small,
428 .h4 small,
429 h5 small,
429 h5 small,
430 .h5 small,
430 .h5 small,
431 h6 small,
431 h6 small,
432 .h6 small,
432 .h6 small,
433 h4 .small,
433 h4 .small,
434 .h4 .small,
434 .h4 .small,
435 h5 .small,
435 h5 .small,
436 .h5 .small,
436 .h5 .small,
437 h6 .small,
437 h6 .small,
438 .h6 .small {
438 .h6 .small {
439 font-size: 75%;
439 font-size: 75%;
440 }
440 }
441 h1,
441 h1,
442 .h1 {
442 .h1 {
443 font-size: 33px;
443 font-size: 33px;
444 }
444 }
445 h2,
445 h2,
446 .h2 {
446 .h2 {
447 font-size: 27px;
447 font-size: 27px;
448 }
448 }
449 h3,
449 h3,
450 .h3 {
450 .h3 {
451 font-size: 23px;
451 font-size: 23px;
452 }
452 }
453 h4,
453 h4,
454 .h4 {
454 .h4 {
455 font-size: 17px;
455 font-size: 17px;
456 }
456 }
457 h5,
457 h5,
458 .h5 {
458 .h5 {
459 font-size: 13px;
459 font-size: 13px;
460 }
460 }
461 h6,
461 h6,
462 .h6 {
462 .h6 {
463 font-size: 12px;
463 font-size: 12px;
464 }
464 }
465 p {
465 p {
466 margin: 0 0 9px;
466 margin: 0 0 9px;
467 }
467 }
468 .lead {
468 .lead {
469 margin-bottom: 18px;
469 margin-bottom: 18px;
470 font-size: 14px;
470 font-size: 14px;
471 font-weight: 200;
471 font-weight: 200;
472 line-height: 1.4;
472 line-height: 1.4;
473 }
473 }
474 @media (min-width: 768px) {
474 @media (min-width: 768px) {
475 .lead {
475 .lead {
476 font-size: 19.5px;
476 font-size: 19.5px;
477 }
477 }
478 }
478 }
479 small,
479 small,
480 .small {
480 .small {
481 font-size: 85%;
481 font-size: 85%;
482 }
482 }
483 cite {
483 cite {
484 font-style: normal;
484 font-style: normal;
485 }
485 }
486 .text-left {
486 .text-left {
487 text-align: left;
487 text-align: left;
488 }
488 }
489 .text-right {
489 .text-right {
490 text-align: right;
490 text-align: right;
491 }
491 }
492 .text-center {
492 .text-center {
493 text-align: center;
493 text-align: center;
494 }
494 }
495 .text-justify {
495 .text-justify {
496 text-align: justify;
496 text-align: justify;
497 }
497 }
498 .text-muted {
498 .text-muted {
499 color: #999999;
499 color: #999999;
500 }
500 }
501 .text-primary {
501 .text-primary {
502 color: #428bca;
502 color: #428bca;
503 }
503 }
504 a.text-primary:hover {
504 a.text-primary:hover {
505 color: #3071a9;
505 color: #3071a9;
506 }
506 }
507 .text-success {
507 .text-success {
508 color: #3c763d;
508 color: #3c763d;
509 }
509 }
510 a.text-success:hover {
510 a.text-success:hover {
511 color: #2b542c;
511 color: #2b542c;
512 }
512 }
513 .text-info {
513 .text-info {
514 color: #31708f;
514 color: #31708f;
515 }
515 }
516 a.text-info:hover {
516 a.text-info:hover {
517 color: #245269;
517 color: #245269;
518 }
518 }
519 .text-warning {
519 .text-warning {
520 color: #8a6d3b;
520 color: #8a6d3b;
521 }
521 }
522 a.text-warning:hover {
522 a.text-warning:hover {
523 color: #66512c;
523 color: #66512c;
524 }
524 }
525 .text-danger {
525 .text-danger {
526 color: #a94442;
526 color: #a94442;
527 }
527 }
528 a.text-danger:hover {
528 a.text-danger:hover {
529 color: #843534;
529 color: #843534;
530 }
530 }
531 .bg-primary {
531 .bg-primary {
532 color: #fff;
532 color: #fff;
533 background-color: #428bca;
533 background-color: #428bca;
534 }
534 }
535 a.bg-primary:hover {
535 a.bg-primary:hover {
536 background-color: #3071a9;
536 background-color: #3071a9;
537 }
537 }
538 .bg-success {
538 .bg-success {
539 background-color: #dff0d8;
539 background-color: #dff0d8;
540 }
540 }
541 a.bg-success:hover {
541 a.bg-success:hover {
542 background-color: #c1e2b3;
542 background-color: #c1e2b3;
543 }
543 }
544 .bg-info {
544 .bg-info {
545 background-color: #d9edf7;
545 background-color: #d9edf7;
546 }
546 }
547 a.bg-info:hover {
547 a.bg-info:hover {
548 background-color: #afd9ee;
548 background-color: #afd9ee;
549 }
549 }
550 .bg-warning {
550 .bg-warning {
551 background-color: #fcf8e3;
551 background-color: #fcf8e3;
552 }
552 }
553 a.bg-warning:hover {
553 a.bg-warning:hover {
554 background-color: #f7ecb5;
554 background-color: #f7ecb5;
555 }
555 }
556 .bg-danger {
556 .bg-danger {
557 background-color: #f2dede;
557 background-color: #f2dede;
558 }
558 }
559 a.bg-danger:hover {
559 a.bg-danger:hover {
560 background-color: #e4b9b9;
560 background-color: #e4b9b9;
561 }
561 }
562 .page-header {
562 .page-header {
563 padding-bottom: 8px;
563 padding-bottom: 8px;
564 margin: 36px 0 18px;
564 margin: 36px 0 18px;
565 border-bottom: 1px solid #eeeeee;
565 border-bottom: 1px solid #eeeeee;
566 }
566 }
567 ul,
567 ul,
568 ol {
568 ol {
569 margin-top: 0;
569 margin-top: 0;
570 margin-bottom: 9px;
570 margin-bottom: 9px;
571 }
571 }
572 ul ul,
572 ul ul,
573 ol ul,
573 ol ul,
574 ul ol,
574 ul ol,
575 ol ol {
575 ol ol {
576 margin-bottom: 0;
576 margin-bottom: 0;
577 }
577 }
578 .list-unstyled {
578 .list-unstyled {
579 padding-left: 0;
579 padding-left: 0;
580 list-style: none;
580 list-style: none;
581 }
581 }
582 .list-inline {
582 .list-inline {
583 padding-left: 0;
583 padding-left: 0;
584 list-style: none;
584 list-style: none;
585 margin-left: -5px;
585 margin-left: -5px;
586 }
586 }
587 .list-inline > li {
587 .list-inline > li {
588 display: inline-block;
588 display: inline-block;
589 padding-left: 5px;
589 padding-left: 5px;
590 padding-right: 5px;
590 padding-right: 5px;
591 }
591 }
592 dl {
592 dl {
593 margin-top: 0;
593 margin-top: 0;
594 margin-bottom: 18px;
594 margin-bottom: 18px;
595 }
595 }
596 dt,
596 dt,
597 dd {
597 dd {
598 line-height: 1.42857143;
598 line-height: 1.42857143;
599 }
599 }
600 dt {
600 dt {
601 font-weight: bold;
601 font-weight: bold;
602 }
602 }
603 dd {
603 dd {
604 margin-left: 0;
604 margin-left: 0;
605 }
605 }
606 @media (min-width: 540px) {
606 @media (min-width: 540px) {
607 .dl-horizontal dt {
607 .dl-horizontal dt {
608 float: left;
608 float: left;
609 width: 160px;
609 width: 160px;
610 clear: left;
610 clear: left;
611 text-align: right;
611 text-align: right;
612 overflow: hidden;
612 overflow: hidden;
613 text-overflow: ellipsis;
613 text-overflow: ellipsis;
614 white-space: nowrap;
614 white-space: nowrap;
615 }
615 }
616 .dl-horizontal dd {
616 .dl-horizontal dd {
617 margin-left: 180px;
617 margin-left: 180px;
618 }
618 }
619 }
619 }
620 abbr[title],
620 abbr[title],
621 abbr[data-original-title] {
621 abbr[data-original-title] {
622 cursor: help;
622 cursor: help;
623 border-bottom: 1px dotted #999999;
623 border-bottom: 1px dotted #999999;
624 }
624 }
625 .initialism {
625 .initialism {
626 font-size: 90%;
626 font-size: 90%;
627 text-transform: uppercase;
627 text-transform: uppercase;
628 }
628 }
629 blockquote {
629 blockquote {
630 padding: 9px 18px;
630 padding: 9px 18px;
631 margin: 0 0 18px;
631 margin: 0 0 18px;
632 font-size: inherit;
632 font-size: inherit;
633 border-left: 5px solid #eeeeee;
633 border-left: 5px solid #eeeeee;
634 }
634 }
635 blockquote p:last-child,
635 blockquote p:last-child,
636 blockquote ul:last-child,
636 blockquote ul:last-child,
637 blockquote ol:last-child {
637 blockquote ol:last-child {
638 margin-bottom: 0;
638 margin-bottom: 0;
639 }
639 }
640 blockquote footer,
640 blockquote footer,
641 blockquote small,
641 blockquote small,
642 blockquote .small {
642 blockquote .small {
643 display: block;
643 display: block;
644 font-size: 80%;
644 font-size: 80%;
645 line-height: 1.42857143;
645 line-height: 1.42857143;
646 color: #999999;
646 color: #999999;
647 }
647 }
648 blockquote footer:before,
648 blockquote footer:before,
649 blockquote small:before,
649 blockquote small:before,
650 blockquote .small:before {
650 blockquote .small:before {
651 content: '\2014 \00A0';
651 content: '\2014 \00A0';
652 }
652 }
653 .blockquote-reverse,
653 .blockquote-reverse,
654 blockquote.pull-right {
654 blockquote.pull-right {
655 padding-right: 15px;
655 padding-right: 15px;
656 padding-left: 0;
656 padding-left: 0;
657 border-right: 5px solid #eeeeee;
657 border-right: 5px solid #eeeeee;
658 border-left: 0;
658 border-left: 0;
659 text-align: right;
659 text-align: right;
660 }
660 }
661 .blockquote-reverse footer:before,
661 .blockquote-reverse footer:before,
662 blockquote.pull-right footer:before,
662 blockquote.pull-right footer:before,
663 .blockquote-reverse small:before,
663 .blockquote-reverse small:before,
664 blockquote.pull-right small:before,
664 blockquote.pull-right small:before,
665 .blockquote-reverse .small:before,
665 .blockquote-reverse .small:before,
666 blockquote.pull-right .small:before {
666 blockquote.pull-right .small:before {
667 content: '';
667 content: '';
668 }
668 }
669 .blockquote-reverse footer:after,
669 .blockquote-reverse footer:after,
670 blockquote.pull-right footer:after,
670 blockquote.pull-right footer:after,
671 .blockquote-reverse small:after,
671 .blockquote-reverse small:after,
672 blockquote.pull-right small:after,
672 blockquote.pull-right small:after,
673 .blockquote-reverse .small:after,
673 .blockquote-reverse .small:after,
674 blockquote.pull-right .small:after {
674 blockquote.pull-right .small:after {
675 content: '\00A0 \2014';
675 content: '\00A0 \2014';
676 }
676 }
677 blockquote:before,
677 blockquote:before,
678 blockquote:after {
678 blockquote:after {
679 content: "";
679 content: "";
680 }
680 }
681 address {
681 address {
682 margin-bottom: 18px;
682 margin-bottom: 18px;
683 font-style: normal;
683 font-style: normal;
684 line-height: 1.42857143;
684 line-height: 1.42857143;
685 }
685 }
686 code,
686 code,
687 kbd,
687 kbd,
688 pre,
688 pre,
689 samp {
689 samp {
690 font-family: monospace;
690 font-family: monospace;
691 }
691 }
692 code {
692 code {
693 padding: 2px 4px;
693 padding: 2px 4px;
694 font-size: 90%;
694 font-size: 90%;
695 color: #c7254e;
695 color: #c7254e;
696 background-color: #f9f2f4;
696 background-color: #f9f2f4;
697 white-space: nowrap;
697 white-space: nowrap;
698 border-radius: 4px;
698 border-radius: 4px;
699 }
699 }
700 kbd {
700 kbd {
701 padding: 2px 4px;
701 padding: 2px 4px;
702 font-size: 90%;
702 font-size: 90%;
703 color: #ffffff;
703 color: #ffffff;
704 background-color: #333333;
704 background-color: #333333;
705 border-radius: 3px;
705 border-radius: 3px;
706 box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
706 box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
707 }
707 }
708 pre {
708 pre {
709 display: block;
709 display: block;
710 padding: 8.5px;
710 padding: 8.5px;
711 margin: 0 0 9px;
711 margin: 0 0 9px;
712 font-size: 12px;
712 font-size: 12px;
713 line-height: 1.42857143;
713 line-height: 1.42857143;
714 word-break: break-all;
714 word-break: break-all;
715 word-wrap: break-word;
715 word-wrap: break-word;
716 color: #333333;
716 color: #333333;
717 background-color: #f5f5f5;
717 background-color: #f5f5f5;
718 border: 1px solid #cccccc;
718 border: 1px solid #cccccc;
719 border-radius: 4px;
719 border-radius: 4px;
720 }
720 }
721 pre code {
721 pre code {
722 padding: 0;
722 padding: 0;
723 font-size: inherit;
723 font-size: inherit;
724 color: inherit;
724 color: inherit;
725 white-space: pre-wrap;
725 white-space: pre-wrap;
726 background-color: transparent;
726 background-color: transparent;
727 border-radius: 0;
727 border-radius: 0;
728 }
728 }
729 .pre-scrollable {
729 .pre-scrollable {
730 max-height: 340px;
730 max-height: 340px;
731 overflow-y: scroll;
731 overflow-y: scroll;
732 }
732 }
733 .container {
733 .container {
734 margin-right: auto;
734 margin-right: auto;
735 margin-left: auto;
735 margin-left: auto;
736 padding-left: 15px;
736 padding-left: 15px;
737 padding-right: 15px;
737 padding-right: 15px;
738 }
738 }
739 @media (min-width: 768px) {
739 @media (min-width: 768px) {
740 .container {
740 .container {
741 width: 750px;
741 width: 750px;
742 }
742 }
743 }
743 }
744 @media (min-width: 992px) {
744 @media (min-width: 992px) {
745 .container {
745 .container {
746 width: 970px;
746 width: 970px;
747 }
747 }
748 }
748 }
749 @media (min-width: 1200px) {
749 @media (min-width: 1200px) {
750 .container {
750 .container {
751 width: 1170px;
751 width: 1170px;
752 }
752 }
753 }
753 }
754 .container-fluid {
754 .container-fluid {
755 margin-right: auto;
755 margin-right: auto;
756 margin-left: auto;
756 margin-left: auto;
757 padding-left: 15px;
757 padding-left: 15px;
758 padding-right: 15px;
758 padding-right: 15px;
759 }
759 }
760 .row {
760 .row {
761 margin-left: -15px;
761 margin-left: -15px;
762 margin-right: -15px;
762 margin-right: -15px;
763 }
763 }
764 .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
764 .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
765 position: relative;
765 position: relative;
766 min-height: 1px;
766 min-height: 1px;
767 padding-left: 15px;
767 padding-left: 15px;
768 padding-right: 15px;
768 padding-right: 15px;
769 }
769 }
770 .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
770 .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
771 float: left;
771 float: left;
772 }
772 }
773 .col-xs-12 {
773 .col-xs-12 {
774 width: 100%;
774 width: 100%;
775 }
775 }
776 .col-xs-11 {
776 .col-xs-11 {
777 width: 91.66666667%;
777 width: 91.66666667%;
778 }
778 }
779 .col-xs-10 {
779 .col-xs-10 {
780 width: 83.33333333%;
780 width: 83.33333333%;
781 }
781 }
782 .col-xs-9 {
782 .col-xs-9 {
783 width: 75%;
783 width: 75%;
784 }
784 }
785 .col-xs-8 {
785 .col-xs-8 {
786 width: 66.66666667%;
786 width: 66.66666667%;
787 }
787 }
788 .col-xs-7 {
788 .col-xs-7 {
789 width: 58.33333333%;
789 width: 58.33333333%;
790 }
790 }
791 .col-xs-6 {
791 .col-xs-6 {
792 width: 50%;
792 width: 50%;
793 }
793 }
794 .col-xs-5 {
794 .col-xs-5 {
795 width: 41.66666667%;
795 width: 41.66666667%;
796 }
796 }
797 .col-xs-4 {
797 .col-xs-4 {
798 width: 33.33333333%;
798 width: 33.33333333%;
799 }
799 }
800 .col-xs-3 {
800 .col-xs-3 {
801 width: 25%;
801 width: 25%;
802 }
802 }
803 .col-xs-2 {
803 .col-xs-2 {
804 width: 16.66666667%;
804 width: 16.66666667%;
805 }
805 }
806 .col-xs-1 {
806 .col-xs-1 {
807 width: 8.33333333%;
807 width: 8.33333333%;
808 }
808 }
809 .col-xs-pull-12 {
809 .col-xs-pull-12 {
810 right: 100%;
810 right: 100%;
811 }
811 }
812 .col-xs-pull-11 {
812 .col-xs-pull-11 {
813 right: 91.66666667%;
813 right: 91.66666667%;
814 }
814 }
815 .col-xs-pull-10 {
815 .col-xs-pull-10 {
816 right: 83.33333333%;
816 right: 83.33333333%;
817 }
817 }
818 .col-xs-pull-9 {
818 .col-xs-pull-9 {
819 right: 75%;
819 right: 75%;
820 }
820 }
821 .col-xs-pull-8 {
821 .col-xs-pull-8 {
822 right: 66.66666667%;
822 right: 66.66666667%;
823 }
823 }
824 .col-xs-pull-7 {
824 .col-xs-pull-7 {
825 right: 58.33333333%;
825 right: 58.33333333%;
826 }
826 }
827 .col-xs-pull-6 {
827 .col-xs-pull-6 {
828 right: 50%;
828 right: 50%;
829 }
829 }
830 .col-xs-pull-5 {
830 .col-xs-pull-5 {
831 right: 41.66666667%;
831 right: 41.66666667%;
832 }
832 }
833 .col-xs-pull-4 {
833 .col-xs-pull-4 {
834 right: 33.33333333%;
834 right: 33.33333333%;
835 }
835 }
836 .col-xs-pull-3 {
836 .col-xs-pull-3 {
837 right: 25%;
837 right: 25%;
838 }
838 }
839 .col-xs-pull-2 {
839 .col-xs-pull-2 {
840 right: 16.66666667%;
840 right: 16.66666667%;
841 }
841 }
842 .col-xs-pull-1 {
842 .col-xs-pull-1 {
843 right: 8.33333333%;
843 right: 8.33333333%;
844 }
844 }
845 .col-xs-pull-0 {
845 .col-xs-pull-0 {
846 right: 0%;
846 right: 0%;
847 }
847 }
848 .col-xs-push-12 {
848 .col-xs-push-12 {
849 left: 100%;
849 left: 100%;
850 }
850 }
851 .col-xs-push-11 {
851 .col-xs-push-11 {
852 left: 91.66666667%;
852 left: 91.66666667%;
853 }
853 }
854 .col-xs-push-10 {
854 .col-xs-push-10 {
855 left: 83.33333333%;
855 left: 83.33333333%;
856 }
856 }
857 .col-xs-push-9 {
857 .col-xs-push-9 {
858 left: 75%;
858 left: 75%;
859 }
859 }
860 .col-xs-push-8 {
860 .col-xs-push-8 {
861 left: 66.66666667%;
861 left: 66.66666667%;
862 }
862 }
863 .col-xs-push-7 {
863 .col-xs-push-7 {
864 left: 58.33333333%;
864 left: 58.33333333%;
865 }
865 }
866 .col-xs-push-6 {
866 .col-xs-push-6 {
867 left: 50%;
867 left: 50%;
868 }
868 }
869 .col-xs-push-5 {
869 .col-xs-push-5 {
870 left: 41.66666667%;
870 left: 41.66666667%;
871 }
871 }
872 .col-xs-push-4 {
872 .col-xs-push-4 {
873 left: 33.33333333%;
873 left: 33.33333333%;
874 }
874 }
875 .col-xs-push-3 {
875 .col-xs-push-3 {
876 left: 25%;
876 left: 25%;
877 }
877 }
878 .col-xs-push-2 {
878 .col-xs-push-2 {
879 left: 16.66666667%;
879 left: 16.66666667%;
880 }
880 }
881 .col-xs-push-1 {
881 .col-xs-push-1 {
882 left: 8.33333333%;
882 left: 8.33333333%;
883 }
883 }
884 .col-xs-push-0 {
884 .col-xs-push-0 {
885 left: 0%;
885 left: 0%;
886 }
886 }
887 .col-xs-offset-12 {
887 .col-xs-offset-12 {
888 margin-left: 100%;
888 margin-left: 100%;
889 }
889 }
890 .col-xs-offset-11 {
890 .col-xs-offset-11 {
891 margin-left: 91.66666667%;
891 margin-left: 91.66666667%;
892 }
892 }
893 .col-xs-offset-10 {
893 .col-xs-offset-10 {
894 margin-left: 83.33333333%;
894 margin-left: 83.33333333%;
895 }
895 }
896 .col-xs-offset-9 {
896 .col-xs-offset-9 {
897 margin-left: 75%;
897 margin-left: 75%;
898 }
898 }
899 .col-xs-offset-8 {
899 .col-xs-offset-8 {
900 margin-left: 66.66666667%;
900 margin-left: 66.66666667%;
901 }
901 }
902 .col-xs-offset-7 {
902 .col-xs-offset-7 {
903 margin-left: 58.33333333%;
903 margin-left: 58.33333333%;
904 }
904 }
905 .col-xs-offset-6 {
905 .col-xs-offset-6 {
906 margin-left: 50%;
906 margin-left: 50%;
907 }
907 }
908 .col-xs-offset-5 {
908 .col-xs-offset-5 {
909 margin-left: 41.66666667%;
909 margin-left: 41.66666667%;
910 }
910 }
911 .col-xs-offset-4 {
911 .col-xs-offset-4 {
912 margin-left: 33.33333333%;
912 margin-left: 33.33333333%;
913 }
913 }
914 .col-xs-offset-3 {
914 .col-xs-offset-3 {
915 margin-left: 25%;
915 margin-left: 25%;
916 }
916 }
917 .col-xs-offset-2 {
917 .col-xs-offset-2 {
918 margin-left: 16.66666667%;
918 margin-left: 16.66666667%;
919 }
919 }
920 .col-xs-offset-1 {
920 .col-xs-offset-1 {
921 margin-left: 8.33333333%;
921 margin-left: 8.33333333%;
922 }
922 }
923 .col-xs-offset-0 {
923 .col-xs-offset-0 {
924 margin-left: 0%;
924 margin-left: 0%;
925 }
925 }
926 @media (min-width: 768px) {
926 @media (min-width: 768px) {
927 .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
927 .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
928 float: left;
928 float: left;
929 }
929 }
930 .col-sm-12 {
930 .col-sm-12 {
931 width: 100%;
931 width: 100%;
932 }
932 }
933 .col-sm-11 {
933 .col-sm-11 {
934 width: 91.66666667%;
934 width: 91.66666667%;
935 }
935 }
936 .col-sm-10 {
936 .col-sm-10 {
937 width: 83.33333333%;
937 width: 83.33333333%;
938 }
938 }
939 .col-sm-9 {
939 .col-sm-9 {
940 width: 75%;
940 width: 75%;
941 }
941 }
942 .col-sm-8 {
942 .col-sm-8 {
943 width: 66.66666667%;
943 width: 66.66666667%;
944 }
944 }
945 .col-sm-7 {
945 .col-sm-7 {
946 width: 58.33333333%;
946 width: 58.33333333%;
947 }
947 }
948 .col-sm-6 {
948 .col-sm-6 {
949 width: 50%;
949 width: 50%;
950 }
950 }
951 .col-sm-5 {
951 .col-sm-5 {
952 width: 41.66666667%;
952 width: 41.66666667%;
953 }
953 }
954 .col-sm-4 {
954 .col-sm-4 {
955 width: 33.33333333%;
955 width: 33.33333333%;
956 }
956 }
957 .col-sm-3 {
957 .col-sm-3 {
958 width: 25%;
958 width: 25%;
959 }
959 }
960 .col-sm-2 {
960 .col-sm-2 {
961 width: 16.66666667%;
961 width: 16.66666667%;
962 }
962 }
963 .col-sm-1 {
963 .col-sm-1 {
964 width: 8.33333333%;
964 width: 8.33333333%;
965 }
965 }
966 .col-sm-pull-12 {
966 .col-sm-pull-12 {
967 right: 100%;
967 right: 100%;
968 }
968 }
969 .col-sm-pull-11 {
969 .col-sm-pull-11 {
970 right: 91.66666667%;
970 right: 91.66666667%;
971 }
971 }
972 .col-sm-pull-10 {
972 .col-sm-pull-10 {
973 right: 83.33333333%;
973 right: 83.33333333%;
974 }
974 }
975 .col-sm-pull-9 {
975 .col-sm-pull-9 {
976 right: 75%;
976 right: 75%;
977 }
977 }
978 .col-sm-pull-8 {
978 .col-sm-pull-8 {
979 right: 66.66666667%;
979 right: 66.66666667%;
980 }
980 }
981 .col-sm-pull-7 {
981 .col-sm-pull-7 {
982 right: 58.33333333%;
982 right: 58.33333333%;
983 }
983 }
984 .col-sm-pull-6 {
984 .col-sm-pull-6 {
985 right: 50%;
985 right: 50%;
986 }
986 }
987 .col-sm-pull-5 {
987 .col-sm-pull-5 {
988 right: 41.66666667%;
988 right: 41.66666667%;
989 }
989 }
990 .col-sm-pull-4 {
990 .col-sm-pull-4 {
991 right: 33.33333333%;
991 right: 33.33333333%;
992 }
992 }
993 .col-sm-pull-3 {
993 .col-sm-pull-3 {
994 right: 25%;
994 right: 25%;
995 }
995 }
996 .col-sm-pull-2 {
996 .col-sm-pull-2 {
997 right: 16.66666667%;
997 right: 16.66666667%;
998 }
998 }
999 .col-sm-pull-1 {
999 .col-sm-pull-1 {
1000 right: 8.33333333%;
1000 right: 8.33333333%;
1001 }
1001 }
1002 .col-sm-pull-0 {
1002 .col-sm-pull-0 {
1003 right: 0%;
1003 right: 0%;
1004 }
1004 }
1005 .col-sm-push-12 {
1005 .col-sm-push-12 {
1006 left: 100%;
1006 left: 100%;
1007 }
1007 }
1008 .col-sm-push-11 {
1008 .col-sm-push-11 {
1009 left: 91.66666667%;
1009 left: 91.66666667%;
1010 }
1010 }
1011 .col-sm-push-10 {
1011 .col-sm-push-10 {
1012 left: 83.33333333%;
1012 left: 83.33333333%;
1013 }
1013 }
1014 .col-sm-push-9 {
1014 .col-sm-push-9 {
1015 left: 75%;
1015 left: 75%;
1016 }
1016 }
1017 .col-sm-push-8 {
1017 .col-sm-push-8 {
1018 left: 66.66666667%;
1018 left: 66.66666667%;
1019 }
1019 }
1020 .col-sm-push-7 {
1020 .col-sm-push-7 {
1021 left: 58.33333333%;
1021 left: 58.33333333%;
1022 }
1022 }
1023 .col-sm-push-6 {
1023 .col-sm-push-6 {
1024 left: 50%;
1024 left: 50%;
1025 }
1025 }
1026 .col-sm-push-5 {
1026 .col-sm-push-5 {
1027 left: 41.66666667%;
1027 left: 41.66666667%;
1028 }
1028 }
1029 .col-sm-push-4 {
1029 .col-sm-push-4 {
1030 left: 33.33333333%;
1030 left: 33.33333333%;
1031 }
1031 }
1032 .col-sm-push-3 {
1032 .col-sm-push-3 {
1033 left: 25%;
1033 left: 25%;
1034 }
1034 }
1035 .col-sm-push-2 {
1035 .col-sm-push-2 {
1036 left: 16.66666667%;
1036 left: 16.66666667%;
1037 }
1037 }
1038 .col-sm-push-1 {
1038 .col-sm-push-1 {
1039 left: 8.33333333%;
1039 left: 8.33333333%;
1040 }
1040 }
1041 .col-sm-push-0 {
1041 .col-sm-push-0 {
1042 left: 0%;
1042 left: 0%;
1043 }
1043 }
1044 .col-sm-offset-12 {
1044 .col-sm-offset-12 {
1045 margin-left: 100%;
1045 margin-left: 100%;
1046 }
1046 }
1047 .col-sm-offset-11 {
1047 .col-sm-offset-11 {
1048 margin-left: 91.66666667%;
1048 margin-left: 91.66666667%;
1049 }
1049 }
1050 .col-sm-offset-10 {
1050 .col-sm-offset-10 {
1051 margin-left: 83.33333333%;
1051 margin-left: 83.33333333%;
1052 }
1052 }
1053 .col-sm-offset-9 {
1053 .col-sm-offset-9 {
1054 margin-left: 75%;
1054 margin-left: 75%;
1055 }
1055 }
1056 .col-sm-offset-8 {
1056 .col-sm-offset-8 {
1057 margin-left: 66.66666667%;
1057 margin-left: 66.66666667%;
1058 }
1058 }
1059 .col-sm-offset-7 {
1059 .col-sm-offset-7 {
1060 margin-left: 58.33333333%;
1060 margin-left: 58.33333333%;
1061 }
1061 }
1062 .col-sm-offset-6 {
1062 .col-sm-offset-6 {
1063 margin-left: 50%;
1063 margin-left: 50%;
1064 }
1064 }
1065 .col-sm-offset-5 {
1065 .col-sm-offset-5 {
1066 margin-left: 41.66666667%;
1066 margin-left: 41.66666667%;
1067 }
1067 }
1068 .col-sm-offset-4 {
1068 .col-sm-offset-4 {
1069 margin-left: 33.33333333%;
1069 margin-left: 33.33333333%;
1070 }
1070 }
1071 .col-sm-offset-3 {
1071 .col-sm-offset-3 {
1072 margin-left: 25%;
1072 margin-left: 25%;
1073 }
1073 }
1074 .col-sm-offset-2 {
1074 .col-sm-offset-2 {
1075 margin-left: 16.66666667%;
1075 margin-left: 16.66666667%;
1076 }
1076 }
1077 .col-sm-offset-1 {
1077 .col-sm-offset-1 {
1078 margin-left: 8.33333333%;
1078 margin-left: 8.33333333%;
1079 }
1079 }
1080 .col-sm-offset-0 {
1080 .col-sm-offset-0 {
1081 margin-left: 0%;
1081 margin-left: 0%;
1082 }
1082 }
1083 }
1083 }
1084 @media (min-width: 992px) {
1084 @media (min-width: 992px) {
1085 .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
1085 .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
1086 float: left;
1086 float: left;
1087 }
1087 }
1088 .col-md-12 {
1088 .col-md-12 {
1089 width: 100%;
1089 width: 100%;
1090 }
1090 }
1091 .col-md-11 {
1091 .col-md-11 {
1092 width: 91.66666667%;
1092 width: 91.66666667%;
1093 }
1093 }
1094 .col-md-10 {
1094 .col-md-10 {
1095 width: 83.33333333%;
1095 width: 83.33333333%;
1096 }
1096 }
1097 .col-md-9 {
1097 .col-md-9 {
1098 width: 75%;
1098 width: 75%;
1099 }
1099 }
1100 .col-md-8 {
1100 .col-md-8 {
1101 width: 66.66666667%;
1101 width: 66.66666667%;
1102 }
1102 }
1103 .col-md-7 {
1103 .col-md-7 {
1104 width: 58.33333333%;
1104 width: 58.33333333%;
1105 }
1105 }
1106 .col-md-6 {
1106 .col-md-6 {
1107 width: 50%;
1107 width: 50%;
1108 }
1108 }
1109 .col-md-5 {
1109 .col-md-5 {
1110 width: 41.66666667%;
1110 width: 41.66666667%;
1111 }
1111 }
1112 .col-md-4 {
1112 .col-md-4 {
1113 width: 33.33333333%;
1113 width: 33.33333333%;
1114 }
1114 }
1115 .col-md-3 {
1115 .col-md-3 {
1116 width: 25%;
1116 width: 25%;
1117 }
1117 }
1118 .col-md-2 {
1118 .col-md-2 {
1119 width: 16.66666667%;
1119 width: 16.66666667%;
1120 }
1120 }
1121 .col-md-1 {
1121 .col-md-1 {
1122 width: 8.33333333%;
1122 width: 8.33333333%;
1123 }
1123 }
1124 .col-md-pull-12 {
1124 .col-md-pull-12 {
1125 right: 100%;
1125 right: 100%;
1126 }
1126 }
1127 .col-md-pull-11 {
1127 .col-md-pull-11 {
1128 right: 91.66666667%;
1128 right: 91.66666667%;
1129 }
1129 }
1130 .col-md-pull-10 {
1130 .col-md-pull-10 {
1131 right: 83.33333333%;
1131 right: 83.33333333%;
1132 }
1132 }
1133 .col-md-pull-9 {
1133 .col-md-pull-9 {
1134 right: 75%;
1134 right: 75%;
1135 }
1135 }
1136 .col-md-pull-8 {
1136 .col-md-pull-8 {
1137 right: 66.66666667%;
1137 right: 66.66666667%;
1138 }
1138 }
1139 .col-md-pull-7 {
1139 .col-md-pull-7 {
1140 right: 58.33333333%;
1140 right: 58.33333333%;
1141 }
1141 }
1142 .col-md-pull-6 {
1142 .col-md-pull-6 {
1143 right: 50%;
1143 right: 50%;
1144 }
1144 }
1145 .col-md-pull-5 {
1145 .col-md-pull-5 {
1146 right: 41.66666667%;
1146 right: 41.66666667%;
1147 }
1147 }
1148 .col-md-pull-4 {
1148 .col-md-pull-4 {
1149 right: 33.33333333%;
1149 right: 33.33333333%;
1150 }
1150 }
1151 .col-md-pull-3 {
1151 .col-md-pull-3 {
1152 right: 25%;
1152 right: 25%;
1153 }
1153 }
1154 .col-md-pull-2 {
1154 .col-md-pull-2 {
1155 right: 16.66666667%;
1155 right: 16.66666667%;
1156 }
1156 }
1157 .col-md-pull-1 {
1157 .col-md-pull-1 {
1158 right: 8.33333333%;
1158 right: 8.33333333%;
1159 }
1159 }
1160 .col-md-pull-0 {
1160 .col-md-pull-0 {
1161 right: 0%;
1161 right: 0%;
1162 }
1162 }
1163 .col-md-push-12 {
1163 .col-md-push-12 {
1164 left: 100%;
1164 left: 100%;
1165 }
1165 }
1166 .col-md-push-11 {
1166 .col-md-push-11 {
1167 left: 91.66666667%;
1167 left: 91.66666667%;
1168 }
1168 }
1169 .col-md-push-10 {
1169 .col-md-push-10 {
1170 left: 83.33333333%;
1170 left: 83.33333333%;
1171 }
1171 }
1172 .col-md-push-9 {
1172 .col-md-push-9 {
1173 left: 75%;
1173 left: 75%;
1174 }
1174 }
1175 .col-md-push-8 {
1175 .col-md-push-8 {
1176 left: 66.66666667%;
1176 left: 66.66666667%;
1177 }
1177 }
1178 .col-md-push-7 {
1178 .col-md-push-7 {
1179 left: 58.33333333%;
1179 left: 58.33333333%;
1180 }
1180 }
1181 .col-md-push-6 {
1181 .col-md-push-6 {
1182 left: 50%;
1182 left: 50%;
1183 }
1183 }
1184 .col-md-push-5 {
1184 .col-md-push-5 {
1185 left: 41.66666667%;
1185 left: 41.66666667%;
1186 }
1186 }
1187 .col-md-push-4 {
1187 .col-md-push-4 {
1188 left: 33.33333333%;
1188 left: 33.33333333%;
1189 }
1189 }
1190 .col-md-push-3 {
1190 .col-md-push-3 {
1191 left: 25%;
1191 left: 25%;
1192 }
1192 }
1193 .col-md-push-2 {
1193 .col-md-push-2 {
1194 left: 16.66666667%;
1194 left: 16.66666667%;
1195 }
1195 }
1196 .col-md-push-1 {
1196 .col-md-push-1 {
1197 left: 8.33333333%;
1197 left: 8.33333333%;
1198 }
1198 }
1199 .col-md-push-0 {
1199 .col-md-push-0 {
1200 left: 0%;
1200 left: 0%;
1201 }
1201 }
1202 .col-md-offset-12 {
1202 .col-md-offset-12 {
1203 margin-left: 100%;
1203 margin-left: 100%;
1204 }
1204 }
1205 .col-md-offset-11 {
1205 .col-md-offset-11 {
1206 margin-left: 91.66666667%;
1206 margin-left: 91.66666667%;
1207 }
1207 }
1208 .col-md-offset-10 {
1208 .col-md-offset-10 {
1209 margin-left: 83.33333333%;
1209 margin-left: 83.33333333%;
1210 }
1210 }
1211 .col-md-offset-9 {
1211 .col-md-offset-9 {
1212 margin-left: 75%;
1212 margin-left: 75%;
1213 }
1213 }
1214 .col-md-offset-8 {
1214 .col-md-offset-8 {
1215 margin-left: 66.66666667%;
1215 margin-left: 66.66666667%;
1216 }
1216 }
1217 .col-md-offset-7 {
1217 .col-md-offset-7 {
1218 margin-left: 58.33333333%;
1218 margin-left: 58.33333333%;
1219 }
1219 }
1220 .col-md-offset-6 {
1220 .col-md-offset-6 {
1221 margin-left: 50%;
1221 margin-left: 50%;
1222 }
1222 }
1223 .col-md-offset-5 {
1223 .col-md-offset-5 {
1224 margin-left: 41.66666667%;
1224 margin-left: 41.66666667%;
1225 }
1225 }
1226 .col-md-offset-4 {
1226 .col-md-offset-4 {
1227 margin-left: 33.33333333%;
1227 margin-left: 33.33333333%;
1228 }
1228 }
1229 .col-md-offset-3 {
1229 .col-md-offset-3 {
1230 margin-left: 25%;
1230 margin-left: 25%;
1231 }
1231 }
1232 .col-md-offset-2 {
1232 .col-md-offset-2 {
1233 margin-left: 16.66666667%;
1233 margin-left: 16.66666667%;
1234 }
1234 }
1235 .col-md-offset-1 {
1235 .col-md-offset-1 {
1236 margin-left: 8.33333333%;
1236 margin-left: 8.33333333%;
1237 }
1237 }
1238 .col-md-offset-0 {
1238 .col-md-offset-0 {
1239 margin-left: 0%;
1239 margin-left: 0%;
1240 }
1240 }
1241 }
1241 }
1242 @media (min-width: 1200px) {
1242 @media (min-width: 1200px) {
1243 .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
1243 .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
1244 float: left;
1244 float: left;
1245 }
1245 }
1246 .col-lg-12 {
1246 .col-lg-12 {
1247 width: 100%;
1247 width: 100%;
1248 }
1248 }
1249 .col-lg-11 {
1249 .col-lg-11 {
1250 width: 91.66666667%;
1250 width: 91.66666667%;
1251 }
1251 }
1252 .col-lg-10 {
1252 .col-lg-10 {
1253 width: 83.33333333%;
1253 width: 83.33333333%;
1254 }
1254 }
1255 .col-lg-9 {
1255 .col-lg-9 {
1256 width: 75%;
1256 width: 75%;
1257 }
1257 }
1258 .col-lg-8 {
1258 .col-lg-8 {
1259 width: 66.66666667%;
1259 width: 66.66666667%;
1260 }
1260 }
1261 .col-lg-7 {
1261 .col-lg-7 {
1262 width: 58.33333333%;
1262 width: 58.33333333%;
1263 }
1263 }
1264 .col-lg-6 {
1264 .col-lg-6 {
1265 width: 50%;
1265 width: 50%;
1266 }
1266 }
1267 .col-lg-5 {
1267 .col-lg-5 {
1268 width: 41.66666667%;
1268 width: 41.66666667%;
1269 }
1269 }
1270 .col-lg-4 {
1270 .col-lg-4 {
1271 width: 33.33333333%;
1271 width: 33.33333333%;
1272 }
1272 }
1273 .col-lg-3 {
1273 .col-lg-3 {
1274 width: 25%;
1274 width: 25%;
1275 }
1275 }
1276 .col-lg-2 {
1276 .col-lg-2 {
1277 width: 16.66666667%;
1277 width: 16.66666667%;
1278 }
1278 }
1279 .col-lg-1 {
1279 .col-lg-1 {
1280 width: 8.33333333%;
1280 width: 8.33333333%;
1281 }
1281 }
1282 .col-lg-pull-12 {
1282 .col-lg-pull-12 {
1283 right: 100%;
1283 right: 100%;
1284 }
1284 }
1285 .col-lg-pull-11 {
1285 .col-lg-pull-11 {
1286 right: 91.66666667%;
1286 right: 91.66666667%;
1287 }
1287 }
1288 .col-lg-pull-10 {
1288 .col-lg-pull-10 {
1289 right: 83.33333333%;
1289 right: 83.33333333%;
1290 }
1290 }
1291 .col-lg-pull-9 {
1291 .col-lg-pull-9 {
1292 right: 75%;
1292 right: 75%;
1293 }
1293 }
1294 .col-lg-pull-8 {
1294 .col-lg-pull-8 {
1295 right: 66.66666667%;
1295 right: 66.66666667%;
1296 }
1296 }
1297 .col-lg-pull-7 {
1297 .col-lg-pull-7 {
1298 right: 58.33333333%;
1298 right: 58.33333333%;
1299 }
1299 }
1300 .col-lg-pull-6 {
1300 .col-lg-pull-6 {
1301 right: 50%;
1301 right: 50%;
1302 }
1302 }
1303 .col-lg-pull-5 {
1303 .col-lg-pull-5 {
1304 right: 41.66666667%;
1304 right: 41.66666667%;
1305 }
1305 }
1306 .col-lg-pull-4 {
1306 .col-lg-pull-4 {
1307 right: 33.33333333%;
1307 right: 33.33333333%;
1308 }
1308 }
1309 .col-lg-pull-3 {
1309 .col-lg-pull-3 {
1310 right: 25%;
1310 right: 25%;
1311 }
1311 }
1312 .col-lg-pull-2 {
1312 .col-lg-pull-2 {
1313 right: 16.66666667%;
1313 right: 16.66666667%;
1314 }
1314 }
1315 .col-lg-pull-1 {
1315 .col-lg-pull-1 {
1316 right: 8.33333333%;
1316 right: 8.33333333%;
1317 }
1317 }
1318 .col-lg-pull-0 {
1318 .col-lg-pull-0 {
1319 right: 0%;
1319 right: 0%;
1320 }
1320 }
1321 .col-lg-push-12 {
1321 .col-lg-push-12 {
1322 left: 100%;
1322 left: 100%;
1323 }
1323 }
1324 .col-lg-push-11 {
1324 .col-lg-push-11 {
1325 left: 91.66666667%;
1325 left: 91.66666667%;
1326 }
1326 }
1327 .col-lg-push-10 {
1327 .col-lg-push-10 {
1328 left: 83.33333333%;
1328 left: 83.33333333%;
1329 }
1329 }
1330 .col-lg-push-9 {
1330 .col-lg-push-9 {
1331 left: 75%;
1331 left: 75%;
1332 }
1332 }
1333 .col-lg-push-8 {
1333 .col-lg-push-8 {
1334 left: 66.66666667%;
1334 left: 66.66666667%;
1335 }
1335 }
1336 .col-lg-push-7 {
1336 .col-lg-push-7 {
1337 left: 58.33333333%;
1337 left: 58.33333333%;
1338 }
1338 }
1339 .col-lg-push-6 {
1339 .col-lg-push-6 {
1340 left: 50%;
1340 left: 50%;
1341 }
1341 }
1342 .col-lg-push-5 {
1342 .col-lg-push-5 {
1343 left: 41.66666667%;
1343 left: 41.66666667%;
1344 }
1344 }
1345 .col-lg-push-4 {
1345 .col-lg-push-4 {
1346 left: 33.33333333%;
1346 left: 33.33333333%;
1347 }
1347 }
1348 .col-lg-push-3 {
1348 .col-lg-push-3 {
1349 left: 25%;
1349 left: 25%;
1350 }
1350 }
1351 .col-lg-push-2 {
1351 .col-lg-push-2 {
1352 left: 16.66666667%;
1352 left: 16.66666667%;
1353 }
1353 }
1354 .col-lg-push-1 {
1354 .col-lg-push-1 {
1355 left: 8.33333333%;
1355 left: 8.33333333%;
1356 }
1356 }
1357 .col-lg-push-0 {
1357 .col-lg-push-0 {
1358 left: 0%;
1358 left: 0%;
1359 }
1359 }
1360 .col-lg-offset-12 {
1360 .col-lg-offset-12 {
1361 margin-left: 100%;
1361 margin-left: 100%;
1362 }
1362 }
1363 .col-lg-offset-11 {
1363 .col-lg-offset-11 {
1364 margin-left: 91.66666667%;
1364 margin-left: 91.66666667%;
1365 }
1365 }
1366 .col-lg-offset-10 {
1366 .col-lg-offset-10 {
1367 margin-left: 83.33333333%;
1367 margin-left: 83.33333333%;
1368 }
1368 }
1369 .col-lg-offset-9 {
1369 .col-lg-offset-9 {
1370 margin-left: 75%;
1370 margin-left: 75%;
1371 }
1371 }
1372 .col-lg-offset-8 {
1372 .col-lg-offset-8 {
1373 margin-left: 66.66666667%;
1373 margin-left: 66.66666667%;
1374 }
1374 }
1375 .col-lg-offset-7 {
1375 .col-lg-offset-7 {
1376 margin-left: 58.33333333%;
1376 margin-left: 58.33333333%;
1377 }
1377 }
1378 .col-lg-offset-6 {
1378 .col-lg-offset-6 {
1379 margin-left: 50%;
1379 margin-left: 50%;
1380 }
1380 }
1381 .col-lg-offset-5 {
1381 .col-lg-offset-5 {
1382 margin-left: 41.66666667%;
1382 margin-left: 41.66666667%;
1383 }
1383 }
1384 .col-lg-offset-4 {
1384 .col-lg-offset-4 {
1385 margin-left: 33.33333333%;
1385 margin-left: 33.33333333%;
1386 }
1386 }
1387 .col-lg-offset-3 {
1387 .col-lg-offset-3 {
1388 margin-left: 25%;
1388 margin-left: 25%;
1389 }
1389 }
1390 .col-lg-offset-2 {
1390 .col-lg-offset-2 {
1391 margin-left: 16.66666667%;
1391 margin-left: 16.66666667%;
1392 }
1392 }
1393 .col-lg-offset-1 {
1393 .col-lg-offset-1 {
1394 margin-left: 8.33333333%;
1394 margin-left: 8.33333333%;
1395 }
1395 }
1396 .col-lg-offset-0 {
1396 .col-lg-offset-0 {
1397 margin-left: 0%;
1397 margin-left: 0%;
1398 }
1398 }
1399 }
1399 }
1400 table {
1400 table {
1401 max-width: 100%;
1401 max-width: 100%;
1402 background-color: transparent;
1402 background-color: transparent;
1403 }
1403 }
1404 th {
1404 th {
1405 text-align: left;
1405 text-align: left;
1406 }
1406 }
1407 .table {
1407 .table {
1408 width: 100%;
1408 width: 100%;
1409 margin-bottom: 18px;
1409 margin-bottom: 18px;
1410 }
1410 }
1411 .table > thead > tr > th,
1411 .table > thead > tr > th,
1412 .table > tbody > tr > th,
1412 .table > tbody > tr > th,
1413 .table > tfoot > tr > th,
1413 .table > tfoot > tr > th,
1414 .table > thead > tr > td,
1414 .table > thead > tr > td,
1415 .table > tbody > tr > td,
1415 .table > tbody > tr > td,
1416 .table > tfoot > tr > td {
1416 .table > tfoot > tr > td {
1417 padding: 8px;
1417 padding: 8px;
1418 line-height: 1.42857143;
1418 line-height: 1.42857143;
1419 vertical-align: top;
1419 vertical-align: top;
1420 border-top: 1px solid #dddddd;
1420 border-top: 1px solid #dddddd;
1421 }
1421 }
1422 .table > thead > tr > th {
1422 .table > thead > tr > th {
1423 vertical-align: bottom;
1423 vertical-align: bottom;
1424 border-bottom: 2px solid #dddddd;
1424 border-bottom: 2px solid #dddddd;
1425 }
1425 }
1426 .table > caption + thead > tr:first-child > th,
1426 .table > caption + thead > tr:first-child > th,
1427 .table > colgroup + thead > tr:first-child > th,
1427 .table > colgroup + thead > tr:first-child > th,
1428 .table > thead:first-child > tr:first-child > th,
1428 .table > thead:first-child > tr:first-child > th,
1429 .table > caption + thead > tr:first-child > td,
1429 .table > caption + thead > tr:first-child > td,
1430 .table > colgroup + thead > tr:first-child > td,
1430 .table > colgroup + thead > tr:first-child > td,
1431 .table > thead:first-child > tr:first-child > td {
1431 .table > thead:first-child > tr:first-child > td {
1432 border-top: 0;
1432 border-top: 0;
1433 }
1433 }
1434 .table > tbody + tbody {
1434 .table > tbody + tbody {
1435 border-top: 2px solid #dddddd;
1435 border-top: 2px solid #dddddd;
1436 }
1436 }
1437 .table .table {
1437 .table .table {
1438 background-color: #ffffff;
1438 background-color: #ffffff;
1439 }
1439 }
1440 .table-condensed > thead > tr > th,
1440 .table-condensed > thead > tr > th,
1441 .table-condensed > tbody > tr > th,
1441 .table-condensed > tbody > tr > th,
1442 .table-condensed > tfoot > tr > th,
1442 .table-condensed > tfoot > tr > th,
1443 .table-condensed > thead > tr > td,
1443 .table-condensed > thead > tr > td,
1444 .table-condensed > tbody > tr > td,
1444 .table-condensed > tbody > tr > td,
1445 .table-condensed > tfoot > tr > td {
1445 .table-condensed > tfoot > tr > td {
1446 padding: 5px;
1446 padding: 5px;
1447 }
1447 }
1448 .table-bordered {
1448 .table-bordered {
1449 border: 1px solid #dddddd;
1449 border: 1px solid #dddddd;
1450 }
1450 }
1451 .table-bordered > thead > tr > th,
1451 .table-bordered > thead > tr > th,
1452 .table-bordered > tbody > tr > th,
1452 .table-bordered > tbody > tr > th,
1453 .table-bordered > tfoot > tr > th,
1453 .table-bordered > tfoot > tr > th,
1454 .table-bordered > thead > tr > td,
1454 .table-bordered > thead > tr > td,
1455 .table-bordered > tbody > tr > td,
1455 .table-bordered > tbody > tr > td,
1456 .table-bordered > tfoot > tr > td {
1456 .table-bordered > tfoot > tr > td {
1457 border: 1px solid #dddddd;
1457 border: 1px solid #dddddd;
1458 }
1458 }
1459 .table-bordered > thead > tr > th,
1459 .table-bordered > thead > tr > th,
1460 .table-bordered > thead > tr > td {
1460 .table-bordered > thead > tr > td {
1461 border-bottom-width: 2px;
1461 border-bottom-width: 2px;
1462 }
1462 }
1463 .table-striped > tbody > tr:nth-child(odd) > td,
1463 .table-striped > tbody > tr:nth-child(odd) > td,
1464 .table-striped > tbody > tr:nth-child(odd) > th {
1464 .table-striped > tbody > tr:nth-child(odd) > th {
1465 background-color: #f9f9f9;
1465 background-color: #f9f9f9;
1466 }
1466 }
1467 .table-hover > tbody > tr:hover > td,
1467 .table-hover > tbody > tr:hover > td,
1468 .table-hover > tbody > tr:hover > th {
1468 .table-hover > tbody > tr:hover > th {
1469 background-color: #f5f5f5;
1469 background-color: #f5f5f5;
1470 }
1470 }
1471 table col[class*="col-"] {
1471 table col[class*="col-"] {
1472 position: static;
1472 position: static;
1473 float: none;
1473 float: none;
1474 display: table-column;
1474 display: table-column;
1475 }
1475 }
1476 table td[class*="col-"],
1476 table td[class*="col-"],
1477 table th[class*="col-"] {
1477 table th[class*="col-"] {
1478 position: static;
1478 position: static;
1479 float: none;
1479 float: none;
1480 display: table-cell;
1480 display: table-cell;
1481 }
1481 }
1482 .table > thead > tr > td.active,
1482 .table > thead > tr > td.active,
1483 .table > tbody > tr > td.active,
1483 .table > tbody > tr > td.active,
1484 .table > tfoot > tr > td.active,
1484 .table > tfoot > tr > td.active,
1485 .table > thead > tr > th.active,
1485 .table > thead > tr > th.active,
1486 .table > tbody > tr > th.active,
1486 .table > tbody > tr > th.active,
1487 .table > tfoot > tr > th.active,
1487 .table > tfoot > tr > th.active,
1488 .table > thead > tr.active > td,
1488 .table > thead > tr.active > td,
1489 .table > tbody > tr.active > td,
1489 .table > tbody > tr.active > td,
1490 .table > tfoot > tr.active > td,
1490 .table > tfoot > tr.active > td,
1491 .table > thead > tr.active > th,
1491 .table > thead > tr.active > th,
1492 .table > tbody > tr.active > th,
1492 .table > tbody > tr.active > th,
1493 .table > tfoot > tr.active > th {
1493 .table > tfoot > tr.active > th {
1494 background-color: #f5f5f5;
1494 background-color: #f5f5f5;
1495 }
1495 }
1496 .table-hover > tbody > tr > td.active:hover,
1496 .table-hover > tbody > tr > td.active:hover,
1497 .table-hover > tbody > tr > th.active:hover,
1497 .table-hover > tbody > tr > th.active:hover,
1498 .table-hover > tbody > tr.active:hover > td,
1498 .table-hover > tbody > tr.active:hover > td,
1499 .table-hover > tbody > tr.active:hover > th {
1499 .table-hover > tbody > tr.active:hover > th {
1500 background-color: #e8e8e8;
1500 background-color: #e8e8e8;
1501 }
1501 }
1502 .table > thead > tr > td.success,
1502 .table > thead > tr > td.success,
1503 .table > tbody > tr > td.success,
1503 .table > tbody > tr > td.success,
1504 .table > tfoot > tr > td.success,
1504 .table > tfoot > tr > td.success,
1505 .table > thead > tr > th.success,
1505 .table > thead > tr > th.success,
1506 .table > tbody > tr > th.success,
1506 .table > tbody > tr > th.success,
1507 .table > tfoot > tr > th.success,
1507 .table > tfoot > tr > th.success,
1508 .table > thead > tr.success > td,
1508 .table > thead > tr.success > td,
1509 .table > tbody > tr.success > td,
1509 .table > tbody > tr.success > td,
1510 .table > tfoot > tr.success > td,
1510 .table > tfoot > tr.success > td,
1511 .table > thead > tr.success > th,
1511 .table > thead > tr.success > th,
1512 .table > tbody > tr.success > th,
1512 .table > tbody > tr.success > th,
1513 .table > tfoot > tr.success > th {
1513 .table > tfoot > tr.success > th {
1514 background-color: #dff0d8;
1514 background-color: #dff0d8;
1515 }
1515 }
1516 .table-hover > tbody > tr > td.success:hover,
1516 .table-hover > tbody > tr > td.success:hover,
1517 .table-hover > tbody > tr > th.success:hover,
1517 .table-hover > tbody > tr > th.success:hover,
1518 .table-hover > tbody > tr.success:hover > td,
1518 .table-hover > tbody > tr.success:hover > td,
1519 .table-hover > tbody > tr.success:hover > th {
1519 .table-hover > tbody > tr.success:hover > th {
1520 background-color: #d0e9c6;
1520 background-color: #d0e9c6;
1521 }
1521 }
1522 .table > thead > tr > td.info,
1522 .table > thead > tr > td.info,
1523 .table > tbody > tr > td.info,
1523 .table > tbody > tr > td.info,
1524 .table > tfoot > tr > td.info,
1524 .table > tfoot > tr > td.info,
1525 .table > thead > tr > th.info,
1525 .table > thead > tr > th.info,
1526 .table > tbody > tr > th.info,
1526 .table > tbody > tr > th.info,
1527 .table > tfoot > tr > th.info,
1527 .table > tfoot > tr > th.info,
1528 .table > thead > tr.info > td,
1528 .table > thead > tr.info > td,
1529 .table > tbody > tr.info > td,
1529 .table > tbody > tr.info > td,
1530 .table > tfoot > tr.info > td,
1530 .table > tfoot > tr.info > td,
1531 .table > thead > tr.info > th,
1531 .table > thead > tr.info > th,
1532 .table > tbody > tr.info > th,
1532 .table > tbody > tr.info > th,
1533 .table > tfoot > tr.info > th {
1533 .table > tfoot > tr.info > th {
1534 background-color: #d9edf7;
1534 background-color: #d9edf7;
1535 }
1535 }
1536 .table-hover > tbody > tr > td.info:hover,
1536 .table-hover > tbody > tr > td.info:hover,
1537 .table-hover > tbody > tr > th.info:hover,
1537 .table-hover > tbody > tr > th.info:hover,
1538 .table-hover > tbody > tr.info:hover > td,
1538 .table-hover > tbody > tr.info:hover > td,
1539 .table-hover > tbody > tr.info:hover > th {
1539 .table-hover > tbody > tr.info:hover > th {
1540 background-color: #c4e3f3;
1540 background-color: #c4e3f3;
1541 }
1541 }
1542 .table > thead > tr > td.warning,
1542 .table > thead > tr > td.warning,
1543 .table > tbody > tr > td.warning,
1543 .table > tbody > tr > td.warning,
1544 .table > tfoot > tr > td.warning,
1544 .table > tfoot > tr > td.warning,
1545 .table > thead > tr > th.warning,
1545 .table > thead > tr > th.warning,
1546 .table > tbody > tr > th.warning,
1546 .table > tbody > tr > th.warning,
1547 .table > tfoot > tr > th.warning,
1547 .table > tfoot > tr > th.warning,
1548 .table > thead > tr.warning > td,
1548 .table > thead > tr.warning > td,
1549 .table > tbody > tr.warning > td,
1549 .table > tbody > tr.warning > td,
1550 .table > tfoot > tr.warning > td,
1550 .table > tfoot > tr.warning > td,
1551 .table > thead > tr.warning > th,
1551 .table > thead > tr.warning > th,
1552 .table > tbody > tr.warning > th,
1552 .table > tbody > tr.warning > th,
1553 .table > tfoot > tr.warning > th {
1553 .table > tfoot > tr.warning > th {
1554 background-color: #fcf8e3;
1554 background-color: #fcf8e3;
1555 }
1555 }
1556 .table-hover > tbody > tr > td.warning:hover,
1556 .table-hover > tbody > tr > td.warning:hover,
1557 .table-hover > tbody > tr > th.warning:hover,
1557 .table-hover > tbody > tr > th.warning:hover,
1558 .table-hover > tbody > tr.warning:hover > td,
1558 .table-hover > tbody > tr.warning:hover > td,
1559 .table-hover > tbody > tr.warning:hover > th {
1559 .table-hover > tbody > tr.warning:hover > th {
1560 background-color: #faf2cc;
1560 background-color: #faf2cc;
1561 }
1561 }
1562 .table > thead > tr > td.danger,
1562 .table > thead > tr > td.danger,
1563 .table > tbody > tr > td.danger,
1563 .table > tbody > tr > td.danger,
1564 .table > tfoot > tr > td.danger,
1564 .table > tfoot > tr > td.danger,
1565 .table > thead > tr > th.danger,
1565 .table > thead > tr > th.danger,
1566 .table > tbody > tr > th.danger,
1566 .table > tbody > tr > th.danger,
1567 .table > tfoot > tr > th.danger,
1567 .table > tfoot > tr > th.danger,
1568 .table > thead > tr.danger > td,
1568 .table > thead > tr.danger > td,
1569 .table > tbody > tr.danger > td,
1569 .table > tbody > tr.danger > td,
1570 .table > tfoot > tr.danger > td,
1570 .table > tfoot > tr.danger > td,
1571 .table > thead > tr.danger > th,
1571 .table > thead > tr.danger > th,
1572 .table > tbody > tr.danger > th,
1572 .table > tbody > tr.danger > th,
1573 .table > tfoot > tr.danger > th {
1573 .table > tfoot > tr.danger > th {
1574 background-color: #f2dede;
1574 background-color: #f2dede;
1575 }
1575 }
1576 .table-hover > tbody > tr > td.danger:hover,
1576 .table-hover > tbody > tr > td.danger:hover,
1577 .table-hover > tbody > tr > th.danger:hover,
1577 .table-hover > tbody > tr > th.danger:hover,
1578 .table-hover > tbody > tr.danger:hover > td,
1578 .table-hover > tbody > tr.danger:hover > td,
1579 .table-hover > tbody > tr.danger:hover > th {
1579 .table-hover > tbody > tr.danger:hover > th {
1580 background-color: #ebcccc;
1580 background-color: #ebcccc;
1581 }
1581 }
1582 @media (max-width: 767px) {
1582 @media (max-width: 767px) {
1583 .table-responsive {
1583 .table-responsive {
1584 width: 100%;
1584 width: 100%;
1585 margin-bottom: 13.5px;
1585 margin-bottom: 13.5px;
1586 overflow-y: hidden;
1586 overflow-y: hidden;
1587 overflow-x: scroll;
1587 overflow-x: scroll;
1588 -ms-overflow-style: -ms-autohiding-scrollbar;
1588 -ms-overflow-style: -ms-autohiding-scrollbar;
1589 border: 1px solid #dddddd;
1589 border: 1px solid #dddddd;
1590 -webkit-overflow-scrolling: touch;
1590 -webkit-overflow-scrolling: touch;
1591 }
1591 }
1592 .table-responsive > .table {
1592 .table-responsive > .table {
1593 margin-bottom: 0;
1593 margin-bottom: 0;
1594 }
1594 }
1595 .table-responsive > .table > thead > tr > th,
1595 .table-responsive > .table > thead > tr > th,
1596 .table-responsive > .table > tbody > tr > th,
1596 .table-responsive > .table > tbody > tr > th,
1597 .table-responsive > .table > tfoot > tr > th,
1597 .table-responsive > .table > tfoot > tr > th,
1598 .table-responsive > .table > thead > tr > td,
1598 .table-responsive > .table > thead > tr > td,
1599 .table-responsive > .table > tbody > tr > td,
1599 .table-responsive > .table > tbody > tr > td,
1600 .table-responsive > .table > tfoot > tr > td {
1600 .table-responsive > .table > tfoot > tr > td {
1601 white-space: nowrap;
1601 white-space: nowrap;
1602 }
1602 }
1603 .table-responsive > .table-bordered {
1603 .table-responsive > .table-bordered {
1604 border: 0;
1604 border: 0;
1605 }
1605 }
1606 .table-responsive > .table-bordered > thead > tr > th:first-child,
1606 .table-responsive > .table-bordered > thead > tr > th:first-child,
1607 .table-responsive > .table-bordered > tbody > tr > th:first-child,
1607 .table-responsive > .table-bordered > tbody > tr > th:first-child,
1608 .table-responsive > .table-bordered > tfoot > tr > th:first-child,
1608 .table-responsive > .table-bordered > tfoot > tr > th:first-child,
1609 .table-responsive > .table-bordered > thead > tr > td:first-child,
1609 .table-responsive > .table-bordered > thead > tr > td:first-child,
1610 .table-responsive > .table-bordered > tbody > tr > td:first-child,
1610 .table-responsive > .table-bordered > tbody > tr > td:first-child,
1611 .table-responsive > .table-bordered > tfoot > tr > td:first-child {
1611 .table-responsive > .table-bordered > tfoot > tr > td:first-child {
1612 border-left: 0;
1612 border-left: 0;
1613 }
1613 }
1614 .table-responsive > .table-bordered > thead > tr > th:last-child,
1614 .table-responsive > .table-bordered > thead > tr > th:last-child,
1615 .table-responsive > .table-bordered > tbody > tr > th:last-child,
1615 .table-responsive > .table-bordered > tbody > tr > th:last-child,
1616 .table-responsive > .table-bordered > tfoot > tr > th:last-child,
1616 .table-responsive > .table-bordered > tfoot > tr > th:last-child,
1617 .table-responsive > .table-bordered > thead > tr > td:last-child,
1617 .table-responsive > .table-bordered > thead > tr > td:last-child,
1618 .table-responsive > .table-bordered > tbody > tr > td:last-child,
1618 .table-responsive > .table-bordered > tbody > tr > td:last-child,
1619 .table-responsive > .table-bordered > tfoot > tr > td:last-child {
1619 .table-responsive > .table-bordered > tfoot > tr > td:last-child {
1620 border-right: 0;
1620 border-right: 0;
1621 }
1621 }
1622 .table-responsive > .table-bordered > tbody > tr:last-child > th,
1622 .table-responsive > .table-bordered > tbody > tr:last-child > th,
1623 .table-responsive > .table-bordered > tfoot > tr:last-child > th,
1623 .table-responsive > .table-bordered > tfoot > tr:last-child > th,
1624 .table-responsive > .table-bordered > tbody > tr:last-child > td,
1624 .table-responsive > .table-bordered > tbody > tr:last-child > td,
1625 .table-responsive > .table-bordered > tfoot > tr:last-child > td {
1625 .table-responsive > .table-bordered > tfoot > tr:last-child > td {
1626 border-bottom: 0;
1626 border-bottom: 0;
1627 }
1627 }
1628 }
1628 }
1629 fieldset {
1629 fieldset {
1630 padding: 0;
1630 padding: 0;
1631 margin: 0;
1631 margin: 0;
1632 border: 0;
1632 border: 0;
1633 min-width: 0;
1633 min-width: 0;
1634 }
1634 }
1635 legend {
1635 legend {
1636 display: block;
1636 display: block;
1637 width: 100%;
1637 width: 100%;
1638 padding: 0;
1638 padding: 0;
1639 margin-bottom: 18px;
1639 margin-bottom: 18px;
1640 font-size: 19.5px;
1640 font-size: 19.5px;
1641 line-height: inherit;
1641 line-height: inherit;
1642 color: #333333;
1642 color: #333333;
1643 border: 0;
1643 border: 0;
1644 border-bottom: 1px solid #e5e5e5;
1644 border-bottom: 1px solid #e5e5e5;
1645 }
1645 }
1646 label {
1646 label {
1647 display: inline-block;
1647 display: inline-block;
1648 margin-bottom: 5px;
1648 margin-bottom: 5px;
1649 font-weight: bold;
1649 font-weight: bold;
1650 }
1650 }
1651 input[type="search"] {
1651 input[type="search"] {
1652 -webkit-box-sizing: border-box;
1652 -webkit-box-sizing: border-box;
1653 -moz-box-sizing: border-box;
1653 -moz-box-sizing: border-box;
1654 box-sizing: border-box;
1654 box-sizing: border-box;
1655 }
1655 }
1656 input[type="radio"],
1656 input[type="radio"],
1657 input[type="checkbox"] {
1657 input[type="checkbox"] {
1658 margin: 4px 0 0;
1658 margin: 4px 0 0;
1659 margin-top: 1px \9;
1659 margin-top: 1px \9;
1660 /* IE8-9 */
1660 /* IE8-9 */
1661 line-height: normal;
1661 line-height: normal;
1662 }
1662 }
1663 input[type="file"] {
1663 input[type="file"] {
1664 display: block;
1664 display: block;
1665 }
1665 }
1666 input[type="range"] {
1666 input[type="range"] {
1667 display: block;
1667 display: block;
1668 width: 100%;
1668 width: 100%;
1669 }
1669 }
1670 select[multiple],
1670 select[multiple],
1671 select[size] {
1671 select[size] {
1672 height: auto;
1672 height: auto;
1673 }
1673 }
1674 input[type="file"]:focus,
1674 input[type="file"]:focus,
1675 input[type="radio"]:focus,
1675 input[type="radio"]:focus,
1676 input[type="checkbox"]:focus {
1676 input[type="checkbox"]:focus {
1677 outline: thin dotted;
1677 outline: thin dotted;
1678 outline: 5px auto -webkit-focus-ring-color;
1678 outline: 5px auto -webkit-focus-ring-color;
1679 outline-offset: -2px;
1679 outline-offset: -2px;
1680 }
1680 }
1681 output {
1681 output {
1682 display: block;
1682 display: block;
1683 padding-top: 7px;
1683 padding-top: 7px;
1684 font-size: 13px;
1684 font-size: 13px;
1685 line-height: 1.42857143;
1685 line-height: 1.42857143;
1686 color: #555555;
1686 color: #555555;
1687 }
1687 }
1688 .form-control {
1688 .form-control {
1689 display: block;
1689 display: block;
1690 width: 100%;
1690 width: 100%;
1691 height: 32px;
1691 height: 32px;
1692 padding: 6px 12px;
1692 padding: 6px 12px;
1693 font-size: 13px;
1693 font-size: 13px;
1694 line-height: 1.42857143;
1694 line-height: 1.42857143;
1695 color: #555555;
1695 color: #555555;
1696 background-color: #ffffff;
1696 background-color: #ffffff;
1697 background-image: none;
1697 background-image: none;
1698 border: 1px solid #cccccc;
1698 border: 1px solid #cccccc;
1699 border-radius: 4px;
1699 border-radius: 4px;
1700 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1700 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1701 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1701 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1702 -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
1702 -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
1703 transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
1703 transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
1704 }
1704 }
1705 .form-control:focus {
1705 .form-control:focus {
1706 border-color: #66afe9;
1706 border-color: #66afe9;
1707 outline: 0;
1707 outline: 0;
1708 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
1708 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
1709 box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
1709 box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
1710 }
1710 }
1711 .form-control::-moz-placeholder {
1711 .form-control::-moz-placeholder {
1712 color: #999999;
1712 color: #999999;
1713 opacity: 1;
1713 opacity: 1;
1714 }
1714 }
1715 .form-control:-ms-input-placeholder {
1715 .form-control:-ms-input-placeholder {
1716 color: #999999;
1716 color: #999999;
1717 }
1717 }
1718 .form-control::-webkit-input-placeholder {
1718 .form-control::-webkit-input-placeholder {
1719 color: #999999;
1719 color: #999999;
1720 }
1720 }
1721 .form-control[disabled],
1721 .form-control[disabled],
1722 .form-control[readonly],
1722 .form-control[readonly],
1723 fieldset[disabled] .form-control {
1723 fieldset[disabled] .form-control {
1724 cursor: not-allowed;
1724 cursor: not-allowed;
1725 background-color: #eeeeee;
1725 background-color: #eeeeee;
1726 opacity: 1;
1726 opacity: 1;
1727 }
1727 }
1728 textarea.form-control {
1728 textarea.form-control {
1729 height: auto;
1729 height: auto;
1730 }
1730 }
1731 input[type="search"] {
1731 input[type="search"] {
1732 -webkit-appearance: none;
1732 -webkit-appearance: none;
1733 }
1733 }
1734 input[type="date"] {
1734 input[type="date"] {
1735 line-height: 32px;
1735 line-height: 32px;
1736 }
1736 }
1737 .form-group {
1737 .form-group {
1738 margin-bottom: 15px;
1738 margin-bottom: 15px;
1739 }
1739 }
1740 .radio,
1740 .radio,
1741 .checkbox {
1741 .checkbox {
1742 display: block;
1742 display: block;
1743 min-height: 18px;
1743 min-height: 18px;
1744 margin-top: 10px;
1744 margin-top: 10px;
1745 margin-bottom: 10px;
1745 margin-bottom: 10px;
1746 padding-left: 20px;
1746 padding-left: 20px;
1747 }
1747 }
1748 .radio label,
1748 .radio label,
1749 .checkbox label {
1749 .checkbox label {
1750 display: inline;
1750 display: inline;
1751 font-weight: normal;
1751 font-weight: normal;
1752 cursor: pointer;
1752 cursor: pointer;
1753 }
1753 }
1754 .radio input[type="radio"],
1754 .radio input[type="radio"],
1755 .radio-inline input[type="radio"],
1755 .radio-inline input[type="radio"],
1756 .checkbox input[type="checkbox"],
1756 .checkbox input[type="checkbox"],
1757 .checkbox-inline input[type="checkbox"] {
1757 .checkbox-inline input[type="checkbox"] {
1758 float: left;
1758 float: left;
1759 margin-left: -20px;
1759 margin-left: -20px;
1760 }
1760 }
1761 .radio + .radio,
1761 .radio + .radio,
1762 .checkbox + .checkbox {
1762 .checkbox + .checkbox {
1763 margin-top: -5px;
1763 margin-top: -5px;
1764 }
1764 }
1765 .radio-inline,
1765 .radio-inline,
1766 .checkbox-inline {
1766 .checkbox-inline {
1767 display: inline-block;
1767 display: inline-block;
1768 padding-left: 20px;
1768 padding-left: 20px;
1769 margin-bottom: 0;
1769 margin-bottom: 0;
1770 vertical-align: middle;
1770 vertical-align: middle;
1771 font-weight: normal;
1771 font-weight: normal;
1772 cursor: pointer;
1772 cursor: pointer;
1773 }
1773 }
1774 .radio-inline + .radio-inline,
1774 .radio-inline + .radio-inline,
1775 .checkbox-inline + .checkbox-inline {
1775 .checkbox-inline + .checkbox-inline {
1776 margin-top: 0;
1776 margin-top: 0;
1777 margin-left: 10px;
1777 margin-left: 10px;
1778 }
1778 }
1779 input[type="radio"][disabled],
1779 input[type="radio"][disabled],
1780 input[type="checkbox"][disabled],
1780 input[type="checkbox"][disabled],
1781 .radio[disabled],
1781 .radio[disabled],
1782 .radio-inline[disabled],
1782 .radio-inline[disabled],
1783 .checkbox[disabled],
1783 .checkbox[disabled],
1784 .checkbox-inline[disabled],
1784 .checkbox-inline[disabled],
1785 fieldset[disabled] input[type="radio"],
1785 fieldset[disabled] input[type="radio"],
1786 fieldset[disabled] input[type="checkbox"],
1786 fieldset[disabled] input[type="checkbox"],
1787 fieldset[disabled] .radio,
1787 fieldset[disabled] .radio,
1788 fieldset[disabled] .radio-inline,
1788 fieldset[disabled] .radio-inline,
1789 fieldset[disabled] .checkbox,
1789 fieldset[disabled] .checkbox,
1790 fieldset[disabled] .checkbox-inline {
1790 fieldset[disabled] .checkbox-inline {
1791 cursor: not-allowed;
1791 cursor: not-allowed;
1792 }
1792 }
1793 .input-sm {
1793 .input-sm {
1794 height: 30px;
1794 height: 30px;
1795 padding: 5px 10px;
1795 padding: 5px 10px;
1796 font-size: 12px;
1796 font-size: 12px;
1797 line-height: 1.5;
1797 line-height: 1.5;
1798 border-radius: 3px;
1798 border-radius: 3px;
1799 }
1799 }
1800 select.input-sm {
1800 select.input-sm {
1801 height: 30px;
1801 height: 30px;
1802 line-height: 30px;
1802 line-height: 30px;
1803 }
1803 }
1804 textarea.input-sm,
1804 textarea.input-sm,
1805 select[multiple].input-sm {
1805 select[multiple].input-sm {
1806 height: auto;
1806 height: auto;
1807 }
1807 }
1808 .input-lg {
1808 .input-lg {
1809 height: 45px;
1809 height: 45px;
1810 padding: 10px 16px;
1810 padding: 10px 16px;
1811 font-size: 17px;
1811 font-size: 17px;
1812 line-height: 1.33;
1812 line-height: 1.33;
1813 border-radius: 6px;
1813 border-radius: 6px;
1814 }
1814 }
1815 select.input-lg {
1815 select.input-lg {
1816 height: 45px;
1816 height: 45px;
1817 line-height: 45px;
1817 line-height: 45px;
1818 }
1818 }
1819 textarea.input-lg,
1819 textarea.input-lg,
1820 select[multiple].input-lg {
1820 select[multiple].input-lg {
1821 height: auto;
1821 height: auto;
1822 }
1822 }
1823 .has-feedback {
1823 .has-feedback {
1824 position: relative;
1824 position: relative;
1825 }
1825 }
1826 .has-feedback .form-control {
1826 .has-feedback .form-control {
1827 padding-right: 40px;
1827 padding-right: 40px;
1828 }
1828 }
1829 .has-feedback .form-control-feedback {
1829 .has-feedback .form-control-feedback {
1830 position: absolute;
1830 position: absolute;
1831 top: 23px;
1831 top: 23px;
1832 right: 0;
1832 right: 0;
1833 display: block;
1833 display: block;
1834 width: 32px;
1834 width: 32px;
1835 height: 32px;
1835 height: 32px;
1836 line-height: 32px;
1836 line-height: 32px;
1837 text-align: center;
1837 text-align: center;
1838 }
1838 }
1839 .has-success .help-block,
1839 .has-success .help-block,
1840 .has-success .control-label,
1840 .has-success .control-label,
1841 .has-success .radio,
1841 .has-success .radio,
1842 .has-success .checkbox,
1842 .has-success .checkbox,
1843 .has-success .radio-inline,
1843 .has-success .radio-inline,
1844 .has-success .checkbox-inline {
1844 .has-success .checkbox-inline {
1845 color: #3c763d;
1845 color: #3c763d;
1846 }
1846 }
1847 .has-success .form-control {
1847 .has-success .form-control {
1848 border-color: #3c763d;
1848 border-color: #3c763d;
1849 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1849 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1850 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1850 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1851 }
1851 }
1852 .has-success .form-control:focus {
1852 .has-success .form-control:focus {
1853 border-color: #2b542c;
1853 border-color: #2b542c;
1854 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
1854 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
1855 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
1855 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
1856 }
1856 }
1857 .has-success .input-group-addon {
1857 .has-success .input-group-addon {
1858 color: #3c763d;
1858 color: #3c763d;
1859 border-color: #3c763d;
1859 border-color: #3c763d;
1860 background-color: #dff0d8;
1860 background-color: #dff0d8;
1861 }
1861 }
1862 .has-success .form-control-feedback {
1862 .has-success .form-control-feedback {
1863 color: #3c763d;
1863 color: #3c763d;
1864 }
1864 }
1865 .has-warning .help-block,
1865 .has-warning .help-block,
1866 .has-warning .control-label,
1866 .has-warning .control-label,
1867 .has-warning .radio,
1867 .has-warning .radio,
1868 .has-warning .checkbox,
1868 .has-warning .checkbox,
1869 .has-warning .radio-inline,
1869 .has-warning .radio-inline,
1870 .has-warning .checkbox-inline {
1870 .has-warning .checkbox-inline {
1871 color: #8a6d3b;
1871 color: #8a6d3b;
1872 }
1872 }
1873 .has-warning .form-control {
1873 .has-warning .form-control {
1874 border-color: #8a6d3b;
1874 border-color: #8a6d3b;
1875 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1875 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1876 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1876 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1877 }
1877 }
1878 .has-warning .form-control:focus {
1878 .has-warning .form-control:focus {
1879 border-color: #66512c;
1879 border-color: #66512c;
1880 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
1880 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
1881 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
1881 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
1882 }
1882 }
1883 .has-warning .input-group-addon {
1883 .has-warning .input-group-addon {
1884 color: #8a6d3b;
1884 color: #8a6d3b;
1885 border-color: #8a6d3b;
1885 border-color: #8a6d3b;
1886 background-color: #fcf8e3;
1886 background-color: #fcf8e3;
1887 }
1887 }
1888 .has-warning .form-control-feedback {
1888 .has-warning .form-control-feedback {
1889 color: #8a6d3b;
1889 color: #8a6d3b;
1890 }
1890 }
1891 .has-error .help-block,
1891 .has-error .help-block,
1892 .has-error .control-label,
1892 .has-error .control-label,
1893 .has-error .radio,
1893 .has-error .radio,
1894 .has-error .checkbox,
1894 .has-error .checkbox,
1895 .has-error .radio-inline,
1895 .has-error .radio-inline,
1896 .has-error .checkbox-inline {
1896 .has-error .checkbox-inline {
1897 color: #a94442;
1897 color: #a94442;
1898 }
1898 }
1899 .has-error .form-control {
1899 .has-error .form-control {
1900 border-color: #a94442;
1900 border-color: #a94442;
1901 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1901 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1902 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1902 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
1903 }
1903 }
1904 .has-error .form-control:focus {
1904 .has-error .form-control:focus {
1905 border-color: #843534;
1905 border-color: #843534;
1906 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
1906 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
1907 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
1907 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
1908 }
1908 }
1909 .has-error .input-group-addon {
1909 .has-error .input-group-addon {
1910 color: #a94442;
1910 color: #a94442;
1911 border-color: #a94442;
1911 border-color: #a94442;
1912 background-color: #f2dede;
1912 background-color: #f2dede;
1913 }
1913 }
1914 .has-error .form-control-feedback {
1914 .has-error .form-control-feedback {
1915 color: #a94442;
1915 color: #a94442;
1916 }
1916 }
1917 .form-control-static {
1917 .form-control-static {
1918 margin-bottom: 0;
1918 margin-bottom: 0;
1919 }
1919 }
1920 .help-block {
1920 .help-block {
1921 display: block;
1921 display: block;
1922 margin-top: 5px;
1922 margin-top: 5px;
1923 margin-bottom: 10px;
1923 margin-bottom: 10px;
1924 color: #404040;
1924 color: #404040;
1925 }
1925 }
1926 @media (min-width: 768px) {
1926 @media (min-width: 768px) {
1927 .form-inline .form-group {
1927 .form-inline .form-group {
1928 display: inline-block;
1928 display: inline-block;
1929 margin-bottom: 0;
1929 margin-bottom: 0;
1930 vertical-align: middle;
1930 vertical-align: middle;
1931 }
1931 }
1932 .form-inline .form-control {
1932 .form-inline .form-control {
1933 display: inline-block;
1933 display: inline-block;
1934 width: auto;
1934 width: auto;
1935 vertical-align: middle;
1935 vertical-align: middle;
1936 }
1936 }
1937 .form-inline .input-group > .form-control {
1937 .form-inline .input-group > .form-control {
1938 width: 100%;
1938 width: 100%;
1939 }
1939 }
1940 .form-inline .control-label {
1940 .form-inline .control-label {
1941 margin-bottom: 0;
1941 margin-bottom: 0;
1942 vertical-align: middle;
1942 vertical-align: middle;
1943 }
1943 }
1944 .form-inline .radio,
1944 .form-inline .radio,
1945 .form-inline .checkbox {
1945 .form-inline .checkbox {
1946 display: inline-block;
1946 display: inline-block;
1947 margin-top: 0;
1947 margin-top: 0;
1948 margin-bottom: 0;
1948 margin-bottom: 0;
1949 padding-left: 0;
1949 padding-left: 0;
1950 vertical-align: middle;
1950 vertical-align: middle;
1951 }
1951 }
1952 .form-inline .radio input[type="radio"],
1952 .form-inline .radio input[type="radio"],
1953 .form-inline .checkbox input[type="checkbox"] {
1953 .form-inline .checkbox input[type="checkbox"] {
1954 float: none;
1954 float: none;
1955 margin-left: 0;
1955 margin-left: 0;
1956 }
1956 }
1957 .form-inline .has-feedback .form-control-feedback {
1957 .form-inline .has-feedback .form-control-feedback {
1958 top: 0;
1958 top: 0;
1959 }
1959 }
1960 }
1960 }
1961 .form-horizontal .control-label,
1961 .form-horizontal .control-label,
1962 .form-horizontal .radio,
1962 .form-horizontal .radio,
1963 .form-horizontal .checkbox,
1963 .form-horizontal .checkbox,
1964 .form-horizontal .radio-inline,
1964 .form-horizontal .radio-inline,
1965 .form-horizontal .checkbox-inline {
1965 .form-horizontal .checkbox-inline {
1966 margin-top: 0;
1966 margin-top: 0;
1967 margin-bottom: 0;
1967 margin-bottom: 0;
1968 padding-top: 7px;
1968 padding-top: 7px;
1969 }
1969 }
1970 .form-horizontal .radio,
1970 .form-horizontal .radio,
1971 .form-horizontal .checkbox {
1971 .form-horizontal .checkbox {
1972 min-height: 25px;
1972 min-height: 25px;
1973 }
1973 }
1974 .form-horizontal .form-group {
1974 .form-horizontal .form-group {
1975 margin-left: -15px;
1975 margin-left: -15px;
1976 margin-right: -15px;
1976 margin-right: -15px;
1977 }
1977 }
1978 .form-horizontal .form-control-static {
1978 .form-horizontal .form-control-static {
1979 padding-top: 7px;
1979 padding-top: 7px;
1980 }
1980 }
1981 @media (min-width: 768px) {
1981 @media (min-width: 768px) {
1982 .form-horizontal .control-label {
1982 .form-horizontal .control-label {
1983 text-align: right;
1983 text-align: right;
1984 }
1984 }
1985 }
1985 }
1986 .form-horizontal .has-feedback .form-control-feedback {
1986 .form-horizontal .has-feedback .form-control-feedback {
1987 top: 0;
1987 top: 0;
1988 right: 15px;
1988 right: 15px;
1989 }
1989 }
1990 .btn {
1990 .btn {
1991 display: inline-block;
1991 display: inline-block;
1992 margin-bottom: 0;
1992 margin-bottom: 0;
1993 font-weight: normal;
1993 font-weight: normal;
1994 text-align: center;
1994 text-align: center;
1995 vertical-align: middle;
1995 vertical-align: middle;
1996 cursor: pointer;
1996 cursor: pointer;
1997 background-image: none;
1997 background-image: none;
1998 border: 1px solid transparent;
1998 border: 1px solid transparent;
1999 white-space: nowrap;
1999 white-space: nowrap;
2000 padding: 6px 12px;
2000 padding: 6px 12px;
2001 font-size: 13px;
2001 font-size: 13px;
2002 line-height: 1.42857143;
2002 line-height: 1.42857143;
2003 border-radius: 4px;
2003 border-radius: 4px;
2004 -webkit-user-select: none;
2004 -webkit-user-select: none;
2005 -moz-user-select: none;
2005 -moz-user-select: none;
2006 -ms-user-select: none;
2006 -ms-user-select: none;
2007 user-select: none;
2007 user-select: none;
2008 }
2008 }
2009 .btn:focus,
2009 .btn:focus,
2010 .btn:active:focus,
2010 .btn:active:focus,
2011 .btn.active:focus {
2011 .btn.active:focus {
2012 outline: thin dotted;
2012 outline: thin dotted;
2013 outline: 5px auto -webkit-focus-ring-color;
2013 outline: 5px auto -webkit-focus-ring-color;
2014 outline-offset: -2px;
2014 outline-offset: -2px;
2015 }
2015 }
2016 .btn:hover,
2016 .btn:hover,
2017 .btn:focus {
2017 .btn:focus {
2018 color: #333333;
2018 color: #333333;
2019 text-decoration: none;
2019 text-decoration: none;
2020 }
2020 }
2021 .btn:active,
2021 .btn:active,
2022 .btn.active {
2022 .btn.active {
2023 outline: 0;
2023 outline: 0;
2024 background-image: none;
2024 background-image: none;
2025 -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
2025 -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
2026 box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
2026 box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
2027 }
2027 }
2028 .btn.disabled,
2028 .btn.disabled,
2029 .btn[disabled],
2029 .btn[disabled],
2030 fieldset[disabled] .btn {
2030 fieldset[disabled] .btn {
2031 cursor: not-allowed;
2031 cursor: not-allowed;
2032 pointer-events: none;
2032 pointer-events: none;
2033 opacity: 0.65;
2033 opacity: 0.65;
2034 filter: alpha(opacity=65);
2034 filter: alpha(opacity=65);
2035 -webkit-box-shadow: none;
2035 -webkit-box-shadow: none;
2036 box-shadow: none;
2036 box-shadow: none;
2037 }
2037 }
2038 .btn-default {
2038 .btn-default {
2039 color: #333333;
2039 color: #333333;
2040 background-color: #ffffff;
2040 background-color: #ffffff;
2041 border-color: #cccccc;
2041 border-color: #cccccc;
2042 }
2042 }
2043 .btn-default:hover,
2043 .btn-default:hover,
2044 .btn-default:focus,
2044 .btn-default:focus,
2045 .btn-default:active,
2045 .btn-default:active,
2046 .btn-default.active,
2046 .btn-default.active,
2047 .open .dropdown-toggle.btn-default {
2047 .open .dropdown-toggle.btn-default {
2048 color: #333333;
2048 color: #333333;
2049 background-color: #ebebeb;
2049 background-color: #ebebeb;
2050 border-color: #adadad;
2050 border-color: #adadad;
2051 }
2051 }
2052 .btn-default:active,
2052 .btn-default:active,
2053 .btn-default.active,
2053 .btn-default.active,
2054 .open .dropdown-toggle.btn-default {
2054 .open .dropdown-toggle.btn-default {
2055 background-image: none;
2055 background-image: none;
2056 }
2056 }
2057 .btn-default.disabled,
2057 .btn-default.disabled,
2058 .btn-default[disabled],
2058 .btn-default[disabled],
2059 fieldset[disabled] .btn-default,
2059 fieldset[disabled] .btn-default,
2060 .btn-default.disabled:hover,
2060 .btn-default.disabled:hover,
2061 .btn-default[disabled]:hover,
2061 .btn-default[disabled]:hover,
2062 fieldset[disabled] .btn-default:hover,
2062 fieldset[disabled] .btn-default:hover,
2063 .btn-default.disabled:focus,
2063 .btn-default.disabled:focus,
2064 .btn-default[disabled]:focus,
2064 .btn-default[disabled]:focus,
2065 fieldset[disabled] .btn-default:focus,
2065 fieldset[disabled] .btn-default:focus,
2066 .btn-default.disabled:active,
2066 .btn-default.disabled:active,
2067 .btn-default[disabled]:active,
2067 .btn-default[disabled]:active,
2068 fieldset[disabled] .btn-default:active,
2068 fieldset[disabled] .btn-default:active,
2069 .btn-default.disabled.active,
2069 .btn-default.disabled.active,
2070 .btn-default[disabled].active,
2070 .btn-default[disabled].active,
2071 fieldset[disabled] .btn-default.active {
2071 fieldset[disabled] .btn-default.active {
2072 background-color: #ffffff;
2072 background-color: #ffffff;
2073 border-color: #cccccc;
2073 border-color: #cccccc;
2074 }
2074 }
2075 .btn-default .badge {
2075 .btn-default .badge {
2076 color: #ffffff;
2076 color: #ffffff;
2077 background-color: #333333;
2077 background-color: #333333;
2078 }
2078 }
2079 .btn-primary {
2079 .btn-primary {
2080 color: #ffffff;
2080 color: #ffffff;
2081 background-color: #428bca;
2081 background-color: #428bca;
2082 border-color: #357ebd;
2082 border-color: #357ebd;
2083 }
2083 }
2084 .btn-primary:hover,
2084 .btn-primary:hover,
2085 .btn-primary:focus,
2085 .btn-primary:focus,
2086 .btn-primary:active,
2086 .btn-primary:active,
2087 .btn-primary.active,
2087 .btn-primary.active,
2088 .open .dropdown-toggle.btn-primary {
2088 .open .dropdown-toggle.btn-primary {
2089 color: #ffffff;
2089 color: #ffffff;
2090 background-color: #3276b1;
2090 background-color: #3276b1;
2091 border-color: #285e8e;
2091 border-color: #285e8e;
2092 }
2092 }
2093 .btn-primary:active,
2093 .btn-primary:active,
2094 .btn-primary.active,
2094 .btn-primary.active,
2095 .open .dropdown-toggle.btn-primary {
2095 .open .dropdown-toggle.btn-primary {
2096 background-image: none;
2096 background-image: none;
2097 }
2097 }
2098 .btn-primary.disabled,
2098 .btn-primary.disabled,
2099 .btn-primary[disabled],
2099 .btn-primary[disabled],
2100 fieldset[disabled] .btn-primary,
2100 fieldset[disabled] .btn-primary,
2101 .btn-primary.disabled:hover,
2101 .btn-primary.disabled:hover,
2102 .btn-primary[disabled]:hover,
2102 .btn-primary[disabled]:hover,
2103 fieldset[disabled] .btn-primary:hover,
2103 fieldset[disabled] .btn-primary:hover,
2104 .btn-primary.disabled:focus,
2104 .btn-primary.disabled:focus,
2105 .btn-primary[disabled]:focus,
2105 .btn-primary[disabled]:focus,
2106 fieldset[disabled] .btn-primary:focus,
2106 fieldset[disabled] .btn-primary:focus,
2107 .btn-primary.disabled:active,
2107 .btn-primary.disabled:active,
2108 .btn-primary[disabled]:active,
2108 .btn-primary[disabled]:active,
2109 fieldset[disabled] .btn-primary:active,
2109 fieldset[disabled] .btn-primary:active,
2110 .btn-primary.disabled.active,
2110 .btn-primary.disabled.active,
2111 .btn-primary[disabled].active,
2111 .btn-primary[disabled].active,
2112 fieldset[disabled] .btn-primary.active {
2112 fieldset[disabled] .btn-primary.active {
2113 background-color: #428bca;
2113 background-color: #428bca;
2114 border-color: #357ebd;
2114 border-color: #357ebd;
2115 }
2115 }
2116 .btn-primary .badge {
2116 .btn-primary .badge {
2117 color: #428bca;
2117 color: #428bca;
2118 background-color: #ffffff;
2118 background-color: #ffffff;
2119 }
2119 }
2120 .btn-success {
2120 .btn-success {
2121 color: #ffffff;
2121 color: #ffffff;
2122 background-color: #5cb85c;
2122 background-color: #5cb85c;
2123 border-color: #4cae4c;
2123 border-color: #4cae4c;
2124 }
2124 }
2125 .btn-success:hover,
2125 .btn-success:hover,
2126 .btn-success:focus,
2126 .btn-success:focus,
2127 .btn-success:active,
2127 .btn-success:active,
2128 .btn-success.active,
2128 .btn-success.active,
2129 .open .dropdown-toggle.btn-success {
2129 .open .dropdown-toggle.btn-success {
2130 color: #ffffff;
2130 color: #ffffff;
2131 background-color: #47a447;
2131 background-color: #47a447;
2132 border-color: #398439;
2132 border-color: #398439;
2133 }
2133 }
2134 .btn-success:active,
2134 .btn-success:active,
2135 .btn-success.active,
2135 .btn-success.active,
2136 .open .dropdown-toggle.btn-success {
2136 .open .dropdown-toggle.btn-success {
2137 background-image: none;
2137 background-image: none;
2138 }
2138 }
2139 .btn-success.disabled,
2139 .btn-success.disabled,
2140 .btn-success[disabled],
2140 .btn-success[disabled],
2141 fieldset[disabled] .btn-success,
2141 fieldset[disabled] .btn-success,
2142 .btn-success.disabled:hover,
2142 .btn-success.disabled:hover,
2143 .btn-success[disabled]:hover,
2143 .btn-success[disabled]:hover,
2144 fieldset[disabled] .btn-success:hover,
2144 fieldset[disabled] .btn-success:hover,
2145 .btn-success.disabled:focus,
2145 .btn-success.disabled:focus,
2146 .btn-success[disabled]:focus,
2146 .btn-success[disabled]:focus,
2147 fieldset[disabled] .btn-success:focus,
2147 fieldset[disabled] .btn-success:focus,
2148 .btn-success.disabled:active,
2148 .btn-success.disabled:active,
2149 .btn-success[disabled]:active,
2149 .btn-success[disabled]:active,
2150 fieldset[disabled] .btn-success:active,
2150 fieldset[disabled] .btn-success:active,
2151 .btn-success.disabled.active,
2151 .btn-success.disabled.active,
2152 .btn-success[disabled].active,
2152 .btn-success[disabled].active,
2153 fieldset[disabled] .btn-success.active {
2153 fieldset[disabled] .btn-success.active {
2154 background-color: #5cb85c;
2154 background-color: #5cb85c;
2155 border-color: #4cae4c;
2155 border-color: #4cae4c;
2156 }
2156 }
2157 .btn-success .badge {
2157 .btn-success .badge {
2158 color: #5cb85c;
2158 color: #5cb85c;
2159 background-color: #ffffff;
2159 background-color: #ffffff;
2160 }
2160 }
2161 .btn-info {
2161 .btn-info {
2162 color: #ffffff;
2162 color: #ffffff;
2163 background-color: #5bc0de;
2163 background-color: #5bc0de;
2164 border-color: #46b8da;
2164 border-color: #46b8da;
2165 }
2165 }
2166 .btn-info:hover,
2166 .btn-info:hover,
2167 .btn-info:focus,
2167 .btn-info:focus,
2168 .btn-info:active,
2168 .btn-info:active,
2169 .btn-info.active,
2169 .btn-info.active,
2170 .open .dropdown-toggle.btn-info {
2170 .open .dropdown-toggle.btn-info {
2171 color: #ffffff;
2171 color: #ffffff;
2172 background-color: #39b3d7;
2172 background-color: #39b3d7;
2173 border-color: #269abc;
2173 border-color: #269abc;
2174 }
2174 }
2175 .btn-info:active,
2175 .btn-info:active,
2176 .btn-info.active,
2176 .btn-info.active,
2177 .open .dropdown-toggle.btn-info {
2177 .open .dropdown-toggle.btn-info {
2178 background-image: none;
2178 background-image: none;
2179 }
2179 }
2180 .btn-info.disabled,
2180 .btn-info.disabled,
2181 .btn-info[disabled],
2181 .btn-info[disabled],
2182 fieldset[disabled] .btn-info,
2182 fieldset[disabled] .btn-info,
2183 .btn-info.disabled:hover,
2183 .btn-info.disabled:hover,
2184 .btn-info[disabled]:hover,
2184 .btn-info[disabled]:hover,
2185 fieldset[disabled] .btn-info:hover,
2185 fieldset[disabled] .btn-info:hover,
2186 .btn-info.disabled:focus,
2186 .btn-info.disabled:focus,
2187 .btn-info[disabled]:focus,
2187 .btn-info[disabled]:focus,
2188 fieldset[disabled] .btn-info:focus,
2188 fieldset[disabled] .btn-info:focus,
2189 .btn-info.disabled:active,
2189 .btn-info.disabled:active,
2190 .btn-info[disabled]:active,
2190 .btn-info[disabled]:active,
2191 fieldset[disabled] .btn-info:active,
2191 fieldset[disabled] .btn-info:active,
2192 .btn-info.disabled.active,
2192 .btn-info.disabled.active,
2193 .btn-info[disabled].active,
2193 .btn-info[disabled].active,
2194 fieldset[disabled] .btn-info.active {
2194 fieldset[disabled] .btn-info.active {
2195 background-color: #5bc0de;
2195 background-color: #5bc0de;
2196 border-color: #46b8da;
2196 border-color: #46b8da;
2197 }
2197 }
2198 .btn-info .badge {
2198 .btn-info .badge {
2199 color: #5bc0de;
2199 color: #5bc0de;
2200 background-color: #ffffff;
2200 background-color: #ffffff;
2201 }
2201 }
2202 .btn-warning {
2202 .btn-warning {
2203 color: #ffffff;
2203 color: #ffffff;
2204 background-color: #f0ad4e;
2204 background-color: #f0ad4e;
2205 border-color: #eea236;
2205 border-color: #eea236;
2206 }
2206 }
2207 .btn-warning:hover,
2207 .btn-warning:hover,
2208 .btn-warning:focus,
2208 .btn-warning:focus,
2209 .btn-warning:active,
2209 .btn-warning:active,
2210 .btn-warning.active,
2210 .btn-warning.active,
2211 .open .dropdown-toggle.btn-warning {
2211 .open .dropdown-toggle.btn-warning {
2212 color: #ffffff;
2212 color: #ffffff;
2213 background-color: #ed9c28;
2213 background-color: #ed9c28;
2214 border-color: #d58512;
2214 border-color: #d58512;
2215 }
2215 }
2216 .btn-warning:active,
2216 .btn-warning:active,
2217 .btn-warning.active,
2217 .btn-warning.active,
2218 .open .dropdown-toggle.btn-warning {
2218 .open .dropdown-toggle.btn-warning {
2219 background-image: none;
2219 background-image: none;
2220 }
2220 }
2221 .btn-warning.disabled,
2221 .btn-warning.disabled,
2222 .btn-warning[disabled],
2222 .btn-warning[disabled],
2223 fieldset[disabled] .btn-warning,
2223 fieldset[disabled] .btn-warning,
2224 .btn-warning.disabled:hover,
2224 .btn-warning.disabled:hover,
2225 .btn-warning[disabled]:hover,
2225 .btn-warning[disabled]:hover,
2226 fieldset[disabled] .btn-warning:hover,
2226 fieldset[disabled] .btn-warning:hover,
2227 .btn-warning.disabled:focus,
2227 .btn-warning.disabled:focus,
2228 .btn-warning[disabled]:focus,
2228 .btn-warning[disabled]:focus,
2229 fieldset[disabled] .btn-warning:focus,
2229 fieldset[disabled] .btn-warning:focus,
2230 .btn-warning.disabled:active,
2230 .btn-warning.disabled:active,
2231 .btn-warning[disabled]:active,
2231 .btn-warning[disabled]:active,
2232 fieldset[disabled] .btn-warning:active,
2232 fieldset[disabled] .btn-warning:active,
2233 .btn-warning.disabled.active,
2233 .btn-warning.disabled.active,
2234 .btn-warning[disabled].active,
2234 .btn-warning[disabled].active,
2235 fieldset[disabled] .btn-warning.active {
2235 fieldset[disabled] .btn-warning.active {
2236 background-color: #f0ad4e;
2236 background-color: #f0ad4e;
2237 border-color: #eea236;
2237 border-color: #eea236;
2238 }
2238 }
2239 .btn-warning .badge {
2239 .btn-warning .badge {
2240 color: #f0ad4e;
2240 color: #f0ad4e;
2241 background-color: #ffffff;
2241 background-color: #ffffff;
2242 }
2242 }
2243 .btn-danger {
2243 .btn-danger {
2244 color: #ffffff;
2244 color: #ffffff;
2245 background-color: #d9534f;
2245 background-color: #d9534f;
2246 border-color: #d43f3a;
2246 border-color: #d43f3a;
2247 }
2247 }
2248 .btn-danger:hover,
2248 .btn-danger:hover,
2249 .btn-danger:focus,
2249 .btn-danger:focus,
2250 .btn-danger:active,
2250 .btn-danger:active,
2251 .btn-danger.active,
2251 .btn-danger.active,
2252 .open .dropdown-toggle.btn-danger {
2252 .open .dropdown-toggle.btn-danger {
2253 color: #ffffff;
2253 color: #ffffff;
2254 background-color: #d2322d;
2254 background-color: #d2322d;
2255 border-color: #ac2925;
2255 border-color: #ac2925;
2256 }
2256 }
2257 .btn-danger:active,
2257 .btn-danger:active,
2258 .btn-danger.active,
2258 .btn-danger.active,
2259 .open .dropdown-toggle.btn-danger {
2259 .open .dropdown-toggle.btn-danger {
2260 background-image: none;
2260 background-image: none;
2261 }
2261 }
2262 .btn-danger.disabled,
2262 .btn-danger.disabled,
2263 .btn-danger[disabled],
2263 .btn-danger[disabled],
2264 fieldset[disabled] .btn-danger,
2264 fieldset[disabled] .btn-danger,
2265 .btn-danger.disabled:hover,
2265 .btn-danger.disabled:hover,
2266 .btn-danger[disabled]:hover,
2266 .btn-danger[disabled]:hover,
2267 fieldset[disabled] .btn-danger:hover,
2267 fieldset[disabled] .btn-danger:hover,
2268 .btn-danger.disabled:focus,
2268 .btn-danger.disabled:focus,
2269 .btn-danger[disabled]:focus,
2269 .btn-danger[disabled]:focus,
2270 fieldset[disabled] .btn-danger:focus,
2270 fieldset[disabled] .btn-danger:focus,
2271 .btn-danger.disabled:active,
2271 .btn-danger.disabled:active,
2272 .btn-danger[disabled]:active,
2272 .btn-danger[disabled]:active,
2273 fieldset[disabled] .btn-danger:active,
2273 fieldset[disabled] .btn-danger:active,
2274 .btn-danger.disabled.active,
2274 .btn-danger.disabled.active,
2275 .btn-danger[disabled].active,
2275 .btn-danger[disabled].active,
2276 fieldset[disabled] .btn-danger.active {
2276 fieldset[disabled] .btn-danger.active {
2277 background-color: #d9534f;
2277 background-color: #d9534f;
2278 border-color: #d43f3a;
2278 border-color: #d43f3a;
2279 }
2279 }
2280 .btn-danger .badge {
2280 .btn-danger .badge {
2281 color: #d9534f;
2281 color: #d9534f;
2282 background-color: #ffffff;
2282 background-color: #ffffff;
2283 }
2283 }
2284 .btn-link {
2284 .btn-link {
2285 color: #428bca;
2285 color: #428bca;
2286 font-weight: normal;
2286 font-weight: normal;
2287 cursor: pointer;
2287 cursor: pointer;
2288 border-radius: 0;
2288 border-radius: 0;
2289 }
2289 }
2290 .btn-link,
2290 .btn-link,
2291 .btn-link:active,
2291 .btn-link:active,
2292 .btn-link[disabled],
2292 .btn-link[disabled],
2293 fieldset[disabled] .btn-link {
2293 fieldset[disabled] .btn-link {
2294 background-color: transparent;
2294 background-color: transparent;
2295 -webkit-box-shadow: none;
2295 -webkit-box-shadow: none;
2296 box-shadow: none;
2296 box-shadow: none;
2297 }
2297 }
2298 .btn-link,
2298 .btn-link,
2299 .btn-link:hover,
2299 .btn-link:hover,
2300 .btn-link:focus,
2300 .btn-link:focus,
2301 .btn-link:active {
2301 .btn-link:active {
2302 border-color: transparent;
2302 border-color: transparent;
2303 }
2303 }
2304 .btn-link:hover,
2304 .btn-link:hover,
2305 .btn-link:focus {
2305 .btn-link:focus {
2306 color: #2a6496;
2306 color: #2a6496;
2307 text-decoration: underline;
2307 text-decoration: underline;
2308 background-color: transparent;
2308 background-color: transparent;
2309 }
2309 }
2310 .btn-link[disabled]:hover,
2310 .btn-link[disabled]:hover,
2311 fieldset[disabled] .btn-link:hover,
2311 fieldset[disabled] .btn-link:hover,
2312 .btn-link[disabled]:focus,
2312 .btn-link[disabled]:focus,
2313 fieldset[disabled] .btn-link:focus {
2313 fieldset[disabled] .btn-link:focus {
2314 color: #999999;
2314 color: #999999;
2315 text-decoration: none;
2315 text-decoration: none;
2316 }
2316 }
2317 .btn-lg,
2317 .btn-lg,
2318 .btn-group-lg > .btn {
2318 .btn-group-lg > .btn {
2319 padding: 10px 16px;
2319 padding: 10px 16px;
2320 font-size: 17px;
2320 font-size: 17px;
2321 line-height: 1.33;
2321 line-height: 1.33;
2322 border-radius: 6px;
2322 border-radius: 6px;
2323 }
2323 }
2324 .btn-sm,
2324 .btn-sm,
2325 .btn-group-sm > .btn {
2325 .btn-group-sm > .btn {
2326 padding: 5px 10px;
2326 padding: 5px 10px;
2327 font-size: 12px;
2327 font-size: 12px;
2328 line-height: 1.5;
2328 line-height: 1.5;
2329 border-radius: 3px;
2329 border-radius: 3px;
2330 }
2330 }
2331 .btn-xs,
2331 .btn-xs,
2332 .btn-group-xs > .btn {
2332 .btn-group-xs > .btn {
2333 padding: 1px 5px;
2333 padding: 1px 5px;
2334 font-size: 12px;
2334 font-size: 12px;
2335 line-height: 1.5;
2335 line-height: 1.5;
2336 border-radius: 3px;
2336 border-radius: 3px;
2337 }
2337 }
2338 .btn-block {
2338 .btn-block {
2339 display: block;
2339 display: block;
2340 width: 100%;
2340 width: 100%;
2341 padding-left: 0;
2341 padding-left: 0;
2342 padding-right: 0;
2342 padding-right: 0;
2343 }
2343 }
2344 .btn-block + .btn-block {
2344 .btn-block + .btn-block {
2345 margin-top: 5px;
2345 margin-top: 5px;
2346 }
2346 }
2347 input[type="submit"].btn-block,
2347 input[type="submit"].btn-block,
2348 input[type="reset"].btn-block,
2348 input[type="reset"].btn-block,
2349 input[type="button"].btn-block {
2349 input[type="button"].btn-block {
2350 width: 100%;
2350 width: 100%;
2351 }
2351 }
2352 .fade {
2352 .fade {
2353 opacity: 0;
2353 opacity: 0;
2354 -webkit-transition: opacity 0.15s linear;
2354 -webkit-transition: opacity 0.15s linear;
2355 transition: opacity 0.15s linear;
2355 transition: opacity 0.15s linear;
2356 }
2356 }
2357 .fade.in {
2357 .fade.in {
2358 opacity: 1;
2358 opacity: 1;
2359 }
2359 }
2360 .collapse {
2360 .collapse {
2361 display: none;
2361 display: none;
2362 }
2362 }
2363 .collapse.in {
2363 .collapse.in {
2364 display: block;
2364 display: block;
2365 }
2365 }
2366 .collapsing {
2366 .collapsing {
2367 position: relative;
2367 position: relative;
2368 height: 0;
2368 height: 0;
2369 overflow: hidden;
2369 overflow: hidden;
2370 -webkit-transition: height 0.35s ease;
2370 -webkit-transition: height 0.35s ease;
2371 transition: height 0.35s ease;
2371 transition: height 0.35s ease;
2372 }
2372 }
2373 @font-face {
2373 @font-face {
2374 font-family: 'Glyphicons Halflings';
2374 font-family: 'Glyphicons Halflings';
2375 src: url('../fonts/glyphicons-halflings-regular.eot');
2375 src: url('../fonts/glyphicons-halflings-regular.eot');
2376 src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
2376 src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
2377 }
2377 }
2378 .glyphicon {
2378 .glyphicon {
2379 position: relative;
2379 position: relative;
2380 top: 1px;
2380 top: 1px;
2381 display: inline-block;
2381 display: inline-block;
2382 font-family: 'Glyphicons Halflings';
2382 font-family: 'Glyphicons Halflings';
2383 font-style: normal;
2383 font-style: normal;
2384 font-weight: normal;
2384 font-weight: normal;
2385 line-height: 1;
2385 line-height: 1;
2386 -webkit-font-smoothing: antialiased;
2386 -webkit-font-smoothing: antialiased;
2387 -moz-osx-font-smoothing: grayscale;
2387 -moz-osx-font-smoothing: grayscale;
2388 }
2388 }
2389 .glyphicon-asterisk:before {
2389 .glyphicon-asterisk:before {
2390 content: "\2a";
2390 content: "\2a";
2391 }
2391 }
2392 .glyphicon-plus:before {
2392 .glyphicon-plus:before {
2393 content: "\2b";
2393 content: "\2b";
2394 }
2394 }
2395 .glyphicon-euro:before {
2395 .glyphicon-euro:before {
2396 content: "\20ac";
2396 content: "\20ac";
2397 }
2397 }
2398 .glyphicon-minus:before {
2398 .glyphicon-minus:before {
2399 content: "\2212";
2399 content: "\2212";
2400 }
2400 }
2401 .glyphicon-cloud:before {
2401 .glyphicon-cloud:before {
2402 content: "\2601";
2402 content: "\2601";
2403 }
2403 }
2404 .glyphicon-envelope:before {
2404 .glyphicon-envelope:before {
2405 content: "\2709";
2405 content: "\2709";
2406 }
2406 }
2407 .glyphicon-pencil:before {
2407 .glyphicon-pencil:before {
2408 content: "\270f";
2408 content: "\270f";
2409 }
2409 }
2410 .glyphicon-glass:before {
2410 .glyphicon-glass:before {
2411 content: "\e001";
2411 content: "\e001";
2412 }
2412 }
2413 .glyphicon-music:before {
2413 .glyphicon-music:before {
2414 content: "\e002";
2414 content: "\e002";
2415 }
2415 }
2416 .glyphicon-search:before {
2416 .glyphicon-search:before {
2417 content: "\e003";
2417 content: "\e003";
2418 }
2418 }
2419 .glyphicon-heart:before {
2419 .glyphicon-heart:before {
2420 content: "\e005";
2420 content: "\e005";
2421 }
2421 }
2422 .glyphicon-star:before {
2422 .glyphicon-star:before {
2423 content: "\e006";
2423 content: "\e006";
2424 }
2424 }
2425 .glyphicon-star-empty:before {
2425 .glyphicon-star-empty:before {
2426 content: "\e007";
2426 content: "\e007";
2427 }
2427 }
2428 .glyphicon-user:before {
2428 .glyphicon-user:before {
2429 content: "\e008";
2429 content: "\e008";
2430 }
2430 }
2431 .glyphicon-film:before {
2431 .glyphicon-film:before {
2432 content: "\e009";
2432 content: "\e009";
2433 }
2433 }
2434 .glyphicon-th-large:before {
2434 .glyphicon-th-large:before {
2435 content: "\e010";
2435 content: "\e010";
2436 }
2436 }
2437 .glyphicon-th:before {
2437 .glyphicon-th:before {
2438 content: "\e011";
2438 content: "\e011";
2439 }
2439 }
2440 .glyphicon-th-list:before {
2440 .glyphicon-th-list:before {
2441 content: "\e012";
2441 content: "\e012";
2442 }
2442 }
2443 .glyphicon-ok:before {
2443 .glyphicon-ok:before {
2444 content: "\e013";
2444 content: "\e013";
2445 }
2445 }
2446 .glyphicon-remove:before {
2446 .glyphicon-remove:before {
2447 content: "\e014";
2447 content: "\e014";
2448 }
2448 }
2449 .glyphicon-zoom-in:before {
2449 .glyphicon-zoom-in:before {
2450 content: "\e015";
2450 content: "\e015";
2451 }
2451 }
2452 .glyphicon-zoom-out:before {
2452 .glyphicon-zoom-out:before {
2453 content: "\e016";
2453 content: "\e016";
2454 }
2454 }
2455 .glyphicon-off:before {
2455 .glyphicon-off:before {
2456 content: "\e017";
2456 content: "\e017";
2457 }
2457 }
2458 .glyphicon-signal:before {
2458 .glyphicon-signal:before {
2459 content: "\e018";
2459 content: "\e018";
2460 }
2460 }
2461 .glyphicon-cog:before {
2461 .glyphicon-cog:before {
2462 content: "\e019";
2462 content: "\e019";
2463 }
2463 }
2464 .glyphicon-trash:before {
2464 .glyphicon-trash:before {
2465 content: "\e020";
2465 content: "\e020";
2466 }
2466 }
2467 .glyphicon-home:before {
2467 .glyphicon-home:before {
2468 content: "\e021";
2468 content: "\e021";
2469 }
2469 }
2470 .glyphicon-file:before {
2470 .glyphicon-file:before {
2471 content: "\e022";
2471 content: "\e022";
2472 }
2472 }
2473 .glyphicon-time:before {
2473 .glyphicon-time:before {
2474 content: "\e023";
2474 content: "\e023";
2475 }
2475 }
2476 .glyphicon-road:before {
2476 .glyphicon-road:before {
2477 content: "\e024";
2477 content: "\e024";
2478 }
2478 }
2479 .glyphicon-download-alt:before {
2479 .glyphicon-download-alt:before {
2480 content: "\e025";
2480 content: "\e025";
2481 }
2481 }
2482 .glyphicon-download:before {
2482 .glyphicon-download:before {
2483 content: "\e026";
2483 content: "\e026";
2484 }
2484 }
2485 .glyphicon-upload:before {
2485 .glyphicon-upload:before {
2486 content: "\e027";
2486 content: "\e027";
2487 }
2487 }
2488 .glyphicon-inbox:before {
2488 .glyphicon-inbox:before {
2489 content: "\e028";
2489 content: "\e028";
2490 }
2490 }
2491 .glyphicon-play-circle:before {
2491 .glyphicon-play-circle:before {
2492 content: "\e029";
2492 content: "\e029";
2493 }
2493 }
2494 .glyphicon-repeat:before {
2494 .glyphicon-repeat:before {
2495 content: "\e030";
2495 content: "\e030";
2496 }
2496 }
2497 .glyphicon-refresh:before {
2497 .glyphicon-refresh:before {
2498 content: "\e031";
2498 content: "\e031";
2499 }
2499 }
2500 .glyphicon-list-alt:before {
2500 .glyphicon-list-alt:before {
2501 content: "\e032";
2501 content: "\e032";
2502 }
2502 }
2503 .glyphicon-lock:before {
2503 .glyphicon-lock:before {
2504 content: "\e033";
2504 content: "\e033";
2505 }
2505 }
2506 .glyphicon-flag:before {
2506 .glyphicon-flag:before {
2507 content: "\e034";
2507 content: "\e034";
2508 }
2508 }
2509 .glyphicon-headphones:before {
2509 .glyphicon-headphones:before {
2510 content: "\e035";
2510 content: "\e035";
2511 }
2511 }
2512 .glyphicon-volume-off:before {
2512 .glyphicon-volume-off:before {
2513 content: "\e036";
2513 content: "\e036";
2514 }
2514 }
2515 .glyphicon-volume-down:before {
2515 .glyphicon-volume-down:before {
2516 content: "\e037";
2516 content: "\e037";
2517 }
2517 }
2518 .glyphicon-volume-up:before {
2518 .glyphicon-volume-up:before {
2519 content: "\e038";
2519 content: "\e038";
2520 }
2520 }
2521 .glyphicon-qrcode:before {
2521 .glyphicon-qrcode:before {
2522 content: "\e039";
2522 content: "\e039";
2523 }
2523 }
2524 .glyphicon-barcode:before {
2524 .glyphicon-barcode:before {
2525 content: "\e040";
2525 content: "\e040";
2526 }
2526 }
2527 .glyphicon-tag:before {
2527 .glyphicon-tag:before {
2528 content: "\e041";
2528 content: "\e041";
2529 }
2529 }
2530 .glyphicon-tags:before {
2530 .glyphicon-tags:before {
2531 content: "\e042";
2531 content: "\e042";
2532 }
2532 }
2533 .glyphicon-book:before {
2533 .glyphicon-book:before {
2534 content: "\e043";
2534 content: "\e043";
2535 }
2535 }
2536 .glyphicon-bookmark:before {
2536 .glyphicon-bookmark:before {
2537 content: "\e044";
2537 content: "\e044";
2538 }
2538 }
2539 .glyphicon-print:before {
2539 .glyphicon-print:before {
2540 content: "\e045";
2540 content: "\e045";
2541 }
2541 }
2542 .glyphicon-camera:before {
2542 .glyphicon-camera:before {
2543 content: "\e046";
2543 content: "\e046";
2544 }
2544 }
2545 .glyphicon-font:before {
2545 .glyphicon-font:before {
2546 content: "\e047";
2546 content: "\e047";
2547 }
2547 }
2548 .glyphicon-bold:before {
2548 .glyphicon-bold:before {
2549 content: "\e048";
2549 content: "\e048";
2550 }
2550 }
2551 .glyphicon-italic:before {
2551 .glyphicon-italic:before {
2552 content: "\e049";
2552 content: "\e049";
2553 }
2553 }
2554 .glyphicon-text-height:before {
2554 .glyphicon-text-height:before {
2555 content: "\e050";
2555 content: "\e050";
2556 }
2556 }
2557 .glyphicon-text-width:before {
2557 .glyphicon-text-width:before {
2558 content: "\e051";
2558 content: "\e051";
2559 }
2559 }
2560 .glyphicon-align-left:before {
2560 .glyphicon-align-left:before {
2561 content: "\e052";
2561 content: "\e052";
2562 }
2562 }
2563 .glyphicon-align-center:before {
2563 .glyphicon-align-center:before {
2564 content: "\e053";
2564 content: "\e053";
2565 }
2565 }
2566 .glyphicon-align-right:before {
2566 .glyphicon-align-right:before {
2567 content: "\e054";
2567 content: "\e054";
2568 }
2568 }
2569 .glyphicon-align-justify:before {
2569 .glyphicon-align-justify:before {
2570 content: "\e055";
2570 content: "\e055";
2571 }
2571 }
2572 .glyphicon-list:before {
2572 .glyphicon-list:before {
2573 content: "\e056";
2573 content: "\e056";
2574 }
2574 }
2575 .glyphicon-indent-left:before {
2575 .glyphicon-indent-left:before {
2576 content: "\e057";
2576 content: "\e057";
2577 }
2577 }
2578 .glyphicon-indent-right:before {
2578 .glyphicon-indent-right:before {
2579 content: "\e058";
2579 content: "\e058";
2580 }
2580 }
2581 .glyphicon-facetime-video:before {
2581 .glyphicon-facetime-video:before {
2582 content: "\e059";
2582 content: "\e059";
2583 }
2583 }
2584 .glyphicon-picture:before {
2584 .glyphicon-picture:before {
2585 content: "\e060";
2585 content: "\e060";
2586 }
2586 }
2587 .glyphicon-map-marker:before {
2587 .glyphicon-map-marker:before {
2588 content: "\e062";
2588 content: "\e062";
2589 }
2589 }
2590 .glyphicon-adjust:before {
2590 .glyphicon-adjust:before {
2591 content: "\e063";
2591 content: "\e063";
2592 }
2592 }
2593 .glyphicon-tint:before {
2593 .glyphicon-tint:before {
2594 content: "\e064";
2594 content: "\e064";
2595 }
2595 }
2596 .glyphicon-edit:before {
2596 .glyphicon-edit:before {
2597 content: "\e065";
2597 content: "\e065";
2598 }
2598 }
2599 .glyphicon-share:before {
2599 .glyphicon-share:before {
2600 content: "\e066";
2600 content: "\e066";
2601 }
2601 }
2602 .glyphicon-check:before {
2602 .glyphicon-check:before {
2603 content: "\e067";
2603 content: "\e067";
2604 }
2604 }
2605 .glyphicon-move:before {
2605 .glyphicon-move:before {
2606 content: "\e068";
2606 content: "\e068";
2607 }
2607 }
2608 .glyphicon-step-backward:before {
2608 .glyphicon-step-backward:before {
2609 content: "\e069";
2609 content: "\e069";
2610 }
2610 }
2611 .glyphicon-fast-backward:before {
2611 .glyphicon-fast-backward:before {
2612 content: "\e070";
2612 content: "\e070";
2613 }
2613 }
2614 .glyphicon-backward:before {
2614 .glyphicon-backward:before {
2615 content: "\e071";
2615 content: "\e071";
2616 }
2616 }
2617 .glyphicon-play:before {
2617 .glyphicon-play:before {
2618 content: "\e072";
2618 content: "\e072";
2619 }
2619 }
2620 .glyphicon-pause:before {
2620 .glyphicon-pause:before {
2621 content: "\e073";
2621 content: "\e073";
2622 }
2622 }
2623 .glyphicon-stop:before {
2623 .glyphicon-stop:before {
2624 content: "\e074";
2624 content: "\e074";
2625 }
2625 }
2626 .glyphicon-forward:before {
2626 .glyphicon-forward:before {
2627 content: "\e075";
2627 content: "\e075";
2628 }
2628 }
2629 .glyphicon-fast-forward:before {
2629 .glyphicon-fast-forward:before {
2630 content: "\e076";
2630 content: "\e076";
2631 }
2631 }
2632 .glyphicon-step-forward:before {
2632 .glyphicon-step-forward:before {
2633 content: "\e077";
2633 content: "\e077";
2634 }
2634 }
2635 .glyphicon-eject:before {
2635 .glyphicon-eject:before {
2636 content: "\e078";
2636 content: "\e078";
2637 }
2637 }
2638 .glyphicon-chevron-left:before {
2638 .glyphicon-chevron-left:before {
2639 content: "\e079";
2639 content: "\e079";
2640 }
2640 }
2641 .glyphicon-chevron-right:before {
2641 .glyphicon-chevron-right:before {
2642 content: "\e080";
2642 content: "\e080";
2643 }
2643 }
2644 .glyphicon-plus-sign:before {
2644 .glyphicon-plus-sign:before {
2645 content: "\e081";
2645 content: "\e081";
2646 }
2646 }
2647 .glyphicon-minus-sign:before {
2647 .glyphicon-minus-sign:before {
2648 content: "\e082";
2648 content: "\e082";
2649 }
2649 }
2650 .glyphicon-remove-sign:before {
2650 .glyphicon-remove-sign:before {
2651 content: "\e083";
2651 content: "\e083";
2652 }
2652 }
2653 .glyphicon-ok-sign:before {
2653 .glyphicon-ok-sign:before {
2654 content: "\e084";
2654 content: "\e084";
2655 }
2655 }
2656 .glyphicon-question-sign:before {
2656 .glyphicon-question-sign:before {
2657 content: "\e085";
2657 content: "\e085";
2658 }
2658 }
2659 .glyphicon-info-sign:before {
2659 .glyphicon-info-sign:before {
2660 content: "\e086";
2660 content: "\e086";
2661 }
2661 }
2662 .glyphicon-screenshot:before {
2662 .glyphicon-screenshot:before {
2663 content: "\e087";
2663 content: "\e087";
2664 }
2664 }
2665 .glyphicon-remove-circle:before {
2665 .glyphicon-remove-circle:before {
2666 content: "\e088";
2666 content: "\e088";
2667 }
2667 }
2668 .glyphicon-ok-circle:before {
2668 .glyphicon-ok-circle:before {
2669 content: "\e089";
2669 content: "\e089";
2670 }
2670 }
2671 .glyphicon-ban-circle:before {
2671 .glyphicon-ban-circle:before {
2672 content: "\e090";
2672 content: "\e090";
2673 }
2673 }
2674 .glyphicon-arrow-left:before {
2674 .glyphicon-arrow-left:before {
2675 content: "\e091";
2675 content: "\e091";
2676 }
2676 }
2677 .glyphicon-arrow-right:before {
2677 .glyphicon-arrow-right:before {
2678 content: "\e092";
2678 content: "\e092";
2679 }
2679 }
2680 .glyphicon-arrow-up:before {
2680 .glyphicon-arrow-up:before {
2681 content: "\e093";
2681 content: "\e093";
2682 }
2682 }
2683 .glyphicon-arrow-down:before {
2683 .glyphicon-arrow-down:before {
2684 content: "\e094";
2684 content: "\e094";
2685 }
2685 }
2686 .glyphicon-share-alt:before {
2686 .glyphicon-share-alt:before {
2687 content: "\e095";
2687 content: "\e095";
2688 }
2688 }
2689 .glyphicon-resize-full:before {
2689 .glyphicon-resize-full:before {
2690 content: "\e096";
2690 content: "\e096";
2691 }
2691 }
2692 .glyphicon-resize-small:before {
2692 .glyphicon-resize-small:before {
2693 content: "\e097";
2693 content: "\e097";
2694 }
2694 }
2695 .glyphicon-exclamation-sign:before {
2695 .glyphicon-exclamation-sign:before {
2696 content: "\e101";
2696 content: "\e101";
2697 }
2697 }
2698 .glyphicon-gift:before {
2698 .glyphicon-gift:before {
2699 content: "\e102";
2699 content: "\e102";
2700 }
2700 }
2701 .glyphicon-leaf:before {
2701 .glyphicon-leaf:before {
2702 content: "\e103";
2702 content: "\e103";
2703 }
2703 }
2704 .glyphicon-fire:before {
2704 .glyphicon-fire:before {
2705 content: "\e104";
2705 content: "\e104";
2706 }
2706 }
2707 .glyphicon-eye-open:before {
2707 .glyphicon-eye-open:before {
2708 content: "\e105";
2708 content: "\e105";
2709 }
2709 }
2710 .glyphicon-eye-close:before {
2710 .glyphicon-eye-close:before {
2711 content: "\e106";
2711 content: "\e106";
2712 }
2712 }
2713 .glyphicon-warning-sign:before {
2713 .glyphicon-warning-sign:before {
2714 content: "\e107";
2714 content: "\e107";
2715 }
2715 }
2716 .glyphicon-plane:before {
2716 .glyphicon-plane:before {
2717 content: "\e108";
2717 content: "\e108";
2718 }
2718 }
2719 .glyphicon-calendar:before {
2719 .glyphicon-calendar:before {
2720 content: "\e109";
2720 content: "\e109";
2721 }
2721 }
2722 .glyphicon-random:before {
2722 .glyphicon-random:before {
2723 content: "\e110";
2723 content: "\e110";
2724 }
2724 }
2725 .glyphicon-comment:before {
2725 .glyphicon-comment:before {
2726 content: "\e111";
2726 content: "\e111";
2727 }
2727 }
2728 .glyphicon-magnet:before {
2728 .glyphicon-magnet:before {
2729 content: "\e112";
2729 content: "\e112";
2730 }
2730 }
2731 .glyphicon-chevron-up:before {
2731 .glyphicon-chevron-up:before {
2732 content: "\e113";
2732 content: "\e113";
2733 }
2733 }
2734 .glyphicon-chevron-down:before {
2734 .glyphicon-chevron-down:before {
2735 content: "\e114";
2735 content: "\e114";
2736 }
2736 }
2737 .glyphicon-retweet:before {
2737 .glyphicon-retweet:before {
2738 content: "\e115";
2738 content: "\e115";
2739 }
2739 }
2740 .glyphicon-shopping-cart:before {
2740 .glyphicon-shopping-cart:before {
2741 content: "\e116";
2741 content: "\e116";
2742 }
2742 }
2743 .glyphicon-folder-close:before {
2743 .glyphicon-folder-close:before {
2744 content: "\e117";
2744 content: "\e117";
2745 }
2745 }
2746 .glyphicon-folder-open:before {
2746 .glyphicon-folder-open:before {
2747 content: "\e118";
2747 content: "\e118";
2748 }
2748 }
2749 .glyphicon-resize-vertical:before {
2749 .glyphicon-resize-vertical:before {
2750 content: "\e119";
2750 content: "\e119";
2751 }
2751 }
2752 .glyphicon-resize-horizontal:before {
2752 .glyphicon-resize-horizontal:before {
2753 content: "\e120";
2753 content: "\e120";
2754 }
2754 }
2755 .glyphicon-hdd:before {
2755 .glyphicon-hdd:before {
2756 content: "\e121";
2756 content: "\e121";
2757 }
2757 }
2758 .glyphicon-bullhorn:before {
2758 .glyphicon-bullhorn:before {
2759 content: "\e122";
2759 content: "\e122";
2760 }
2760 }
2761 .glyphicon-bell:before {
2761 .glyphicon-bell:before {
2762 content: "\e123";
2762 content: "\e123";
2763 }
2763 }
2764 .glyphicon-certificate:before {
2764 .glyphicon-certificate:before {
2765 content: "\e124";
2765 content: "\e124";
2766 }
2766 }
2767 .glyphicon-thumbs-up:before {
2767 .glyphicon-thumbs-up:before {
2768 content: "\e125";
2768 content: "\e125";
2769 }
2769 }
2770 .glyphicon-thumbs-down:before {
2770 .glyphicon-thumbs-down:before {
2771 content: "\e126";
2771 content: "\e126";
2772 }
2772 }
2773 .glyphicon-hand-right:before {
2773 .glyphicon-hand-right:before {
2774 content: "\e127";
2774 content: "\e127";
2775 }
2775 }
2776 .glyphicon-hand-left:before {
2776 .glyphicon-hand-left:before {
2777 content: "\e128";
2777 content: "\e128";
2778 }
2778 }
2779 .glyphicon-hand-up:before {
2779 .glyphicon-hand-up:before {
2780 content: "\e129";
2780 content: "\e129";
2781 }
2781 }
2782 .glyphicon-hand-down:before {
2782 .glyphicon-hand-down:before {
2783 content: "\e130";
2783 content: "\e130";
2784 }
2784 }
2785 .glyphicon-circle-arrow-right:before {
2785 .glyphicon-circle-arrow-right:before {
2786 content: "\e131";
2786 content: "\e131";
2787 }
2787 }
2788 .glyphicon-circle-arrow-left:before {
2788 .glyphicon-circle-arrow-left:before {
2789 content: "\e132";
2789 content: "\e132";
2790 }
2790 }
2791 .glyphicon-circle-arrow-up:before {
2791 .glyphicon-circle-arrow-up:before {
2792 content: "\e133";
2792 content: "\e133";
2793 }
2793 }
2794 .glyphicon-circle-arrow-down:before {
2794 .glyphicon-circle-arrow-down:before {
2795 content: "\e134";
2795 content: "\e134";
2796 }
2796 }
2797 .glyphicon-globe:before {
2797 .glyphicon-globe:before {
2798 content: "\e135";
2798 content: "\e135";
2799 }
2799 }
2800 .glyphicon-wrench:before {
2800 .glyphicon-wrench:before {
2801 content: "\e136";
2801 content: "\e136";
2802 }
2802 }
2803 .glyphicon-tasks:before {
2803 .glyphicon-tasks:before {
2804 content: "\e137";
2804 content: "\e137";
2805 }
2805 }
2806 .glyphicon-filter:before {
2806 .glyphicon-filter:before {
2807 content: "\e138";
2807 content: "\e138";
2808 }
2808 }
2809 .glyphicon-briefcase:before {
2809 .glyphicon-briefcase:before {
2810 content: "\e139";
2810 content: "\e139";
2811 }
2811 }
2812 .glyphicon-fullscreen:before {
2812 .glyphicon-fullscreen:before {
2813 content: "\e140";
2813 content: "\e140";
2814 }
2814 }
2815 .glyphicon-dashboard:before {
2815 .glyphicon-dashboard:before {
2816 content: "\e141";
2816 content: "\e141";
2817 }
2817 }
2818 .glyphicon-paperclip:before {
2818 .glyphicon-paperclip:before {
2819 content: "\e142";
2819 content: "\e142";
2820 }
2820 }
2821 .glyphicon-heart-empty:before {
2821 .glyphicon-heart-empty:before {
2822 content: "\e143";
2822 content: "\e143";
2823 }
2823 }
2824 .glyphicon-link:before {
2824 .glyphicon-link:before {
2825 content: "\e144";
2825 content: "\e144";
2826 }
2826 }
2827 .glyphicon-phone:before {
2827 .glyphicon-phone:before {
2828 content: "\e145";
2828 content: "\e145";
2829 }
2829 }
2830 .glyphicon-pushpin:before {
2830 .glyphicon-pushpin:before {
2831 content: "\e146";
2831 content: "\e146";
2832 }
2832 }
2833 .glyphicon-usd:before {
2833 .glyphicon-usd:before {
2834 content: "\e148";
2834 content: "\e148";
2835 }
2835 }
2836 .glyphicon-gbp:before {
2836 .glyphicon-gbp:before {
2837 content: "\e149";
2837 content: "\e149";
2838 }
2838 }
2839 .glyphicon-sort:before {
2839 .glyphicon-sort:before {
2840 content: "\e150";
2840 content: "\e150";
2841 }
2841 }
2842 .glyphicon-sort-by-alphabet:before {
2842 .glyphicon-sort-by-alphabet:before {
2843 content: "\e151";
2843 content: "\e151";
2844 }
2844 }
2845 .glyphicon-sort-by-alphabet-alt:before {
2845 .glyphicon-sort-by-alphabet-alt:before {
2846 content: "\e152";
2846 content: "\e152";
2847 }
2847 }
2848 .glyphicon-sort-by-order:before {
2848 .glyphicon-sort-by-order:before {
2849 content: "\e153";
2849 content: "\e153";
2850 }
2850 }
2851 .glyphicon-sort-by-order-alt:before {
2851 .glyphicon-sort-by-order-alt:before {
2852 content: "\e154";
2852 content: "\e154";
2853 }
2853 }
2854 .glyphicon-sort-by-attributes:before {
2854 .glyphicon-sort-by-attributes:before {
2855 content: "\e155";
2855 content: "\e155";
2856 }
2856 }
2857 .glyphicon-sort-by-attributes-alt:before {
2857 .glyphicon-sort-by-attributes-alt:before {
2858 content: "\e156";
2858 content: "\e156";
2859 }
2859 }
2860 .glyphicon-unchecked:before {
2860 .glyphicon-unchecked:before {
2861 content: "\e157";
2861 content: "\e157";
2862 }
2862 }
2863 .glyphicon-expand:before {
2863 .glyphicon-expand:before {
2864 content: "\e158";
2864 content: "\e158";
2865 }
2865 }
2866 .glyphicon-collapse-down:before {
2866 .glyphicon-collapse-down:before {
2867 content: "\e159";
2867 content: "\e159";
2868 }
2868 }
2869 .glyphicon-collapse-up:before {
2869 .glyphicon-collapse-up:before {
2870 content: "\e160";
2870 content: "\e160";
2871 }
2871 }
2872 .glyphicon-log-in:before {
2872 .glyphicon-log-in:before {
2873 content: "\e161";
2873 content: "\e161";
2874 }
2874 }
2875 .glyphicon-flash:before {
2875 .glyphicon-flash:before {
2876 content: "\e162";
2876 content: "\e162";
2877 }
2877 }
2878 .glyphicon-log-out:before {
2878 .glyphicon-log-out:before {
2879 content: "\e163";
2879 content: "\e163";
2880 }
2880 }
2881 .glyphicon-new-window:before {
2881 .glyphicon-new-window:before {
2882 content: "\e164";
2882 content: "\e164";
2883 }
2883 }
2884 .glyphicon-record:before {
2884 .glyphicon-record:before {
2885 content: "\e165";
2885 content: "\e165";
2886 }
2886 }
2887 .glyphicon-save:before {
2887 .glyphicon-save:before {
2888 content: "\e166";
2888 content: "\e166";
2889 }
2889 }
2890 .glyphicon-open:before {
2890 .glyphicon-open:before {
2891 content: "\e167";
2891 content: "\e167";
2892 }
2892 }
2893 .glyphicon-saved:before {
2893 .glyphicon-saved:before {
2894 content: "\e168";
2894 content: "\e168";
2895 }
2895 }
2896 .glyphicon-import:before {
2896 .glyphicon-import:before {
2897 content: "\e169";
2897 content: "\e169";
2898 }
2898 }
2899 .glyphicon-export:before {
2899 .glyphicon-export:before {
2900 content: "\e170";
2900 content: "\e170";
2901 }
2901 }
2902 .glyphicon-send:before {
2902 .glyphicon-send:before {
2903 content: "\e171";
2903 content: "\e171";
2904 }
2904 }
2905 .glyphicon-floppy-disk:before {
2905 .glyphicon-floppy-disk:before {
2906 content: "\e172";
2906 content: "\e172";
2907 }
2907 }
2908 .glyphicon-floppy-saved:before {
2908 .glyphicon-floppy-saved:before {
2909 content: "\e173";
2909 content: "\e173";
2910 }
2910 }
2911 .glyphicon-floppy-remove:before {
2911 .glyphicon-floppy-remove:before {
2912 content: "\e174";
2912 content: "\e174";
2913 }
2913 }
2914 .glyphicon-floppy-save:before {
2914 .glyphicon-floppy-save:before {
2915 content: "\e175";
2915 content: "\e175";
2916 }
2916 }
2917 .glyphicon-floppy-open:before {
2917 .glyphicon-floppy-open:before {
2918 content: "\e176";
2918 content: "\e176";
2919 }
2919 }
2920 .glyphicon-credit-card:before {
2920 .glyphicon-credit-card:before {
2921 content: "\e177";
2921 content: "\e177";
2922 }
2922 }
2923 .glyphicon-transfer:before {
2923 .glyphicon-transfer:before {
2924 content: "\e178";
2924 content: "\e178";
2925 }
2925 }
2926 .glyphicon-cutlery:before {
2926 .glyphicon-cutlery:before {
2927 content: "\e179";
2927 content: "\e179";
2928 }
2928 }
2929 .glyphicon-header:before {
2929 .glyphicon-header:before {
2930 content: "\e180";
2930 content: "\e180";
2931 }
2931 }
2932 .glyphicon-compressed:before {
2932 .glyphicon-compressed:before {
2933 content: "\e181";
2933 content: "\e181";
2934 }
2934 }
2935 .glyphicon-earphone:before {
2935 .glyphicon-earphone:before {
2936 content: "\e182";
2936 content: "\e182";
2937 }
2937 }
2938 .glyphicon-phone-alt:before {
2938 .glyphicon-phone-alt:before {
2939 content: "\e183";
2939 content: "\e183";
2940 }
2940 }
2941 .glyphicon-tower:before {
2941 .glyphicon-tower:before {
2942 content: "\e184";
2942 content: "\e184";
2943 }
2943 }
2944 .glyphicon-stats:before {
2944 .glyphicon-stats:before {
2945 content: "\e185";
2945 content: "\e185";
2946 }
2946 }
2947 .glyphicon-sd-video:before {
2947 .glyphicon-sd-video:before {
2948 content: "\e186";
2948 content: "\e186";
2949 }
2949 }
2950 .glyphicon-hd-video:before {
2950 .glyphicon-hd-video:before {
2951 content: "\e187";
2951 content: "\e187";
2952 }
2952 }
2953 .glyphicon-subtitles:before {
2953 .glyphicon-subtitles:before {
2954 content: "\e188";
2954 content: "\e188";
2955 }
2955 }
2956 .glyphicon-sound-stereo:before {
2956 .glyphicon-sound-stereo:before {
2957 content: "\e189";
2957 content: "\e189";
2958 }
2958 }
2959 .glyphicon-sound-dolby:before {
2959 .glyphicon-sound-dolby:before {
2960 content: "\e190";
2960 content: "\e190";
2961 }
2961 }
2962 .glyphicon-sound-5-1:before {
2962 .glyphicon-sound-5-1:before {
2963 content: "\e191";
2963 content: "\e191";
2964 }
2964 }
2965 .glyphicon-sound-6-1:before {
2965 .glyphicon-sound-6-1:before {
2966 content: "\e192";
2966 content: "\e192";
2967 }
2967 }
2968 .glyphicon-sound-7-1:before {
2968 .glyphicon-sound-7-1:before {
2969 content: "\e193";
2969 content: "\e193";
2970 }
2970 }
2971 .glyphicon-copyright-mark:before {
2971 .glyphicon-copyright-mark:before {
2972 content: "\e194";
2972 content: "\e194";
2973 }
2973 }
2974 .glyphicon-registration-mark:before {
2974 .glyphicon-registration-mark:before {
2975 content: "\e195";
2975 content: "\e195";
2976 }
2976 }
2977 .glyphicon-cloud-download:before {
2977 .glyphicon-cloud-download:before {
2978 content: "\e197";
2978 content: "\e197";
2979 }
2979 }
2980 .glyphicon-cloud-upload:before {
2980 .glyphicon-cloud-upload:before {
2981 content: "\e198";
2981 content: "\e198";
2982 }
2982 }
2983 .glyphicon-tree-conifer:before {
2983 .glyphicon-tree-conifer:before {
2984 content: "\e199";
2984 content: "\e199";
2985 }
2985 }
2986 .glyphicon-tree-deciduous:before {
2986 .glyphicon-tree-deciduous:before {
2987 content: "\e200";
2987 content: "\e200";
2988 }
2988 }
2989 .caret {
2989 .caret {
2990 display: inline-block;
2990 display: inline-block;
2991 width: 0;
2991 width: 0;
2992 height: 0;
2992 height: 0;
2993 margin-left: 2px;
2993 margin-left: 2px;
2994 vertical-align: middle;
2994 vertical-align: middle;
2995 border-top: 4px solid;
2995 border-top: 4px solid;
2996 border-right: 4px solid transparent;
2996 border-right: 4px solid transparent;
2997 border-left: 4px solid transparent;
2997 border-left: 4px solid transparent;
2998 }
2998 }
2999 .dropdown {
2999 .dropdown {
3000 position: relative;
3000 position: relative;
3001 }
3001 }
3002 .dropdown-toggle:focus {
3002 .dropdown-toggle:focus {
3003 outline: 0;
3003 outline: 0;
3004 }
3004 }
3005 .dropdown-menu {
3005 .dropdown-menu {
3006 position: absolute;
3006 position: absolute;
3007 top: 100%;
3007 top: 100%;
3008 left: 0;
3008 left: 0;
3009 z-index: 1000;
3009 z-index: 1000;
3010 display: none;
3010 display: none;
3011 float: left;
3011 float: left;
3012 min-width: 160px;
3012 min-width: 160px;
3013 padding: 5px 0;
3013 padding: 5px 0;
3014 margin: 2px 0 0;
3014 margin: 2px 0 0;
3015 list-style: none;
3015 list-style: none;
3016 font-size: 13px;
3016 font-size: 13px;
3017 background-color: #ffffff;
3017 background-color: #ffffff;
3018 border: 1px solid #cccccc;
3018 border: 1px solid #cccccc;
3019 border: 1px solid rgba(0, 0, 0, 0.15);
3019 border: 1px solid rgba(0, 0, 0, 0.15);
3020 border-radius: 4px;
3020 border-radius: 4px;
3021 -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
3021 -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
3022 box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
3022 box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
3023 background-clip: padding-box;
3023 background-clip: padding-box;
3024 }
3024 }
3025 .dropdown-menu.pull-right {
3025 .dropdown-menu.pull-right {
3026 right: 0;
3026 right: 0;
3027 left: auto;
3027 left: auto;
3028 }
3028 }
3029 .dropdown-menu .divider {
3029 .dropdown-menu .divider {
3030 height: 1px;
3030 height: 1px;
3031 margin: 8px 0;
3031 margin: 8px 0;
3032 overflow: hidden;
3032 overflow: hidden;
3033 background-color: #e5e5e5;
3033 background-color: #e5e5e5;
3034 }
3034 }
3035 .dropdown-menu > li > a {
3035 .dropdown-menu > li > a {
3036 display: block;
3036 display: block;
3037 padding: 3px 20px;
3037 padding: 3px 20px;
3038 clear: both;
3038 clear: both;
3039 font-weight: normal;
3039 font-weight: normal;
3040 line-height: 1.42857143;
3040 line-height: 1.42857143;
3041 color: #333333;
3041 color: #333333;
3042 white-space: nowrap;
3042 white-space: nowrap;
3043 }
3043 }
3044 .dropdown-menu > li > a:hover,
3044 .dropdown-menu > li > a:hover,
3045 .dropdown-menu > li > a:focus {
3045 .dropdown-menu > li > a:focus {
3046 text-decoration: none;
3046 text-decoration: none;
3047 color: #262626;
3047 color: #262626;
3048 background-color: #f5f5f5;
3048 background-color: #f5f5f5;
3049 }
3049 }
3050 .dropdown-menu > .active > a,
3050 .dropdown-menu > .active > a,
3051 .dropdown-menu > .active > a:hover,
3051 .dropdown-menu > .active > a:hover,
3052 .dropdown-menu > .active > a:focus {
3052 .dropdown-menu > .active > a:focus {
3053 color: #ffffff;
3053 color: #ffffff;
3054 text-decoration: none;
3054 text-decoration: none;
3055 outline: 0;
3055 outline: 0;
3056 background-color: #428bca;
3056 background-color: #428bca;
3057 }
3057 }
3058 .dropdown-menu > .disabled > a,
3058 .dropdown-menu > .disabled > a,
3059 .dropdown-menu > .disabled > a:hover,
3059 .dropdown-menu > .disabled > a:hover,
3060 .dropdown-menu > .disabled > a:focus {
3060 .dropdown-menu > .disabled > a:focus {
3061 color: #999999;
3061 color: #999999;
3062 }
3062 }
3063 .dropdown-menu > .disabled > a:hover,
3063 .dropdown-menu > .disabled > a:hover,
3064 .dropdown-menu > .disabled > a:focus {
3064 .dropdown-menu > .disabled > a:focus {
3065 text-decoration: none;
3065 text-decoration: none;
3066 background-color: transparent;
3066 background-color: transparent;
3067 background-image: none;
3067 background-image: none;
3068 filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
3068 filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
3069 cursor: not-allowed;
3069 cursor: not-allowed;
3070 }
3070 }
3071 .open > .dropdown-menu {
3071 .open > .dropdown-menu {
3072 display: block;
3072 display: block;
3073 }
3073 }
3074 .open > a {
3074 .open > a {
3075 outline: 0;
3075 outline: 0;
3076 }
3076 }
3077 .dropdown-menu-right {
3077 .dropdown-menu-right {
3078 left: auto;
3078 left: auto;
3079 right: 0;
3079 right: 0;
3080 }
3080 }
3081 .dropdown-menu-left {
3081 .dropdown-menu-left {
3082 left: 0;
3082 left: 0;
3083 right: auto;
3083 right: auto;
3084 }
3084 }
3085 .dropdown-header {
3085 .dropdown-header {
3086 display: block;
3086 display: block;
3087 padding: 3px 20px;
3087 padding: 3px 20px;
3088 font-size: 12px;
3088 font-size: 12px;
3089 line-height: 1.42857143;
3089 line-height: 1.42857143;
3090 color: #999999;
3090 color: #999999;
3091 }
3091 }
3092 .dropdown-backdrop {
3092 .dropdown-backdrop {
3093 position: fixed;
3093 position: fixed;
3094 left: 0;
3094 left: 0;
3095 right: 0;
3095 right: 0;
3096 bottom: 0;
3096 bottom: 0;
3097 top: 0;
3097 top: 0;
3098 z-index: 990;
3098 z-index: 990;
3099 }
3099 }
3100 .pull-right > .dropdown-menu {
3100 .pull-right > .dropdown-menu {
3101 right: 0;
3101 right: 0;
3102 left: auto;
3102 left: auto;
3103 }
3103 }
3104 .dropup .caret,
3104 .dropup .caret,
3105 .navbar-fixed-bottom .dropdown .caret {
3105 .navbar-fixed-bottom .dropdown .caret {
3106 border-top: 0;
3106 border-top: 0;
3107 border-bottom: 4px solid;
3107 border-bottom: 4px solid;
3108 content: "";
3108 content: "";
3109 }
3109 }
3110 .dropup .dropdown-menu,
3110 .dropup .dropdown-menu,
3111 .navbar-fixed-bottom .dropdown .dropdown-menu {
3111 .navbar-fixed-bottom .dropdown .dropdown-menu {
3112 top: auto;
3112 top: auto;
3113 bottom: 100%;
3113 bottom: 100%;
3114 margin-bottom: 1px;
3114 margin-bottom: 1px;
3115 }
3115 }
3116 @media (min-width: 540px) {
3116 @media (min-width: 540px) {
3117 .navbar-right .dropdown-menu {
3117 .navbar-right .dropdown-menu {
3118 left: auto;
3118 left: auto;
3119 right: 0;
3119 right: 0;
3120 }
3120 }
3121 .navbar-right .dropdown-menu-left {
3121 .navbar-right .dropdown-menu-left {
3122 left: 0;
3122 left: 0;
3123 right: auto;
3123 right: auto;
3124 }
3124 }
3125 }
3125 }
3126 .btn-group,
3126 .btn-group,
3127 .btn-group-vertical {
3127 .btn-group-vertical {
3128 position: relative;
3128 position: relative;
3129 display: inline-block;
3129 display: inline-block;
3130 vertical-align: middle;
3130 vertical-align: middle;
3131 }
3131 }
3132 .btn-group > .btn,
3132 .btn-group > .btn,
3133 .btn-group-vertical > .btn {
3133 .btn-group-vertical > .btn {
3134 position: relative;
3134 position: relative;
3135 float: left;
3135 float: left;
3136 }
3136 }
3137 .btn-group > .btn:hover,
3137 .btn-group > .btn:hover,
3138 .btn-group-vertical > .btn:hover,
3138 .btn-group-vertical > .btn:hover,
3139 .btn-group > .btn:focus,
3139 .btn-group > .btn:focus,
3140 .btn-group-vertical > .btn:focus,
3140 .btn-group-vertical > .btn:focus,
3141 .btn-group > .btn:active,
3141 .btn-group > .btn:active,
3142 .btn-group-vertical > .btn:active,
3142 .btn-group-vertical > .btn:active,
3143 .btn-group > .btn.active,
3143 .btn-group > .btn.active,
3144 .btn-group-vertical > .btn.active {
3144 .btn-group-vertical > .btn.active {
3145 z-index: 2;
3145 z-index: 2;
3146 }
3146 }
3147 .btn-group > .btn:focus,
3147 .btn-group > .btn:focus,
3148 .btn-group-vertical > .btn:focus {
3148 .btn-group-vertical > .btn:focus {
3149 outline: none;
3149 outline: none;
3150 }
3150 }
3151 .btn-group .btn + .btn,
3151 .btn-group .btn + .btn,
3152 .btn-group .btn + .btn-group,
3152 .btn-group .btn + .btn-group,
3153 .btn-group .btn-group + .btn,
3153 .btn-group .btn-group + .btn,
3154 .btn-group .btn-group + .btn-group {
3154 .btn-group .btn-group + .btn-group {
3155 margin-left: -1px;
3155 margin-left: -1px;
3156 }
3156 }
3157 .btn-toolbar {
3157 .btn-toolbar {
3158 margin-left: -5px;
3158 margin-left: -5px;
3159 }
3159 }
3160 .btn-toolbar .btn-group,
3160 .btn-toolbar .btn-group,
3161 .btn-toolbar .input-group {
3161 .btn-toolbar .input-group {
3162 float: left;
3162 float: left;
3163 }
3163 }
3164 .btn-toolbar > .btn,
3164 .btn-toolbar > .btn,
3165 .btn-toolbar > .btn-group,
3165 .btn-toolbar > .btn-group,
3166 .btn-toolbar > .input-group {
3166 .btn-toolbar > .input-group {
3167 margin-left: 5px;
3167 margin-left: 5px;
3168 }
3168 }
3169 .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
3169 .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
3170 border-radius: 0;
3170 border-radius: 0;
3171 }
3171 }
3172 .btn-group > .btn:first-child {
3172 .btn-group > .btn:first-child {
3173 margin-left: 0;
3173 margin-left: 0;
3174 }
3174 }
3175 .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
3175 .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
3176 border-bottom-right-radius: 0;
3176 border-bottom-right-radius: 0;
3177 border-top-right-radius: 0;
3177 border-top-right-radius: 0;
3178 }
3178 }
3179 .btn-group > .btn:last-child:not(:first-child),
3179 .btn-group > .btn:last-child:not(:first-child),
3180 .btn-group > .dropdown-toggle:not(:first-child) {
3180 .btn-group > .dropdown-toggle:not(:first-child) {
3181 border-bottom-left-radius: 0;
3181 border-bottom-left-radius: 0;
3182 border-top-left-radius: 0;
3182 border-top-left-radius: 0;
3183 }
3183 }
3184 .btn-group > .btn-group {
3184 .btn-group > .btn-group {
3185 float: left;
3185 float: left;
3186 }
3186 }
3187 .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
3187 .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
3188 border-radius: 0;
3188 border-radius: 0;
3189 }
3189 }
3190 .btn-group > .btn-group:first-child > .btn:last-child,
3190 .btn-group > .btn-group:first-child > .btn:last-child,
3191 .btn-group > .btn-group:first-child > .dropdown-toggle {
3191 .btn-group > .btn-group:first-child > .dropdown-toggle {
3192 border-bottom-right-radius: 0;
3192 border-bottom-right-radius: 0;
3193 border-top-right-radius: 0;
3193 border-top-right-radius: 0;
3194 }
3194 }
3195 .btn-group > .btn-group:last-child > .btn:first-child {
3195 .btn-group > .btn-group:last-child > .btn:first-child {
3196 border-bottom-left-radius: 0;
3196 border-bottom-left-radius: 0;
3197 border-top-left-radius: 0;
3197 border-top-left-radius: 0;
3198 }
3198 }
3199 .btn-group .dropdown-toggle:active,
3199 .btn-group .dropdown-toggle:active,
3200 .btn-group.open .dropdown-toggle {
3200 .btn-group.open .dropdown-toggle {
3201 outline: 0;
3201 outline: 0;
3202 }
3202 }
3203 .btn-group > .btn + .dropdown-toggle {
3203 .btn-group > .btn + .dropdown-toggle {
3204 padding-left: 8px;
3204 padding-left: 8px;
3205 padding-right: 8px;
3205 padding-right: 8px;
3206 }
3206 }
3207 .btn-group > .btn-lg + .dropdown-toggle {
3207 .btn-group > .btn-lg + .dropdown-toggle {
3208 padding-left: 12px;
3208 padding-left: 12px;
3209 padding-right: 12px;
3209 padding-right: 12px;
3210 }
3210 }
3211 .btn-group.open .dropdown-toggle {
3211 .btn-group.open .dropdown-toggle {
3212 -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
3212 -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
3213 box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
3213 box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
3214 }
3214 }
3215 .btn-group.open .dropdown-toggle.btn-link {
3215 .btn-group.open .dropdown-toggle.btn-link {
3216 -webkit-box-shadow: none;
3216 -webkit-box-shadow: none;
3217 box-shadow: none;
3217 box-shadow: none;
3218 }
3218 }
3219 .btn .caret {
3219 .btn .caret {
3220 margin-left: 0;
3220 margin-left: 0;
3221 }
3221 }
3222 .btn-lg .caret {
3222 .btn-lg .caret {
3223 border-width: 5px 5px 0;
3223 border-width: 5px 5px 0;
3224 border-bottom-width: 0;
3224 border-bottom-width: 0;
3225 }
3225 }
3226 .dropup .btn-lg .caret {
3226 .dropup .btn-lg .caret {
3227 border-width: 0 5px 5px;
3227 border-width: 0 5px 5px;
3228 }
3228 }
3229 .btn-group-vertical > .btn,
3229 .btn-group-vertical > .btn,
3230 .btn-group-vertical > .btn-group,
3230 .btn-group-vertical > .btn-group,
3231 .btn-group-vertical > .btn-group > .btn {
3231 .btn-group-vertical > .btn-group > .btn {
3232 display: block;
3232 display: block;
3233 float: none;
3233 float: none;
3234 width: 100%;
3234 width: 100%;
3235 max-width: 100%;
3235 max-width: 100%;
3236 }
3236 }
3237 .btn-group-vertical > .btn-group > .btn {
3237 .btn-group-vertical > .btn-group > .btn {
3238 float: none;
3238 float: none;
3239 }
3239 }
3240 .btn-group-vertical > .btn + .btn,
3240 .btn-group-vertical > .btn + .btn,
3241 .btn-group-vertical > .btn + .btn-group,
3241 .btn-group-vertical > .btn + .btn-group,
3242 .btn-group-vertical > .btn-group + .btn,
3242 .btn-group-vertical > .btn-group + .btn,
3243 .btn-group-vertical > .btn-group + .btn-group {
3243 .btn-group-vertical > .btn-group + .btn-group {
3244 margin-top: -1px;
3244 margin-top: -1px;
3245 margin-left: 0;
3245 margin-left: 0;
3246 }
3246 }
3247 .btn-group-vertical > .btn:not(:first-child):not(:last-child) {
3247 .btn-group-vertical > .btn:not(:first-child):not(:last-child) {
3248 border-radius: 0;
3248 border-radius: 0;
3249 }
3249 }
3250 .btn-group-vertical > .btn:first-child:not(:last-child) {
3250 .btn-group-vertical > .btn:first-child:not(:last-child) {
3251 border-top-right-radius: 4px;
3251 border-top-right-radius: 4px;
3252 border-bottom-right-radius: 0;
3252 border-bottom-right-radius: 0;
3253 border-bottom-left-radius: 0;
3253 border-bottom-left-radius: 0;
3254 }
3254 }
3255 .btn-group-vertical > .btn:last-child:not(:first-child) {
3255 .btn-group-vertical > .btn:last-child:not(:first-child) {
3256 border-bottom-left-radius: 4px;
3256 border-bottom-left-radius: 4px;
3257 border-top-right-radius: 0;
3257 border-top-right-radius: 0;
3258 border-top-left-radius: 0;
3258 border-top-left-radius: 0;
3259 }
3259 }
3260 .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
3260 .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
3261 border-radius: 0;
3261 border-radius: 0;
3262 }
3262 }
3263 .btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
3263 .btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
3264 .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
3264 .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
3265 border-bottom-right-radius: 0;
3265 border-bottom-right-radius: 0;
3266 border-bottom-left-radius: 0;
3266 border-bottom-left-radius: 0;
3267 }
3267 }
3268 .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
3268 .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
3269 border-top-right-radius: 0;
3269 border-top-right-radius: 0;
3270 border-top-left-radius: 0;
3270 border-top-left-radius: 0;
3271 }
3271 }
3272 .btn-group-justified {
3272 .btn-group-justified {
3273 display: table;
3273 display: table;
3274 width: 100%;
3274 width: 100%;
3275 table-layout: fixed;
3275 table-layout: fixed;
3276 border-collapse: separate;
3276 border-collapse: separate;
3277 }
3277 }
3278 .btn-group-justified > .btn,
3278 .btn-group-justified > .btn,
3279 .btn-group-justified > .btn-group {
3279 .btn-group-justified > .btn-group {
3280 float: none;
3280 float: none;
3281 display: table-cell;
3281 display: table-cell;
3282 width: 1%;
3282 width: 1%;
3283 }
3283 }
3284 .btn-group-justified > .btn-group .btn {
3284 .btn-group-justified > .btn-group .btn {
3285 width: 100%;
3285 width: 100%;
3286 }
3286 }
3287 [data-toggle="buttons"] > .btn > input[type="radio"],
3287 [data-toggle="buttons"] > .btn > input[type="radio"],
3288 [data-toggle="buttons"] > .btn > input[type="checkbox"] {
3288 [data-toggle="buttons"] > .btn > input[type="checkbox"] {
3289 display: none;
3289 display: none;
3290 }
3290 }
3291 .input-group {
3291 .input-group {
3292 position: relative;
3292 position: relative;
3293 display: table;
3293 display: table;
3294 border-collapse: separate;
3294 border-collapse: separate;
3295 }
3295 }
3296 .input-group[class*="col-"] {
3296 .input-group[class*="col-"] {
3297 float: none;
3297 float: none;
3298 padding-left: 0;
3298 padding-left: 0;
3299 padding-right: 0;
3299 padding-right: 0;
3300 }
3300 }
3301 .input-group .form-control {
3301 .input-group .form-control {
3302 position: relative;
3302 position: relative;
3303 z-index: 2;
3303 z-index: 2;
3304 float: left;
3304 float: left;
3305 width: 100%;
3305 width: 100%;
3306 margin-bottom: 0;
3306 margin-bottom: 0;
3307 }
3307 }
3308 .input-group-lg > .form-control,
3308 .input-group-lg > .form-control,
3309 .input-group-lg > .input-group-addon,
3309 .input-group-lg > .input-group-addon,
3310 .input-group-lg > .input-group-btn > .btn {
3310 .input-group-lg > .input-group-btn > .btn {
3311 height: 45px;
3311 height: 45px;
3312 padding: 10px 16px;
3312 padding: 10px 16px;
3313 font-size: 17px;
3313 font-size: 17px;
3314 line-height: 1.33;
3314 line-height: 1.33;
3315 border-radius: 6px;
3315 border-radius: 6px;
3316 }
3316 }
3317 select.input-group-lg > .form-control,
3317 select.input-group-lg > .form-control,
3318 select.input-group-lg > .input-group-addon,
3318 select.input-group-lg > .input-group-addon,
3319 select.input-group-lg > .input-group-btn > .btn {
3319 select.input-group-lg > .input-group-btn > .btn {
3320 height: 45px;
3320 height: 45px;
3321 line-height: 45px;
3321 line-height: 45px;
3322 }
3322 }
3323 textarea.input-group-lg > .form-control,
3323 textarea.input-group-lg > .form-control,
3324 textarea.input-group-lg > .input-group-addon,
3324 textarea.input-group-lg > .input-group-addon,
3325 textarea.input-group-lg > .input-group-btn > .btn,
3325 textarea.input-group-lg > .input-group-btn > .btn,
3326 select[multiple].input-group-lg > .form-control,
3326 select[multiple].input-group-lg > .form-control,
3327 select[multiple].input-group-lg > .input-group-addon,
3327 select[multiple].input-group-lg > .input-group-addon,
3328 select[multiple].input-group-lg > .input-group-btn > .btn {
3328 select[multiple].input-group-lg > .input-group-btn > .btn {
3329 height: auto;
3329 height: auto;
3330 }
3330 }
3331 .input-group-sm > .form-control,
3331 .input-group-sm > .form-control,
3332 .input-group-sm > .input-group-addon,
3332 .input-group-sm > .input-group-addon,
3333 .input-group-sm > .input-group-btn > .btn {
3333 .input-group-sm > .input-group-btn > .btn {
3334 height: 30px;
3334 height: 30px;
3335 padding: 5px 10px;
3335 padding: 5px 10px;
3336 font-size: 12px;
3336 font-size: 12px;
3337 line-height: 1.5;
3337 line-height: 1.5;
3338 border-radius: 3px;
3338 border-radius: 3px;
3339 }
3339 }
3340 select.input-group-sm > .form-control,
3340 select.input-group-sm > .form-control,
3341 select.input-group-sm > .input-group-addon,
3341 select.input-group-sm > .input-group-addon,
3342 select.input-group-sm > .input-group-btn > .btn {
3342 select.input-group-sm > .input-group-btn > .btn {
3343 height: 30px;
3343 height: 30px;
3344 line-height: 30px;
3344 line-height: 30px;
3345 }
3345 }
3346 textarea.input-group-sm > .form-control,
3346 textarea.input-group-sm > .form-control,
3347 textarea.input-group-sm > .input-group-addon,
3347 textarea.input-group-sm > .input-group-addon,
3348 textarea.input-group-sm > .input-group-btn > .btn,
3348 textarea.input-group-sm > .input-group-btn > .btn,
3349 select[multiple].input-group-sm > .form-control,
3349 select[multiple].input-group-sm > .form-control,
3350 select[multiple].input-group-sm > .input-group-addon,
3350 select[multiple].input-group-sm > .input-group-addon,
3351 select[multiple].input-group-sm > .input-group-btn > .btn {
3351 select[multiple].input-group-sm > .input-group-btn > .btn {
3352 height: auto;
3352 height: auto;
3353 }
3353 }
3354 .input-group-addon,
3354 .input-group-addon,
3355 .input-group-btn,
3355 .input-group-btn,
3356 .input-group .form-control {
3356 .input-group .form-control {
3357 display: table-cell;
3357 display: table-cell;
3358 }
3358 }
3359 .input-group-addon:not(:first-child):not(:last-child),
3359 .input-group-addon:not(:first-child):not(:last-child),
3360 .input-group-btn:not(:first-child):not(:last-child),
3360 .input-group-btn:not(:first-child):not(:last-child),
3361 .input-group .form-control:not(:first-child):not(:last-child) {
3361 .input-group .form-control:not(:first-child):not(:last-child) {
3362 border-radius: 0;
3362 border-radius: 0;
3363 }
3363 }
3364 .input-group-addon,
3364 .input-group-addon,
3365 .input-group-btn {
3365 .input-group-btn {
3366 width: 1%;
3366 width: 1%;
3367 white-space: nowrap;
3367 white-space: nowrap;
3368 vertical-align: middle;
3368 vertical-align: middle;
3369 }
3369 }
3370 .input-group-addon {
3370 .input-group-addon {
3371 padding: 6px 12px;
3371 padding: 6px 12px;
3372 font-size: 13px;
3372 font-size: 13px;
3373 font-weight: normal;
3373 font-weight: normal;
3374 line-height: 1;
3374 line-height: 1;
3375 color: #555555;
3375 color: #555555;
3376 text-align: center;
3376 text-align: center;
3377 background-color: #eeeeee;
3377 background-color: #eeeeee;
3378 border: 1px solid #cccccc;
3378 border: 1px solid #cccccc;
3379 border-radius: 4px;
3379 border-radius: 4px;
3380 }
3380 }
3381 .input-group-addon.input-sm {
3381 .input-group-addon.input-sm {
3382 padding: 5px 10px;
3382 padding: 5px 10px;
3383 font-size: 12px;
3383 font-size: 12px;
3384 border-radius: 3px;
3384 border-radius: 3px;
3385 }
3385 }
3386 .input-group-addon.input-lg {
3386 .input-group-addon.input-lg {
3387 padding: 10px 16px;
3387 padding: 10px 16px;
3388 font-size: 17px;
3388 font-size: 17px;
3389 border-radius: 6px;
3389 border-radius: 6px;
3390 }
3390 }
3391 .input-group-addon input[type="radio"],
3391 .input-group-addon input[type="radio"],
3392 .input-group-addon input[type="checkbox"] {
3392 .input-group-addon input[type="checkbox"] {
3393 margin-top: 0;
3393 margin-top: 0;
3394 }
3394 }
3395 .input-group .form-control:first-child,
3395 .input-group .form-control:first-child,
3396 .input-group-addon:first-child,
3396 .input-group-addon:first-child,
3397 .input-group-btn:first-child > .btn,
3397 .input-group-btn:first-child > .btn,
3398 .input-group-btn:first-child > .btn-group > .btn,
3398 .input-group-btn:first-child > .btn-group > .btn,
3399 .input-group-btn:first-child > .dropdown-toggle,
3399 .input-group-btn:first-child > .dropdown-toggle,
3400 .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
3400 .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
3401 .input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
3401 .input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
3402 border-bottom-right-radius: 0;
3402 border-bottom-right-radius: 0;
3403 border-top-right-radius: 0;
3403 border-top-right-radius: 0;
3404 }
3404 }
3405 .input-group-addon:first-child {
3405 .input-group-addon:first-child {
3406 border-right: 0;
3406 border-right: 0;
3407 }
3407 }
3408 .input-group .form-control:last-child,
3408 .input-group .form-control:last-child,
3409 .input-group-addon:last-child,
3409 .input-group-addon:last-child,
3410 .input-group-btn:last-child > .btn,
3410 .input-group-btn:last-child > .btn,
3411 .input-group-btn:last-child > .btn-group > .btn,
3411 .input-group-btn:last-child > .btn-group > .btn,
3412 .input-group-btn:last-child > .dropdown-toggle,
3412 .input-group-btn:last-child > .dropdown-toggle,
3413 .input-group-btn:first-child > .btn:not(:first-child),
3413 .input-group-btn:first-child > .btn:not(:first-child),
3414 .input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
3414 .input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
3415 border-bottom-left-radius: 0;
3415 border-bottom-left-radius: 0;
3416 border-top-left-radius: 0;
3416 border-top-left-radius: 0;
3417 }
3417 }
3418 .input-group-addon:last-child {
3418 .input-group-addon:last-child {
3419 border-left: 0;
3419 border-left: 0;
3420 }
3420 }
3421 .input-group-btn {
3421 .input-group-btn {
3422 position: relative;
3422 position: relative;
3423 font-size: 0;
3423 font-size: 0;
3424 white-space: nowrap;
3424 white-space: nowrap;
3425 }
3425 }
3426 .input-group-btn > .btn {
3426 .input-group-btn > .btn {
3427 position: relative;
3427 position: relative;
3428 }
3428 }
3429 .input-group-btn > .btn + .btn {
3429 .input-group-btn > .btn + .btn {
3430 margin-left: -1px;
3430 margin-left: -1px;
3431 }
3431 }
3432 .input-group-btn > .btn:hover,
3432 .input-group-btn > .btn:hover,
3433 .input-group-btn > .btn:focus,
3433 .input-group-btn > .btn:focus,
3434 .input-group-btn > .btn:active {
3434 .input-group-btn > .btn:active {
3435 z-index: 2;
3435 z-index: 2;
3436 }
3436 }
3437 .input-group-btn:first-child > .btn,
3437 .input-group-btn:first-child > .btn,
3438 .input-group-btn:first-child > .btn-group {
3438 .input-group-btn:first-child > .btn-group {
3439 margin-right: -1px;
3439 margin-right: -1px;
3440 }
3440 }
3441 .input-group-btn:last-child > .btn,
3441 .input-group-btn:last-child > .btn,
3442 .input-group-btn:last-child > .btn-group {
3442 .input-group-btn:last-child > .btn-group {
3443 margin-left: -1px;
3443 margin-left: -1px;
3444 }
3444 }
3445 .nav {
3445 .nav {
3446 margin-bottom: 0;
3446 margin-bottom: 0;
3447 padding-left: 0;
3447 padding-left: 0;
3448 list-style: none;
3448 list-style: none;
3449 }
3449 }
3450 .nav > li {
3450 .nav > li {
3451 position: relative;
3451 position: relative;
3452 display: block;
3452 display: block;
3453 }
3453 }
3454 .nav > li > a {
3454 .nav > li > a {
3455 position: relative;
3455 position: relative;
3456 display: block;
3456 display: block;
3457 padding: 10px 15px;
3457 padding: 10px 15px;
3458 }
3458 }
3459 .nav > li > a:hover,
3459 .nav > li > a:hover,
3460 .nav > li > a:focus {
3460 .nav > li > a:focus {
3461 text-decoration: none;
3461 text-decoration: none;
3462 background-color: #eeeeee;
3462 background-color: #eeeeee;
3463 }
3463 }
3464 .nav > li.disabled > a {
3464 .nav > li.disabled > a {
3465 color: #999999;
3465 color: #999999;
3466 }
3466 }
3467 .nav > li.disabled > a:hover,
3467 .nav > li.disabled > a:hover,
3468 .nav > li.disabled > a:focus {
3468 .nav > li.disabled > a:focus {
3469 color: #999999;
3469 color: #999999;
3470 text-decoration: none;
3470 text-decoration: none;
3471 background-color: transparent;
3471 background-color: transparent;
3472 cursor: not-allowed;
3472 cursor: not-allowed;
3473 }
3473 }
3474 .nav .open > a,
3474 .nav .open > a,
3475 .nav .open > a:hover,
3475 .nav .open > a:hover,
3476 .nav .open > a:focus {
3476 .nav .open > a:focus {
3477 background-color: #eeeeee;
3477 background-color: #eeeeee;
3478 border-color: #428bca;
3478 border-color: #428bca;
3479 }
3479 }
3480 .nav .nav-divider {
3480 .nav .nav-divider {
3481 height: 1px;
3481 height: 1px;
3482 margin: 8px 0;
3482 margin: 8px 0;
3483 overflow: hidden;
3483 overflow: hidden;
3484 background-color: #e5e5e5;
3484 background-color: #e5e5e5;
3485 }
3485 }
3486 .nav > li > a > img {
3486 .nav > li > a > img {
3487 max-width: none;
3487 max-width: none;
3488 }
3488 }
3489 .nav-tabs {
3489 .nav-tabs {
3490 border-bottom: 1px solid #dddddd;
3490 border-bottom: 1px solid #dddddd;
3491 }
3491 }
3492 .nav-tabs > li {
3492 .nav-tabs > li {
3493 float: left;
3493 float: left;
3494 margin-bottom: -1px;
3494 margin-bottom: -1px;
3495 }
3495 }
3496 .nav-tabs > li > a {
3496 .nav-tabs > li > a {
3497 margin-right: 2px;
3497 margin-right: 2px;
3498 line-height: 1.42857143;
3498 line-height: 1.42857143;
3499 border: 1px solid transparent;
3499 border: 1px solid transparent;
3500 border-radius: 4px 4px 0 0;
3500 border-radius: 4px 4px 0 0;
3501 }
3501 }
3502 .nav-tabs > li > a:hover {
3502 .nav-tabs > li > a:hover {
3503 border-color: #eeeeee #eeeeee #dddddd;
3503 border-color: #eeeeee #eeeeee #dddddd;
3504 }
3504 }
3505 .nav-tabs > li.active > a,
3505 .nav-tabs > li.active > a,
3506 .nav-tabs > li.active > a:hover,
3506 .nav-tabs > li.active > a:hover,
3507 .nav-tabs > li.active > a:focus {
3507 .nav-tabs > li.active > a:focus {
3508 color: #555555;
3508 color: #555555;
3509 background-color: #ffffff;
3509 background-color: #ffffff;
3510 border: 1px solid #dddddd;
3510 border: 1px solid #dddddd;
3511 border-bottom-color: transparent;
3511 border-bottom-color: transparent;
3512 cursor: default;
3512 cursor: default;
3513 }
3513 }
3514 .nav-tabs.nav-justified {
3514 .nav-tabs.nav-justified {
3515 width: 100%;
3515 width: 100%;
3516 border-bottom: 0;
3516 border-bottom: 0;
3517 }
3517 }
3518 .nav-tabs.nav-justified > li {
3518 .nav-tabs.nav-justified > li {
3519 float: none;
3519 float: none;
3520 }
3520 }
3521 .nav-tabs.nav-justified > li > a {
3521 .nav-tabs.nav-justified > li > a {
3522 text-align: center;
3522 text-align: center;
3523 margin-bottom: 5px;
3523 margin-bottom: 5px;
3524 }
3524 }
3525 .nav-tabs.nav-justified > .dropdown .dropdown-menu {
3525 .nav-tabs.nav-justified > .dropdown .dropdown-menu {
3526 top: auto;
3526 top: auto;
3527 left: auto;
3527 left: auto;
3528 }
3528 }
3529 @media (min-width: 768px) {
3529 @media (min-width: 768px) {
3530 .nav-tabs.nav-justified > li {
3530 .nav-tabs.nav-justified > li {
3531 display: table-cell;
3531 display: table-cell;
3532 width: 1%;
3532 width: 1%;
3533 }
3533 }
3534 .nav-tabs.nav-justified > li > a {
3534 .nav-tabs.nav-justified > li > a {
3535 margin-bottom: 0;
3535 margin-bottom: 0;
3536 }
3536 }
3537 }
3537 }
3538 .nav-tabs.nav-justified > li > a {
3538 .nav-tabs.nav-justified > li > a {
3539 margin-right: 0;
3539 margin-right: 0;
3540 border-radius: 4px;
3540 border-radius: 4px;
3541 }
3541 }
3542 .nav-tabs.nav-justified > .active > a,
3542 .nav-tabs.nav-justified > .active > a,
3543 .nav-tabs.nav-justified > .active > a:hover,
3543 .nav-tabs.nav-justified > .active > a:hover,
3544 .nav-tabs.nav-justified > .active > a:focus {
3544 .nav-tabs.nav-justified > .active > a:focus {
3545 border: 1px solid #dddddd;
3545 border: 1px solid #dddddd;
3546 }
3546 }
3547 @media (min-width: 768px) {
3547 @media (min-width: 768px) {
3548 .nav-tabs.nav-justified > li > a {
3548 .nav-tabs.nav-justified > li > a {
3549 border-bottom: 1px solid #dddddd;
3549 border-bottom: 1px solid #dddddd;
3550 border-radius: 4px 4px 0 0;
3550 border-radius: 4px 4px 0 0;
3551 }
3551 }
3552 .nav-tabs.nav-justified > .active > a,
3552 .nav-tabs.nav-justified > .active > a,
3553 .nav-tabs.nav-justified > .active > a:hover,
3553 .nav-tabs.nav-justified > .active > a:hover,
3554 .nav-tabs.nav-justified > .active > a:focus {
3554 .nav-tabs.nav-justified > .active > a:focus {
3555 border-bottom-color: #ffffff;
3555 border-bottom-color: #ffffff;
3556 }
3556 }
3557 }
3557 }
3558 .nav-pills > li {
3558 .nav-pills > li {
3559 float: left;
3559 float: left;
3560 }
3560 }
3561 .nav-pills > li > a {
3561 .nav-pills > li > a {
3562 border-radius: 4px;
3562 border-radius: 4px;
3563 }
3563 }
3564 .nav-pills > li + li {
3564 .nav-pills > li + li {
3565 margin-left: 2px;
3565 margin-left: 2px;
3566 }
3566 }
3567 .nav-pills > li.active > a,
3567 .nav-pills > li.active > a,
3568 .nav-pills > li.active > a:hover,
3568 .nav-pills > li.active > a:hover,
3569 .nav-pills > li.active > a:focus {
3569 .nav-pills > li.active > a:focus {
3570 color: #ffffff;
3570 color: #ffffff;
3571 background-color: #428bca;
3571 background-color: #428bca;
3572 }
3572 }
3573 .nav-stacked > li {
3573 .nav-stacked > li {
3574 float: none;
3574 float: none;
3575 }
3575 }
3576 .nav-stacked > li + li {
3576 .nav-stacked > li + li {
3577 margin-top: 2px;
3577 margin-top: 2px;
3578 margin-left: 0;
3578 margin-left: 0;
3579 }
3579 }
3580 .nav-justified {
3580 .nav-justified {
3581 width: 100%;
3581 width: 100%;
3582 }
3582 }
3583 .nav-justified > li {
3583 .nav-justified > li {
3584 float: none;
3584 float: none;
3585 }
3585 }
3586 .nav-justified > li > a {
3586 .nav-justified > li > a {
3587 text-align: center;
3587 text-align: center;
3588 margin-bottom: 5px;
3588 margin-bottom: 5px;
3589 }
3589 }
3590 .nav-justified > .dropdown .dropdown-menu {
3590 .nav-justified > .dropdown .dropdown-menu {
3591 top: auto;
3591 top: auto;
3592 left: auto;
3592 left: auto;
3593 }
3593 }
3594 @media (min-width: 768px) {
3594 @media (min-width: 768px) {
3595 .nav-justified > li {
3595 .nav-justified > li {
3596 display: table-cell;
3596 display: table-cell;
3597 width: 1%;
3597 width: 1%;
3598 }
3598 }
3599 .nav-justified > li > a {
3599 .nav-justified > li > a {
3600 margin-bottom: 0;
3600 margin-bottom: 0;
3601 }
3601 }
3602 }
3602 }
3603 .nav-tabs-justified {
3603 .nav-tabs-justified {
3604 border-bottom: 0;
3604 border-bottom: 0;
3605 }
3605 }
3606 .nav-tabs-justified > li > a {
3606 .nav-tabs-justified > li > a {
3607 margin-right: 0;
3607 margin-right: 0;
3608 border-radius: 4px;
3608 border-radius: 4px;
3609 }
3609 }
3610 .nav-tabs-justified > .active > a,
3610 .nav-tabs-justified > .active > a,
3611 .nav-tabs-justified > .active > a:hover,
3611 .nav-tabs-justified > .active > a:hover,
3612 .nav-tabs-justified > .active > a:focus {
3612 .nav-tabs-justified > .active > a:focus {
3613 border: 1px solid #dddddd;
3613 border: 1px solid #dddddd;
3614 }
3614 }
3615 @media (min-width: 768px) {
3615 @media (min-width: 768px) {
3616 .nav-tabs-justified > li > a {
3616 .nav-tabs-justified > li > a {
3617 border-bottom: 1px solid #dddddd;
3617 border-bottom: 1px solid #dddddd;
3618 border-radius: 4px 4px 0 0;
3618 border-radius: 4px 4px 0 0;
3619 }
3619 }
3620 .nav-tabs-justified > .active > a,
3620 .nav-tabs-justified > .active > a,
3621 .nav-tabs-justified > .active > a:hover,
3621 .nav-tabs-justified > .active > a:hover,
3622 .nav-tabs-justified > .active > a:focus {
3622 .nav-tabs-justified > .active > a:focus {
3623 border-bottom-color: #ffffff;
3623 border-bottom-color: #ffffff;
3624 }
3624 }
3625 }
3625 }
3626 .tab-content > .tab-pane {
3626 .tab-content > .tab-pane {
3627 display: none;
3627 display: none;
3628 }
3628 }
3629 .tab-content > .active {
3629 .tab-content > .active {
3630 display: block;
3630 display: block;
3631 }
3631 }
3632 .nav-tabs .dropdown-menu {
3632 .nav-tabs .dropdown-menu {
3633 margin-top: -1px;
3633 margin-top: -1px;
3634 border-top-right-radius: 0;
3634 border-top-right-radius: 0;
3635 border-top-left-radius: 0;
3635 border-top-left-radius: 0;
3636 }
3636 }
3637 .navbar {
3637 .navbar {
3638 position: relative;
3638 position: relative;
3639 min-height: 30px;
3639 min-height: 30px;
3640 margin-bottom: 18px;
3640 margin-bottom: 18px;
3641 border: 1px solid transparent;
3641 border: 1px solid transparent;
3642 }
3642 }
3643 @media (min-width: 540px) {
3643 @media (min-width: 540px) {
3644 .navbar {
3644 .navbar {
3645 border-radius: 4px;
3645 border-radius: 4px;
3646 }
3646 }
3647 }
3647 }
3648 @media (min-width: 540px) {
3648 @media (min-width: 540px) {
3649 .navbar-header {
3649 .navbar-header {
3650 float: left;
3650 float: left;
3651 }
3651 }
3652 }
3652 }
3653 .navbar-collapse {
3653 .navbar-collapse {
3654 max-height: 340px;
3654 max-height: 340px;
3655 overflow-x: visible;
3655 overflow-x: visible;
3656 padding-right: 15px;
3656 padding-right: 15px;
3657 padding-left: 15px;
3657 padding-left: 15px;
3658 border-top: 1px solid transparent;
3658 border-top: 1px solid transparent;
3659 box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
3659 box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
3660 -webkit-overflow-scrolling: touch;
3660 -webkit-overflow-scrolling: touch;
3661 }
3661 }
3662 .navbar-collapse.in {
3662 .navbar-collapse.in {
3663 overflow-y: auto;
3663 overflow-y: auto;
3664 }
3664 }
3665 @media (min-width: 540px) {
3665 @media (min-width: 540px) {
3666 .navbar-collapse {
3666 .navbar-collapse {
3667 width: auto;
3667 width: auto;
3668 border-top: 0;
3668 border-top: 0;
3669 box-shadow: none;
3669 box-shadow: none;
3670 }
3670 }
3671 .navbar-collapse.collapse {
3671 .navbar-collapse.collapse {
3672 display: block !important;
3672 display: block !important;
3673 height: auto !important;
3673 height: auto !important;
3674 padding-bottom: 0;
3674 padding-bottom: 0;
3675 overflow: visible !important;
3675 overflow: visible !important;
3676 }
3676 }
3677 .navbar-collapse.in {
3677 .navbar-collapse.in {
3678 overflow-y: visible;
3678 overflow-y: visible;
3679 }
3679 }
3680 .navbar-fixed-top .navbar-collapse,
3680 .navbar-fixed-top .navbar-collapse,
3681 .navbar-static-top .navbar-collapse,
3681 .navbar-static-top .navbar-collapse,
3682 .navbar-fixed-bottom .navbar-collapse {
3682 .navbar-fixed-bottom .navbar-collapse {
3683 padding-left: 0;
3683 padding-left: 0;
3684 padding-right: 0;
3684 padding-right: 0;
3685 }
3685 }
3686 }
3686 }
3687 .container > .navbar-header,
3687 .container > .navbar-header,
3688 .container-fluid > .navbar-header,
3688 .container-fluid > .navbar-header,
3689 .container > .navbar-collapse,
3689 .container > .navbar-collapse,
3690 .container-fluid > .navbar-collapse {
3690 .container-fluid > .navbar-collapse {
3691 margin-right: -15px;
3691 margin-right: -15px;
3692 margin-left: -15px;
3692 margin-left: -15px;
3693 }
3693 }
3694 @media (min-width: 540px) {
3694 @media (min-width: 540px) {
3695 .container > .navbar-header,
3695 .container > .navbar-header,
3696 .container-fluid > .navbar-header,
3696 .container-fluid > .navbar-header,
3697 .container > .navbar-collapse,
3697 .container > .navbar-collapse,
3698 .container-fluid > .navbar-collapse {
3698 .container-fluid > .navbar-collapse {
3699 margin-right: 0;
3699 margin-right: 0;
3700 margin-left: 0;
3700 margin-left: 0;
3701 }
3701 }
3702 }
3702 }
3703 .navbar-static-top {
3703 .navbar-static-top {
3704 z-index: 1000;
3704 z-index: 1000;
3705 border-width: 0 0 1px;
3705 border-width: 0 0 1px;
3706 }
3706 }
3707 @media (min-width: 540px) {
3707 @media (min-width: 540px) {
3708 .navbar-static-top {
3708 .navbar-static-top {
3709 border-radius: 0;
3709 border-radius: 0;
3710 }
3710 }
3711 }
3711 }
3712 .navbar-fixed-top,
3712 .navbar-fixed-top,
3713 .navbar-fixed-bottom {
3713 .navbar-fixed-bottom {
3714 position: fixed;
3714 position: fixed;
3715 right: 0;
3715 right: 0;
3716 left: 0;
3716 left: 0;
3717 z-index: 1030;
3717 z-index: 1030;
3718 }
3718 }
3719 @media (min-width: 540px) {
3719 @media (min-width: 540px) {
3720 .navbar-fixed-top,
3720 .navbar-fixed-top,
3721 .navbar-fixed-bottom {
3721 .navbar-fixed-bottom {
3722 border-radius: 0;
3722 border-radius: 0;
3723 }
3723 }
3724 }
3724 }
3725 .navbar-fixed-top {
3725 .navbar-fixed-top {
3726 top: 0;
3726 top: 0;
3727 border-width: 0 0 1px;
3727 border-width: 0 0 1px;
3728 }
3728 }
3729 .navbar-fixed-bottom {
3729 .navbar-fixed-bottom {
3730 bottom: 0;
3730 bottom: 0;
3731 margin-bottom: 0;
3731 margin-bottom: 0;
3732 border-width: 1px 0 0;
3732 border-width: 1px 0 0;
3733 }
3733 }
3734 .navbar-brand {
3734 .navbar-brand {
3735 float: left;
3735 float: left;
3736 padding: 6px 15px;
3736 padding: 6px 15px;
3737 font-size: 17px;
3737 font-size: 17px;
3738 line-height: 18px;
3738 line-height: 18px;
3739 height: 30px;
3739 height: 30px;
3740 }
3740 }
3741 .navbar-brand:hover,
3741 .navbar-brand:hover,
3742 .navbar-brand:focus {
3742 .navbar-brand:focus {
3743 text-decoration: none;
3743 text-decoration: none;
3744 }
3744 }
3745 @media (min-width: 540px) {
3745 @media (min-width: 540px) {
3746 .navbar > .container .navbar-brand,
3746 .navbar > .container .navbar-brand,
3747 .navbar > .container-fluid .navbar-brand {
3747 .navbar > .container-fluid .navbar-brand {
3748 margin-left: -15px;
3748 margin-left: -15px;
3749 }
3749 }
3750 }
3750 }
3751 .navbar-toggle {
3751 .navbar-toggle {
3752 position: relative;
3752 position: relative;
3753 float: right;
3753 float: right;
3754 margin-right: 15px;
3754 margin-right: 15px;
3755 padding: 9px 10px;
3755 padding: 9px 10px;
3756 margin-top: -2px;
3756 margin-top: -2px;
3757 margin-bottom: -2px;
3757 margin-bottom: -2px;
3758 background-color: transparent;
3758 background-color: transparent;
3759 background-image: none;
3759 background-image: none;
3760 border: 1px solid transparent;
3760 border: 1px solid transparent;
3761 border-radius: 4px;
3761 border-radius: 4px;
3762 }
3762 }
3763 .navbar-toggle:focus {
3763 .navbar-toggle:focus {
3764 outline: none;
3764 outline: none;
3765 }
3765 }
3766 .navbar-toggle .icon-bar {
3766 .navbar-toggle .icon-bar {
3767 display: block;
3767 display: block;
3768 width: 22px;
3768 width: 22px;
3769 height: 2px;
3769 height: 2px;
3770 border-radius: 1px;
3770 border-radius: 1px;
3771 }
3771 }
3772 .navbar-toggle .icon-bar + .icon-bar {
3772 .navbar-toggle .icon-bar + .icon-bar {
3773 margin-top: 4px;
3773 margin-top: 4px;
3774 }
3774 }
3775 @media (min-width: 540px) {
3775 @media (min-width: 540px) {
3776 .navbar-toggle {
3776 .navbar-toggle {
3777 display: none;
3777 display: none;
3778 }
3778 }
3779 }
3779 }
3780 .navbar-nav {
3780 .navbar-nav {
3781 margin: 3px -15px;
3781 margin: 3px -15px;
3782 }
3782 }
3783 .navbar-nav > li > a {
3783 .navbar-nav > li > a {
3784 padding-top: 10px;
3784 padding-top: 10px;
3785 padding-bottom: 10px;
3785 padding-bottom: 10px;
3786 line-height: 18px;
3786 line-height: 18px;
3787 }
3787 }
3788 @media (max-width: 539px) {
3788 @media (max-width: 539px) {
3789 .navbar-nav .open .dropdown-menu {
3789 .navbar-nav .open .dropdown-menu {
3790 position: static;
3790 position: static;
3791 float: none;
3791 float: none;
3792 width: auto;
3792 width: auto;
3793 margin-top: 0;
3793 margin-top: 0;
3794 background-color: transparent;
3794 background-color: transparent;
3795 border: 0;
3795 border: 0;
3796 box-shadow: none;
3796 box-shadow: none;
3797 }
3797 }
3798 .navbar-nav .open .dropdown-menu > li > a,
3798 .navbar-nav .open .dropdown-menu > li > a,
3799 .navbar-nav .open .dropdown-menu .dropdown-header {
3799 .navbar-nav .open .dropdown-menu .dropdown-header {
3800 padding: 5px 15px 5px 25px;
3800 padding: 5px 15px 5px 25px;
3801 }
3801 }
3802 .navbar-nav .open .dropdown-menu > li > a {
3802 .navbar-nav .open .dropdown-menu > li > a {
3803 line-height: 18px;
3803 line-height: 18px;
3804 }
3804 }
3805 .navbar-nav .open .dropdown-menu > li > a:hover,
3805 .navbar-nav .open .dropdown-menu > li > a:hover,
3806 .navbar-nav .open .dropdown-menu > li > a:focus {
3806 .navbar-nav .open .dropdown-menu > li > a:focus {
3807 background-image: none;
3807 background-image: none;
3808 }
3808 }
3809 }
3809 }
3810 @media (min-width: 540px) {
3810 @media (min-width: 540px) {
3811 .navbar-nav {
3811 .navbar-nav {
3812 float: left;
3812 float: left;
3813 margin: 0;
3813 margin: 0;
3814 }
3814 }
3815 .navbar-nav > li {
3815 .navbar-nav > li {
3816 float: left;
3816 float: left;
3817 }
3817 }
3818 .navbar-nav > li > a {
3818 .navbar-nav > li > a {
3819 padding-top: 6px;
3819 padding-top: 6px;
3820 padding-bottom: 6px;
3820 padding-bottom: 6px;
3821 }
3821 }
3822 .navbar-nav.navbar-right:last-child {
3822 .navbar-nav.navbar-right:last-child {
3823 margin-right: -15px;
3823 margin-right: -15px;
3824 }
3824 }
3825 }
3825 }
3826 @media (min-width: 540px) {
3826 @media (min-width: 540px) {
3827 .navbar-left {
3827 .navbar-left {
3828 float: left !important;
3828 float: left !important;
3829 float: left;
3829 float: left;
3830 }
3830 }
3831 .navbar-right {
3831 .navbar-right {
3832 float: right !important;
3832 float: right !important;
3833 float: right;
3833 float: right;
3834 }
3834 }
3835 }
3835 }
3836 .navbar-form {
3836 .navbar-form {
3837 margin-left: -15px;
3837 margin-left: -15px;
3838 margin-right: -15px;
3838 margin-right: -15px;
3839 padding: 10px 15px;
3839 padding: 10px 15px;
3840 border-top: 1px solid transparent;
3840 border-top: 1px solid transparent;
3841 border-bottom: 1px solid transparent;
3841 border-bottom: 1px solid transparent;
3842 -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
3842 -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
3843 box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
3843 box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
3844 margin-top: -1px;
3844 margin-top: -1px;
3845 margin-bottom: -1px;
3845 margin-bottom: -1px;
3846 }
3846 }
3847 @media (min-width: 768px) {
3847 @media (min-width: 768px) {
3848 .navbar-form .form-group {
3848 .navbar-form .form-group {
3849 display: inline-block;
3849 display: inline-block;
3850 margin-bottom: 0;
3850 margin-bottom: 0;
3851 vertical-align: middle;
3851 vertical-align: middle;
3852 }
3852 }
3853 .navbar-form .form-control {
3853 .navbar-form .form-control {
3854 display: inline-block;
3854 display: inline-block;
3855 width: auto;
3855 width: auto;
3856 vertical-align: middle;
3856 vertical-align: middle;
3857 }
3857 }
3858 .navbar-form .input-group > .form-control {
3858 .navbar-form .input-group > .form-control {
3859 width: 100%;
3859 width: 100%;
3860 }
3860 }
3861 .navbar-form .control-label {
3861 .navbar-form .control-label {
3862 margin-bottom: 0;
3862 margin-bottom: 0;
3863 vertical-align: middle;
3863 vertical-align: middle;
3864 }
3864 }
3865 .navbar-form .radio,
3865 .navbar-form .radio,
3866 .navbar-form .checkbox {
3866 .navbar-form .checkbox {
3867 display: inline-block;
3867 display: inline-block;
3868 margin-top: 0;
3868 margin-top: 0;
3869 margin-bottom: 0;
3869 margin-bottom: 0;
3870 padding-left: 0;
3870 padding-left: 0;
3871 vertical-align: middle;
3871 vertical-align: middle;
3872 }
3872 }
3873 .navbar-form .radio input[type="radio"],
3873 .navbar-form .radio input[type="radio"],
3874 .navbar-form .checkbox input[type="checkbox"] {
3874 .navbar-form .checkbox input[type="checkbox"] {
3875 float: none;
3875 float: none;
3876 margin-left: 0;
3876 margin-left: 0;
3877 }
3877 }
3878 .navbar-form .has-feedback .form-control-feedback {
3878 .navbar-form .has-feedback .form-control-feedback {
3879 top: 0;
3879 top: 0;
3880 }
3880 }
3881 }
3881 }
3882 @media (max-width: 539px) {
3882 @media (max-width: 539px) {
3883 .navbar-form .form-group {
3883 .navbar-form .form-group {
3884 margin-bottom: 5px;
3884 margin-bottom: 5px;
3885 }
3885 }
3886 }
3886 }
3887 @media (min-width: 540px) {
3887 @media (min-width: 540px) {
3888 .navbar-form {
3888 .navbar-form {
3889 width: auto;
3889 width: auto;
3890 border: 0;
3890 border: 0;
3891 margin-left: 0;
3891 margin-left: 0;
3892 margin-right: 0;
3892 margin-right: 0;
3893 padding-top: 0;
3893 padding-top: 0;
3894 padding-bottom: 0;
3894 padding-bottom: 0;
3895 -webkit-box-shadow: none;
3895 -webkit-box-shadow: none;
3896 box-shadow: none;
3896 box-shadow: none;
3897 }
3897 }
3898 .navbar-form.navbar-right:last-child {
3898 .navbar-form.navbar-right:last-child {
3899 margin-right: -15px;
3899 margin-right: -15px;
3900 }
3900 }
3901 }
3901 }
3902 .navbar-nav > li > .dropdown-menu {
3902 .navbar-nav > li > .dropdown-menu {
3903 margin-top: 0;
3903 margin-top: 0;
3904 border-top-right-radius: 0;
3904 border-top-right-radius: 0;
3905 border-top-left-radius: 0;
3905 border-top-left-radius: 0;
3906 }
3906 }
3907 .navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
3907 .navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
3908 border-bottom-right-radius: 0;
3908 border-bottom-right-radius: 0;
3909 border-bottom-left-radius: 0;
3909 border-bottom-left-radius: 0;
3910 }
3910 }
3911 .navbar-btn {
3911 .navbar-btn {
3912 margin-top: -1px;
3912 margin-top: -1px;
3913 margin-bottom: -1px;
3913 margin-bottom: -1px;
3914 }
3914 }
3915 .navbar-btn.btn-sm {
3915 .navbar-btn.btn-sm {
3916 margin-top: 0px;
3916 margin-top: 0px;
3917 margin-bottom: 0px;
3917 margin-bottom: 0px;
3918 }
3918 }
3919 .navbar-btn.btn-xs {
3919 .navbar-btn.btn-xs {
3920 margin-top: 4px;
3920 margin-top: 4px;
3921 margin-bottom: 4px;
3921 margin-bottom: 4px;
3922 }
3922 }
3923 .navbar-text {
3923 .navbar-text {
3924 margin-top: 6px;
3924 margin-top: 6px;
3925 margin-bottom: 6px;
3925 margin-bottom: 6px;
3926 }
3926 }
3927 @media (min-width: 540px) {
3927 @media (min-width: 540px) {
3928 .navbar-text {
3928 .navbar-text {
3929 float: left;
3929 float: left;
3930 margin-left: 15px;
3930 margin-left: 15px;
3931 margin-right: 15px;
3931 margin-right: 15px;
3932 }
3932 }
3933 .navbar-text.navbar-right:last-child {
3933 .navbar-text.navbar-right:last-child {
3934 margin-right: 0;
3934 margin-right: 0;
3935 }
3935 }
3936 }
3936 }
3937 .navbar-default {
3937 .navbar-default {
3938 background-color: #f8f8f8;
3938 background-color: #f8f8f8;
3939 border-color: #e7e7e7;
3939 border-color: #e7e7e7;
3940 }
3940 }
3941 .navbar-default .navbar-brand {
3941 .navbar-default .navbar-brand {
3942 color: #777777;
3942 color: #777777;
3943 }
3943 }
3944 .navbar-default .navbar-brand:hover,
3944 .navbar-default .navbar-brand:hover,
3945 .navbar-default .navbar-brand:focus {
3945 .navbar-default .navbar-brand:focus {
3946 color: #5e5e5e;
3946 color: #5e5e5e;
3947 background-color: transparent;
3947 background-color: transparent;
3948 }
3948 }
3949 .navbar-default .navbar-text {
3949 .navbar-default .navbar-text {
3950 color: #777777;
3950 color: #777777;
3951 }
3951 }
3952 .navbar-default .navbar-nav > li > a {
3952 .navbar-default .navbar-nav > li > a {
3953 color: #777777;
3953 color: #777777;
3954 }
3954 }
3955 .navbar-default .navbar-nav > li > a:hover,
3955 .navbar-default .navbar-nav > li > a:hover,
3956 .navbar-default .navbar-nav > li > a:focus {
3956 .navbar-default .navbar-nav > li > a:focus {
3957 color: #333333;
3957 color: #333333;
3958 background-color: transparent;
3958 background-color: transparent;
3959 }
3959 }
3960 .navbar-default .navbar-nav > .active > a,
3960 .navbar-default .navbar-nav > .active > a,
3961 .navbar-default .navbar-nav > .active > a:hover,
3961 .navbar-default .navbar-nav > .active > a:hover,
3962 .navbar-default .navbar-nav > .active > a:focus {
3962 .navbar-default .navbar-nav > .active > a:focus {
3963 color: #555555;
3963 color: #555555;
3964 background-color: #e7e7e7;
3964 background-color: #e7e7e7;
3965 }
3965 }
3966 .navbar-default .navbar-nav > .disabled > a,
3966 .navbar-default .navbar-nav > .disabled > a,
3967 .navbar-default .navbar-nav > .disabled > a:hover,
3967 .navbar-default .navbar-nav > .disabled > a:hover,
3968 .navbar-default .navbar-nav > .disabled > a:focus {
3968 .navbar-default .navbar-nav > .disabled > a:focus {
3969 color: #cccccc;
3969 color: #cccccc;
3970 background-color: transparent;
3970 background-color: transparent;
3971 }
3971 }
3972 .navbar-default .navbar-toggle {
3972 .navbar-default .navbar-toggle {
3973 border-color: #dddddd;
3973 border-color: #dddddd;
3974 }
3974 }
3975 .navbar-default .navbar-toggle:hover,
3975 .navbar-default .navbar-toggle:hover,
3976 .navbar-default .navbar-toggle:focus {
3976 .navbar-default .navbar-toggle:focus {
3977 background-color: #dddddd;
3977 background-color: #dddddd;
3978 }
3978 }
3979 .navbar-default .navbar-toggle .icon-bar {
3979 .navbar-default .navbar-toggle .icon-bar {
3980 background-color: #888888;
3980 background-color: #888888;
3981 }
3981 }
3982 .navbar-default .navbar-collapse,
3982 .navbar-default .navbar-collapse,
3983 .navbar-default .navbar-form {
3983 .navbar-default .navbar-form {
3984 border-color: #e7e7e7;
3984 border-color: #e7e7e7;
3985 }
3985 }
3986 .navbar-default .navbar-nav > .open > a,
3986 .navbar-default .navbar-nav > .open > a,
3987 .navbar-default .navbar-nav > .open > a:hover,
3987 .navbar-default .navbar-nav > .open > a:hover,
3988 .navbar-default .navbar-nav > .open > a:focus {
3988 .navbar-default .navbar-nav > .open > a:focus {
3989 background-color: #e7e7e7;
3989 background-color: #e7e7e7;
3990 color: #555555;
3990 color: #555555;
3991 }
3991 }
3992 @media (max-width: 539px) {
3992 @media (max-width: 539px) {
3993 .navbar-default .navbar-nav .open .dropdown-menu > li > a {
3993 .navbar-default .navbar-nav .open .dropdown-menu > li > a {
3994 color: #777777;
3994 color: #777777;
3995 }
3995 }
3996 .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
3996 .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
3997 .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
3997 .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
3998 color: #333333;
3998 color: #333333;
3999 background-color: transparent;
3999 background-color: transparent;
4000 }
4000 }
4001 .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
4001 .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
4002 .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
4002 .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
4003 .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
4003 .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
4004 color: #555555;
4004 color: #555555;
4005 background-color: #e7e7e7;
4005 background-color: #e7e7e7;
4006 }
4006 }
4007 .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
4007 .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
4008 .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
4008 .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
4009 .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
4009 .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
4010 color: #cccccc;
4010 color: #cccccc;
4011 background-color: transparent;
4011 background-color: transparent;
4012 }
4012 }
4013 }
4013 }
4014 .navbar-default .navbar-link {
4014 .navbar-default .navbar-link {
4015 color: #777777;
4015 color: #777777;
4016 }
4016 }
4017 .navbar-default .navbar-link:hover {
4017 .navbar-default .navbar-link:hover {
4018 color: #333333;
4018 color: #333333;
4019 }
4019 }
4020 .navbar-inverse {
4020 .navbar-inverse {
4021 background-color: #222222;
4021 background-color: #222222;
4022 border-color: #080808;
4022 border-color: #080808;
4023 }
4023 }
4024 .navbar-inverse .navbar-brand {
4024 .navbar-inverse .navbar-brand {
4025 color: #999999;
4025 color: #999999;
4026 }
4026 }
4027 .navbar-inverse .navbar-brand:hover,
4027 .navbar-inverse .navbar-brand:hover,
4028 .navbar-inverse .navbar-brand:focus {
4028 .navbar-inverse .navbar-brand:focus {
4029 color: #ffffff;
4029 color: #ffffff;
4030 background-color: transparent;
4030 background-color: transparent;
4031 }
4031 }
4032 .navbar-inverse .navbar-text {
4032 .navbar-inverse .navbar-text {
4033 color: #999999;
4033 color: #999999;
4034 }
4034 }
4035 .navbar-inverse .navbar-nav > li > a {
4035 .navbar-inverse .navbar-nav > li > a {
4036 color: #999999;
4036 color: #999999;
4037 }
4037 }
4038 .navbar-inverse .navbar-nav > li > a:hover,
4038 .navbar-inverse .navbar-nav > li > a:hover,
4039 .navbar-inverse .navbar-nav > li > a:focus {
4039 .navbar-inverse .navbar-nav > li > a:focus {
4040 color: #ffffff;
4040 color: #ffffff;
4041 background-color: transparent;
4041 background-color: transparent;
4042 }
4042 }
4043 .navbar-inverse .navbar-nav > .active > a,
4043 .navbar-inverse .navbar-nav > .active > a,
4044 .navbar-inverse .navbar-nav > .active > a:hover,
4044 .navbar-inverse .navbar-nav > .active > a:hover,
4045 .navbar-inverse .navbar-nav > .active > a:focus {
4045 .navbar-inverse .navbar-nav > .active > a:focus {
4046 color: #ffffff;
4046 color: #ffffff;
4047 background-color: #080808;
4047 background-color: #080808;
4048 }
4048 }
4049 .navbar-inverse .navbar-nav > .disabled > a,
4049 .navbar-inverse .navbar-nav > .disabled > a,
4050 .navbar-inverse .navbar-nav > .disabled > a:hover,
4050 .navbar-inverse .navbar-nav > .disabled > a:hover,
4051 .navbar-inverse .navbar-nav > .disabled > a:focus {
4051 .navbar-inverse .navbar-nav > .disabled > a:focus {
4052 color: #444444;
4052 color: #444444;
4053 background-color: transparent;
4053 background-color: transparent;
4054 }
4054 }
4055 .navbar-inverse .navbar-toggle {
4055 .navbar-inverse .navbar-toggle {
4056 border-color: #333333;
4056 border-color: #333333;
4057 }
4057 }
4058 .navbar-inverse .navbar-toggle:hover,
4058 .navbar-inverse .navbar-toggle:hover,
4059 .navbar-inverse .navbar-toggle:focus {
4059 .navbar-inverse .navbar-toggle:focus {
4060 background-color: #333333;
4060 background-color: #333333;
4061 }
4061 }
4062 .navbar-inverse .navbar-toggle .icon-bar {
4062 .navbar-inverse .navbar-toggle .icon-bar {
4063 background-color: #ffffff;
4063 background-color: #ffffff;
4064 }
4064 }
4065 .navbar-inverse .navbar-collapse,
4065 .navbar-inverse .navbar-collapse,
4066 .navbar-inverse .navbar-form {
4066 .navbar-inverse .navbar-form {
4067 border-color: #101010;
4067 border-color: #101010;
4068 }
4068 }
4069 .navbar-inverse .navbar-nav > .open > a,
4069 .navbar-inverse .navbar-nav > .open > a,
4070 .navbar-inverse .navbar-nav > .open > a:hover,
4070 .navbar-inverse .navbar-nav > .open > a:hover,
4071 .navbar-inverse .navbar-nav > .open > a:focus {
4071 .navbar-inverse .navbar-nav > .open > a:focus {
4072 background-color: #080808;
4072 background-color: #080808;
4073 color: #ffffff;
4073 color: #ffffff;
4074 }
4074 }
4075 @media (max-width: 539px) {
4075 @media (max-width: 539px) {
4076 .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
4076 .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
4077 border-color: #080808;
4077 border-color: #080808;
4078 }
4078 }
4079 .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
4079 .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
4080 background-color: #080808;
4080 background-color: #080808;
4081 }
4081 }
4082 .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
4082 .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
4083 color: #999999;
4083 color: #999999;
4084 }
4084 }
4085 .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
4085 .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
4086 .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
4086 .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
4087 color: #ffffff;
4087 color: #ffffff;
4088 background-color: transparent;
4088 background-color: transparent;
4089 }
4089 }
4090 .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
4090 .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
4091 .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
4091 .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
4092 .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
4092 .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
4093 color: #ffffff;
4093 color: #ffffff;
4094 background-color: #080808;
4094 background-color: #080808;
4095 }
4095 }
4096 .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
4096 .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
4097 .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
4097 .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
4098 .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
4098 .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
4099 color: #444444;
4099 color: #444444;
4100 background-color: transparent;
4100 background-color: transparent;
4101 }
4101 }
4102 }
4102 }
4103 .navbar-inverse .navbar-link {
4103 .navbar-inverse .navbar-link {
4104 color: #999999;
4104 color: #999999;
4105 }
4105 }
4106 .navbar-inverse .navbar-link:hover {
4106 .navbar-inverse .navbar-link:hover {
4107 color: #ffffff;
4107 color: #ffffff;
4108 }
4108 }
4109 .breadcrumb {
4109 .breadcrumb {
4110 padding: 8px 15px;
4110 padding: 8px 15px;
4111 margin-bottom: 18px;
4111 margin-bottom: 18px;
4112 list-style: none;
4112 list-style: none;
4113 background-color: #f5f5f5;
4113 background-color: #f5f5f5;
4114 border-radius: 4px;
4114 border-radius: 4px;
4115 }
4115 }
4116 .breadcrumb > li {
4116 .breadcrumb > li {
4117 display: inline-block;
4117 display: inline-block;
4118 }
4118 }
4119 .breadcrumb > li + li:before {
4119 .breadcrumb > li + li:before {
4120 content: "/\00a0";
4120 content: "/\00a0";
4121 padding: 0 5px;
4121 padding: 0 5px;
4122 color: #5e5e5e;
4122 color: #5e5e5e;
4123 }
4123 }
4124 .breadcrumb > .active {
4124 .breadcrumb > .active {
4125 color: #999999;
4125 color: #999999;
4126 }
4126 }
4127 .pagination {
4127 .pagination {
4128 display: inline-block;
4128 display: inline-block;
4129 padding-left: 0;
4129 padding-left: 0;
4130 margin: 18px 0;
4130 margin: 18px 0;
4131 border-radius: 4px;
4131 border-radius: 4px;
4132 }
4132 }
4133 .pagination > li {
4133 .pagination > li {
4134 display: inline;
4134 display: inline;
4135 }
4135 }
4136 .pagination > li > a,
4136 .pagination > li > a,
4137 .pagination > li > span {
4137 .pagination > li > span {
4138 position: relative;
4138 position: relative;
4139 float: left;
4139 float: left;
4140 padding: 6px 12px;
4140 padding: 6px 12px;
4141 line-height: 1.42857143;
4141 line-height: 1.42857143;
4142 text-decoration: none;
4142 text-decoration: none;
4143 color: #428bca;
4143 color: #428bca;
4144 background-color: #ffffff;
4144 background-color: #ffffff;
4145 border: 1px solid #dddddd;
4145 border: 1px solid #dddddd;
4146 margin-left: -1px;
4146 margin-left: -1px;
4147 }
4147 }
4148 .pagination > li:first-child > a,
4148 .pagination > li:first-child > a,
4149 .pagination > li:first-child > span {
4149 .pagination > li:first-child > span {
4150 margin-left: 0;
4150 margin-left: 0;
4151 border-bottom-left-radius: 4px;
4151 border-bottom-left-radius: 4px;
4152 border-top-left-radius: 4px;
4152 border-top-left-radius: 4px;
4153 }
4153 }
4154 .pagination > li:last-child > a,
4154 .pagination > li:last-child > a,
4155 .pagination > li:last-child > span {
4155 .pagination > li:last-child > span {
4156 border-bottom-right-radius: 4px;
4156 border-bottom-right-radius: 4px;
4157 border-top-right-radius: 4px;
4157 border-top-right-radius: 4px;
4158 }
4158 }
4159 .pagination > li > a:hover,
4159 .pagination > li > a:hover,
4160 .pagination > li > span:hover,
4160 .pagination > li > span:hover,
4161 .pagination > li > a:focus,
4161 .pagination > li > a:focus,
4162 .pagination > li > span:focus {
4162 .pagination > li > span:focus {
4163 color: #2a6496;
4163 color: #2a6496;
4164 background-color: #eeeeee;
4164 background-color: #eeeeee;
4165 border-color: #dddddd;
4165 border-color: #dddddd;
4166 }
4166 }
4167 .pagination > .active > a,
4167 .pagination > .active > a,
4168 .pagination > .active > span,
4168 .pagination > .active > span,
4169 .pagination > .active > a:hover,
4169 .pagination > .active > a:hover,
4170 .pagination > .active > span:hover,
4170 .pagination > .active > span:hover,
4171 .pagination > .active > a:focus,
4171 .pagination > .active > a:focus,
4172 .pagination > .active > span:focus {
4172 .pagination > .active > span:focus {
4173 z-index: 2;
4173 z-index: 2;
4174 color: #ffffff;
4174 color: #ffffff;
4175 background-color: #428bca;
4175 background-color: #428bca;
4176 border-color: #428bca;
4176 border-color: #428bca;
4177 cursor: default;
4177 cursor: default;
4178 }
4178 }
4179 .pagination > .disabled > span,
4179 .pagination > .disabled > span,
4180 .pagination > .disabled > span:hover,
4180 .pagination > .disabled > span:hover,
4181 .pagination > .disabled > span:focus,
4181 .pagination > .disabled > span:focus,
4182 .pagination > .disabled > a,
4182 .pagination > .disabled > a,
4183 .pagination > .disabled > a:hover,
4183 .pagination > .disabled > a:hover,
4184 .pagination > .disabled > a:focus {
4184 .pagination > .disabled > a:focus {
4185 color: #999999;
4185 color: #999999;
4186 background-color: #ffffff;
4186 background-color: #ffffff;
4187 border-color: #dddddd;
4187 border-color: #dddddd;
4188 cursor: not-allowed;
4188 cursor: not-allowed;
4189 }
4189 }
4190 .pagination-lg > li > a,
4190 .pagination-lg > li > a,
4191 .pagination-lg > li > span {
4191 .pagination-lg > li > span {
4192 padding: 10px 16px;
4192 padding: 10px 16px;
4193 font-size: 17px;
4193 font-size: 17px;
4194 }
4194 }
4195 .pagination-lg > li:first-child > a,
4195 .pagination-lg > li:first-child > a,
4196 .pagination-lg > li:first-child > span {
4196 .pagination-lg > li:first-child > span {
4197 border-bottom-left-radius: 6px;
4197 border-bottom-left-radius: 6px;
4198 border-top-left-radius: 6px;
4198 border-top-left-radius: 6px;
4199 }
4199 }
4200 .pagination-lg > li:last-child > a,
4200 .pagination-lg > li:last-child > a,
4201 .pagination-lg > li:last-child > span {
4201 .pagination-lg > li:last-child > span {
4202 border-bottom-right-radius: 6px;
4202 border-bottom-right-radius: 6px;
4203 border-top-right-radius: 6px;
4203 border-top-right-radius: 6px;
4204 }
4204 }
4205 .pagination-sm > li > a,
4205 .pagination-sm > li > a,
4206 .pagination-sm > li > span {
4206 .pagination-sm > li > span {
4207 padding: 5px 10px;
4207 padding: 5px 10px;
4208 font-size: 12px;
4208 font-size: 12px;
4209 }
4209 }
4210 .pagination-sm > li:first-child > a,
4210 .pagination-sm > li:first-child > a,
4211 .pagination-sm > li:first-child > span {
4211 .pagination-sm > li:first-child > span {
4212 border-bottom-left-radius: 3px;
4212 border-bottom-left-radius: 3px;
4213 border-top-left-radius: 3px;
4213 border-top-left-radius: 3px;
4214 }
4214 }
4215 .pagination-sm > li:last-child > a,
4215 .pagination-sm > li:last-child > a,
4216 .pagination-sm > li:last-child > span {
4216 .pagination-sm > li:last-child > span {
4217 border-bottom-right-radius: 3px;
4217 border-bottom-right-radius: 3px;
4218 border-top-right-radius: 3px;
4218 border-top-right-radius: 3px;
4219 }
4219 }
4220 .pager {
4220 .pager {
4221 padding-left: 0;
4221 padding-left: 0;
4222 margin: 18px 0;
4222 margin: 18px 0;
4223 list-style: none;
4223 list-style: none;
4224 text-align: center;
4224 text-align: center;
4225 }
4225 }
4226 .pager li {
4226 .pager li {
4227 display: inline;
4227 display: inline;
4228 }
4228 }
4229 .pager li > a,
4229 .pager li > a,
4230 .pager li > span {
4230 .pager li > span {
4231 display: inline-block;
4231 display: inline-block;
4232 padding: 5px 14px;
4232 padding: 5px 14px;
4233 background-color: #ffffff;
4233 background-color: #ffffff;
4234 border: 1px solid #dddddd;
4234 border: 1px solid #dddddd;
4235 border-radius: 15px;
4235 border-radius: 15px;
4236 }
4236 }
4237 .pager li > a:hover,
4237 .pager li > a:hover,
4238 .pager li > a:focus {
4238 .pager li > a:focus {
4239 text-decoration: none;
4239 text-decoration: none;
4240 background-color: #eeeeee;
4240 background-color: #eeeeee;
4241 }
4241 }
4242 .pager .next > a,
4242 .pager .next > a,
4243 .pager .next > span {
4243 .pager .next > span {
4244 float: right;
4244 float: right;
4245 }
4245 }
4246 .pager .previous > a,
4246 .pager .previous > a,
4247 .pager .previous > span {
4247 .pager .previous > span {
4248 float: left;
4248 float: left;
4249 }
4249 }
4250 .pager .disabled > a,
4250 .pager .disabled > a,
4251 .pager .disabled > a:hover,
4251 .pager .disabled > a:hover,
4252 .pager .disabled > a:focus,
4252 .pager .disabled > a:focus,
4253 .pager .disabled > span {
4253 .pager .disabled > span {
4254 color: #999999;
4254 color: #999999;
4255 background-color: #ffffff;
4255 background-color: #ffffff;
4256 cursor: not-allowed;
4256 cursor: not-allowed;
4257 }
4257 }
4258 .label {
4258 .label {
4259 display: inline;
4259 display: inline;
4260 padding: .2em .6em .3em;
4260 padding: .2em .6em .3em;
4261 font-size: 75%;
4261 font-size: 75%;
4262 font-weight: bold;
4262 font-weight: bold;
4263 line-height: 1;
4263 line-height: 1;
4264 color: #ffffff;
4264 color: #ffffff;
4265 text-align: center;
4265 text-align: center;
4266 white-space: nowrap;
4266 white-space: nowrap;
4267 vertical-align: baseline;
4267 vertical-align: baseline;
4268 border-radius: .25em;
4268 border-radius: .25em;
4269 }
4269 }
4270 .label[href]:hover,
4270 .label[href]:hover,
4271 .label[href]:focus {
4271 .label[href]:focus {
4272 color: #ffffff;
4272 color: #ffffff;
4273 text-decoration: none;
4273 text-decoration: none;
4274 cursor: pointer;
4274 cursor: pointer;
4275 }
4275 }
4276 .label:empty {
4276 .label:empty {
4277 display: none;
4277 display: none;
4278 }
4278 }
4279 .btn .label {
4279 .btn .label {
4280 position: relative;
4280 position: relative;
4281 top: -1px;
4281 top: -1px;
4282 }
4282 }
4283 .label-default {
4283 .label-default {
4284 background-color: #999999;
4284 background-color: #999999;
4285 }
4285 }
4286 .label-default[href]:hover,
4286 .label-default[href]:hover,
4287 .label-default[href]:focus {
4287 .label-default[href]:focus {
4288 background-color: #808080;
4288 background-color: #808080;
4289 }
4289 }
4290 .label-primary {
4290 .label-primary {
4291 background-color: #428bca;
4291 background-color: #428bca;
4292 }
4292 }
4293 .label-primary[href]:hover,
4293 .label-primary[href]:hover,
4294 .label-primary[href]:focus {
4294 .label-primary[href]:focus {
4295 background-color: #3071a9;
4295 background-color: #3071a9;
4296 }
4296 }
4297 .label-success {
4297 .label-success {
4298 background-color: #5cb85c;
4298 background-color: #5cb85c;
4299 }
4299 }
4300 .label-success[href]:hover,
4300 .label-success[href]:hover,
4301 .label-success[href]:focus {
4301 .label-success[href]:focus {
4302 background-color: #449d44;
4302 background-color: #449d44;
4303 }
4303 }
4304 .label-info {
4304 .label-info {
4305 background-color: #5bc0de;
4305 background-color: #5bc0de;
4306 }
4306 }
4307 .label-info[href]:hover,
4307 .label-info[href]:hover,
4308 .label-info[href]:focus {
4308 .label-info[href]:focus {
4309 background-color: #31b0d5;
4309 background-color: #31b0d5;
4310 }
4310 }
4311 .label-warning {
4311 .label-warning {
4312 background-color: #f0ad4e;
4312 background-color: #f0ad4e;
4313 }
4313 }
4314 .label-warning[href]:hover,
4314 .label-warning[href]:hover,
4315 .label-warning[href]:focus {
4315 .label-warning[href]:focus {
4316 background-color: #ec971f;
4316 background-color: #ec971f;
4317 }
4317 }
4318 .label-danger {
4318 .label-danger {
4319 background-color: #d9534f;
4319 background-color: #d9534f;
4320 }
4320 }
4321 .label-danger[href]:hover,
4321 .label-danger[href]:hover,
4322 .label-danger[href]:focus {
4322 .label-danger[href]:focus {
4323 background-color: #c9302c;
4323 background-color: #c9302c;
4324 }
4324 }
4325 .badge {
4325 .badge {
4326 display: inline-block;
4326 display: inline-block;
4327 min-width: 10px;
4327 min-width: 10px;
4328 padding: 3px 7px;
4328 padding: 3px 7px;
4329 font-size: 12px;
4329 font-size: 12px;
4330 font-weight: bold;
4330 font-weight: bold;
4331 color: #ffffff;
4331 color: #ffffff;
4332 line-height: 1;
4332 line-height: 1;
4333 vertical-align: baseline;
4333 vertical-align: baseline;
4334 white-space: nowrap;
4334 white-space: nowrap;
4335 text-align: center;
4335 text-align: center;
4336 background-color: #999999;
4336 background-color: #999999;
4337 border-radius: 10px;
4337 border-radius: 10px;
4338 }
4338 }
4339 .badge:empty {
4339 .badge:empty {
4340 display: none;
4340 display: none;
4341 }
4341 }
4342 .btn .badge {
4342 .btn .badge {
4343 position: relative;
4343 position: relative;
4344 top: -1px;
4344 top: -1px;
4345 }
4345 }
4346 .btn-xs .badge {
4346 .btn-xs .badge {
4347 top: 0;
4347 top: 0;
4348 padding: 1px 5px;
4348 padding: 1px 5px;
4349 }
4349 }
4350 a.badge:hover,
4350 a.badge:hover,
4351 a.badge:focus {
4351 a.badge:focus {
4352 color: #ffffff;
4352 color: #ffffff;
4353 text-decoration: none;
4353 text-decoration: none;
4354 cursor: pointer;
4354 cursor: pointer;
4355 }
4355 }
4356 a.list-group-item.active > .badge,
4356 a.list-group-item.active > .badge,
4357 .nav-pills > .active > a > .badge {
4357 .nav-pills > .active > a > .badge {
4358 color: #428bca;
4358 color: #428bca;
4359 background-color: #ffffff;
4359 background-color: #ffffff;
4360 }
4360 }
4361 .nav-pills > li > a > .badge {
4361 .nav-pills > li > a > .badge {
4362 margin-left: 3px;
4362 margin-left: 3px;
4363 }
4363 }
4364 .jumbotron {
4364 .jumbotron {
4365 padding: 30px;
4365 padding: 30px;
4366 margin-bottom: 30px;
4366 margin-bottom: 30px;
4367 color: inherit;
4367 color: inherit;
4368 background-color: #eeeeee;
4368 background-color: #eeeeee;
4369 }
4369 }
4370 .jumbotron h1,
4370 .jumbotron h1,
4371 .jumbotron .h1 {
4371 .jumbotron .h1 {
4372 color: inherit;
4372 color: inherit;
4373 }
4373 }
4374 .jumbotron p {
4374 .jumbotron p {
4375 margin-bottom: 15px;
4375 margin-bottom: 15px;
4376 font-size: 20px;
4376 font-size: 20px;
4377 font-weight: 200;
4377 font-weight: 200;
4378 }
4378 }
4379 .container .jumbotron {
4379 .container .jumbotron {
4380 border-radius: 6px;
4380 border-radius: 6px;
4381 }
4381 }
4382 .jumbotron .container {
4382 .jumbotron .container {
4383 max-width: 100%;
4383 max-width: 100%;
4384 }
4384 }
4385 @media screen and (min-width: 768px) {
4385 @media screen and (min-width: 768px) {
4386 .jumbotron {
4386 .jumbotron {
4387 padding-top: 48px;
4387 padding-top: 48px;
4388 padding-bottom: 48px;
4388 padding-bottom: 48px;
4389 }
4389 }
4390 .container .jumbotron {
4390 .container .jumbotron {
4391 padding-left: 60px;
4391 padding-left: 60px;
4392 padding-right: 60px;
4392 padding-right: 60px;
4393 }
4393 }
4394 .jumbotron h1,
4394 .jumbotron h1,
4395 .jumbotron .h1 {
4395 .jumbotron .h1 {
4396 font-size: 58.5px;
4396 font-size: 58.5px;
4397 }
4397 }
4398 }
4398 }
4399 .thumbnail {
4399 .thumbnail {
4400 display: block;
4400 display: block;
4401 padding: 4px;
4401 padding: 4px;
4402 margin-bottom: 18px;
4402 margin-bottom: 18px;
4403 line-height: 1.42857143;
4403 line-height: 1.42857143;
4404 background-color: #ffffff;
4404 background-color: #ffffff;
4405 border: 1px solid #dddddd;
4405 border: 1px solid #dddddd;
4406 border-radius: 4px;
4406 border-radius: 4px;
4407 -webkit-transition: all 0.2s ease-in-out;
4407 -webkit-transition: all 0.2s ease-in-out;
4408 transition: all 0.2s ease-in-out;
4408 transition: all 0.2s ease-in-out;
4409 }
4409 }
4410 .thumbnail > img,
4410 .thumbnail > img,
4411 .thumbnail a > img {
4411 .thumbnail a > img {
4412 margin-left: auto;
4412 margin-left: auto;
4413 margin-right: auto;
4413 margin-right: auto;
4414 }
4414 }
4415 a.thumbnail:hover,
4415 a.thumbnail:hover,
4416 a.thumbnail:focus,
4416 a.thumbnail:focus,
4417 a.thumbnail.active {
4417 a.thumbnail.active {
4418 border-color: #428bca;
4418 border-color: #428bca;
4419 }
4419 }
4420 .thumbnail .caption {
4420 .thumbnail .caption {
4421 padding: 9px;
4421 padding: 9px;
4422 color: #000000;
4422 color: #000000;
4423 }
4423 }
4424 .alert {
4424 .alert {
4425 padding: 15px;
4425 padding: 15px;
4426 margin-bottom: 18px;
4426 margin-bottom: 18px;
4427 border: 1px solid transparent;
4427 border: 1px solid transparent;
4428 border-radius: 4px;
4428 border-radius: 4px;
4429 }
4429 }
4430 .alert h4 {
4430 .alert h4 {
4431 margin-top: 0;
4431 margin-top: 0;
4432 color: inherit;
4432 color: inherit;
4433 }
4433 }
4434 .alert .alert-link {
4434 .alert .alert-link {
4435 font-weight: bold;
4435 font-weight: bold;
4436 }
4436 }
4437 .alert > p,
4437 .alert > p,
4438 .alert > ul {
4438 .alert > ul {
4439 margin-bottom: 0;
4439 margin-bottom: 0;
4440 }
4440 }
4441 .alert > p + p {
4441 .alert > p + p {
4442 margin-top: 5px;
4442 margin-top: 5px;
4443 }
4443 }
4444 .alert-dismissable {
4444 .alert-dismissable {
4445 padding-right: 35px;
4445 padding-right: 35px;
4446 }
4446 }
4447 .alert-dismissable .close {
4447 .alert-dismissable .close {
4448 position: relative;
4448 position: relative;
4449 top: -2px;
4449 top: -2px;
4450 right: -21px;
4450 right: -21px;
4451 color: inherit;
4451 color: inherit;
4452 }
4452 }
4453 .alert-success {
4453 .alert-success {
4454 background-color: #dff0d8;
4454 background-color: #dff0d8;
4455 border-color: #d6e9c6;
4455 border-color: #d6e9c6;
4456 color: #3c763d;
4456 color: #3c763d;
4457 }
4457 }
4458 .alert-success hr {
4458 .alert-success hr {
4459 border-top-color: #c9e2b3;
4459 border-top-color: #c9e2b3;
4460 }
4460 }
4461 .alert-success .alert-link {
4461 .alert-success .alert-link {
4462 color: #2b542c;
4462 color: #2b542c;
4463 }
4463 }
4464 .alert-info {
4464 .alert-info {
4465 background-color: #d9edf7;
4465 background-color: #d9edf7;
4466 border-color: #bce8f1;
4466 border-color: #bce8f1;
4467 color: #31708f;
4467 color: #31708f;
4468 }
4468 }
4469 .alert-info hr {
4469 .alert-info hr {
4470 border-top-color: #a6e1ec;
4470 border-top-color: #a6e1ec;
4471 }
4471 }
4472 .alert-info .alert-link {
4472 .alert-info .alert-link {
4473 color: #245269;
4473 color: #245269;
4474 }
4474 }
4475 .alert-warning {
4475 .alert-warning {
4476 background-color: #fcf8e3;
4476 background-color: #fcf8e3;
4477 border-color: #faebcc;
4477 border-color: #faebcc;
4478 color: #8a6d3b;
4478 color: #8a6d3b;
4479 }
4479 }
4480 .alert-warning hr {
4480 .alert-warning hr {
4481 border-top-color: #f7e1b5;
4481 border-top-color: #f7e1b5;
4482 }
4482 }
4483 .alert-warning .alert-link {
4483 .alert-warning .alert-link {
4484 color: #66512c;
4484 color: #66512c;
4485 }
4485 }
4486 .alert-danger {
4486 .alert-danger {
4487 background-color: #f2dede;
4487 background-color: #f2dede;
4488 border-color: #ebccd1;
4488 border-color: #ebccd1;
4489 color: #a94442;
4489 color: #a94442;
4490 }
4490 }
4491 .alert-danger hr {
4491 .alert-danger hr {
4492 border-top-color: #e4b9c0;
4492 border-top-color: #e4b9c0;
4493 }
4493 }
4494 .alert-danger .alert-link {
4494 .alert-danger .alert-link {
4495 color: #843534;
4495 color: #843534;
4496 }
4496 }
4497 @-webkit-keyframes progress-bar-stripes {
4497 @-webkit-keyframes progress-bar-stripes {
4498 from {
4498 from {
4499 background-position: 40px 0;
4499 background-position: 40px 0;
4500 }
4500 }
4501 to {
4501 to {
4502 background-position: 0 0;
4502 background-position: 0 0;
4503 }
4503 }
4504 }
4504 }
4505 @keyframes progress-bar-stripes {
4505 @keyframes progress-bar-stripes {
4506 from {
4506 from {
4507 background-position: 40px 0;
4507 background-position: 40px 0;
4508 }
4508 }
4509 to {
4509 to {
4510 background-position: 0 0;
4510 background-position: 0 0;
4511 }
4511 }
4512 }
4512 }
4513 .progress {
4513 .progress {
4514 overflow: hidden;
4514 overflow: hidden;
4515 height: 18px;
4515 height: 18px;
4516 margin-bottom: 18px;
4516 margin-bottom: 18px;
4517 background-color: #f5f5f5;
4517 background-color: #f5f5f5;
4518 border-radius: 4px;
4518 border-radius: 4px;
4519 -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
4519 -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
4520 box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
4520 box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
4521 }
4521 }
4522 .progress-bar {
4522 .progress-bar {
4523 float: left;
4523 float: left;
4524 width: 0%;
4524 width: 0%;
4525 height: 100%;
4525 height: 100%;
4526 font-size: 12px;
4526 font-size: 12px;
4527 line-height: 18px;
4527 line-height: 18px;
4528 color: #ffffff;
4528 color: #ffffff;
4529 text-align: center;
4529 text-align: center;
4530 background-color: #428bca;
4530 background-color: #428bca;
4531 -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
4531 -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
4532 box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
4532 box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
4533 -webkit-transition: width 0.6s ease;
4533 -webkit-transition: width 0.6s ease;
4534 transition: width 0.6s ease;
4534 transition: width 0.6s ease;
4535 }
4535 }
4536 .progress-striped .progress-bar {
4536 .progress-striped .progress-bar {
4537 background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
4537 background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
4538 background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
4538 background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
4539 background-size: 40px 40px;
4539 background-size: 40px 40px;
4540 }
4540 }
4541 .progress.active .progress-bar {
4541 .progress.active .progress-bar {
4542 -webkit-animation: progress-bar-stripes 2s linear infinite;
4542 -webkit-animation: progress-bar-stripes 2s linear infinite;
4543 animation: progress-bar-stripes 2s linear infinite;
4543 animation: progress-bar-stripes 2s linear infinite;
4544 }
4544 }
4545 .progress-bar-success {
4545 .progress-bar-success {
4546 background-color: #5cb85c;
4546 background-color: #5cb85c;
4547 }
4547 }
4548 .progress-striped .progress-bar-success {
4548 .progress-striped .progress-bar-success {
4549 background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
4549 background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
4550 background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
4550 background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
4551 }
4551 }
4552 .progress-bar-info {
4552 .progress-bar-info {
4553 background-color: #5bc0de;
4553 background-color: #5bc0de;
4554 }
4554 }
4555 .progress-striped .progress-bar-info {
4555 .progress-striped .progress-bar-info {
4556 background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
4556 background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
4557 background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
4557 background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
4558 }
4558 }
4559 .progress-bar-warning {
4559 .progress-bar-warning {
4560 background-color: #f0ad4e;
4560 background-color: #f0ad4e;
4561 }
4561 }
4562 .progress-striped .progress-bar-warning {
4562 .progress-striped .progress-bar-warning {
4563 background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
4563 background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
4564 background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
4564 background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
4565 }
4565 }
4566 .progress-bar-danger {
4566 .progress-bar-danger {
4567 background-color: #d9534f;
4567 background-color: #d9534f;
4568 }
4568 }
4569 .progress-striped .progress-bar-danger {
4569 .progress-striped .progress-bar-danger {
4570 background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
4570 background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
4571 background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
4571 background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
4572 }
4572 }
4573 .media,
4573 .media,
4574 .media-body {
4574 .media-body {
4575 overflow: hidden;
4575 overflow: hidden;
4576 zoom: 1;
4576 zoom: 1;
4577 }
4577 }
4578 .media,
4578 .media,
4579 .media .media {
4579 .media .media {
4580 margin-top: 15px;
4580 margin-top: 15px;
4581 }
4581 }
4582 .media:first-child {
4582 .media:first-child {
4583 margin-top: 0;
4583 margin-top: 0;
4584 }
4584 }
4585 .media-object {
4585 .media-object {
4586 display: block;
4586 display: block;
4587 }
4587 }
4588 .media-heading {
4588 .media-heading {
4589 margin: 0 0 5px;
4589 margin: 0 0 5px;
4590 }
4590 }
4591 .media > .pull-left {
4591 .media > .pull-left {
4592 margin-right: 10px;
4592 margin-right: 10px;
4593 }
4593 }
4594 .media > .pull-right {
4594 .media > .pull-right {
4595 margin-left: 10px;
4595 margin-left: 10px;
4596 }
4596 }
4597 .media-list {
4597 .media-list {
4598 padding-left: 0;
4598 padding-left: 0;
4599 list-style: none;
4599 list-style: none;
4600 }
4600 }
4601 .list-group {
4601 .list-group {
4602 margin-bottom: 20px;
4602 margin-bottom: 20px;
4603 padding-left: 0;
4603 padding-left: 0;
4604 }
4604 }
4605 .list-group-item {
4605 .list-group-item {
4606 position: relative;
4606 position: relative;
4607 display: block;
4607 display: block;
4608 padding: 10px 15px;
4608 padding: 10px 15px;
4609 margin-bottom: -1px;
4609 margin-bottom: -1px;
4610 background-color: #ffffff;
4610 background-color: #ffffff;
4611 border: 1px solid #dddddd;
4611 border: 1px solid #dddddd;
4612 }
4612 }
4613 .list-group-item:first-child {
4613 .list-group-item:first-child {
4614 border-top-right-radius: 4px;
4614 border-top-right-radius: 4px;
4615 border-top-left-radius: 4px;
4615 border-top-left-radius: 4px;
4616 }
4616 }
4617 .list-group-item:last-child {
4617 .list-group-item:last-child {
4618 margin-bottom: 0;
4618 margin-bottom: 0;
4619 border-bottom-right-radius: 4px;
4619 border-bottom-right-radius: 4px;
4620 border-bottom-left-radius: 4px;
4620 border-bottom-left-radius: 4px;
4621 }
4621 }
4622 .list-group-item > .badge {
4622 .list-group-item > .badge {
4623 float: right;
4623 float: right;
4624 }
4624 }
4625 .list-group-item > .badge + .badge {
4625 .list-group-item > .badge + .badge {
4626 margin-right: 5px;
4626 margin-right: 5px;
4627 }
4627 }
4628 a.list-group-item {
4628 a.list-group-item {
4629 color: #555555;
4629 color: #555555;
4630 }
4630 }
4631 a.list-group-item .list-group-item-heading {
4631 a.list-group-item .list-group-item-heading {
4632 color: #333333;
4632 color: #333333;
4633 }
4633 }
4634 a.list-group-item:hover,
4634 a.list-group-item:hover,
4635 a.list-group-item:focus {
4635 a.list-group-item:focus {
4636 text-decoration: none;
4636 text-decoration: none;
4637 background-color: #f5f5f5;
4637 background-color: #f5f5f5;
4638 }
4638 }
4639 a.list-group-item.active,
4639 a.list-group-item.active,
4640 a.list-group-item.active:hover,
4640 a.list-group-item.active:hover,
4641 a.list-group-item.active:focus {
4641 a.list-group-item.active:focus {
4642 z-index: 2;
4642 z-index: 2;
4643 color: #ffffff;
4643 color: #ffffff;
4644 background-color: #428bca;
4644 background-color: #428bca;
4645 border-color: #428bca;
4645 border-color: #428bca;
4646 }
4646 }
4647 a.list-group-item.active .list-group-item-heading,
4647 a.list-group-item.active .list-group-item-heading,
4648 a.list-group-item.active:hover .list-group-item-heading,
4648 a.list-group-item.active:hover .list-group-item-heading,
4649 a.list-group-item.active:focus .list-group-item-heading {
4649 a.list-group-item.active:focus .list-group-item-heading {
4650 color: inherit;
4650 color: inherit;
4651 }
4651 }
4652 a.list-group-item.active .list-group-item-text,
4652 a.list-group-item.active .list-group-item-text,
4653 a.list-group-item.active:hover .list-group-item-text,
4653 a.list-group-item.active:hover .list-group-item-text,
4654 a.list-group-item.active:focus .list-group-item-text {
4654 a.list-group-item.active:focus .list-group-item-text {
4655 color: #e1edf7;
4655 color: #e1edf7;
4656 }
4656 }
4657 .list-group-item-success {
4657 .list-group-item-success {
4658 color: #3c763d;
4658 color: #3c763d;
4659 background-color: #dff0d8;
4659 background-color: #dff0d8;
4660 }
4660 }
4661 a.list-group-item-success {
4661 a.list-group-item-success {
4662 color: #3c763d;
4662 color: #3c763d;
4663 }
4663 }
4664 a.list-group-item-success .list-group-item-heading {
4664 a.list-group-item-success .list-group-item-heading {
4665 color: inherit;
4665 color: inherit;
4666 }
4666 }
4667 a.list-group-item-success:hover,
4667 a.list-group-item-success:hover,
4668 a.list-group-item-success:focus {
4668 a.list-group-item-success:focus {
4669 color: #3c763d;
4669 color: #3c763d;
4670 background-color: #d0e9c6;
4670 background-color: #d0e9c6;
4671 }
4671 }
4672 a.list-group-item-success.active,
4672 a.list-group-item-success.active,
4673 a.list-group-item-success.active:hover,
4673 a.list-group-item-success.active:hover,
4674 a.list-group-item-success.active:focus {
4674 a.list-group-item-success.active:focus {
4675 color: #fff;
4675 color: #fff;
4676 background-color: #3c763d;
4676 background-color: #3c763d;
4677 border-color: #3c763d;
4677 border-color: #3c763d;
4678 }
4678 }
4679 .list-group-item-info {
4679 .list-group-item-info {
4680 color: #31708f;
4680 color: #31708f;
4681 background-color: #d9edf7;
4681 background-color: #d9edf7;
4682 }
4682 }
4683 a.list-group-item-info {
4683 a.list-group-item-info {
4684 color: #31708f;
4684 color: #31708f;
4685 }
4685 }
4686 a.list-group-item-info .list-group-item-heading {
4686 a.list-group-item-info .list-group-item-heading {
4687 color: inherit;
4687 color: inherit;
4688 }
4688 }
4689 a.list-group-item-info:hover,
4689 a.list-group-item-info:hover,
4690 a.list-group-item-info:focus {
4690 a.list-group-item-info:focus {
4691 color: #31708f;
4691 color: #31708f;
4692 background-color: #c4e3f3;
4692 background-color: #c4e3f3;
4693 }
4693 }
4694 a.list-group-item-info.active,
4694 a.list-group-item-info.active,
4695 a.list-group-item-info.active:hover,
4695 a.list-group-item-info.active:hover,
4696 a.list-group-item-info.active:focus {
4696 a.list-group-item-info.active:focus {
4697 color: #fff;
4697 color: #fff;
4698 background-color: #31708f;
4698 background-color: #31708f;
4699 border-color: #31708f;
4699 border-color: #31708f;
4700 }
4700 }
4701 .list-group-item-warning {
4701 .list-group-item-warning {
4702 color: #8a6d3b;
4702 color: #8a6d3b;
4703 background-color: #fcf8e3;
4703 background-color: #fcf8e3;
4704 }
4704 }
4705 a.list-group-item-warning {
4705 a.list-group-item-warning {
4706 color: #8a6d3b;
4706 color: #8a6d3b;
4707 }
4707 }
4708 a.list-group-item-warning .list-group-item-heading {
4708 a.list-group-item-warning .list-group-item-heading {
4709 color: inherit;
4709 color: inherit;
4710 }
4710 }
4711 a.list-group-item-warning:hover,
4711 a.list-group-item-warning:hover,
4712 a.list-group-item-warning:focus {
4712 a.list-group-item-warning:focus {
4713 color: #8a6d3b;
4713 color: #8a6d3b;
4714 background-color: #faf2cc;
4714 background-color: #faf2cc;
4715 }
4715 }
4716 a.list-group-item-warning.active,
4716 a.list-group-item-warning.active,
4717 a.list-group-item-warning.active:hover,
4717 a.list-group-item-warning.active:hover,
4718 a.list-group-item-warning.active:focus {
4718 a.list-group-item-warning.active:focus {
4719 color: #fff;
4719 color: #fff;
4720 background-color: #8a6d3b;
4720 background-color: #8a6d3b;
4721 border-color: #8a6d3b;
4721 border-color: #8a6d3b;
4722 }
4722 }
4723 .list-group-item-danger {
4723 .list-group-item-danger {
4724 color: #a94442;
4724 color: #a94442;
4725 background-color: #f2dede;
4725 background-color: #f2dede;
4726 }
4726 }
4727 a.list-group-item-danger {
4727 a.list-group-item-danger {
4728 color: #a94442;
4728 color: #a94442;
4729 }
4729 }
4730 a.list-group-item-danger .list-group-item-heading {
4730 a.list-group-item-danger .list-group-item-heading {
4731 color: inherit;
4731 color: inherit;
4732 }
4732 }
4733 a.list-group-item-danger:hover,
4733 a.list-group-item-danger:hover,
4734 a.list-group-item-danger:focus {
4734 a.list-group-item-danger:focus {
4735 color: #a94442;
4735 color: #a94442;
4736 background-color: #ebcccc;
4736 background-color: #ebcccc;
4737 }
4737 }
4738 a.list-group-item-danger.active,
4738 a.list-group-item-danger.active,
4739 a.list-group-item-danger.active:hover,
4739 a.list-group-item-danger.active:hover,
4740 a.list-group-item-danger.active:focus {
4740 a.list-group-item-danger.active:focus {
4741 color: #fff;
4741 color: #fff;
4742 background-color: #a94442;
4742 background-color: #a94442;
4743 border-color: #a94442;
4743 border-color: #a94442;
4744 }
4744 }
4745 .list-group-item-heading {
4745 .list-group-item-heading {
4746 margin-top: 0;
4746 margin-top: 0;
4747 margin-bottom: 5px;
4747 margin-bottom: 5px;
4748 }
4748 }
4749 .list-group-item-text {
4749 .list-group-item-text {
4750 margin-bottom: 0;
4750 margin-bottom: 0;
4751 line-height: 1.3;
4751 line-height: 1.3;
4752 }
4752 }
4753 .panel {
4753 .panel {
4754 margin-bottom: 18px;
4754 margin-bottom: 18px;
4755 background-color: #ffffff;
4755 background-color: #ffffff;
4756 border: 1px solid transparent;
4756 border: 1px solid transparent;
4757 border-radius: 4px;
4757 border-radius: 4px;
4758 -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
4758 -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
4759 box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
4759 box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
4760 }
4760 }
4761 .panel-body {
4761 .panel-body {
4762 padding: 15px;
4762 padding: 15px;
4763 }
4763 }
4764 .panel-heading {
4764 .panel-heading {
4765 padding: 10px 15px;
4765 padding: 10px 15px;
4766 border-bottom: 1px solid transparent;
4766 border-bottom: 1px solid transparent;
4767 border-top-right-radius: 3px;
4767 border-top-right-radius: 3px;
4768 border-top-left-radius: 3px;
4768 border-top-left-radius: 3px;
4769 }
4769 }
4770 .panel-heading > .dropdown .dropdown-toggle {
4770 .panel-heading > .dropdown .dropdown-toggle {
4771 color: inherit;
4771 color: inherit;
4772 }
4772 }
4773 .panel-title {
4773 .panel-title {
4774 margin-top: 0;
4774 margin-top: 0;
4775 margin-bottom: 0;
4775 margin-bottom: 0;
4776 font-size: 15px;
4776 font-size: 15px;
4777 color: inherit;
4777 color: inherit;
4778 }
4778 }
4779 .panel-title > a {
4779 .panel-title > a {
4780 color: inherit;
4780 color: inherit;
4781 }
4781 }
4782 .panel-footer {
4782 .panel-footer {
4783 padding: 10px 15px;
4783 padding: 10px 15px;
4784 background-color: #f5f5f5;
4784 background-color: #f5f5f5;
4785 border-top: 1px solid #dddddd;
4785 border-top: 1px solid #dddddd;
4786 border-bottom-right-radius: 3px;
4786 border-bottom-right-radius: 3px;
4787 border-bottom-left-radius: 3px;
4787 border-bottom-left-radius: 3px;
4788 }
4788 }
4789 .panel > .list-group {
4789 .panel > .list-group {
4790 margin-bottom: 0;
4790 margin-bottom: 0;
4791 }
4791 }
4792 .panel > .list-group .list-group-item {
4792 .panel > .list-group .list-group-item {
4793 border-width: 1px 0;
4793 border-width: 1px 0;
4794 border-radius: 0;
4794 border-radius: 0;
4795 }
4795 }
4796 .panel > .list-group:first-child .list-group-item:first-child {
4796 .panel > .list-group:first-child .list-group-item:first-child {
4797 border-top: 0;
4797 border-top: 0;
4798 border-top-right-radius: 3px;
4798 border-top-right-radius: 3px;
4799 border-top-left-radius: 3px;
4799 border-top-left-radius: 3px;
4800 }
4800 }
4801 .panel > .list-group:last-child .list-group-item:last-child {
4801 .panel > .list-group:last-child .list-group-item:last-child {
4802 border-bottom: 0;
4802 border-bottom: 0;
4803 border-bottom-right-radius: 3px;
4803 border-bottom-right-radius: 3px;
4804 border-bottom-left-radius: 3px;
4804 border-bottom-left-radius: 3px;
4805 }
4805 }
4806 .panel-heading + .list-group .list-group-item:first-child {
4806 .panel-heading + .list-group .list-group-item:first-child {
4807 border-top-width: 0;
4807 border-top-width: 0;
4808 }
4808 }
4809 .panel > .table,
4809 .panel > .table,
4810 .panel > .table-responsive > .table {
4810 .panel > .table-responsive > .table {
4811 margin-bottom: 0;
4811 margin-bottom: 0;
4812 }
4812 }
4813 .panel > .table:first-child,
4813 .panel > .table:first-child,
4814 .panel > .table-responsive:first-child > .table:first-child {
4814 .panel > .table-responsive:first-child > .table:first-child {
4815 border-top-right-radius: 3px;
4815 border-top-right-radius: 3px;
4816 border-top-left-radius: 3px;
4816 border-top-left-radius: 3px;
4817 }
4817 }
4818 .panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
4818 .panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
4819 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
4819 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
4820 .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
4820 .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
4821 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
4821 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
4822 .panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
4822 .panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
4823 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
4823 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
4824 .panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
4824 .panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
4825 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
4825 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
4826 border-top-left-radius: 3px;
4826 border-top-left-radius: 3px;
4827 }
4827 }
4828 .panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
4828 .panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
4829 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
4829 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
4830 .panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
4830 .panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
4831 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
4831 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
4832 .panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
4832 .panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
4833 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
4833 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
4834 .panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
4834 .panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
4835 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
4835 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
4836 border-top-right-radius: 3px;
4836 border-top-right-radius: 3px;
4837 }
4837 }
4838 .panel > .table:last-child,
4838 .panel > .table:last-child,
4839 .panel > .table-responsive:last-child > .table:last-child {
4839 .panel > .table-responsive:last-child > .table:last-child {
4840 border-bottom-right-radius: 3px;
4840 border-bottom-right-radius: 3px;
4841 border-bottom-left-radius: 3px;
4841 border-bottom-left-radius: 3px;
4842 }
4842 }
4843 .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
4843 .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
4844 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
4844 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
4845 .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
4845 .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
4846 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
4846 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
4847 .panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
4847 .panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
4848 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
4848 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
4849 .panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
4849 .panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
4850 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
4850 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
4851 border-bottom-left-radius: 3px;
4851 border-bottom-left-radius: 3px;
4852 }
4852 }
4853 .panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
4853 .panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
4854 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
4854 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
4855 .panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
4855 .panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
4856 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
4856 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
4857 .panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
4857 .panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
4858 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
4858 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
4859 .panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
4859 .panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
4860 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
4860 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
4861 border-bottom-right-radius: 3px;
4861 border-bottom-right-radius: 3px;
4862 }
4862 }
4863 .panel > .panel-body + .table,
4863 .panel > .panel-body + .table,
4864 .panel > .panel-body + .table-responsive {
4864 .panel > .panel-body + .table-responsive {
4865 border-top: 1px solid #dddddd;
4865 border-top: 1px solid #dddddd;
4866 }
4866 }
4867 .panel > .table > tbody:first-child > tr:first-child th,
4867 .panel > .table > tbody:first-child > tr:first-child th,
4868 .panel > .table > tbody:first-child > tr:first-child td {
4868 .panel > .table > tbody:first-child > tr:first-child td {
4869 border-top: 0;
4869 border-top: 0;
4870 }
4870 }
4871 .panel > .table-bordered,
4871 .panel > .table-bordered,
4872 .panel > .table-responsive > .table-bordered {
4872 .panel > .table-responsive > .table-bordered {
4873 border: 0;
4873 border: 0;
4874 }
4874 }
4875 .panel > .table-bordered > thead > tr > th:first-child,
4875 .panel > .table-bordered > thead > tr > th:first-child,
4876 .panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
4876 .panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
4877 .panel > .table-bordered > tbody > tr > th:first-child,
4877 .panel > .table-bordered > tbody > tr > th:first-child,
4878 .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
4878 .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
4879 .panel > .table-bordered > tfoot > tr > th:first-child,
4879 .panel > .table-bordered > tfoot > tr > th:first-child,
4880 .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
4880 .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
4881 .panel > .table-bordered > thead > tr > td:first-child,
4881 .panel > .table-bordered > thead > tr > td:first-child,
4882 .panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
4882 .panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
4883 .panel > .table-bordered > tbody > tr > td:first-child,
4883 .panel > .table-bordered > tbody > tr > td:first-child,
4884 .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
4884 .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
4885 .panel > .table-bordered > tfoot > tr > td:first-child,
4885 .panel > .table-bordered > tfoot > tr > td:first-child,
4886 .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
4886 .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
4887 border-left: 0;
4887 border-left: 0;
4888 }
4888 }
4889 .panel > .table-bordered > thead > tr > th:last-child,
4889 .panel > .table-bordered > thead > tr > th:last-child,
4890 .panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
4890 .panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
4891 .panel > .table-bordered > tbody > tr > th:last-child,
4891 .panel > .table-bordered > tbody > tr > th:last-child,
4892 .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
4892 .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
4893 .panel > .table-bordered > tfoot > tr > th:last-child,
4893 .panel > .table-bordered > tfoot > tr > th:last-child,
4894 .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
4894 .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
4895 .panel > .table-bordered > thead > tr > td:last-child,
4895 .panel > .table-bordered > thead > tr > td:last-child,
4896 .panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
4896 .panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
4897 .panel > .table-bordered > tbody > tr > td:last-child,
4897 .panel > .table-bordered > tbody > tr > td:last-child,
4898 .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
4898 .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
4899 .panel > .table-bordered > tfoot > tr > td:last-child,
4899 .panel > .table-bordered > tfoot > tr > td:last-child,
4900 .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
4900 .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
4901 border-right: 0;
4901 border-right: 0;
4902 }
4902 }
4903 .panel > .table-bordered > thead > tr:first-child > td,
4903 .panel > .table-bordered > thead > tr:first-child > td,
4904 .panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
4904 .panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
4905 .panel > .table-bordered > tbody > tr:first-child > td,
4905 .panel > .table-bordered > tbody > tr:first-child > td,
4906 .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
4906 .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
4907 .panel > .table-bordered > thead > tr:first-child > th,
4907 .panel > .table-bordered > thead > tr:first-child > th,
4908 .panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
4908 .panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
4909 .panel > .table-bordered > tbody > tr:first-child > th,
4909 .panel > .table-bordered > tbody > tr:first-child > th,
4910 .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
4910 .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
4911 border-bottom: 0;
4911 border-bottom: 0;
4912 }
4912 }
4913 .panel > .table-bordered > tbody > tr:last-child > td,
4913 .panel > .table-bordered > tbody > tr:last-child > td,
4914 .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
4914 .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
4915 .panel > .table-bordered > tfoot > tr:last-child > td,
4915 .panel > .table-bordered > tfoot > tr:last-child > td,
4916 .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
4916 .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
4917 .panel > .table-bordered > tbody > tr:last-child > th,
4917 .panel > .table-bordered > tbody > tr:last-child > th,
4918 .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
4918 .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
4919 .panel > .table-bordered > tfoot > tr:last-child > th,
4919 .panel > .table-bordered > tfoot > tr:last-child > th,
4920 .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
4920 .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
4921 border-bottom: 0;
4921 border-bottom: 0;
4922 }
4922 }
4923 .panel > .table-responsive {
4923 .panel > .table-responsive {
4924 border: 0;
4924 border: 0;
4925 margin-bottom: 0;
4925 margin-bottom: 0;
4926 }
4926 }
4927 .panel-group {
4927 .panel-group {
4928 margin-bottom: 18px;
4928 margin-bottom: 18px;
4929 }
4929 }
4930 .panel-group .panel {
4930 .panel-group .panel {
4931 margin-bottom: 0;
4931 margin-bottom: 0;
4932 border-radius: 4px;
4932 border-radius: 4px;
4933 overflow: hidden;
4933 overflow: hidden;
4934 }
4934 }
4935 .panel-group .panel + .panel {
4935 .panel-group .panel + .panel {
4936 margin-top: 5px;
4936 margin-top: 5px;
4937 }
4937 }
4938 .panel-group .panel-heading {
4938 .panel-group .panel-heading {
4939 border-bottom: 0;
4939 border-bottom: 0;
4940 }
4940 }
4941 .panel-group .panel-heading + .panel-collapse .panel-body {
4941 .panel-group .panel-heading + .panel-collapse .panel-body {
4942 border-top: 1px solid #dddddd;
4942 border-top: 1px solid #dddddd;
4943 }
4943 }
4944 .panel-group .panel-footer {
4944 .panel-group .panel-footer {
4945 border-top: 0;
4945 border-top: 0;
4946 }
4946 }
4947 .panel-group .panel-footer + .panel-collapse .panel-body {
4947 .panel-group .panel-footer + .panel-collapse .panel-body {
4948 border-bottom: 1px solid #dddddd;
4948 border-bottom: 1px solid #dddddd;
4949 }
4949 }
4950 .panel-default {
4950 .panel-default {
4951 border-color: #dddddd;
4951 border-color: #dddddd;
4952 }
4952 }
4953 .panel-default > .panel-heading {
4953 .panel-default > .panel-heading {
4954 color: #333333;
4954 color: #333333;
4955 background-color: #f5f5f5;
4955 background-color: #f5f5f5;
4956 border-color: #dddddd;
4956 border-color: #dddddd;
4957 }
4957 }
4958 .panel-default > .panel-heading + .panel-collapse .panel-body {
4958 .panel-default > .panel-heading + .panel-collapse .panel-body {
4959 border-top-color: #dddddd;
4959 border-top-color: #dddddd;
4960 }
4960 }
4961 .panel-default > .panel-footer + .panel-collapse .panel-body {
4961 .panel-default > .panel-footer + .panel-collapse .panel-body {
4962 border-bottom-color: #dddddd;
4962 border-bottom-color: #dddddd;
4963 }
4963 }
4964 .panel-primary {
4964 .panel-primary {
4965 border-color: #428bca;
4965 border-color: #428bca;
4966 }
4966 }
4967 .panel-primary > .panel-heading {
4967 .panel-primary > .panel-heading {
4968 color: #ffffff;
4968 color: #ffffff;
4969 background-color: #428bca;
4969 background-color: #428bca;
4970 border-color: #428bca;
4970 border-color: #428bca;
4971 }
4971 }
4972 .panel-primary > .panel-heading + .panel-collapse .panel-body {
4972 .panel-primary > .panel-heading + .panel-collapse .panel-body {
4973 border-top-color: #428bca;
4973 border-top-color: #428bca;
4974 }
4974 }
4975 .panel-primary > .panel-footer + .panel-collapse .panel-body {
4975 .panel-primary > .panel-footer + .panel-collapse .panel-body {
4976 border-bottom-color: #428bca;
4976 border-bottom-color: #428bca;
4977 }
4977 }
4978 .panel-success {
4978 .panel-success {
4979 border-color: #d6e9c6;
4979 border-color: #d6e9c6;
4980 }
4980 }
4981 .panel-success > .panel-heading {
4981 .panel-success > .panel-heading {
4982 color: #3c763d;
4982 color: #3c763d;
4983 background-color: #dff0d8;
4983 background-color: #dff0d8;
4984 border-color: #d6e9c6;
4984 border-color: #d6e9c6;
4985 }
4985 }
4986 .panel-success > .panel-heading + .panel-collapse .panel-body {
4986 .panel-success > .panel-heading + .panel-collapse .panel-body {
4987 border-top-color: #d6e9c6;
4987 border-top-color: #d6e9c6;
4988 }
4988 }
4989 .panel-success > .panel-footer + .panel-collapse .panel-body {
4989 .panel-success > .panel-footer + .panel-collapse .panel-body {
4990 border-bottom-color: #d6e9c6;
4990 border-bottom-color: #d6e9c6;
4991 }
4991 }
4992 .panel-info {
4992 .panel-info {
4993 border-color: #bce8f1;
4993 border-color: #bce8f1;
4994 }
4994 }
4995 .panel-info > .panel-heading {
4995 .panel-info > .panel-heading {
4996 color: #31708f;
4996 color: #31708f;
4997 background-color: #d9edf7;
4997 background-color: #d9edf7;
4998 border-color: #bce8f1;
4998 border-color: #bce8f1;
4999 }
4999 }
5000 .panel-info > .panel-heading + .panel-collapse .panel-body {
5000 .panel-info > .panel-heading + .panel-collapse .panel-body {
5001 border-top-color: #bce8f1;
5001 border-top-color: #bce8f1;
5002 }
5002 }
5003 .panel-info > .panel-footer + .panel-collapse .panel-body {
5003 .panel-info > .panel-footer + .panel-collapse .panel-body {
5004 border-bottom-color: #bce8f1;
5004 border-bottom-color: #bce8f1;
5005 }
5005 }
5006 .panel-warning {
5006 .panel-warning {
5007 border-color: #faebcc;
5007 border-color: #faebcc;
5008 }
5008 }
5009 .panel-warning > .panel-heading {
5009 .panel-warning > .panel-heading {
5010 color: #8a6d3b;
5010 color: #8a6d3b;
5011 background-color: #fcf8e3;
5011 background-color: #fcf8e3;
5012 border-color: #faebcc;
5012 border-color: #faebcc;
5013 }
5013 }
5014 .panel-warning > .panel-heading + .panel-collapse .panel-body {
5014 .panel-warning > .panel-heading + .panel-collapse .panel-body {
5015 border-top-color: #faebcc;
5015 border-top-color: #faebcc;
5016 }
5016 }
5017 .panel-warning > .panel-footer + .panel-collapse .panel-body {
5017 .panel-warning > .panel-footer + .panel-collapse .panel-body {
5018 border-bottom-color: #faebcc;
5018 border-bottom-color: #faebcc;
5019 }
5019 }
5020 .panel-danger {
5020 .panel-danger {
5021 border-color: #ebccd1;
5021 border-color: #ebccd1;
5022 }
5022 }
5023 .panel-danger > .panel-heading {
5023 .panel-danger > .panel-heading {
5024 color: #a94442;
5024 color: #a94442;
5025 background-color: #f2dede;
5025 background-color: #f2dede;
5026 border-color: #ebccd1;
5026 border-color: #ebccd1;
5027 }
5027 }
5028 .panel-danger > .panel-heading + .panel-collapse .panel-body {
5028 .panel-danger > .panel-heading + .panel-collapse .panel-body {
5029 border-top-color: #ebccd1;
5029 border-top-color: #ebccd1;
5030 }
5030 }
5031 .panel-danger > .panel-footer + .panel-collapse .panel-body {
5031 .panel-danger > .panel-footer + .panel-collapse .panel-body {
5032 border-bottom-color: #ebccd1;
5032 border-bottom-color: #ebccd1;
5033 }
5033 }
5034 .well {
5034 .well {
5035 min-height: 20px;
5035 min-height: 20px;
5036 padding: 19px;
5036 padding: 19px;
5037 margin-bottom: 20px;
5037 margin-bottom: 20px;
5038 background-color: #f5f5f5;
5038 background-color: #f5f5f5;
5039 border: 1px solid #e3e3e3;
5039 border: 1px solid #e3e3e3;
5040 border-radius: 4px;
5040 border-radius: 4px;
5041 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
5041 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
5042 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
5042 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
5043 }
5043 }
5044 .well blockquote {
5044 .well blockquote {
5045 border-color: #ddd;
5045 border-color: #ddd;
5046 border-color: rgba(0, 0, 0, 0.15);
5046 border-color: rgba(0, 0, 0, 0.15);
5047 }
5047 }
5048 .well-lg {
5048 .well-lg {
5049 padding: 24px;
5049 padding: 24px;
5050 border-radius: 6px;
5050 border-radius: 6px;
5051 }
5051 }
5052 .well-sm {
5052 .well-sm {
5053 padding: 9px;
5053 padding: 9px;
5054 border-radius: 3px;
5054 border-radius: 3px;
5055 }
5055 }
5056 .close {
5056 .close {
5057 float: right;
5057 float: right;
5058 font-size: 19.5px;
5058 font-size: 19.5px;
5059 font-weight: bold;
5059 font-weight: bold;
5060 line-height: 1;
5060 line-height: 1;
5061 color: #000000;
5061 color: #000000;
5062 text-shadow: 0 1px 0 #ffffff;
5062 text-shadow: 0 1px 0 #ffffff;
5063 opacity: 0.2;
5063 opacity: 0.2;
5064 filter: alpha(opacity=20);
5064 filter: alpha(opacity=20);
5065 }
5065 }
5066 .close:hover,
5066 .close:hover,
5067 .close:focus {
5067 .close:focus {
5068 color: #000000;
5068 color: #000000;
5069 text-decoration: none;
5069 text-decoration: none;
5070 cursor: pointer;
5070 cursor: pointer;
5071 opacity: 0.5;
5071 opacity: 0.5;
5072 filter: alpha(opacity=50);
5072 filter: alpha(opacity=50);
5073 }
5073 }
5074 button.close {
5074 button.close {
5075 padding: 0;
5075 padding: 0;
5076 cursor: pointer;
5076 cursor: pointer;
5077 background: transparent;
5077 background: transparent;
5078 border: 0;
5078 border: 0;
5079 -webkit-appearance: none;
5079 -webkit-appearance: none;
5080 }
5080 }
5081 .modal-open {
5081 .modal-open {
5082 overflow: hidden;
5082 overflow: hidden;
5083 }
5083 }
5084 .modal {
5084 .modal {
5085 display: none;
5085 display: none;
5086 overflow: auto;
5086 overflow: auto;
5087 overflow-y: scroll;
5087 overflow-y: scroll;
5088 position: fixed;
5088 position: fixed;
5089 top: 0;
5089 top: 0;
5090 right: 0;
5090 right: 0;
5091 bottom: 0;
5091 bottom: 0;
5092 left: 0;
5092 left: 0;
5093 z-index: 1050;
5093 z-index: 1050;
5094 -webkit-overflow-scrolling: touch;
5094 -webkit-overflow-scrolling: touch;
5095 outline: 0;
5095 outline: 0;
5096 }
5096 }
5097 .modal.fade .modal-dialog {
5097 .modal.fade .modal-dialog {
5098 -webkit-transform: translate(0, -25%);
5098 -webkit-transform: translate(0, -25%);
5099 -ms-transform: translate(0, -25%);
5099 -ms-transform: translate(0, -25%);
5100 transform: translate(0, -25%);
5100 transform: translate(0, -25%);
5101 -webkit-transition: -webkit-transform 0.3s ease-out;
5101 -webkit-transition: -webkit-transform 0.3s ease-out;
5102 -moz-transition: -moz-transform 0.3s ease-out;
5102 -moz-transition: -moz-transform 0.3s ease-out;
5103 -o-transition: -o-transform 0.3s ease-out;
5103 -o-transition: -o-transform 0.3s ease-out;
5104 transition: transform 0.3s ease-out;
5104 transition: transform 0.3s ease-out;
5105 }
5105 }
5106 .modal.in .modal-dialog {
5106 .modal.in .modal-dialog {
5107 -webkit-transform: translate(0, 0);
5107 -webkit-transform: translate(0, 0);
5108 -ms-transform: translate(0, 0);
5108 -ms-transform: translate(0, 0);
5109 transform: translate(0, 0);
5109 transform: translate(0, 0);
5110 }
5110 }
5111 .modal-dialog {
5111 .modal-dialog {
5112 position: relative;
5112 position: relative;
5113 width: auto;
5113 width: auto;
5114 margin: 10px;
5114 margin: 10px;
5115 }
5115 }
5116 .modal-content {
5116 .modal-content {
5117 position: relative;
5117 position: relative;
5118 background-color: #ffffff;
5118 background-color: #ffffff;
5119 border: 1px solid #999999;
5119 border: 1px solid #999999;
5120 border: 1px solid rgba(0, 0, 0, 0.2);
5120 border: 1px solid rgba(0, 0, 0, 0.2);
5121 border-radius: 6px;
5121 border-radius: 6px;
5122 -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
5122 -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
5123 box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
5123 box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
5124 background-clip: padding-box;
5124 background-clip: padding-box;
5125 outline: none;
5125 outline: none;
5126 }
5126 }
5127 .modal-backdrop {
5127 .modal-backdrop {
5128 position: fixed;
5128 position: fixed;
5129 top: 0;
5129 top: 0;
5130 right: 0;
5130 right: 0;
5131 bottom: 0;
5131 bottom: 0;
5132 left: 0;
5132 left: 0;
5133 z-index: 1040;
5133 z-index: 1040;
5134 background-color: #000000;
5134 background-color: #000000;
5135 }
5135 }
5136 .modal-backdrop.fade {
5136 .modal-backdrop.fade {
5137 opacity: 0;
5137 opacity: 0;
5138 filter: alpha(opacity=0);
5138 filter: alpha(opacity=0);
5139 }
5139 }
5140 .modal-backdrop.in {
5140 .modal-backdrop.in {
5141 opacity: 0.5;
5141 opacity: 0.5;
5142 filter: alpha(opacity=50);
5142 filter: alpha(opacity=50);
5143 }
5143 }
5144 .modal-header {
5144 .modal-header {
5145 padding: 15px;
5145 padding: 15px;
5146 border-bottom: 1px solid #e5e5e5;
5146 border-bottom: 1px solid #e5e5e5;
5147 min-height: 16.42857143px;
5147 min-height: 16.42857143px;
5148 }
5148 }
5149 .modal-header .close {
5149 .modal-header .close {
5150 margin-top: -2px;
5150 margin-top: -2px;
5151 }
5151 }
5152 .modal-title {
5152 .modal-title {
5153 margin: 0;
5153 margin: 0;
5154 line-height: 1.42857143;
5154 line-height: 1.42857143;
5155 }
5155 }
5156 .modal-body {
5156 .modal-body {
5157 position: relative;
5157 position: relative;
5158 padding: 15px;
5158 padding: 15px;
5159 }
5159 }
5160 .modal-footer {
5160 .modal-footer {
5161 margin-top: 15px;
5161 margin-top: 15px;
5162 padding: 14px 15px 15px;
5162 padding: 14px 15px 15px;
5163 text-align: right;
5163 text-align: right;
5164 border-top: 1px solid #e5e5e5;
5164 border-top: 1px solid #e5e5e5;
5165 }
5165 }
5166 .modal-footer .btn + .btn {
5166 .modal-footer .btn + .btn {
5167 margin-left: 5px;
5167 margin-left: 5px;
5168 margin-bottom: 0;
5168 margin-bottom: 0;
5169 }
5169 }
5170 .modal-footer .btn-group .btn + .btn {
5170 .modal-footer .btn-group .btn + .btn {
5171 margin-left: -1px;
5171 margin-left: -1px;
5172 }
5172 }
5173 .modal-footer .btn-block + .btn-block {
5173 .modal-footer .btn-block + .btn-block {
5174 margin-left: 0;
5174 margin-left: 0;
5175 }
5175 }
5176 @media (min-width: 768px) {
5176 @media (min-width: 768px) {
5177 .modal-dialog {
5177 .modal-dialog {
5178 width: 600px;
5178 width: 600px;
5179 margin: 30px auto;
5179 margin: 30px auto;
5180 }
5180 }
5181 .modal-content {
5181 .modal-content {
5182 -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
5182 -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
5183 box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
5183 box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
5184 }
5184 }
5185 .modal-sm {
5185 .modal-sm {
5186 width: 300px;
5186 width: 300px;
5187 }
5187 }
5188 }
5188 }
5189 @media (min-width: 992px) {
5189 @media (min-width: 992px) {
5190 .modal-lg {
5190 .modal-lg {
5191 width: 900px;
5191 width: 900px;
5192 }
5192 }
5193 }
5193 }
5194 .tooltip {
5194 .tooltip {
5195 position: absolute;
5195 position: absolute;
5196 z-index: 1030;
5196 z-index: 1030;
5197 display: block;
5197 display: block;
5198 visibility: visible;
5198 visibility: visible;
5199 font-size: 12px;
5199 font-size: 12px;
5200 line-height: 1.4;
5200 line-height: 1.4;
5201 opacity: 0;
5201 opacity: 0;
5202 filter: alpha(opacity=0);
5202 filter: alpha(opacity=0);
5203 }
5203 }
5204 .tooltip.in {
5204 .tooltip.in {
5205 opacity: 0.9;
5205 opacity: 0.9;
5206 filter: alpha(opacity=90);
5206 filter: alpha(opacity=90);
5207 }
5207 }
5208 .tooltip.top {
5208 .tooltip.top {
5209 margin-top: -3px;
5209 margin-top: -3px;
5210 padding: 5px 0;
5210 padding: 5px 0;
5211 }
5211 }
5212 .tooltip.right {
5212 .tooltip.right {
5213 margin-left: 3px;
5213 margin-left: 3px;
5214 padding: 0 5px;
5214 padding: 0 5px;
5215 }
5215 }
5216 .tooltip.bottom {
5216 .tooltip.bottom {
5217 margin-top: 3px;
5217 margin-top: 3px;
5218 padding: 5px 0;
5218 padding: 5px 0;
5219 }
5219 }
5220 .tooltip.left {
5220 .tooltip.left {
5221 margin-left: -3px;
5221 margin-left: -3px;
5222 padding: 0 5px;
5222 padding: 0 5px;
5223 }
5223 }
5224 .tooltip-inner {
5224 .tooltip-inner {
5225 max-width: 200px;
5225 max-width: 200px;
5226 padding: 3px 8px;
5226 padding: 3px 8px;
5227 color: #ffffff;
5227 color: #ffffff;
5228 text-align: center;
5228 text-align: center;
5229 text-decoration: none;
5229 text-decoration: none;
5230 background-color: #000000;
5230 background-color: #000000;
5231 border-radius: 4px;
5231 border-radius: 4px;
5232 }
5232 }
5233 .tooltip-arrow {
5233 .tooltip-arrow {
5234 position: absolute;
5234 position: absolute;
5235 width: 0;
5235 width: 0;
5236 height: 0;
5236 height: 0;
5237 border-color: transparent;
5237 border-color: transparent;
5238 border-style: solid;
5238 border-style: solid;
5239 }
5239 }
5240 .tooltip.top .tooltip-arrow {
5240 .tooltip.top .tooltip-arrow {
5241 bottom: 0;
5241 bottom: 0;
5242 left: 50%;
5242 left: 50%;
5243 margin-left: -5px;
5243 margin-left: -5px;
5244 border-width: 5px 5px 0;
5244 border-width: 5px 5px 0;
5245 border-top-color: #000000;
5245 border-top-color: #000000;
5246 }
5246 }
5247 .tooltip.top-left .tooltip-arrow {
5247 .tooltip.top-left .tooltip-arrow {
5248 bottom: 0;
5248 bottom: 0;
5249 left: 5px;
5249 left: 5px;
5250 border-width: 5px 5px 0;
5250 border-width: 5px 5px 0;
5251 border-top-color: #000000;
5251 border-top-color: #000000;
5252 }
5252 }
5253 .tooltip.top-right .tooltip-arrow {
5253 .tooltip.top-right .tooltip-arrow {
5254 bottom: 0;
5254 bottom: 0;
5255 right: 5px;
5255 right: 5px;
5256 border-width: 5px 5px 0;
5256 border-width: 5px 5px 0;
5257 border-top-color: #000000;
5257 border-top-color: #000000;
5258 }
5258 }
5259 .tooltip.right .tooltip-arrow {
5259 .tooltip.right .tooltip-arrow {
5260 top: 50%;
5260 top: 50%;
5261 left: 0;
5261 left: 0;
5262 margin-top: -5px;
5262 margin-top: -5px;
5263 border-width: 5px 5px 5px 0;
5263 border-width: 5px 5px 5px 0;
5264 border-right-color: #000000;
5264 border-right-color: #000000;
5265 }
5265 }
5266 .tooltip.left .tooltip-arrow {
5266 .tooltip.left .tooltip-arrow {
5267 top: 50%;
5267 top: 50%;
5268 right: 0;
5268 right: 0;
5269 margin-top: -5px;
5269 margin-top: -5px;
5270 border-width: 5px 0 5px 5px;
5270 border-width: 5px 0 5px 5px;
5271 border-left-color: #000000;
5271 border-left-color: #000000;
5272 }
5272 }
5273 .tooltip.bottom .tooltip-arrow {
5273 .tooltip.bottom .tooltip-arrow {
5274 top: 0;
5274 top: 0;
5275 left: 50%;
5275 left: 50%;
5276 margin-left: -5px;
5276 margin-left: -5px;
5277 border-width: 0 5px 5px;
5277 border-width: 0 5px 5px;
5278 border-bottom-color: #000000;
5278 border-bottom-color: #000000;
5279 }
5279 }
5280 .tooltip.bottom-left .tooltip-arrow {
5280 .tooltip.bottom-left .tooltip-arrow {
5281 top: 0;
5281 top: 0;
5282 left: 5px;
5282 left: 5px;
5283 border-width: 0 5px 5px;
5283 border-width: 0 5px 5px;
5284 border-bottom-color: #000000;
5284 border-bottom-color: #000000;
5285 }
5285 }
5286 .tooltip.bottom-right .tooltip-arrow {
5286 .tooltip.bottom-right .tooltip-arrow {
5287 top: 0;
5287 top: 0;
5288 right: 5px;
5288 right: 5px;
5289 border-width: 0 5px 5px;
5289 border-width: 0 5px 5px;
5290 border-bottom-color: #000000;
5290 border-bottom-color: #000000;
5291 }
5291 }
5292 .popover {
5292 .popover {
5293 position: absolute;
5293 position: absolute;
5294 top: 0;
5294 top: 0;
5295 left: 0;
5295 left: 0;
5296 z-index: 1010;
5296 z-index: 1010;
5297 display: none;
5297 display: none;
5298 max-width: 276px;
5298 max-width: 276px;
5299 padding: 1px;
5299 padding: 1px;
5300 text-align: left;
5300 text-align: left;
5301 background-color: #ffffff;
5301 background-color: #ffffff;
5302 background-clip: padding-box;
5302 background-clip: padding-box;
5303 border: 1px solid #cccccc;
5303 border: 1px solid #cccccc;
5304 border: 1px solid rgba(0, 0, 0, 0.2);
5304 border: 1px solid rgba(0, 0, 0, 0.2);
5305 border-radius: 6px;
5305 border-radius: 6px;
5306 -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
5306 -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
5307 box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
5307 box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
5308 white-space: normal;
5308 white-space: normal;
5309 }
5309 }
5310 .popover.top {
5310 .popover.top {
5311 margin-top: -10px;
5311 margin-top: -10px;
5312 }
5312 }
5313 .popover.right {
5313 .popover.right {
5314 margin-left: 10px;
5314 margin-left: 10px;
5315 }
5315 }
5316 .popover.bottom {
5316 .popover.bottom {
5317 margin-top: 10px;
5317 margin-top: 10px;
5318 }
5318 }
5319 .popover.left {
5319 .popover.left {
5320 margin-left: -10px;
5320 margin-left: -10px;
5321 }
5321 }
5322 .popover-title {
5322 .popover-title {
5323 margin: 0;
5323 margin: 0;
5324 padding: 8px 14px;
5324 padding: 8px 14px;
5325 font-size: 13px;
5325 font-size: 13px;
5326 font-weight: normal;
5326 font-weight: normal;
5327 line-height: 18px;
5327 line-height: 18px;
5328 background-color: #f7f7f7;
5328 background-color: #f7f7f7;
5329 border-bottom: 1px solid #ebebeb;
5329 border-bottom: 1px solid #ebebeb;
5330 border-radius: 5px 5px 0 0;
5330 border-radius: 5px 5px 0 0;
5331 }
5331 }
5332 .popover-content {
5332 .popover-content {
5333 padding: 9px 14px;
5333 padding: 9px 14px;
5334 }
5334 }
5335 .popover > .arrow,
5335 .popover > .arrow,
5336 .popover > .arrow:after {
5336 .popover > .arrow:after {
5337 position: absolute;
5337 position: absolute;
5338 display: block;
5338 display: block;
5339 width: 0;
5339 width: 0;
5340 height: 0;
5340 height: 0;
5341 border-color: transparent;
5341 border-color: transparent;
5342 border-style: solid;
5342 border-style: solid;
5343 }
5343 }
5344 .popover > .arrow {
5344 .popover > .arrow {
5345 border-width: 11px;
5345 border-width: 11px;
5346 }
5346 }
5347 .popover > .arrow:after {
5347 .popover > .arrow:after {
5348 border-width: 10px;
5348 border-width: 10px;
5349 content: "";
5349 content: "";
5350 }
5350 }
5351 .popover.top > .arrow {
5351 .popover.top > .arrow {
5352 left: 50%;
5352 left: 50%;
5353 margin-left: -11px;
5353 margin-left: -11px;
5354 border-bottom-width: 0;
5354 border-bottom-width: 0;
5355 border-top-color: #999999;
5355 border-top-color: #999999;
5356 border-top-color: rgba(0, 0, 0, 0.25);
5356 border-top-color: rgba(0, 0, 0, 0.25);
5357 bottom: -11px;
5357 bottom: -11px;
5358 }
5358 }
5359 .popover.top > .arrow:after {
5359 .popover.top > .arrow:after {
5360 content: " ";
5360 content: " ";
5361 bottom: 1px;
5361 bottom: 1px;
5362 margin-left: -10px;
5362 margin-left: -10px;
5363 border-bottom-width: 0;
5363 border-bottom-width: 0;
5364 border-top-color: #ffffff;
5364 border-top-color: #ffffff;
5365 }
5365 }
5366 .popover.right > .arrow {
5366 .popover.right > .arrow {
5367 top: 50%;
5367 top: 50%;
5368 left: -11px;
5368 left: -11px;
5369 margin-top: -11px;
5369 margin-top: -11px;
5370 border-left-width: 0;
5370 border-left-width: 0;
5371 border-right-color: #999999;
5371 border-right-color: #999999;
5372 border-right-color: rgba(0, 0, 0, 0.25);
5372 border-right-color: rgba(0, 0, 0, 0.25);
5373 }
5373 }
5374 .popover.right > .arrow:after {
5374 .popover.right > .arrow:after {
5375 content: " ";
5375 content: " ";
5376 left: 1px;
5376 left: 1px;
5377 bottom: -10px;
5377 bottom: -10px;
5378 border-left-width: 0;
5378 border-left-width: 0;
5379 border-right-color: #ffffff;
5379 border-right-color: #ffffff;
5380 }
5380 }
5381 .popover.bottom > .arrow {
5381 .popover.bottom > .arrow {
5382 left: 50%;
5382 left: 50%;
5383 margin-left: -11px;
5383 margin-left: -11px;
5384 border-top-width: 0;
5384 border-top-width: 0;
5385 border-bottom-color: #999999;
5385 border-bottom-color: #999999;
5386 border-bottom-color: rgba(0, 0, 0, 0.25);
5386 border-bottom-color: rgba(0, 0, 0, 0.25);
5387 top: -11px;
5387 top: -11px;
5388 }
5388 }
5389 .popover.bottom > .arrow:after {
5389 .popover.bottom > .arrow:after {
5390 content: " ";
5390 content: " ";
5391 top: 1px;
5391 top: 1px;
5392 margin-left: -10px;
5392 margin-left: -10px;
5393 border-top-width: 0;
5393 border-top-width: 0;
5394 border-bottom-color: #ffffff;
5394 border-bottom-color: #ffffff;
5395 }
5395 }
5396 .popover.left > .arrow {
5396 .popover.left > .arrow {
5397 top: 50%;
5397 top: 50%;
5398 right: -11px;
5398 right: -11px;
5399 margin-top: -11px;
5399 margin-top: -11px;
5400 border-right-width: 0;
5400 border-right-width: 0;
5401 border-left-color: #999999;
5401 border-left-color: #999999;
5402 border-left-color: rgba(0, 0, 0, 0.25);
5402 border-left-color: rgba(0, 0, 0, 0.25);
5403 }
5403 }
5404 .popover.left > .arrow:after {
5404 .popover.left > .arrow:after {
5405 content: " ";
5405 content: " ";
5406 right: 1px;
5406 right: 1px;
5407 border-right-width: 0;
5407 border-right-width: 0;
5408 border-left-color: #ffffff;
5408 border-left-color: #ffffff;
5409 bottom: -10px;
5409 bottom: -10px;
5410 }
5410 }
5411 .carousel {
5411 .carousel {
5412 position: relative;
5412 position: relative;
5413 }
5413 }
5414 .carousel-inner {
5414 .carousel-inner {
5415 position: relative;
5415 position: relative;
5416 overflow: hidden;
5416 overflow: hidden;
5417 width: 100%;
5417 width: 100%;
5418 }
5418 }
5419 .carousel-inner > .item {
5419 .carousel-inner > .item {
5420 display: none;
5420 display: none;
5421 position: relative;
5421 position: relative;
5422 -webkit-transition: 0.6s ease-in-out left;
5422 -webkit-transition: 0.6s ease-in-out left;
5423 transition: 0.6s ease-in-out left;
5423 transition: 0.6s ease-in-out left;
5424 }
5424 }
5425 .carousel-inner > .item > img,
5425 .carousel-inner > .item > img,
5426 .carousel-inner > .item > a > img {
5426 .carousel-inner > .item > a > img {
5427 line-height: 1;
5427 line-height: 1;
5428 }
5428 }
5429 .carousel-inner > .active,
5429 .carousel-inner > .active,
5430 .carousel-inner > .next,
5430 .carousel-inner > .next,
5431 .carousel-inner > .prev {
5431 .carousel-inner > .prev {
5432 display: block;
5432 display: block;
5433 }
5433 }
5434 .carousel-inner > .active {
5434 .carousel-inner > .active {
5435 left: 0;
5435 left: 0;
5436 }
5436 }
5437 .carousel-inner > .next,
5437 .carousel-inner > .next,
5438 .carousel-inner > .prev {
5438 .carousel-inner > .prev {
5439 position: absolute;
5439 position: absolute;
5440 top: 0;
5440 top: 0;
5441 width: 100%;
5441 width: 100%;
5442 }
5442 }
5443 .carousel-inner > .next {
5443 .carousel-inner > .next {
5444 left: 100%;
5444 left: 100%;
5445 }
5445 }
5446 .carousel-inner > .prev {
5446 .carousel-inner > .prev {
5447 left: -100%;
5447 left: -100%;
5448 }
5448 }
5449 .carousel-inner > .next.left,
5449 .carousel-inner > .next.left,
5450 .carousel-inner > .prev.right {
5450 .carousel-inner > .prev.right {
5451 left: 0;
5451 left: 0;
5452 }
5452 }
5453 .carousel-inner > .active.left {
5453 .carousel-inner > .active.left {
5454 left: -100%;
5454 left: -100%;
5455 }
5455 }
5456 .carousel-inner > .active.right {
5456 .carousel-inner > .active.right {
5457 left: 100%;
5457 left: 100%;
5458 }
5458 }
5459 .carousel-control {
5459 .carousel-control {
5460 position: absolute;
5460 position: absolute;
5461 top: 0;
5461 top: 0;
5462 left: 0;
5462 left: 0;
5463 bottom: 0;
5463 bottom: 0;
5464 width: 15%;
5464 width: 15%;
5465 opacity: 0.5;
5465 opacity: 0.5;
5466 filter: alpha(opacity=50);
5466 filter: alpha(opacity=50);
5467 font-size: 20px;
5467 font-size: 20px;
5468 color: #ffffff;
5468 color: #ffffff;
5469 text-align: center;
5469 text-align: center;
5470 text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
5470 text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
5471 }
5471 }
5472 .carousel-control.left {
5472 .carousel-control.left {
5473 background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.5) 0%), color-stop(rgba(0, 0, 0, 0.0001) 100%));
5473 background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.5) 0%), color-stop(rgba(0, 0, 0, 0.0001) 100%));
5474 background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
5474 background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
5475 background-repeat: repeat-x;
5475 background-repeat: repeat-x;
5476 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
5476 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
5477 }
5477 }
5478 .carousel-control.right {
5478 .carousel-control.right {
5479 left: auto;
5479 left: auto;
5480 right: 0;
5480 right: 0;
5481 background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.0001) 0%), color-stop(rgba(0, 0, 0, 0.5) 100%));
5481 background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.0001) 0%), color-stop(rgba(0, 0, 0, 0.5) 100%));
5482 background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
5482 background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
5483 background-repeat: repeat-x;
5483 background-repeat: repeat-x;
5484 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
5484 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
5485 }
5485 }
5486 .carousel-control:hover,
5486 .carousel-control:hover,
5487 .carousel-control:focus {
5487 .carousel-control:focus {
5488 outline: none;
5488 outline: none;
5489 color: #ffffff;
5489 color: #ffffff;
5490 text-decoration: none;
5490 text-decoration: none;
5491 opacity: 0.9;
5491 opacity: 0.9;
5492 filter: alpha(opacity=90);
5492 filter: alpha(opacity=90);
5493 }
5493 }
5494 .carousel-control .icon-prev,
5494 .carousel-control .icon-prev,
5495 .carousel-control .icon-next,
5495 .carousel-control .icon-next,
5496 .carousel-control .glyphicon-chevron-left,
5496 .carousel-control .glyphicon-chevron-left,
5497 .carousel-control .glyphicon-chevron-right {
5497 .carousel-control .glyphicon-chevron-right {
5498 position: absolute;
5498 position: absolute;
5499 top: 50%;
5499 top: 50%;
5500 z-index: 5;
5500 z-index: 5;
5501 display: inline-block;
5501 display: inline-block;
5502 }
5502 }
5503 .carousel-control .icon-prev,
5503 .carousel-control .icon-prev,
5504 .carousel-control .glyphicon-chevron-left {
5504 .carousel-control .glyphicon-chevron-left {
5505 left: 50%;
5505 left: 50%;
5506 }
5506 }
5507 .carousel-control .icon-next,
5507 .carousel-control .icon-next,
5508 .carousel-control .glyphicon-chevron-right {
5508 .carousel-control .glyphicon-chevron-right {
5509 right: 50%;
5509 right: 50%;
5510 }
5510 }
5511 .carousel-control .icon-prev,
5511 .carousel-control .icon-prev,
5512 .carousel-control .icon-next {
5512 .carousel-control .icon-next {
5513 width: 20px;
5513 width: 20px;
5514 height: 20px;
5514 height: 20px;
5515 margin-top: -10px;
5515 margin-top: -10px;
5516 margin-left: -10px;
5516 margin-left: -10px;
5517 font-family: serif;
5517 font-family: serif;
5518 }
5518 }
5519 .carousel-control .icon-prev:before {
5519 .carousel-control .icon-prev:before {
5520 content: '\2039';
5520 content: '\2039';
5521 }
5521 }
5522 .carousel-control .icon-next:before {
5522 .carousel-control .icon-next:before {
5523 content: '\203a';
5523 content: '\203a';
5524 }
5524 }
5525 .carousel-indicators {
5525 .carousel-indicators {
5526 position: absolute;
5526 position: absolute;
5527 bottom: 10px;
5527 bottom: 10px;
5528 left: 50%;
5528 left: 50%;
5529 z-index: 15;
5529 z-index: 15;
5530 width: 60%;
5530 width: 60%;
5531 margin-left: -30%;
5531 margin-left: -30%;
5532 padding-left: 0;
5532 padding-left: 0;
5533 list-style: none;
5533 list-style: none;
5534 text-align: center;
5534 text-align: center;
5535 }
5535 }
5536 .carousel-indicators li {
5536 .carousel-indicators li {
5537 display: inline-block;
5537 display: inline-block;
5538 width: 10px;
5538 width: 10px;
5539 height: 10px;
5539 height: 10px;
5540 margin: 1px;
5540 margin: 1px;
5541 text-indent: -999px;
5541 text-indent: -999px;
5542 border: 1px solid #ffffff;
5542 border: 1px solid #ffffff;
5543 border-radius: 10px;
5543 border-radius: 10px;
5544 cursor: pointer;
5544 cursor: pointer;
5545 background-color: #000 \9;
5545 background-color: #000 \9;
5546 background-color: rgba(0, 0, 0, 0);
5546 background-color: rgba(0, 0, 0, 0);
5547 }
5547 }
5548 .carousel-indicators .active {
5548 .carousel-indicators .active {
5549 margin: 0;
5549 margin: 0;
5550 width: 12px;
5550 width: 12px;
5551 height: 12px;
5551 height: 12px;
5552 background-color: #ffffff;
5552 background-color: #ffffff;
5553 }
5553 }
5554 .carousel-caption {
5554 .carousel-caption {
5555 position: absolute;
5555 position: absolute;
5556 left: 15%;
5556 left: 15%;
5557 right: 15%;
5557 right: 15%;
5558 bottom: 20px;
5558 bottom: 20px;
5559 z-index: 10;
5559 z-index: 10;
5560 padding-top: 20px;
5560 padding-top: 20px;
5561 padding-bottom: 20px;
5561 padding-bottom: 20px;
5562 color: #ffffff;
5562 color: #ffffff;
5563 text-align: center;
5563 text-align: center;
5564 text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
5564 text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
5565 }
5565 }
5566 .carousel-caption .btn {
5566 .carousel-caption .btn {
5567 text-shadow: none;
5567 text-shadow: none;
5568 }
5568 }
5569 @media screen and (min-width: 768px) {
5569 @media screen and (min-width: 768px) {
5570 .carousel-control .glyphicon-chevron-left,
5570 .carousel-control .glyphicon-chevron-left,
5571 .carousel-control .glyphicon-chevron-right,
5571 .carousel-control .glyphicon-chevron-right,
5572 .carousel-control .icon-prev,
5572 .carousel-control .icon-prev,
5573 .carousel-control .icon-next {
5573 .carousel-control .icon-next {
5574 width: 30px;
5574 width: 30px;
5575 height: 30px;
5575 height: 30px;
5576 margin-top: -15px;
5576 margin-top: -15px;
5577 margin-left: -15px;
5577 margin-left: -15px;
5578 font-size: 30px;
5578 font-size: 30px;
5579 }
5579 }
5580 .carousel-caption {
5580 .carousel-caption {
5581 left: 20%;
5581 left: 20%;
5582 right: 20%;
5582 right: 20%;
5583 padding-bottom: 30px;
5583 padding-bottom: 30px;
5584 }
5584 }
5585 .carousel-indicators {
5585 .carousel-indicators {
5586 bottom: 20px;
5586 bottom: 20px;
5587 }
5587 }
5588 }
5588 }
5589 .clearfix:before,
5589 .clearfix:before,
5590 .clearfix:after,
5590 .clearfix:after,
5591 .container:before,
5591 .container:before,
5592 .container:after,
5592 .container:after,
5593 .container-fluid:before,
5593 .container-fluid:before,
5594 .container-fluid:after,
5594 .container-fluid:after,
5595 .row:before,
5595 .row:before,
5596 .row:after,
5596 .row:after,
5597 .form-horizontal .form-group:before,
5597 .form-horizontal .form-group:before,
5598 .form-horizontal .form-group:after,
5598 .form-horizontal .form-group:after,
5599 .btn-toolbar:before,
5599 .btn-toolbar:before,
5600 .btn-toolbar:after,
5600 .btn-toolbar:after,
5601 .btn-group-vertical > .btn-group:before,
5601 .btn-group-vertical > .btn-group:before,
5602 .btn-group-vertical > .btn-group:after,
5602 .btn-group-vertical > .btn-group:after,
5603 .nav:before,
5603 .nav:before,
5604 .nav:after,
5604 .nav:after,
5605 .navbar:before,
5605 .navbar:before,
5606 .navbar:after,
5606 .navbar:after,
5607 .navbar-header:before,
5607 .navbar-header:before,
5608 .navbar-header:after,
5608 .navbar-header:after,
5609 .navbar-collapse:before,
5609 .navbar-collapse:before,
5610 .navbar-collapse:after,
5610 .navbar-collapse:after,
5611 .pager:before,
5611 .pager:before,
5612 .pager:after,
5612 .pager:after,
5613 .panel-body:before,
5613 .panel-body:before,
5614 .panel-body:after,
5614 .panel-body:after,
5615 .modal-footer:before,
5615 .modal-footer:before,
5616 .modal-footer:after {
5616 .modal-footer:after {
5617 content: " ";
5617 content: " ";
5618 display: table;
5618 display: table;
5619 }
5619 }
5620 .clearfix:after,
5620 .clearfix:after,
5621 .container:after,
5621 .container:after,
5622 .container-fluid:after,
5622 .container-fluid:after,
5623 .row:after,
5623 .row:after,
5624 .form-horizontal .form-group:after,
5624 .form-horizontal .form-group:after,
5625 .btn-toolbar:after,
5625 .btn-toolbar:after,
5626 .btn-group-vertical > .btn-group:after,
5626 .btn-group-vertical > .btn-group:after,
5627 .nav:after,
5627 .nav:after,
5628 .navbar:after,
5628 .navbar:after,
5629 .navbar-header:after,
5629 .navbar-header:after,
5630 .navbar-collapse:after,
5630 .navbar-collapse:after,
5631 .pager:after,
5631 .pager:after,
5632 .panel-body:after,
5632 .panel-body:after,
5633 .modal-footer:after {
5633 .modal-footer:after {
5634 clear: both;
5634 clear: both;
5635 }
5635 }
5636 .center-block {
5636 .center-block {
5637 display: block;
5637 display: block;
5638 margin-left: auto;
5638 margin-left: auto;
5639 margin-right: auto;
5639 margin-right: auto;
5640 }
5640 }
5641 .pull-right {
5641 .pull-right {
5642 float: right !important;
5642 float: right !important;
5643 }
5643 }
5644 .pull-left {
5644 .pull-left {
5645 float: left !important;
5645 float: left !important;
5646 }
5646 }
5647 .hide {
5647 .hide {
5648 display: none !important;
5648 display: none !important;
5649 }
5649 }
5650 .show {
5650 .show {
5651 display: block !important;
5651 display: block !important;
5652 }
5652 }
5653 .invisible {
5653 .invisible {
5654 visibility: hidden;
5654 visibility: hidden;
5655 }
5655 }
5656 .text-hide {
5656 .text-hide {
5657 font: 0/0 a;
5657 font: 0/0 a;
5658 color: transparent;
5658 color: transparent;
5659 text-shadow: none;
5659 text-shadow: none;
5660 background-color: transparent;
5660 background-color: transparent;
5661 border: 0;
5661 border: 0;
5662 }
5662 }
5663 .hidden {
5663 .hidden {
5664 display: none !important;
5664 display: none !important;
5665 visibility: hidden !important;
5665 visibility: hidden !important;
5666 }
5666 }
5667 .affix {
5667 .affix {
5668 position: fixed;
5668 position: fixed;
5669 }
5669 }
5670 @-ms-viewport {
5670 @-ms-viewport {
5671 width: device-width;
5671 width: device-width;
5672 }
5672 }
5673 .visible-xs,
5673 .visible-xs,
5674 .visible-sm,
5674 .visible-sm,
5675 .visible-md,
5675 .visible-md,
5676 .visible-lg {
5676 .visible-lg {
5677 display: none !important;
5677 display: none !important;
5678 }
5678 }
5679 @media (max-width: 767px) {
5679 @media (max-width: 767px) {
5680 .visible-xs {
5680 .visible-xs {
5681 display: block !important;
5681 display: block !important;
5682 }
5682 }
5683 table.visible-xs {
5683 table.visible-xs {
5684 display: table;
5684 display: table;
5685 }
5685 }
5686 tr.visible-xs {
5686 tr.visible-xs {
5687 display: table-row !important;
5687 display: table-row !important;
5688 }
5688 }
5689 th.visible-xs,
5689 th.visible-xs,
5690 td.visible-xs {
5690 td.visible-xs {
5691 display: table-cell !important;
5691 display: table-cell !important;
5692 }
5692 }
5693 }
5693 }
5694 @media (min-width: 768px) and (max-width: 991px) {
5694 @media (min-width: 768px) and (max-width: 991px) {
5695 .visible-sm {
5695 .visible-sm {
5696 display: block !important;
5696 display: block !important;
5697 }
5697 }
5698 table.visible-sm {
5698 table.visible-sm {
5699 display: table;
5699 display: table;
5700 }
5700 }
5701 tr.visible-sm {
5701 tr.visible-sm {
5702 display: table-row !important;
5702 display: table-row !important;
5703 }
5703 }
5704 th.visible-sm,
5704 th.visible-sm,
5705 td.visible-sm {
5705 td.visible-sm {
5706 display: table-cell !important;
5706 display: table-cell !important;
5707 }
5707 }
5708 }
5708 }
5709 @media (min-width: 992px) and (max-width: 1199px) {
5709 @media (min-width: 992px) and (max-width: 1199px) {
5710 .visible-md {
5710 .visible-md {
5711 display: block !important;
5711 display: block !important;
5712 }
5712 }
5713 table.visible-md {
5713 table.visible-md {
5714 display: table;
5714 display: table;
5715 }
5715 }
5716 tr.visible-md {
5716 tr.visible-md {
5717 display: table-row !important;
5717 display: table-row !important;
5718 }
5718 }
5719 th.visible-md,
5719 th.visible-md,
5720 td.visible-md {
5720 td.visible-md {
5721 display: table-cell !important;
5721 display: table-cell !important;
5722 }
5722 }
5723 }
5723 }
5724 @media (min-width: 1200px) {
5724 @media (min-width: 1200px) {
5725 .visible-lg {
5725 .visible-lg {
5726 display: block !important;
5726 display: block !important;
5727 }
5727 }
5728 table.visible-lg {
5728 table.visible-lg {
5729 display: table;
5729 display: table;
5730 }
5730 }
5731 tr.visible-lg {
5731 tr.visible-lg {
5732 display: table-row !important;
5732 display: table-row !important;
5733 }
5733 }
5734 th.visible-lg,
5734 th.visible-lg,
5735 td.visible-lg {
5735 td.visible-lg {
5736 display: table-cell !important;
5736 display: table-cell !important;
5737 }
5737 }
5738 }
5738 }
5739 @media (max-width: 767px) {
5739 @media (max-width: 767px) {
5740 .hidden-xs {
5740 .hidden-xs {
5741 display: none !important;
5741 display: none !important;
5742 }
5742 }
5743 }
5743 }
5744 @media (min-width: 768px) and (max-width: 991px) {
5744 @media (min-width: 768px) and (max-width: 991px) {
5745 .hidden-sm {
5745 .hidden-sm {
5746 display: none !important;
5746 display: none !important;
5747 }
5747 }
5748 }
5748 }
5749 @media (min-width: 992px) and (max-width: 1199px) {
5749 @media (min-width: 992px) and (max-width: 1199px) {
5750 .hidden-md {
5750 .hidden-md {
5751 display: none !important;
5751 display: none !important;
5752 }
5752 }
5753 }
5753 }
5754 @media (min-width: 1200px) {
5754 @media (min-width: 1200px) {
5755 .hidden-lg {
5755 .hidden-lg {
5756 display: none !important;
5756 display: none !important;
5757 }
5757 }
5758 }
5758 }
5759 .visible-print {
5759 .visible-print {
5760 display: none !important;
5760 display: none !important;
5761 }
5761 }
5762 @media print {
5762 @media print {
5763 .visible-print {
5763 .visible-print {
5764 display: block !important;
5764 display: block !important;
5765 }
5765 }
5766 table.visible-print {
5766 table.visible-print {
5767 display: table;
5767 display: table;
5768 }
5768 }
5769 tr.visible-print {
5769 tr.visible-print {
5770 display: table-row !important;
5770 display: table-row !important;
5771 }
5771 }
5772 th.visible-print,
5772 th.visible-print,
5773 td.visible-print {
5773 td.visible-print {
5774 display: table-cell !important;
5774 display: table-cell !important;
5775 }
5775 }
5776 }
5776 }
5777 @media print {
5777 @media print {
5778 .hidden-print {
5778 .hidden-print {
5779 display: none !important;
5779 display: none !important;
5780 }
5780 }
5781 }
5781 }
5782 /*!
5782 /*!
5783 *
5783 *
5784 * Font Awesome
5784 * Font Awesome
5785 *
5785 *
5786 */
5786 */
5787 /*!
5787 /*!
5788 * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome
5788 * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome
5789 * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
5789 * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
5790 */
5790 */
5791 /* FONT PATH
5791 /* FONT PATH
5792 * -------------------------- */
5792 * -------------------------- */
5793 @font-face {
5793 @font-face {
5794 font-family: 'FontAwesome';
5794 font-family: 'FontAwesome';
5795 src: url('../components/font-awesome/fonts/fontawesome-webfont.eot?v=4.2.0');
5795 src: url('../components/font-awesome/fonts/fontawesome-webfont.eot?v=4.2.0');
5796 src: url('../components/font-awesome/fonts/fontawesome-webfont.eot?#iefix&v=4.2.0') format('embedded-opentype'), url('../components/font-awesome/fonts/fontawesome-webfont.woff?v=4.2.0') format('woff'), url('../components/font-awesome/fonts/fontawesome-webfont.ttf?v=4.2.0') format('truetype'), url('../components/font-awesome/fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular') format('svg');
5796 src: url('../components/font-awesome/fonts/fontawesome-webfont.eot?#iefix&v=4.2.0') format('embedded-opentype'), url('../components/font-awesome/fonts/fontawesome-webfont.woff?v=4.2.0') format('woff'), url('../components/font-awesome/fonts/fontawesome-webfont.ttf?v=4.2.0') format('truetype'), url('../components/font-awesome/fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular') format('svg');
5797 font-weight: normal;
5797 font-weight: normal;
5798 font-style: normal;
5798 font-style: normal;
5799 }
5799 }
5800 .fa {
5800 .fa {
5801 display: inline-block;
5801 display: inline-block;
5802 font: normal normal normal 14px/1 FontAwesome;
5802 font: normal normal normal 14px/1 FontAwesome;
5803 font-size: inherit;
5803 font-size: inherit;
5804 text-rendering: auto;
5804 text-rendering: auto;
5805 -webkit-font-smoothing: antialiased;
5805 -webkit-font-smoothing: antialiased;
5806 -moz-osx-font-smoothing: grayscale;
5806 -moz-osx-font-smoothing: grayscale;
5807 }
5807 }
5808 /* makes the font 33% larger relative to the icon container */
5808 /* makes the font 33% larger relative to the icon container */
5809 .fa-lg {
5809 .fa-lg {
5810 font-size: 1.33333333em;
5810 font-size: 1.33333333em;
5811 line-height: 0.75em;
5811 line-height: 0.75em;
5812 vertical-align: -15%;
5812 vertical-align: -15%;
5813 }
5813 }
5814 .fa-2x {
5814 .fa-2x {
5815 font-size: 2em;
5815 font-size: 2em;
5816 }
5816 }
5817 .fa-3x {
5817 .fa-3x {
5818 font-size: 3em;
5818 font-size: 3em;
5819 }
5819 }
5820 .fa-4x {
5820 .fa-4x {
5821 font-size: 4em;
5821 font-size: 4em;
5822 }
5822 }
5823 .fa-5x {
5823 .fa-5x {
5824 font-size: 5em;
5824 font-size: 5em;
5825 }
5825 }
5826 .fa-fw {
5826 .fa-fw {
5827 width: 1.28571429em;
5827 width: 1.28571429em;
5828 text-align: center;
5828 text-align: center;
5829 }
5829 }
5830 .fa-ul {
5830 .fa-ul {
5831 padding-left: 0;
5831 padding-left: 0;
5832 margin-left: 2.14285714em;
5832 margin-left: 2.14285714em;
5833 list-style-type: none;
5833 list-style-type: none;
5834 }
5834 }
5835 .fa-ul > li {
5835 .fa-ul > li {
5836 position: relative;
5836 position: relative;
5837 }
5837 }
5838 .fa-li {
5838 .fa-li {
5839 position: absolute;
5839 position: absolute;
5840 left: -2.14285714em;
5840 left: -2.14285714em;
5841 width: 2.14285714em;
5841 width: 2.14285714em;
5842 top: 0.14285714em;
5842 top: 0.14285714em;
5843 text-align: center;
5843 text-align: center;
5844 }
5844 }
5845 .fa-li.fa-lg {
5845 .fa-li.fa-lg {
5846 left: -1.85714286em;
5846 left: -1.85714286em;
5847 }
5847 }
5848 .fa-border {
5848 .fa-border {
5849 padding: .2em .25em .15em;
5849 padding: .2em .25em .15em;
5850 border: solid 0.08em #eeeeee;
5850 border: solid 0.08em #eeeeee;
5851 border-radius: .1em;
5851 border-radius: .1em;
5852 }
5852 }
5853 .pull-right {
5853 .pull-right {
5854 float: right;
5854 float: right;
5855 }
5855 }
5856 .pull-left {
5856 .pull-left {
5857 float: left;
5857 float: left;
5858 }
5858 }
5859 .fa.pull-left {
5859 .fa.pull-left {
5860 margin-right: .3em;
5860 margin-right: .3em;
5861 }
5861 }
5862 .fa.pull-right {
5862 .fa.pull-right {
5863 margin-left: .3em;
5863 margin-left: .3em;
5864 }
5864 }
5865 .fa-spin {
5865 .fa-spin {
5866 -webkit-animation: fa-spin 2s infinite linear;
5866 -webkit-animation: fa-spin 2s infinite linear;
5867 animation: fa-spin 2s infinite linear;
5867 animation: fa-spin 2s infinite linear;
5868 }
5868 }
5869 @-webkit-keyframes fa-spin {
5869 @-webkit-keyframes fa-spin {
5870 0% {
5870 0% {
5871 -webkit-transform: rotate(0deg);
5871 -webkit-transform: rotate(0deg);
5872 transform: rotate(0deg);
5872 transform: rotate(0deg);
5873 }
5873 }
5874 100% {
5874 100% {
5875 -webkit-transform: rotate(359deg);
5875 -webkit-transform: rotate(359deg);
5876 transform: rotate(359deg);
5876 transform: rotate(359deg);
5877 }
5877 }
5878 }
5878 }
5879 @keyframes fa-spin {
5879 @keyframes fa-spin {
5880 0% {
5880 0% {
5881 -webkit-transform: rotate(0deg);
5881 -webkit-transform: rotate(0deg);
5882 transform: rotate(0deg);
5882 transform: rotate(0deg);
5883 }
5883 }
5884 100% {
5884 100% {
5885 -webkit-transform: rotate(359deg);
5885 -webkit-transform: rotate(359deg);
5886 transform: rotate(359deg);
5886 transform: rotate(359deg);
5887 }
5887 }
5888 }
5888 }
5889 .fa-rotate-90 {
5889 .fa-rotate-90 {
5890 filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
5890 filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
5891 -webkit-transform: rotate(90deg);
5891 -webkit-transform: rotate(90deg);
5892 -ms-transform: rotate(90deg);
5892 -ms-transform: rotate(90deg);
5893 transform: rotate(90deg);
5893 transform: rotate(90deg);
5894 }
5894 }
5895 .fa-rotate-180 {
5895 .fa-rotate-180 {
5896 filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
5896 filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
5897 -webkit-transform: rotate(180deg);
5897 -webkit-transform: rotate(180deg);
5898 -ms-transform: rotate(180deg);
5898 -ms-transform: rotate(180deg);
5899 transform: rotate(180deg);
5899 transform: rotate(180deg);
5900 }
5900 }
5901 .fa-rotate-270 {
5901 .fa-rotate-270 {
5902 filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
5902 filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
5903 -webkit-transform: rotate(270deg);
5903 -webkit-transform: rotate(270deg);
5904 -ms-transform: rotate(270deg);
5904 -ms-transform: rotate(270deg);
5905 transform: rotate(270deg);
5905 transform: rotate(270deg);
5906 }
5906 }
5907 .fa-flip-horizontal {
5907 .fa-flip-horizontal {
5908 filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);
5908 filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);
5909 -webkit-transform: scale(-1, 1);
5909 -webkit-transform: scale(-1, 1);
5910 -ms-transform: scale(-1, 1);
5910 -ms-transform: scale(-1, 1);
5911 transform: scale(-1, 1);
5911 transform: scale(-1, 1);
5912 }
5912 }
5913 .fa-flip-vertical {
5913 .fa-flip-vertical {
5914 filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);
5914 filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);
5915 -webkit-transform: scale(1, -1);
5915 -webkit-transform: scale(1, -1);
5916 -ms-transform: scale(1, -1);
5916 -ms-transform: scale(1, -1);
5917 transform: scale(1, -1);
5917 transform: scale(1, -1);
5918 }
5918 }
5919 :root .fa-rotate-90,
5919 :root .fa-rotate-90,
5920 :root .fa-rotate-180,
5920 :root .fa-rotate-180,
5921 :root .fa-rotate-270,
5921 :root .fa-rotate-270,
5922 :root .fa-flip-horizontal,
5922 :root .fa-flip-horizontal,
5923 :root .fa-flip-vertical {
5923 :root .fa-flip-vertical {
5924 filter: none;
5924 filter: none;
5925 }
5925 }
5926 .fa-stack {
5926 .fa-stack {
5927 position: relative;
5927 position: relative;
5928 display: inline-block;
5928 display: inline-block;
5929 width: 2em;
5929 width: 2em;
5930 height: 2em;
5930 height: 2em;
5931 line-height: 2em;
5931 line-height: 2em;
5932 vertical-align: middle;
5932 vertical-align: middle;
5933 }
5933 }
5934 .fa-stack-1x,
5934 .fa-stack-1x,
5935 .fa-stack-2x {
5935 .fa-stack-2x {
5936 position: absolute;
5936 position: absolute;
5937 left: 0;
5937 left: 0;
5938 width: 100%;
5938 width: 100%;
5939 text-align: center;
5939 text-align: center;
5940 }
5940 }
5941 .fa-stack-1x {
5941 .fa-stack-1x {
5942 line-height: inherit;
5942 line-height: inherit;
5943 }
5943 }
5944 .fa-stack-2x {
5944 .fa-stack-2x {
5945 font-size: 2em;
5945 font-size: 2em;
5946 }
5946 }
5947 .fa-inverse {
5947 .fa-inverse {
5948 color: #ffffff;
5948 color: #ffffff;
5949 }
5949 }
5950 /* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
5950 /* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
5951 readers do not read off random characters that represent icons */
5951 readers do not read off random characters that represent icons */
5952 .fa-glass:before {
5952 .fa-glass:before {
5953 content: "\f000";
5953 content: "\f000";
5954 }
5954 }
5955 .fa-music:before {
5955 .fa-music:before {
5956 content: "\f001";
5956 content: "\f001";
5957 }
5957 }
5958 .fa-search:before {
5958 .fa-search:before {
5959 content: "\f002";
5959 content: "\f002";
5960 }
5960 }
5961 .fa-envelope-o:before {
5961 .fa-envelope-o:before {
5962 content: "\f003";
5962 content: "\f003";
5963 }
5963 }
5964 .fa-heart:before {
5964 .fa-heart:before {
5965 content: "\f004";
5965 content: "\f004";
5966 }
5966 }
5967 .fa-star:before {
5967 .fa-star:before {
5968 content: "\f005";
5968 content: "\f005";
5969 }
5969 }
5970 .fa-star-o:before {
5970 .fa-star-o:before {
5971 content: "\f006";
5971 content: "\f006";
5972 }
5972 }
5973 .fa-user:before {
5973 .fa-user:before {
5974 content: "\f007";
5974 content: "\f007";
5975 }
5975 }
5976 .fa-film:before {
5976 .fa-film:before {
5977 content: "\f008";
5977 content: "\f008";
5978 }
5978 }
5979 .fa-th-large:before {
5979 .fa-th-large:before {
5980 content: "\f009";
5980 content: "\f009";
5981 }
5981 }
5982 .fa-th:before {
5982 .fa-th:before {
5983 content: "\f00a";
5983 content: "\f00a";
5984 }
5984 }
5985 .fa-th-list:before {
5985 .fa-th-list:before {
5986 content: "\f00b";
5986 content: "\f00b";
5987 }
5987 }
5988 .fa-check:before {
5988 .fa-check:before {
5989 content: "\f00c";
5989 content: "\f00c";
5990 }
5990 }
5991 .fa-remove:before,
5991 .fa-remove:before,
5992 .fa-close:before,
5992 .fa-close:before,
5993 .fa-times:before {
5993 .fa-times:before {
5994 content: "\f00d";
5994 content: "\f00d";
5995 }
5995 }
5996 .fa-search-plus:before {
5996 .fa-search-plus:before {
5997 content: "\f00e";
5997 content: "\f00e";
5998 }
5998 }
5999 .fa-search-minus:before {
5999 .fa-search-minus:before {
6000 content: "\f010";
6000 content: "\f010";
6001 }
6001 }
6002 .fa-power-off:before {
6002 .fa-power-off:before {
6003 content: "\f011";
6003 content: "\f011";
6004 }
6004 }
6005 .fa-signal:before {
6005 .fa-signal:before {
6006 content: "\f012";
6006 content: "\f012";
6007 }
6007 }
6008 .fa-gear:before,
6008 .fa-gear:before,
6009 .fa-cog:before {
6009 .fa-cog:before {
6010 content: "\f013";
6010 content: "\f013";
6011 }
6011 }
6012 .fa-trash-o:before {
6012 .fa-trash-o:before {
6013 content: "\f014";
6013 content: "\f014";
6014 }
6014 }
6015 .fa-home:before {
6015 .fa-home:before {
6016 content: "\f015";
6016 content: "\f015";
6017 }
6017 }
6018 .fa-file-o:before {
6018 .fa-file-o:before {
6019 content: "\f016";
6019 content: "\f016";
6020 }
6020 }
6021 .fa-clock-o:before {
6021 .fa-clock-o:before {
6022 content: "\f017";
6022 content: "\f017";
6023 }
6023 }
6024 .fa-road:before {
6024 .fa-road:before {
6025 content: "\f018";
6025 content: "\f018";
6026 }
6026 }
6027 .fa-download:before {
6027 .fa-download:before {
6028 content: "\f019";
6028 content: "\f019";
6029 }
6029 }
6030 .fa-arrow-circle-o-down:before {
6030 .fa-arrow-circle-o-down:before {
6031 content: "\f01a";
6031 content: "\f01a";
6032 }
6032 }
6033 .fa-arrow-circle-o-up:before {
6033 .fa-arrow-circle-o-up:before {
6034 content: "\f01b";
6034 content: "\f01b";
6035 }
6035 }
6036 .fa-inbox:before {
6036 .fa-inbox:before {
6037 content: "\f01c";
6037 content: "\f01c";
6038 }
6038 }
6039 .fa-play-circle-o:before {
6039 .fa-play-circle-o:before {
6040 content: "\f01d";
6040 content: "\f01d";
6041 }
6041 }
6042 .fa-rotate-right:before,
6042 .fa-rotate-right:before,
6043 .fa-repeat:before {
6043 .fa-repeat:before {
6044 content: "\f01e";
6044 content: "\f01e";
6045 }
6045 }
6046 .fa-refresh:before {
6046 .fa-refresh:before {
6047 content: "\f021";
6047 content: "\f021";
6048 }
6048 }
6049 .fa-list-alt:before {
6049 .fa-list-alt:before {
6050 content: "\f022";
6050 content: "\f022";
6051 }
6051 }
6052 .fa-lock:before {
6052 .fa-lock:before {
6053 content: "\f023";
6053 content: "\f023";
6054 }
6054 }
6055 .fa-flag:before {
6055 .fa-flag:before {
6056 content: "\f024";
6056 content: "\f024";
6057 }
6057 }
6058 .fa-headphones:before {
6058 .fa-headphones:before {
6059 content: "\f025";
6059 content: "\f025";
6060 }
6060 }
6061 .fa-volume-off:before {
6061 .fa-volume-off:before {
6062 content: "\f026";
6062 content: "\f026";
6063 }
6063 }
6064 .fa-volume-down:before {
6064 .fa-volume-down:before {
6065 content: "\f027";
6065 content: "\f027";
6066 }
6066 }
6067 .fa-volume-up:before {
6067 .fa-volume-up:before {
6068 content: "\f028";
6068 content: "\f028";
6069 }
6069 }
6070 .fa-qrcode:before {
6070 .fa-qrcode:before {
6071 content: "\f029";
6071 content: "\f029";
6072 }
6072 }
6073 .fa-barcode:before {
6073 .fa-barcode:before {
6074 content: "\f02a";
6074 content: "\f02a";
6075 }
6075 }
6076 .fa-tag:before {
6076 .fa-tag:before {
6077 content: "\f02b";
6077 content: "\f02b";
6078 }
6078 }
6079 .fa-tags:before {
6079 .fa-tags:before {
6080 content: "\f02c";
6080 content: "\f02c";
6081 }
6081 }
6082 .fa-book:before {
6082 .fa-book:before {
6083 content: "\f02d";
6083 content: "\f02d";
6084 }
6084 }
6085 .fa-bookmark:before {
6085 .fa-bookmark:before {
6086 content: "\f02e";
6086 content: "\f02e";
6087 }
6087 }
6088 .fa-print:before {
6088 .fa-print:before {
6089 content: "\f02f";
6089 content: "\f02f";
6090 }
6090 }
6091 .fa-camera:before {
6091 .fa-camera:before {
6092 content: "\f030";
6092 content: "\f030";
6093 }
6093 }
6094 .fa-font:before {
6094 .fa-font:before {
6095 content: "\f031";
6095 content: "\f031";
6096 }
6096 }
6097 .fa-bold:before {
6097 .fa-bold:before {
6098 content: "\f032";
6098 content: "\f032";
6099 }
6099 }
6100 .fa-italic:before {
6100 .fa-italic:before {
6101 content: "\f033";
6101 content: "\f033";
6102 }
6102 }
6103 .fa-text-height:before {
6103 .fa-text-height:before {
6104 content: "\f034";
6104 content: "\f034";
6105 }
6105 }
6106 .fa-text-width:before {
6106 .fa-text-width:before {
6107 content: "\f035";
6107 content: "\f035";
6108 }
6108 }
6109 .fa-align-left:before {
6109 .fa-align-left:before {
6110 content: "\f036";
6110 content: "\f036";
6111 }
6111 }
6112 .fa-align-center:before {
6112 .fa-align-center:before {
6113 content: "\f037";
6113 content: "\f037";
6114 }
6114 }
6115 .fa-align-right:before {
6115 .fa-align-right:before {
6116 content: "\f038";
6116 content: "\f038";
6117 }
6117 }
6118 .fa-align-justify:before {
6118 .fa-align-justify:before {
6119 content: "\f039";
6119 content: "\f039";
6120 }
6120 }
6121 .fa-list:before {
6121 .fa-list:before {
6122 content: "\f03a";
6122 content: "\f03a";
6123 }
6123 }
6124 .fa-dedent:before,
6124 .fa-dedent:before,
6125 .fa-outdent:before {
6125 .fa-outdent:before {
6126 content: "\f03b";
6126 content: "\f03b";
6127 }
6127 }
6128 .fa-indent:before {
6128 .fa-indent:before {
6129 content: "\f03c";
6129 content: "\f03c";
6130 }
6130 }
6131 .fa-video-camera:before {
6131 .fa-video-camera:before {
6132 content: "\f03d";
6132 content: "\f03d";
6133 }
6133 }
6134 .fa-photo:before,
6134 .fa-photo:before,
6135 .fa-image:before,
6135 .fa-image:before,
6136 .fa-picture-o:before {
6136 .fa-picture-o:before {
6137 content: "\f03e";
6137 content: "\f03e";
6138 }
6138 }
6139 .fa-pencil:before {
6139 .fa-pencil:before {
6140 content: "\f040";
6140 content: "\f040";
6141 }
6141 }
6142 .fa-map-marker:before {
6142 .fa-map-marker:before {
6143 content: "\f041";
6143 content: "\f041";
6144 }
6144 }
6145 .fa-adjust:before {
6145 .fa-adjust:before {
6146 content: "\f042";
6146 content: "\f042";
6147 }
6147 }
6148 .fa-tint:before {
6148 .fa-tint:before {
6149 content: "\f043";
6149 content: "\f043";
6150 }
6150 }
6151 .fa-edit:before,
6151 .fa-edit:before,
6152 .fa-pencil-square-o:before {
6152 .fa-pencil-square-o:before {
6153 content: "\f044";
6153 content: "\f044";
6154 }
6154 }
6155 .fa-share-square-o:before {
6155 .fa-share-square-o:before {
6156 content: "\f045";
6156 content: "\f045";
6157 }
6157 }
6158 .fa-check-square-o:before {
6158 .fa-check-square-o:before {
6159 content: "\f046";
6159 content: "\f046";
6160 }
6160 }
6161 .fa-arrows:before {
6161 .fa-arrows:before {
6162 content: "\f047";
6162 content: "\f047";
6163 }
6163 }
6164 .fa-step-backward:before {
6164 .fa-step-backward:before {
6165 content: "\f048";
6165 content: "\f048";
6166 }
6166 }
6167 .fa-fast-backward:before {
6167 .fa-fast-backward:before {
6168 content: "\f049";
6168 content: "\f049";
6169 }
6169 }
6170 .fa-backward:before {
6170 .fa-backward:before {
6171 content: "\f04a";
6171 content: "\f04a";
6172 }
6172 }
6173 .fa-play:before {
6173 .fa-play:before {
6174 content: "\f04b";
6174 content: "\f04b";
6175 }
6175 }
6176 .fa-pause:before {
6176 .fa-pause:before {
6177 content: "\f04c";
6177 content: "\f04c";
6178 }
6178 }
6179 .fa-stop:before {
6179 .fa-stop:before {
6180 content: "\f04d";
6180 content: "\f04d";
6181 }
6181 }
6182 .fa-forward:before {
6182 .fa-forward:before {
6183 content: "\f04e";
6183 content: "\f04e";
6184 }
6184 }
6185 .fa-fast-forward:before {
6185 .fa-fast-forward:before {
6186 content: "\f050";
6186 content: "\f050";
6187 }
6187 }
6188 .fa-step-forward:before {
6188 .fa-step-forward:before {
6189 content: "\f051";
6189 content: "\f051";
6190 }
6190 }
6191 .fa-eject:before {
6191 .fa-eject:before {
6192 content: "\f052";
6192 content: "\f052";
6193 }
6193 }
6194 .fa-chevron-left:before {
6194 .fa-chevron-left:before {
6195 content: "\f053";
6195 content: "\f053";
6196 }
6196 }
6197 .fa-chevron-right:before {
6197 .fa-chevron-right:before {
6198 content: "\f054";
6198 content: "\f054";
6199 }
6199 }
6200 .fa-plus-circle:before {
6200 .fa-plus-circle:before {
6201 content: "\f055";
6201 content: "\f055";
6202 }
6202 }
6203 .fa-minus-circle:before {
6203 .fa-minus-circle:before {
6204 content: "\f056";
6204 content: "\f056";
6205 }
6205 }
6206 .fa-times-circle:before {
6206 .fa-times-circle:before {
6207 content: "\f057";
6207 content: "\f057";
6208 }
6208 }
6209 .fa-check-circle:before {
6209 .fa-check-circle:before {
6210 content: "\f058";
6210 content: "\f058";
6211 }
6211 }
6212 .fa-question-circle:before {
6212 .fa-question-circle:before {
6213 content: "\f059";
6213 content: "\f059";
6214 }
6214 }
6215 .fa-info-circle:before {
6215 .fa-info-circle:before {
6216 content: "\f05a";
6216 content: "\f05a";
6217 }
6217 }
6218 .fa-crosshairs:before {
6218 .fa-crosshairs:before {
6219 content: "\f05b";
6219 content: "\f05b";
6220 }
6220 }
6221 .fa-times-circle-o:before {
6221 .fa-times-circle-o:before {
6222 content: "\f05c";
6222 content: "\f05c";
6223 }
6223 }
6224 .fa-check-circle-o:before {
6224 .fa-check-circle-o:before {
6225 content: "\f05d";
6225 content: "\f05d";
6226 }
6226 }
6227 .fa-ban:before {
6227 .fa-ban:before {
6228 content: "\f05e";
6228 content: "\f05e";
6229 }
6229 }
6230 .fa-arrow-left:before {
6230 .fa-arrow-left:before {
6231 content: "\f060";
6231 content: "\f060";
6232 }
6232 }
6233 .fa-arrow-right:before {
6233 .fa-arrow-right:before {
6234 content: "\f061";
6234 content: "\f061";
6235 }
6235 }
6236 .fa-arrow-up:before {
6236 .fa-arrow-up:before {
6237 content: "\f062";
6237 content: "\f062";
6238 }
6238 }
6239 .fa-arrow-down:before {
6239 .fa-arrow-down:before {
6240 content: "\f063";
6240 content: "\f063";
6241 }
6241 }
6242 .fa-mail-forward:before,
6242 .fa-mail-forward:before,
6243 .fa-share:before {
6243 .fa-share:before {
6244 content: "\f064";
6244 content: "\f064";
6245 }
6245 }
6246 .fa-expand:before {
6246 .fa-expand:before {
6247 content: "\f065";
6247 content: "\f065";
6248 }
6248 }
6249 .fa-compress:before {
6249 .fa-compress:before {
6250 content: "\f066";
6250 content: "\f066";
6251 }
6251 }
6252 .fa-plus:before {
6252 .fa-plus:before {
6253 content: "\f067";
6253 content: "\f067";
6254 }
6254 }
6255 .fa-minus:before {
6255 .fa-minus:before {
6256 content: "\f068";
6256 content: "\f068";
6257 }
6257 }
6258 .fa-asterisk:before {
6258 .fa-asterisk:before {
6259 content: "\f069";
6259 content: "\f069";
6260 }
6260 }
6261 .fa-exclamation-circle:before {
6261 .fa-exclamation-circle:before {
6262 content: "\f06a";
6262 content: "\f06a";
6263 }
6263 }
6264 .fa-gift:before {
6264 .fa-gift:before {
6265 content: "\f06b";
6265 content: "\f06b";
6266 }
6266 }
6267 .fa-leaf:before {
6267 .fa-leaf:before {
6268 content: "\f06c";
6268 content: "\f06c";
6269 }
6269 }
6270 .fa-fire:before {
6270 .fa-fire:before {
6271 content: "\f06d";
6271 content: "\f06d";
6272 }
6272 }
6273 .fa-eye:before {
6273 .fa-eye:before {
6274 content: "\f06e";
6274 content: "\f06e";
6275 }
6275 }
6276 .fa-eye-slash:before {
6276 .fa-eye-slash:before {
6277 content: "\f070";
6277 content: "\f070";
6278 }
6278 }
6279 .fa-warning:before,
6279 .fa-warning:before,
6280 .fa-exclamation-triangle:before {
6280 .fa-exclamation-triangle:before {
6281 content: "\f071";
6281 content: "\f071";
6282 }
6282 }
6283 .fa-plane:before {
6283 .fa-plane:before {
6284 content: "\f072";
6284 content: "\f072";
6285 }
6285 }
6286 .fa-calendar:before {
6286 .fa-calendar:before {
6287 content: "\f073";
6287 content: "\f073";
6288 }
6288 }
6289 .fa-random:before {
6289 .fa-random:before {
6290 content: "\f074";
6290 content: "\f074";
6291 }
6291 }
6292 .fa-comment:before {
6292 .fa-comment:before {
6293 content: "\f075";
6293 content: "\f075";
6294 }
6294 }
6295 .fa-magnet:before {
6295 .fa-magnet:before {
6296 content: "\f076";
6296 content: "\f076";
6297 }
6297 }
6298 .fa-chevron-up:before {
6298 .fa-chevron-up:before {
6299 content: "\f077";
6299 content: "\f077";
6300 }
6300 }
6301 .fa-chevron-down:before {
6301 .fa-chevron-down:before {
6302 content: "\f078";
6302 content: "\f078";
6303 }
6303 }
6304 .fa-retweet:before {
6304 .fa-retweet:before {
6305 content: "\f079";
6305 content: "\f079";
6306 }
6306 }
6307 .fa-shopping-cart:before {
6307 .fa-shopping-cart:before {
6308 content: "\f07a";
6308 content: "\f07a";
6309 }
6309 }
6310 .fa-folder:before {
6310 .fa-folder:before {
6311 content: "\f07b";
6311 content: "\f07b";
6312 }
6312 }
6313 .fa-folder-open:before {
6313 .fa-folder-open:before {
6314 content: "\f07c";
6314 content: "\f07c";
6315 }
6315 }
6316 .fa-arrows-v:before {
6316 .fa-arrows-v:before {
6317 content: "\f07d";
6317 content: "\f07d";
6318 }
6318 }
6319 .fa-arrows-h:before {
6319 .fa-arrows-h:before {
6320 content: "\f07e";
6320 content: "\f07e";
6321 }
6321 }
6322 .fa-bar-chart-o:before,
6322 .fa-bar-chart-o:before,
6323 .fa-bar-chart:before {
6323 .fa-bar-chart:before {
6324 content: "\f080";
6324 content: "\f080";
6325 }
6325 }
6326 .fa-twitter-square:before {
6326 .fa-twitter-square:before {
6327 content: "\f081";
6327 content: "\f081";
6328 }
6328 }
6329 .fa-facebook-square:before {
6329 .fa-facebook-square:before {
6330 content: "\f082";
6330 content: "\f082";
6331 }
6331 }
6332 .fa-camera-retro:before {
6332 .fa-camera-retro:before {
6333 content: "\f083";
6333 content: "\f083";
6334 }
6334 }
6335 .fa-key:before {
6335 .fa-key:before {
6336 content: "\f084";
6336 content: "\f084";
6337 }
6337 }
6338 .fa-gears:before,
6338 .fa-gears:before,
6339 .fa-cogs:before {
6339 .fa-cogs:before {
6340 content: "\f085";
6340 content: "\f085";
6341 }
6341 }
6342 .fa-comments:before {
6342 .fa-comments:before {
6343 content: "\f086";
6343 content: "\f086";
6344 }
6344 }
6345 .fa-thumbs-o-up:before {
6345 .fa-thumbs-o-up:before {
6346 content: "\f087";
6346 content: "\f087";
6347 }
6347 }
6348 .fa-thumbs-o-down:before {
6348 .fa-thumbs-o-down:before {
6349 content: "\f088";
6349 content: "\f088";
6350 }
6350 }
6351 .fa-star-half:before {
6351 .fa-star-half:before {
6352 content: "\f089";
6352 content: "\f089";
6353 }
6353 }
6354 .fa-heart-o:before {
6354 .fa-heart-o:before {
6355 content: "\f08a";
6355 content: "\f08a";
6356 }
6356 }
6357 .fa-sign-out:before {
6357 .fa-sign-out:before {
6358 content: "\f08b";
6358 content: "\f08b";
6359 }
6359 }
6360 .fa-linkedin-square:before {
6360 .fa-linkedin-square:before {
6361 content: "\f08c";
6361 content: "\f08c";
6362 }
6362 }
6363 .fa-thumb-tack:before {
6363 .fa-thumb-tack:before {
6364 content: "\f08d";
6364 content: "\f08d";
6365 }
6365 }
6366 .fa-external-link:before {
6366 .fa-external-link:before {
6367 content: "\f08e";
6367 content: "\f08e";
6368 }
6368 }
6369 .fa-sign-in:before {
6369 .fa-sign-in:before {
6370 content: "\f090";
6370 content: "\f090";
6371 }
6371 }
6372 .fa-trophy:before {
6372 .fa-trophy:before {
6373 content: "\f091";
6373 content: "\f091";
6374 }
6374 }
6375 .fa-github-square:before {
6375 .fa-github-square:before {
6376 content: "\f092";
6376 content: "\f092";
6377 }
6377 }
6378 .fa-upload:before {
6378 .fa-upload:before {
6379 content: "\f093";
6379 content: "\f093";
6380 }
6380 }
6381 .fa-lemon-o:before {
6381 .fa-lemon-o:before {
6382 content: "\f094";
6382 content: "\f094";
6383 }
6383 }
6384 .fa-phone:before {
6384 .fa-phone:before {
6385 content: "\f095";
6385 content: "\f095";
6386 }
6386 }
6387 .fa-square-o:before {
6387 .fa-square-o:before {
6388 content: "\f096";
6388 content: "\f096";
6389 }
6389 }
6390 .fa-bookmark-o:before {
6390 .fa-bookmark-o:before {
6391 content: "\f097";
6391 content: "\f097";
6392 }
6392 }
6393 .fa-phone-square:before {
6393 .fa-phone-square:before {
6394 content: "\f098";
6394 content: "\f098";
6395 }
6395 }
6396 .fa-twitter:before {
6396 .fa-twitter:before {
6397 content: "\f099";
6397 content: "\f099";
6398 }
6398 }
6399 .fa-facebook:before {
6399 .fa-facebook:before {
6400 content: "\f09a";
6400 content: "\f09a";
6401 }
6401 }
6402 .fa-github:before {
6402 .fa-github:before {
6403 content: "\f09b";
6403 content: "\f09b";
6404 }
6404 }
6405 .fa-unlock:before {
6405 .fa-unlock:before {
6406 content: "\f09c";
6406 content: "\f09c";
6407 }
6407 }
6408 .fa-credit-card:before {
6408 .fa-credit-card:before {
6409 content: "\f09d";
6409 content: "\f09d";
6410 }
6410 }
6411 .fa-rss:before {
6411 .fa-rss:before {
6412 content: "\f09e";
6412 content: "\f09e";
6413 }
6413 }
6414 .fa-hdd-o:before {
6414 .fa-hdd-o:before {
6415 content: "\f0a0";
6415 content: "\f0a0";
6416 }
6416 }
6417 .fa-bullhorn:before {
6417 .fa-bullhorn:before {
6418 content: "\f0a1";
6418 content: "\f0a1";
6419 }
6419 }
6420 .fa-bell:before {
6420 .fa-bell:before {
6421 content: "\f0f3";
6421 content: "\f0f3";
6422 }
6422 }
6423 .fa-certificate:before {
6423 .fa-certificate:before {
6424 content: "\f0a3";
6424 content: "\f0a3";
6425 }
6425 }
6426 .fa-hand-o-right:before {
6426 .fa-hand-o-right:before {
6427 content: "\f0a4";
6427 content: "\f0a4";
6428 }
6428 }
6429 .fa-hand-o-left:before {
6429 .fa-hand-o-left:before {
6430 content: "\f0a5";
6430 content: "\f0a5";
6431 }
6431 }
6432 .fa-hand-o-up:before {
6432 .fa-hand-o-up:before {
6433 content: "\f0a6";
6433 content: "\f0a6";
6434 }
6434 }
6435 .fa-hand-o-down:before {
6435 .fa-hand-o-down:before {
6436 content: "\f0a7";
6436 content: "\f0a7";
6437 }
6437 }
6438 .fa-arrow-circle-left:before {
6438 .fa-arrow-circle-left:before {
6439 content: "\f0a8";
6439 content: "\f0a8";
6440 }
6440 }
6441 .fa-arrow-circle-right:before {
6441 .fa-arrow-circle-right:before {
6442 content: "\f0a9";
6442 content: "\f0a9";
6443 }
6443 }
6444 .fa-arrow-circle-up:before {
6444 .fa-arrow-circle-up:before {
6445 content: "\f0aa";
6445 content: "\f0aa";
6446 }
6446 }
6447 .fa-arrow-circle-down:before {
6447 .fa-arrow-circle-down:before {
6448 content: "\f0ab";
6448 content: "\f0ab";
6449 }
6449 }
6450 .fa-globe:before {
6450 .fa-globe:before {
6451 content: "\f0ac";
6451 content: "\f0ac";
6452 }
6452 }
6453 .fa-wrench:before {
6453 .fa-wrench:before {
6454 content: "\f0ad";
6454 content: "\f0ad";
6455 }
6455 }
6456 .fa-tasks:before {
6456 .fa-tasks:before {
6457 content: "\f0ae";
6457 content: "\f0ae";
6458 }
6458 }
6459 .fa-filter:before {
6459 .fa-filter:before {
6460 content: "\f0b0";
6460 content: "\f0b0";
6461 }
6461 }
6462 .fa-briefcase:before {
6462 .fa-briefcase:before {
6463 content: "\f0b1";
6463 content: "\f0b1";
6464 }
6464 }
6465 .fa-arrows-alt:before {
6465 .fa-arrows-alt:before {
6466 content: "\f0b2";
6466 content: "\f0b2";
6467 }
6467 }
6468 .fa-group:before,
6468 .fa-group:before,
6469 .fa-users:before {
6469 .fa-users:before {
6470 content: "\f0c0";
6470 content: "\f0c0";
6471 }
6471 }
6472 .fa-chain:before,
6472 .fa-chain:before,
6473 .fa-link:before {
6473 .fa-link:before {
6474 content: "\f0c1";
6474 content: "\f0c1";
6475 }
6475 }
6476 .fa-cloud:before {
6476 .fa-cloud:before {
6477 content: "\f0c2";
6477 content: "\f0c2";
6478 }
6478 }
6479 .fa-flask:before {
6479 .fa-flask:before {
6480 content: "\f0c3";
6480 content: "\f0c3";
6481 }
6481 }
6482 .fa-cut:before,
6482 .fa-cut:before,
6483 .fa-scissors:before {
6483 .fa-scissors:before {
6484 content: "\f0c4";
6484 content: "\f0c4";
6485 }
6485 }
6486 .fa-copy:before,
6486 .fa-copy:before,
6487 .fa-files-o:before {
6487 .fa-files-o:before {
6488 content: "\f0c5";
6488 content: "\f0c5";
6489 }
6489 }
6490 .fa-paperclip:before {
6490 .fa-paperclip:before {
6491 content: "\f0c6";
6491 content: "\f0c6";
6492 }
6492 }
6493 .fa-save:before,
6493 .fa-save:before,
6494 .fa-floppy-o:before {
6494 .fa-floppy-o:before {
6495 content: "\f0c7";
6495 content: "\f0c7";
6496 }
6496 }
6497 .fa-square:before {
6497 .fa-square:before {
6498 content: "\f0c8";
6498 content: "\f0c8";
6499 }
6499 }
6500 .fa-navicon:before,
6500 .fa-navicon:before,
6501 .fa-reorder:before,
6501 .fa-reorder:before,
6502 .fa-bars:before {
6502 .fa-bars:before {
6503 content: "\f0c9";
6503 content: "\f0c9";
6504 }
6504 }
6505 .fa-list-ul:before {
6505 .fa-list-ul:before {
6506 content: "\f0ca";
6506 content: "\f0ca";
6507 }
6507 }
6508 .fa-list-ol:before {
6508 .fa-list-ol:before {
6509 content: "\f0cb";
6509 content: "\f0cb";
6510 }
6510 }
6511 .fa-strikethrough:before {
6511 .fa-strikethrough:before {
6512 content: "\f0cc";
6512 content: "\f0cc";
6513 }
6513 }
6514 .fa-underline:before {
6514 .fa-underline:before {
6515 content: "\f0cd";
6515 content: "\f0cd";
6516 }
6516 }
6517 .fa-table:before {
6517 .fa-table:before {
6518 content: "\f0ce";
6518 content: "\f0ce";
6519 }
6519 }
6520 .fa-magic:before {
6520 .fa-magic:before {
6521 content: "\f0d0";
6521 content: "\f0d0";
6522 }
6522 }
6523 .fa-truck:before {
6523 .fa-truck:before {
6524 content: "\f0d1";
6524 content: "\f0d1";
6525 }
6525 }
6526 .fa-pinterest:before {
6526 .fa-pinterest:before {
6527 content: "\f0d2";
6527 content: "\f0d2";
6528 }
6528 }
6529 .fa-pinterest-square:before {
6529 .fa-pinterest-square:before {
6530 content: "\f0d3";
6530 content: "\f0d3";
6531 }
6531 }
6532 .fa-google-plus-square:before {
6532 .fa-google-plus-square:before {
6533 content: "\f0d4";
6533 content: "\f0d4";
6534 }
6534 }
6535 .fa-google-plus:before {
6535 .fa-google-plus:before {
6536 content: "\f0d5";
6536 content: "\f0d5";
6537 }
6537 }
6538 .fa-money:before {
6538 .fa-money:before {
6539 content: "\f0d6";
6539 content: "\f0d6";
6540 }
6540 }
6541 .fa-caret-down:before {
6541 .fa-caret-down:before {
6542 content: "\f0d7";
6542 content: "\f0d7";
6543 }
6543 }
6544 .fa-caret-up:before {
6544 .fa-caret-up:before {
6545 content: "\f0d8";
6545 content: "\f0d8";
6546 }
6546 }
6547 .fa-caret-left:before {
6547 .fa-caret-left:before {
6548 content: "\f0d9";
6548 content: "\f0d9";
6549 }
6549 }
6550 .fa-caret-right:before {
6550 .fa-caret-right:before {
6551 content: "\f0da";
6551 content: "\f0da";
6552 }
6552 }
6553 .fa-columns:before {
6553 .fa-columns:before {
6554 content: "\f0db";
6554 content: "\f0db";
6555 }
6555 }
6556 .fa-unsorted:before,
6556 .fa-unsorted:before,
6557 .fa-sort:before {
6557 .fa-sort:before {
6558 content: "\f0dc";
6558 content: "\f0dc";
6559 }
6559 }
6560 .fa-sort-down:before,
6560 .fa-sort-down:before,
6561 .fa-sort-desc:before {
6561 .fa-sort-desc:before {
6562 content: "\f0dd";
6562 content: "\f0dd";
6563 }
6563 }
6564 .fa-sort-up:before,
6564 .fa-sort-up:before,
6565 .fa-sort-asc:before {
6565 .fa-sort-asc:before {
6566 content: "\f0de";
6566 content: "\f0de";
6567 }
6567 }
6568 .fa-envelope:before {
6568 .fa-envelope:before {
6569 content: "\f0e0";
6569 content: "\f0e0";
6570 }
6570 }
6571 .fa-linkedin:before {
6571 .fa-linkedin:before {
6572 content: "\f0e1";
6572 content: "\f0e1";
6573 }
6573 }
6574 .fa-rotate-left:before,
6574 .fa-rotate-left:before,
6575 .fa-undo:before {
6575 .fa-undo:before {
6576 content: "\f0e2";
6576 content: "\f0e2";
6577 }
6577 }
6578 .fa-legal:before,
6578 .fa-legal:before,
6579 .fa-gavel:before {
6579 .fa-gavel:before {
6580 content: "\f0e3";
6580 content: "\f0e3";
6581 }
6581 }
6582 .fa-dashboard:before,
6582 .fa-dashboard:before,
6583 .fa-tachometer:before {
6583 .fa-tachometer:before {
6584 content: "\f0e4";
6584 content: "\f0e4";
6585 }
6585 }
6586 .fa-comment-o:before {
6586 .fa-comment-o:before {
6587 content: "\f0e5";
6587 content: "\f0e5";
6588 }
6588 }
6589 .fa-comments-o:before {
6589 .fa-comments-o:before {
6590 content: "\f0e6";
6590 content: "\f0e6";
6591 }
6591 }
6592 .fa-flash:before,
6592 .fa-flash:before,
6593 .fa-bolt:before {
6593 .fa-bolt:before {
6594 content: "\f0e7";
6594 content: "\f0e7";
6595 }
6595 }
6596 .fa-sitemap:before {
6596 .fa-sitemap:before {
6597 content: "\f0e8";
6597 content: "\f0e8";
6598 }
6598 }
6599 .fa-umbrella:before {
6599 .fa-umbrella:before {
6600 content: "\f0e9";
6600 content: "\f0e9";
6601 }
6601 }
6602 .fa-paste:before,
6602 .fa-paste:before,
6603 .fa-clipboard:before {
6603 .fa-clipboard:before {
6604 content: "\f0ea";
6604 content: "\f0ea";
6605 }
6605 }
6606 .fa-lightbulb-o:before {
6606 .fa-lightbulb-o:before {
6607 content: "\f0eb";
6607 content: "\f0eb";
6608 }
6608 }
6609 .fa-exchange:before {
6609 .fa-exchange:before {
6610 content: "\f0ec";
6610 content: "\f0ec";
6611 }
6611 }
6612 .fa-cloud-download:before {
6612 .fa-cloud-download:before {
6613 content: "\f0ed";
6613 content: "\f0ed";
6614 }
6614 }
6615 .fa-cloud-upload:before {
6615 .fa-cloud-upload:before {
6616 content: "\f0ee";
6616 content: "\f0ee";
6617 }
6617 }
6618 .fa-user-md:before {
6618 .fa-user-md:before {
6619 content: "\f0f0";
6619 content: "\f0f0";
6620 }
6620 }
6621 .fa-stethoscope:before {
6621 .fa-stethoscope:before {
6622 content: "\f0f1";
6622 content: "\f0f1";
6623 }
6623 }
6624 .fa-suitcase:before {
6624 .fa-suitcase:before {
6625 content: "\f0f2";
6625 content: "\f0f2";
6626 }
6626 }
6627 .fa-bell-o:before {
6627 .fa-bell-o:before {
6628 content: "\f0a2";
6628 content: "\f0a2";
6629 }
6629 }
6630 .fa-coffee:before {
6630 .fa-coffee:before {
6631 content: "\f0f4";
6631 content: "\f0f4";
6632 }
6632 }
6633 .fa-cutlery:before {
6633 .fa-cutlery:before {
6634 content: "\f0f5";
6634 content: "\f0f5";
6635 }
6635 }
6636 .fa-file-text-o:before {
6636 .fa-file-text-o:before {
6637 content: "\f0f6";
6637 content: "\f0f6";
6638 }
6638 }
6639 .fa-building-o:before {
6639 .fa-building-o:before {
6640 content: "\f0f7";
6640 content: "\f0f7";
6641 }
6641 }
6642 .fa-hospital-o:before {
6642 .fa-hospital-o:before {
6643 content: "\f0f8";
6643 content: "\f0f8";
6644 }
6644 }
6645 .fa-ambulance:before {
6645 .fa-ambulance:before {
6646 content: "\f0f9";
6646 content: "\f0f9";
6647 }
6647 }
6648 .fa-medkit:before {
6648 .fa-medkit:before {
6649 content: "\f0fa";
6649 content: "\f0fa";
6650 }
6650 }
6651 .fa-fighter-jet:before {
6651 .fa-fighter-jet:before {
6652 content: "\f0fb";
6652 content: "\f0fb";
6653 }
6653 }
6654 .fa-beer:before {
6654 .fa-beer:before {
6655 content: "\f0fc";
6655 content: "\f0fc";
6656 }
6656 }
6657 .fa-h-square:before {
6657 .fa-h-square:before {
6658 content: "\f0fd";
6658 content: "\f0fd";
6659 }
6659 }
6660 .fa-plus-square:before {
6660 .fa-plus-square:before {
6661 content: "\f0fe";
6661 content: "\f0fe";
6662 }
6662 }
6663 .fa-angle-double-left:before {
6663 .fa-angle-double-left:before {
6664 content: "\f100";
6664 content: "\f100";
6665 }
6665 }
6666 .fa-angle-double-right:before {
6666 .fa-angle-double-right:before {
6667 content: "\f101";
6667 content: "\f101";
6668 }
6668 }
6669 .fa-angle-double-up:before {
6669 .fa-angle-double-up:before {
6670 content: "\f102";
6670 content: "\f102";
6671 }
6671 }
6672 .fa-angle-double-down:before {
6672 .fa-angle-double-down:before {
6673 content: "\f103";
6673 content: "\f103";
6674 }
6674 }
6675 .fa-angle-left:before {
6675 .fa-angle-left:before {
6676 content: "\f104";
6676 content: "\f104";
6677 }
6677 }
6678 .fa-angle-right:before {
6678 .fa-angle-right:before {
6679 content: "\f105";
6679 content: "\f105";
6680 }
6680 }
6681 .fa-angle-up:before {
6681 .fa-angle-up:before {
6682 content: "\f106";
6682 content: "\f106";
6683 }
6683 }
6684 .fa-angle-down:before {
6684 .fa-angle-down:before {
6685 content: "\f107";
6685 content: "\f107";
6686 }
6686 }
6687 .fa-desktop:before {
6687 .fa-desktop:before {
6688 content: "\f108";
6688 content: "\f108";
6689 }
6689 }
6690 .fa-laptop:before {
6690 .fa-laptop:before {
6691 content: "\f109";
6691 content: "\f109";
6692 }
6692 }
6693 .fa-tablet:before {
6693 .fa-tablet:before {
6694 content: "\f10a";
6694 content: "\f10a";
6695 }
6695 }
6696 .fa-mobile-phone:before,
6696 .fa-mobile-phone:before,
6697 .fa-mobile:before {
6697 .fa-mobile:before {
6698 content: "\f10b";
6698 content: "\f10b";
6699 }
6699 }
6700 .fa-circle-o:before {
6700 .fa-circle-o:before {
6701 content: "\f10c";
6701 content: "\f10c";
6702 }
6702 }
6703 .fa-quote-left:before {
6703 .fa-quote-left:before {
6704 content: "\f10d";
6704 content: "\f10d";
6705 }
6705 }
6706 .fa-quote-right:before {
6706 .fa-quote-right:before {
6707 content: "\f10e";
6707 content: "\f10e";
6708 }
6708 }
6709 .fa-spinner:before {
6709 .fa-spinner:before {
6710 content: "\f110";
6710 content: "\f110";
6711 }
6711 }
6712 .fa-circle:before {
6712 .fa-circle:before {
6713 content: "\f111";
6713 content: "\f111";
6714 }
6714 }
6715 .fa-mail-reply:before,
6715 .fa-mail-reply:before,
6716 .fa-reply:before {
6716 .fa-reply:before {
6717 content: "\f112";
6717 content: "\f112";
6718 }
6718 }
6719 .fa-github-alt:before {
6719 .fa-github-alt:before {
6720 content: "\f113";
6720 content: "\f113";
6721 }
6721 }
6722 .fa-folder-o:before {
6722 .fa-folder-o:before {
6723 content: "\f114";
6723 content: "\f114";
6724 }
6724 }
6725 .fa-folder-open-o:before {
6725 .fa-folder-open-o:before {
6726 content: "\f115";
6726 content: "\f115";
6727 }
6727 }
6728 .fa-smile-o:before {
6728 .fa-smile-o:before {
6729 content: "\f118";
6729 content: "\f118";
6730 }
6730 }
6731 .fa-frown-o:before {
6731 .fa-frown-o:before {
6732 content: "\f119";
6732 content: "\f119";
6733 }
6733 }
6734 .fa-meh-o:before {
6734 .fa-meh-o:before {
6735 content: "\f11a";
6735 content: "\f11a";
6736 }
6736 }
6737 .fa-gamepad:before {
6737 .fa-gamepad:before {
6738 content: "\f11b";
6738 content: "\f11b";
6739 }
6739 }
6740 .fa-keyboard-o:before {
6740 .fa-keyboard-o:before {
6741 content: "\f11c";
6741 content: "\f11c";
6742 }
6742 }
6743 .fa-flag-o:before {
6743 .fa-flag-o:before {
6744 content: "\f11d";
6744 content: "\f11d";
6745 }
6745 }
6746 .fa-flag-checkered:before {
6746 .fa-flag-checkered:before {
6747 content: "\f11e";
6747 content: "\f11e";
6748 }
6748 }
6749 .fa-terminal:before {
6749 .fa-terminal:before {
6750 content: "\f120";
6750 content: "\f120";
6751 }
6751 }
6752 .fa-code:before {
6752 .fa-code:before {
6753 content: "\f121";
6753 content: "\f121";
6754 }
6754 }
6755 .fa-mail-reply-all:before,
6755 .fa-mail-reply-all:before,
6756 .fa-reply-all:before {
6756 .fa-reply-all:before {
6757 content: "\f122";
6757 content: "\f122";
6758 }
6758 }
6759 .fa-star-half-empty:before,
6759 .fa-star-half-empty:before,
6760 .fa-star-half-full:before,
6760 .fa-star-half-full:before,
6761 .fa-star-half-o:before {
6761 .fa-star-half-o:before {
6762 content: "\f123";
6762 content: "\f123";
6763 }
6763 }
6764 .fa-location-arrow:before {
6764 .fa-location-arrow:before {
6765 content: "\f124";
6765 content: "\f124";
6766 }
6766 }
6767 .fa-crop:before {
6767 .fa-crop:before {
6768 content: "\f125";
6768 content: "\f125";
6769 }
6769 }
6770 .fa-code-fork:before {
6770 .fa-code-fork:before {
6771 content: "\f126";
6771 content: "\f126";
6772 }
6772 }
6773 .fa-unlink:before,
6773 .fa-unlink:before,
6774 .fa-chain-broken:before {
6774 .fa-chain-broken:before {
6775 content: "\f127";
6775 content: "\f127";
6776 }
6776 }
6777 .fa-question:before {
6777 .fa-question:before {
6778 content: "\f128";
6778 content: "\f128";
6779 }
6779 }
6780 .fa-info:before {
6780 .fa-info:before {
6781 content: "\f129";
6781 content: "\f129";
6782 }
6782 }
6783 .fa-exclamation:before {
6783 .fa-exclamation:before {
6784 content: "\f12a";
6784 content: "\f12a";
6785 }
6785 }
6786 .fa-superscript:before {
6786 .fa-superscript:before {
6787 content: "\f12b";
6787 content: "\f12b";
6788 }
6788 }
6789 .fa-subscript:before {
6789 .fa-subscript:before {
6790 content: "\f12c";
6790 content: "\f12c";
6791 }
6791 }
6792 .fa-eraser:before {
6792 .fa-eraser:before {
6793 content: "\f12d";
6793 content: "\f12d";
6794 }
6794 }
6795 .fa-puzzle-piece:before {
6795 .fa-puzzle-piece:before {
6796 content: "\f12e";
6796 content: "\f12e";
6797 }
6797 }
6798 .fa-microphone:before {
6798 .fa-microphone:before {
6799 content: "\f130";
6799 content: "\f130";
6800 }
6800 }
6801 .fa-microphone-slash:before {
6801 .fa-microphone-slash:before {
6802 content: "\f131";
6802 content: "\f131";
6803 }
6803 }
6804 .fa-shield:before {
6804 .fa-shield:before {
6805 content: "\f132";
6805 content: "\f132";
6806 }
6806 }
6807 .fa-calendar-o:before {
6807 .fa-calendar-o:before {
6808 content: "\f133";
6808 content: "\f133";
6809 }
6809 }
6810 .fa-fire-extinguisher:before {
6810 .fa-fire-extinguisher:before {
6811 content: "\f134";
6811 content: "\f134";
6812 }
6812 }
6813 .fa-rocket:before {
6813 .fa-rocket:before {
6814 content: "\f135";
6814 content: "\f135";
6815 }
6815 }
6816 .fa-maxcdn:before {
6816 .fa-maxcdn:before {
6817 content: "\f136";
6817 content: "\f136";
6818 }
6818 }
6819 .fa-chevron-circle-left:before {
6819 .fa-chevron-circle-left:before {
6820 content: "\f137";
6820 content: "\f137";
6821 }
6821 }
6822 .fa-chevron-circle-right:before {
6822 .fa-chevron-circle-right:before {
6823 content: "\f138";
6823 content: "\f138";
6824 }
6824 }
6825 .fa-chevron-circle-up:before {
6825 .fa-chevron-circle-up:before {
6826 content: "\f139";
6826 content: "\f139";
6827 }
6827 }
6828 .fa-chevron-circle-down:before {
6828 .fa-chevron-circle-down:before {
6829 content: "\f13a";
6829 content: "\f13a";
6830 }
6830 }
6831 .fa-html5:before {
6831 .fa-html5:before {
6832 content: "\f13b";
6832 content: "\f13b";
6833 }
6833 }
6834 .fa-css3:before {
6834 .fa-css3:before {
6835 content: "\f13c";
6835 content: "\f13c";
6836 }
6836 }
6837 .fa-anchor:before {
6837 .fa-anchor:before {
6838 content: "\f13d";
6838 content: "\f13d";
6839 }
6839 }
6840 .fa-unlock-alt:before {
6840 .fa-unlock-alt:before {
6841 content: "\f13e";
6841 content: "\f13e";
6842 }
6842 }
6843 .fa-bullseye:before {
6843 .fa-bullseye:before {
6844 content: "\f140";
6844 content: "\f140";
6845 }
6845 }
6846 .fa-ellipsis-h:before {
6846 .fa-ellipsis-h:before {
6847 content: "\f141";
6847 content: "\f141";
6848 }
6848 }
6849 .fa-ellipsis-v:before {
6849 .fa-ellipsis-v:before {
6850 content: "\f142";
6850 content: "\f142";
6851 }
6851 }
6852 .fa-rss-square:before {
6852 .fa-rss-square:before {
6853 content: "\f143";
6853 content: "\f143";
6854 }
6854 }
6855 .fa-play-circle:before {
6855 .fa-play-circle:before {
6856 content: "\f144";
6856 content: "\f144";
6857 }
6857 }
6858 .fa-ticket:before {
6858 .fa-ticket:before {
6859 content: "\f145";
6859 content: "\f145";
6860 }
6860 }
6861 .fa-minus-square:before {
6861 .fa-minus-square:before {
6862 content: "\f146";
6862 content: "\f146";
6863 }
6863 }
6864 .fa-minus-square-o:before {
6864 .fa-minus-square-o:before {
6865 content: "\f147";
6865 content: "\f147";
6866 }
6866 }
6867 .fa-level-up:before {
6867 .fa-level-up:before {
6868 content: "\f148";
6868 content: "\f148";
6869 }
6869 }
6870 .fa-level-down:before {
6870 .fa-level-down:before {
6871 content: "\f149";
6871 content: "\f149";
6872 }
6872 }
6873 .fa-check-square:before {
6873 .fa-check-square:before {
6874 content: "\f14a";
6874 content: "\f14a";
6875 }
6875 }
6876 .fa-pencil-square:before {
6876 .fa-pencil-square:before {
6877 content: "\f14b";
6877 content: "\f14b";
6878 }
6878 }
6879 .fa-external-link-square:before {
6879 .fa-external-link-square:before {
6880 content: "\f14c";
6880 content: "\f14c";
6881 }
6881 }
6882 .fa-share-square:before {
6882 .fa-share-square:before {
6883 content: "\f14d";
6883 content: "\f14d";
6884 }
6884 }
6885 .fa-compass:before {
6885 .fa-compass:before {
6886 content: "\f14e";
6886 content: "\f14e";
6887 }
6887 }
6888 .fa-toggle-down:before,
6888 .fa-toggle-down:before,
6889 .fa-caret-square-o-down:before {
6889 .fa-caret-square-o-down:before {
6890 content: "\f150";
6890 content: "\f150";
6891 }
6891 }
6892 .fa-toggle-up:before,
6892 .fa-toggle-up:before,
6893 .fa-caret-square-o-up:before {
6893 .fa-caret-square-o-up:before {
6894 content: "\f151";
6894 content: "\f151";
6895 }
6895 }
6896 .fa-toggle-right:before,
6896 .fa-toggle-right:before,
6897 .fa-caret-square-o-right:before {
6897 .fa-caret-square-o-right:before {
6898 content: "\f152";
6898 content: "\f152";
6899 }
6899 }
6900 .fa-euro:before,
6900 .fa-euro:before,
6901 .fa-eur:before {
6901 .fa-eur:before {
6902 content: "\f153";
6902 content: "\f153";
6903 }
6903 }
6904 .fa-gbp:before {
6904 .fa-gbp:before {
6905 content: "\f154";
6905 content: "\f154";
6906 }
6906 }
6907 .fa-dollar:before,
6907 .fa-dollar:before,
6908 .fa-usd:before {
6908 .fa-usd:before {
6909 content: "\f155";
6909 content: "\f155";
6910 }
6910 }
6911 .fa-rupee:before,
6911 .fa-rupee:before,
6912 .fa-inr:before {
6912 .fa-inr:before {
6913 content: "\f156";
6913 content: "\f156";
6914 }
6914 }
6915 .fa-cny:before,
6915 .fa-cny:before,
6916 .fa-rmb:before,
6916 .fa-rmb:before,
6917 .fa-yen:before,
6917 .fa-yen:before,
6918 .fa-jpy:before {
6918 .fa-jpy:before {
6919 content: "\f157";
6919 content: "\f157";
6920 }
6920 }
6921 .fa-ruble:before,
6921 .fa-ruble:before,
6922 .fa-rouble:before,
6922 .fa-rouble:before,
6923 .fa-rub:before {
6923 .fa-rub:before {
6924 content: "\f158";
6924 content: "\f158";
6925 }
6925 }
6926 .fa-won:before,
6926 .fa-won:before,
6927 .fa-krw:before {
6927 .fa-krw:before {
6928 content: "\f159";
6928 content: "\f159";
6929 }
6929 }
6930 .fa-bitcoin:before,
6930 .fa-bitcoin:before,
6931 .fa-btc:before {
6931 .fa-btc:before {
6932 content: "\f15a";
6932 content: "\f15a";
6933 }
6933 }
6934 .fa-file:before {
6934 .fa-file:before {
6935 content: "\f15b";
6935 content: "\f15b";
6936 }
6936 }
6937 .fa-file-text:before {
6937 .fa-file-text:before {
6938 content: "\f15c";
6938 content: "\f15c";
6939 }
6939 }
6940 .fa-sort-alpha-asc:before {
6940 .fa-sort-alpha-asc:before {
6941 content: "\f15d";
6941 content: "\f15d";
6942 }
6942 }
6943 .fa-sort-alpha-desc:before {
6943 .fa-sort-alpha-desc:before {
6944 content: "\f15e";
6944 content: "\f15e";
6945 }
6945 }
6946 .fa-sort-amount-asc:before {
6946 .fa-sort-amount-asc:before {
6947 content: "\f160";
6947 content: "\f160";
6948 }
6948 }
6949 .fa-sort-amount-desc:before {
6949 .fa-sort-amount-desc:before {
6950 content: "\f161";
6950 content: "\f161";
6951 }
6951 }
6952 .fa-sort-numeric-asc:before {
6952 .fa-sort-numeric-asc:before {
6953 content: "\f162";
6953 content: "\f162";
6954 }
6954 }
6955 .fa-sort-numeric-desc:before {
6955 .fa-sort-numeric-desc:before {
6956 content: "\f163";
6956 content: "\f163";
6957 }
6957 }
6958 .fa-thumbs-up:before {
6958 .fa-thumbs-up:before {
6959 content: "\f164";
6959 content: "\f164";
6960 }
6960 }
6961 .fa-thumbs-down:before {
6961 .fa-thumbs-down:before {
6962 content: "\f165";
6962 content: "\f165";
6963 }
6963 }
6964 .fa-youtube-square:before {
6964 .fa-youtube-square:before {
6965 content: "\f166";
6965 content: "\f166";
6966 }
6966 }
6967 .fa-youtube:before {
6967 .fa-youtube:before {
6968 content: "\f167";
6968 content: "\f167";
6969 }
6969 }
6970 .fa-xing:before {
6970 .fa-xing:before {
6971 content: "\f168";
6971 content: "\f168";
6972 }
6972 }
6973 .fa-xing-square:before {
6973 .fa-xing-square:before {
6974 content: "\f169";
6974 content: "\f169";
6975 }
6975 }
6976 .fa-youtube-play:before {
6976 .fa-youtube-play:before {
6977 content: "\f16a";
6977 content: "\f16a";
6978 }
6978 }
6979 .fa-dropbox:before {
6979 .fa-dropbox:before {
6980 content: "\f16b";
6980 content: "\f16b";
6981 }
6981 }
6982 .fa-stack-overflow:before {
6982 .fa-stack-overflow:before {
6983 content: "\f16c";
6983 content: "\f16c";
6984 }
6984 }
6985 .fa-instagram:before {
6985 .fa-instagram:before {
6986 content: "\f16d";
6986 content: "\f16d";
6987 }
6987 }
6988 .fa-flickr:before {
6988 .fa-flickr:before {
6989 content: "\f16e";
6989 content: "\f16e";
6990 }
6990 }
6991 .fa-adn:before {
6991 .fa-adn:before {
6992 content: "\f170";
6992 content: "\f170";
6993 }
6993 }
6994 .fa-bitbucket:before {
6994 .fa-bitbucket:before {
6995 content: "\f171";
6995 content: "\f171";
6996 }
6996 }
6997 .fa-bitbucket-square:before {
6997 .fa-bitbucket-square:before {
6998 content: "\f172";
6998 content: "\f172";
6999 }
6999 }
7000 .fa-tumblr:before {
7000 .fa-tumblr:before {
7001 content: "\f173";
7001 content: "\f173";
7002 }
7002 }
7003 .fa-tumblr-square:before {
7003 .fa-tumblr-square:before {
7004 content: "\f174";
7004 content: "\f174";
7005 }
7005 }
7006 .fa-long-arrow-down:before {
7006 .fa-long-arrow-down:before {
7007 content: "\f175";
7007 content: "\f175";
7008 }
7008 }
7009 .fa-long-arrow-up:before {
7009 .fa-long-arrow-up:before {
7010 content: "\f176";
7010 content: "\f176";
7011 }
7011 }
7012 .fa-long-arrow-left:before {
7012 .fa-long-arrow-left:before {
7013 content: "\f177";
7013 content: "\f177";
7014 }
7014 }
7015 .fa-long-arrow-right:before {
7015 .fa-long-arrow-right:before {
7016 content: "\f178";
7016 content: "\f178";
7017 }
7017 }
7018 .fa-apple:before {
7018 .fa-apple:before {
7019 content: "\f179";
7019 content: "\f179";
7020 }
7020 }
7021 .fa-windows:before {
7021 .fa-windows:before {
7022 content: "\f17a";
7022 content: "\f17a";
7023 }
7023 }
7024 .fa-android:before {
7024 .fa-android:before {
7025 content: "\f17b";
7025 content: "\f17b";
7026 }
7026 }
7027 .fa-linux:before {
7027 .fa-linux:before {
7028 content: "\f17c";
7028 content: "\f17c";
7029 }
7029 }
7030 .fa-dribbble:before {
7030 .fa-dribbble:before {
7031 content: "\f17d";
7031 content: "\f17d";
7032 }
7032 }
7033 .fa-skype:before {
7033 .fa-skype:before {
7034 content: "\f17e";
7034 content: "\f17e";
7035 }
7035 }
7036 .fa-foursquare:before {
7036 .fa-foursquare:before {
7037 content: "\f180";
7037 content: "\f180";
7038 }
7038 }
7039 .fa-trello:before {
7039 .fa-trello:before {
7040 content: "\f181";
7040 content: "\f181";
7041 }
7041 }
7042 .fa-female:before {
7042 .fa-female:before {
7043 content: "\f182";
7043 content: "\f182";
7044 }
7044 }
7045 .fa-male:before {
7045 .fa-male:before {
7046 content: "\f183";
7046 content: "\f183";
7047 }
7047 }
7048 .fa-gittip:before {
7048 .fa-gittip:before {
7049 content: "\f184";
7049 content: "\f184";
7050 }
7050 }
7051 .fa-sun-o:before {
7051 .fa-sun-o:before {
7052 content: "\f185";
7052 content: "\f185";
7053 }
7053 }
7054 .fa-moon-o:before {
7054 .fa-moon-o:before {
7055 content: "\f186";
7055 content: "\f186";
7056 }
7056 }
7057 .fa-archive:before {
7057 .fa-archive:before {
7058 content: "\f187";
7058 content: "\f187";
7059 }
7059 }
7060 .fa-bug:before {
7060 .fa-bug:before {
7061 content: "\f188";
7061 content: "\f188";
7062 }
7062 }
7063 .fa-vk:before {
7063 .fa-vk:before {
7064 content: "\f189";
7064 content: "\f189";
7065 }
7065 }
7066 .fa-weibo:before {
7066 .fa-weibo:before {
7067 content: "\f18a";
7067 content: "\f18a";
7068 }
7068 }
7069 .fa-renren:before {
7069 .fa-renren:before {
7070 content: "\f18b";
7070 content: "\f18b";
7071 }
7071 }
7072 .fa-pagelines:before {
7072 .fa-pagelines:before {
7073 content: "\f18c";
7073 content: "\f18c";
7074 }
7074 }
7075 .fa-stack-exchange:before {
7075 .fa-stack-exchange:before {
7076 content: "\f18d";
7076 content: "\f18d";
7077 }
7077 }
7078 .fa-arrow-circle-o-right:before {
7078 .fa-arrow-circle-o-right:before {
7079 content: "\f18e";
7079 content: "\f18e";
7080 }
7080 }
7081 .fa-arrow-circle-o-left:before {
7081 .fa-arrow-circle-o-left:before {
7082 content: "\f190";
7082 content: "\f190";
7083 }
7083 }
7084 .fa-toggle-left:before,
7084 .fa-toggle-left:before,
7085 .fa-caret-square-o-left:before {
7085 .fa-caret-square-o-left:before {
7086 content: "\f191";
7086 content: "\f191";
7087 }
7087 }
7088 .fa-dot-circle-o:before {
7088 .fa-dot-circle-o:before {
7089 content: "\f192";
7089 content: "\f192";
7090 }
7090 }
7091 .fa-wheelchair:before {
7091 .fa-wheelchair:before {
7092 content: "\f193";
7092 content: "\f193";
7093 }
7093 }
7094 .fa-vimeo-square:before {
7094 .fa-vimeo-square:before {
7095 content: "\f194";
7095 content: "\f194";
7096 }
7096 }
7097 .fa-turkish-lira:before,
7097 .fa-turkish-lira:before,
7098 .fa-try:before {
7098 .fa-try:before {
7099 content: "\f195";
7099 content: "\f195";
7100 }
7100 }
7101 .fa-plus-square-o:before {
7101 .fa-plus-square-o:before {
7102 content: "\f196";
7102 content: "\f196";
7103 }
7103 }
7104 .fa-space-shuttle:before {
7104 .fa-space-shuttle:before {
7105 content: "\f197";
7105 content: "\f197";
7106 }
7106 }
7107 .fa-slack:before {
7107 .fa-slack:before {
7108 content: "\f198";
7108 content: "\f198";
7109 }
7109 }
7110 .fa-envelope-square:before {
7110 .fa-envelope-square:before {
7111 content: "\f199";
7111 content: "\f199";
7112 }
7112 }
7113 .fa-wordpress:before {
7113 .fa-wordpress:before {
7114 content: "\f19a";
7114 content: "\f19a";
7115 }
7115 }
7116 .fa-openid:before {
7116 .fa-openid:before {
7117 content: "\f19b";
7117 content: "\f19b";
7118 }
7118 }
7119 .fa-institution:before,
7119 .fa-institution:before,
7120 .fa-bank:before,
7120 .fa-bank:before,
7121 .fa-university:before {
7121 .fa-university:before {
7122 content: "\f19c";
7122 content: "\f19c";
7123 }
7123 }
7124 .fa-mortar-board:before,
7124 .fa-mortar-board:before,
7125 .fa-graduation-cap:before {
7125 .fa-graduation-cap:before {
7126 content: "\f19d";
7126 content: "\f19d";
7127 }
7127 }
7128 .fa-yahoo:before {
7128 .fa-yahoo:before {
7129 content: "\f19e";
7129 content: "\f19e";
7130 }
7130 }
7131 .fa-google:before {
7131 .fa-google:before {
7132 content: "\f1a0";
7132 content: "\f1a0";
7133 }
7133 }
7134 .fa-reddit:before {
7134 .fa-reddit:before {
7135 content: "\f1a1";
7135 content: "\f1a1";
7136 }
7136 }
7137 .fa-reddit-square:before {
7137 .fa-reddit-square:before {
7138 content: "\f1a2";
7138 content: "\f1a2";
7139 }
7139 }
7140 .fa-stumbleupon-circle:before {
7140 .fa-stumbleupon-circle:before {
7141 content: "\f1a3";
7141 content: "\f1a3";
7142 }
7142 }
7143 .fa-stumbleupon:before {
7143 .fa-stumbleupon:before {
7144 content: "\f1a4";
7144 content: "\f1a4";
7145 }
7145 }
7146 .fa-delicious:before {
7146 .fa-delicious:before {
7147 content: "\f1a5";
7147 content: "\f1a5";
7148 }
7148 }
7149 .fa-digg:before {
7149 .fa-digg:before {
7150 content: "\f1a6";
7150 content: "\f1a6";
7151 }
7151 }
7152 .fa-pied-piper:before {
7152 .fa-pied-piper:before {
7153 content: "\f1a7";
7153 content: "\f1a7";
7154 }
7154 }
7155 .fa-pied-piper-alt:before {
7155 .fa-pied-piper-alt:before {
7156 content: "\f1a8";
7156 content: "\f1a8";
7157 }
7157 }
7158 .fa-drupal:before {
7158 .fa-drupal:before {
7159 content: "\f1a9";
7159 content: "\f1a9";
7160 }
7160 }
7161 .fa-joomla:before {
7161 .fa-joomla:before {
7162 content: "\f1aa";
7162 content: "\f1aa";
7163 }
7163 }
7164 .fa-language:before {
7164 .fa-language:before {
7165 content: "\f1ab";
7165 content: "\f1ab";
7166 }
7166 }
7167 .fa-fax:before {
7167 .fa-fax:before {
7168 content: "\f1ac";
7168 content: "\f1ac";
7169 }
7169 }
7170 .fa-building:before {
7170 .fa-building:before {
7171 content: "\f1ad";
7171 content: "\f1ad";
7172 }
7172 }
7173 .fa-child:before {
7173 .fa-child:before {
7174 content: "\f1ae";
7174 content: "\f1ae";
7175 }
7175 }
7176 .fa-paw:before {
7176 .fa-paw:before {
7177 content: "\f1b0";
7177 content: "\f1b0";
7178 }
7178 }
7179 .fa-spoon:before {
7179 .fa-spoon:before {
7180 content: "\f1b1";
7180 content: "\f1b1";
7181 }
7181 }
7182 .fa-cube:before {
7182 .fa-cube:before {
7183 content: "\f1b2";
7183 content: "\f1b2";
7184 }
7184 }
7185 .fa-cubes:before {
7185 .fa-cubes:before {
7186 content: "\f1b3";
7186 content: "\f1b3";
7187 }
7187 }
7188 .fa-behance:before {
7188 .fa-behance:before {
7189 content: "\f1b4";
7189 content: "\f1b4";
7190 }
7190 }
7191 .fa-behance-square:before {
7191 .fa-behance-square:before {
7192 content: "\f1b5";
7192 content: "\f1b5";
7193 }
7193 }
7194 .fa-steam:before {
7194 .fa-steam:before {
7195 content: "\f1b6";
7195 content: "\f1b6";
7196 }
7196 }
7197 .fa-steam-square:before {
7197 .fa-steam-square:before {
7198 content: "\f1b7";
7198 content: "\f1b7";
7199 }
7199 }
7200 .fa-recycle:before {
7200 .fa-recycle:before {
7201 content: "\f1b8";
7201 content: "\f1b8";
7202 }
7202 }
7203 .fa-automobile:before,
7203 .fa-automobile:before,
7204 .fa-car:before {
7204 .fa-car:before {
7205 content: "\f1b9";
7205 content: "\f1b9";
7206 }
7206 }
7207 .fa-cab:before,
7207 .fa-cab:before,
7208 .fa-taxi:before {
7208 .fa-taxi:before {
7209 content: "\f1ba";
7209 content: "\f1ba";
7210 }
7210 }
7211 .fa-tree:before {
7211 .fa-tree:before {
7212 content: "\f1bb";
7212 content: "\f1bb";
7213 }
7213 }
7214 .fa-spotify:before {
7214 .fa-spotify:before {
7215 content: "\f1bc";
7215 content: "\f1bc";
7216 }
7216 }
7217 .fa-deviantart:before {
7217 .fa-deviantart:before {
7218 content: "\f1bd";
7218 content: "\f1bd";
7219 }
7219 }
7220 .fa-soundcloud:before {
7220 .fa-soundcloud:before {
7221 content: "\f1be";
7221 content: "\f1be";
7222 }
7222 }
7223 .fa-database:before {
7223 .fa-database:before {
7224 content: "\f1c0";
7224 content: "\f1c0";
7225 }
7225 }
7226 .fa-file-pdf-o:before {
7226 .fa-file-pdf-o:before {
7227 content: "\f1c1";
7227 content: "\f1c1";
7228 }
7228 }
7229 .fa-file-word-o:before {
7229 .fa-file-word-o:before {
7230 content: "\f1c2";
7230 content: "\f1c2";
7231 }
7231 }
7232 .fa-file-excel-o:before {
7232 .fa-file-excel-o:before {
7233 content: "\f1c3";
7233 content: "\f1c3";
7234 }
7234 }
7235 .fa-file-powerpoint-o:before {
7235 .fa-file-powerpoint-o:before {
7236 content: "\f1c4";
7236 content: "\f1c4";
7237 }
7237 }
7238 .fa-file-photo-o:before,
7238 .fa-file-photo-o:before,
7239 .fa-file-picture-o:before,
7239 .fa-file-picture-o:before,
7240 .fa-file-image-o:before {
7240 .fa-file-image-o:before {
7241 content: "\f1c5";
7241 content: "\f1c5";
7242 }
7242 }
7243 .fa-file-zip-o:before,
7243 .fa-file-zip-o:before,
7244 .fa-file-archive-o:before {
7244 .fa-file-archive-o:before {
7245 content: "\f1c6";
7245 content: "\f1c6";
7246 }
7246 }
7247 .fa-file-sound-o:before,
7247 .fa-file-sound-o:before,
7248 .fa-file-audio-o:before {
7248 .fa-file-audio-o:before {
7249 content: "\f1c7";
7249 content: "\f1c7";
7250 }
7250 }
7251 .fa-file-movie-o:before,
7251 .fa-file-movie-o:before,
7252 .fa-file-video-o:before {
7252 .fa-file-video-o:before {
7253 content: "\f1c8";
7253 content: "\f1c8";
7254 }
7254 }
7255 .fa-file-code-o:before {
7255 .fa-file-code-o:before {
7256 content: "\f1c9";
7256 content: "\f1c9";
7257 }
7257 }
7258 .fa-vine:before {
7258 .fa-vine:before {
7259 content: "\f1ca";
7259 content: "\f1ca";
7260 }
7260 }
7261 .fa-codepen:before {
7261 .fa-codepen:before {
7262 content: "\f1cb";
7262 content: "\f1cb";
7263 }
7263 }
7264 .fa-jsfiddle:before {
7264 .fa-jsfiddle:before {
7265 content: "\f1cc";
7265 content: "\f1cc";
7266 }
7266 }
7267 .fa-life-bouy:before,
7267 .fa-life-bouy:before,
7268 .fa-life-buoy:before,
7268 .fa-life-buoy:before,
7269 .fa-life-saver:before,
7269 .fa-life-saver:before,
7270 .fa-support:before,
7270 .fa-support:before,
7271 .fa-life-ring:before {
7271 .fa-life-ring:before {
7272 content: "\f1cd";
7272 content: "\f1cd";
7273 }
7273 }
7274 .fa-circle-o-notch:before {
7274 .fa-circle-o-notch:before {
7275 content: "\f1ce";
7275 content: "\f1ce";
7276 }
7276 }
7277 .fa-ra:before,
7277 .fa-ra:before,
7278 .fa-rebel:before {
7278 .fa-rebel:before {
7279 content: "\f1d0";
7279 content: "\f1d0";
7280 }
7280 }
7281 .fa-ge:before,
7281 .fa-ge:before,
7282 .fa-empire:before {
7282 .fa-empire:before {
7283 content: "\f1d1";
7283 content: "\f1d1";
7284 }
7284 }
7285 .fa-git-square:before {
7285 .fa-git-square:before {
7286 content: "\f1d2";
7286 content: "\f1d2";
7287 }
7287 }
7288 .fa-git:before {
7288 .fa-git:before {
7289 content: "\f1d3";
7289 content: "\f1d3";
7290 }
7290 }
7291 .fa-hacker-news:before {
7291 .fa-hacker-news:before {
7292 content: "\f1d4";
7292 content: "\f1d4";
7293 }
7293 }
7294 .fa-tencent-weibo:before {
7294 .fa-tencent-weibo:before {
7295 content: "\f1d5";
7295 content: "\f1d5";
7296 }
7296 }
7297 .fa-qq:before {
7297 .fa-qq:before {
7298 content: "\f1d6";
7298 content: "\f1d6";
7299 }
7299 }
7300 .fa-wechat:before,
7300 .fa-wechat:before,
7301 .fa-weixin:before {
7301 .fa-weixin:before {
7302 content: "\f1d7";
7302 content: "\f1d7";
7303 }
7303 }
7304 .fa-send:before,
7304 .fa-send:before,
7305 .fa-paper-plane:before {
7305 .fa-paper-plane:before {
7306 content: "\f1d8";
7306 content: "\f1d8";
7307 }
7307 }
7308 .fa-send-o:before,
7308 .fa-send-o:before,
7309 .fa-paper-plane-o:before {
7309 .fa-paper-plane-o:before {
7310 content: "\f1d9";
7310 content: "\f1d9";
7311 }
7311 }
7312 .fa-history:before {
7312 .fa-history:before {
7313 content: "\f1da";
7313 content: "\f1da";
7314 }
7314 }
7315 .fa-circle-thin:before {
7315 .fa-circle-thin:before {
7316 content: "\f1db";
7316 content: "\f1db";
7317 }
7317 }
7318 .fa-header:before {
7318 .fa-header:before {
7319 content: "\f1dc";
7319 content: "\f1dc";
7320 }
7320 }
7321 .fa-paragraph:before {
7321 .fa-paragraph:before {
7322 content: "\f1dd";
7322 content: "\f1dd";
7323 }
7323 }
7324 .fa-sliders:before {
7324 .fa-sliders:before {
7325 content: "\f1de";
7325 content: "\f1de";
7326 }
7326 }
7327 .fa-share-alt:before {
7327 .fa-share-alt:before {
7328 content: "\f1e0";
7328 content: "\f1e0";
7329 }
7329 }
7330 .fa-share-alt-square:before {
7330 .fa-share-alt-square:before {
7331 content: "\f1e1";
7331 content: "\f1e1";
7332 }
7332 }
7333 .fa-bomb:before {
7333 .fa-bomb:before {
7334 content: "\f1e2";
7334 content: "\f1e2";
7335 }
7335 }
7336 .fa-soccer-ball-o:before,
7336 .fa-soccer-ball-o:before,
7337 .fa-futbol-o:before {
7337 .fa-futbol-o:before {
7338 content: "\f1e3";
7338 content: "\f1e3";
7339 }
7339 }
7340 .fa-tty:before {
7340 .fa-tty:before {
7341 content: "\f1e4";
7341 content: "\f1e4";
7342 }
7342 }
7343 .fa-binoculars:before {
7343 .fa-binoculars:before {
7344 content: "\f1e5";
7344 content: "\f1e5";
7345 }
7345 }
7346 .fa-plug:before {
7346 .fa-plug:before {
7347 content: "\f1e6";
7347 content: "\f1e6";
7348 }
7348 }
7349 .fa-slideshare:before {
7349 .fa-slideshare:before {
7350 content: "\f1e7";
7350 content: "\f1e7";
7351 }
7351 }
7352 .fa-twitch:before {
7352 .fa-twitch:before {
7353 content: "\f1e8";
7353 content: "\f1e8";
7354 }
7354 }
7355 .fa-yelp:before {
7355 .fa-yelp:before {
7356 content: "\f1e9";
7356 content: "\f1e9";
7357 }
7357 }
7358 .fa-newspaper-o:before {
7358 .fa-newspaper-o:before {
7359 content: "\f1ea";
7359 content: "\f1ea";
7360 }
7360 }
7361 .fa-wifi:before {
7361 .fa-wifi:before {
7362 content: "\f1eb";
7362 content: "\f1eb";
7363 }
7363 }
7364 .fa-calculator:before {
7364 .fa-calculator:before {
7365 content: "\f1ec";
7365 content: "\f1ec";
7366 }
7366 }
7367 .fa-paypal:before {
7367 .fa-paypal:before {
7368 content: "\f1ed";
7368 content: "\f1ed";
7369 }
7369 }
7370 .fa-google-wallet:before {
7370 .fa-google-wallet:before {
7371 content: "\f1ee";
7371 content: "\f1ee";
7372 }
7372 }
7373 .fa-cc-visa:before {
7373 .fa-cc-visa:before {
7374 content: "\f1f0";
7374 content: "\f1f0";
7375 }
7375 }
7376 .fa-cc-mastercard:before {
7376 .fa-cc-mastercard:before {
7377 content: "\f1f1";
7377 content: "\f1f1";
7378 }
7378 }
7379 .fa-cc-discover:before {
7379 .fa-cc-discover:before {
7380 content: "\f1f2";
7380 content: "\f1f2";
7381 }
7381 }
7382 .fa-cc-amex:before {
7382 .fa-cc-amex:before {
7383 content: "\f1f3";
7383 content: "\f1f3";
7384 }
7384 }
7385 .fa-cc-paypal:before {
7385 .fa-cc-paypal:before {
7386 content: "\f1f4";
7386 content: "\f1f4";
7387 }
7387 }
7388 .fa-cc-stripe:before {
7388 .fa-cc-stripe:before {
7389 content: "\f1f5";
7389 content: "\f1f5";
7390 }
7390 }
7391 .fa-bell-slash:before {
7391 .fa-bell-slash:before {
7392 content: "\f1f6";
7392 content: "\f1f6";
7393 }
7393 }
7394 .fa-bell-slash-o:before {
7394 .fa-bell-slash-o:before {
7395 content: "\f1f7";
7395 content: "\f1f7";
7396 }
7396 }
7397 .fa-trash:before {
7397 .fa-trash:before {
7398 content: "\f1f8";
7398 content: "\f1f8";
7399 }
7399 }
7400 .fa-copyright:before {
7400 .fa-copyright:before {
7401 content: "\f1f9";
7401 content: "\f1f9";
7402 }
7402 }
7403 .fa-at:before {
7403 .fa-at:before {
7404 content: "\f1fa";
7404 content: "\f1fa";
7405 }
7405 }
7406 .fa-eyedropper:before {
7406 .fa-eyedropper:before {
7407 content: "\f1fb";
7407 content: "\f1fb";
7408 }
7408 }
7409 .fa-paint-brush:before {
7409 .fa-paint-brush:before {
7410 content: "\f1fc";
7410 content: "\f1fc";
7411 }
7411 }
7412 .fa-birthday-cake:before {
7412 .fa-birthday-cake:before {
7413 content: "\f1fd";
7413 content: "\f1fd";
7414 }
7414 }
7415 .fa-area-chart:before {
7415 .fa-area-chart:before {
7416 content: "\f1fe";
7416 content: "\f1fe";
7417 }
7417 }
7418 .fa-pie-chart:before {
7418 .fa-pie-chart:before {
7419 content: "\f200";
7419 content: "\f200";
7420 }
7420 }
7421 .fa-line-chart:before {
7421 .fa-line-chart:before {
7422 content: "\f201";
7422 content: "\f201";
7423 }
7423 }
7424 .fa-lastfm:before {
7424 .fa-lastfm:before {
7425 content: "\f202";
7425 content: "\f202";
7426 }
7426 }
7427 .fa-lastfm-square:before {
7427 .fa-lastfm-square:before {
7428 content: "\f203";
7428 content: "\f203";
7429 }
7429 }
7430 .fa-toggle-off:before {
7430 .fa-toggle-off:before {
7431 content: "\f204";
7431 content: "\f204";
7432 }
7432 }
7433 .fa-toggle-on:before {
7433 .fa-toggle-on:before {
7434 content: "\f205";
7434 content: "\f205";
7435 }
7435 }
7436 .fa-bicycle:before {
7436 .fa-bicycle:before {
7437 content: "\f206";
7437 content: "\f206";
7438 }
7438 }
7439 .fa-bus:before {
7439 .fa-bus:before {
7440 content: "\f207";
7440 content: "\f207";
7441 }
7441 }
7442 .fa-ioxhost:before {
7442 .fa-ioxhost:before {
7443 content: "\f208";
7443 content: "\f208";
7444 }
7444 }
7445 .fa-angellist:before {
7445 .fa-angellist:before {
7446 content: "\f209";
7446 content: "\f209";
7447 }
7447 }
7448 .fa-cc:before {
7448 .fa-cc:before {
7449 content: "\f20a";
7449 content: "\f20a";
7450 }
7450 }
7451 .fa-shekel:before,
7451 .fa-shekel:before,
7452 .fa-sheqel:before,
7452 .fa-sheqel:before,
7453 .fa-ils:before {
7453 .fa-ils:before {
7454 content: "\f20b";
7454 content: "\f20b";
7455 }
7455 }
7456 .fa-meanpath:before {
7456 .fa-meanpath:before {
7457 content: "\f20c";
7457 content: "\f20c";
7458 }
7458 }
7459 /*!
7459 /*!
7460 *
7460 *
7461 * IPython base
7461 * IPython base
7462 *
7462 *
7463 */
7463 */
7464 .modal.fade .modal-dialog {
7464 .modal.fade .modal-dialog {
7465 -webkit-transform: translate(0, 0);
7465 -webkit-transform: translate(0, 0);
7466 -ms-transform: translate(0, 0);
7466 -ms-transform: translate(0, 0);
7467 transform: translate(0, 0);
7467 transform: translate(0, 0);
7468 }
7468 }
7469 code {
7469 code {
7470 color: #000000;
7470 color: #000000;
7471 }
7471 }
7472 pre {
7472 pre {
7473 font-size: inherit;
7473 font-size: inherit;
7474 line-height: inherit;
7474 line-height: inherit;
7475 }
7475 }
7476 label {
7476 label {
7477 font-weight: normal;
7477 font-weight: normal;
7478 }
7478 }
7479 .border-box-sizing {
7479 .border-box-sizing {
7480 box-sizing: border-box;
7480 box-sizing: border-box;
7481 -moz-box-sizing: border-box;
7481 -moz-box-sizing: border-box;
7482 -webkit-box-sizing: border-box;
7482 -webkit-box-sizing: border-box;
7483 }
7483 }
7484 .corner-all {
7484 .corner-all {
7485 border-radius: 4px;
7485 border-radius: 4px;
7486 }
7486 }
7487 .no-padding {
7487 .no-padding {
7488 padding: 0px;
7488 padding: 0px;
7489 }
7489 }
7490 /* Flexible box model classes */
7490 /* Flexible box model classes */
7491 /* Taken from Alex Russell http://infrequently.org/2009/08/css-3-progress/ */
7491 /* Taken from Alex Russell http://infrequently.org/2009/08/css-3-progress/ */
7492 /* This file is a compatability layer. It allows the usage of flexible box
7492 /* This file is a compatability layer. It allows the usage of flexible box
7493 model layouts accross multiple browsers, including older browsers. The newest,
7493 model layouts accross multiple browsers, including older browsers. The newest,
7494 universal implementation of the flexible box model is used when available (see
7494 universal implementation of the flexible box model is used when available (see
7495 `Modern browsers` comments below). Browsers that are known to implement this
7495 `Modern browsers` comments below). Browsers that are known to implement this
7496 new spec completely include:
7496 new spec completely include:
7497
7497
7498 Firefox 28.0+
7498 Firefox 28.0+
7499 Chrome 29.0+
7499 Chrome 29.0+
7500 Internet Explorer 11+
7500 Internet Explorer 11+
7501 Opera 17.0+
7501 Opera 17.0+
7502
7502
7503 Browsers not listed, including Safari, are supported via the styling under the
7503 Browsers not listed, including Safari, are supported via the styling under the
7504 `Old browsers` comments below.
7504 `Old browsers` comments below.
7505 */
7505 */
7506 .hbox {
7506 .hbox {
7507 /* Old browsers */
7507 /* Old browsers */
7508 display: -webkit-box;
7508 display: -webkit-box;
7509 -webkit-box-orient: horizontal;
7509 -webkit-box-orient: horizontal;
7510 -webkit-box-align: stretch;
7510 -webkit-box-align: stretch;
7511 display: -moz-box;
7511 display: -moz-box;
7512 -moz-box-orient: horizontal;
7512 -moz-box-orient: horizontal;
7513 -moz-box-align: stretch;
7513 -moz-box-align: stretch;
7514 display: box;
7514 display: box;
7515 box-orient: horizontal;
7515 box-orient: horizontal;
7516 box-align: stretch;
7516 box-align: stretch;
7517 /* Modern browsers */
7517 /* Modern browsers */
7518 display: flex;
7518 display: flex;
7519 flex-direction: row;
7519 flex-direction: row;
7520 align-items: stretch;
7520 align-items: stretch;
7521 }
7521 }
7522 .hbox > * {
7522 .hbox > * {
7523 /* Old browsers */
7523 /* Old browsers */
7524 -webkit-box-flex: 0;
7524 -webkit-box-flex: 0;
7525 -moz-box-flex: 0;
7525 -moz-box-flex: 0;
7526 box-flex: 0;
7526 box-flex: 0;
7527 /* Modern browsers */
7527 /* Modern browsers */
7528 flex: none;
7528 flex: none;
7529 }
7529 }
7530 .vbox {
7530 .vbox {
7531 /* Old browsers */
7531 /* Old browsers */
7532 display: -webkit-box;
7532 display: -webkit-box;
7533 -webkit-box-orient: vertical;
7533 -webkit-box-orient: vertical;
7534 -webkit-box-align: stretch;
7534 -webkit-box-align: stretch;
7535 display: -moz-box;
7535 display: -moz-box;
7536 -moz-box-orient: vertical;
7536 -moz-box-orient: vertical;
7537 -moz-box-align: stretch;
7537 -moz-box-align: stretch;
7538 display: box;
7538 display: box;
7539 box-orient: vertical;
7539 box-orient: vertical;
7540 box-align: stretch;
7540 box-align: stretch;
7541 /* Modern browsers */
7541 /* Modern browsers */
7542 display: flex;
7542 display: flex;
7543 flex-direction: column;
7543 flex-direction: column;
7544 align-items: stretch;
7544 align-items: stretch;
7545 }
7545 }
7546 .vbox > * {
7546 .vbox > * {
7547 /* Old browsers */
7547 /* Old browsers */
7548 -webkit-box-flex: 0;
7548 -webkit-box-flex: 0;
7549 -moz-box-flex: 0;
7549 -moz-box-flex: 0;
7550 box-flex: 0;
7550 box-flex: 0;
7551 /* Modern browsers */
7551 /* Modern browsers */
7552 flex: none;
7552 flex: none;
7553 }
7553 }
7554 .hbox.reverse,
7554 .hbox.reverse,
7555 .vbox.reverse,
7555 .vbox.reverse,
7556 .reverse {
7556 .reverse {
7557 /* Old browsers */
7557 /* Old browsers */
7558 -webkit-box-direction: reverse;
7558 -webkit-box-direction: reverse;
7559 -moz-box-direction: reverse;
7559 -moz-box-direction: reverse;
7560 box-direction: reverse;
7560 box-direction: reverse;
7561 /* Modern browsers */
7561 /* Modern browsers */
7562 flex-direction: row-reverse;
7562 flex-direction: row-reverse;
7563 }
7563 }
7564 .hbox.box-flex0,
7564 .hbox.box-flex0,
7565 .vbox.box-flex0,
7565 .vbox.box-flex0,
7566 .box-flex0 {
7566 .box-flex0 {
7567 /* Old browsers */
7567 /* Old browsers */
7568 -webkit-box-flex: 0;
7568 -webkit-box-flex: 0;
7569 -moz-box-flex: 0;
7569 -moz-box-flex: 0;
7570 box-flex: 0;
7570 box-flex: 0;
7571 /* Modern browsers */
7571 /* Modern browsers */
7572 flex: none;
7572 flex: none;
7573 width: auto;
7573 width: auto;
7574 }
7574 }
7575 .hbox.box-flex1,
7575 .hbox.box-flex1,
7576 .vbox.box-flex1,
7576 .vbox.box-flex1,
7577 .box-flex1 {
7577 .box-flex1 {
7578 /* Old browsers */
7578 /* Old browsers */
7579 -webkit-box-flex: 1;
7579 -webkit-box-flex: 1;
7580 -moz-box-flex: 1;
7580 -moz-box-flex: 1;
7581 box-flex: 1;
7581 box-flex: 1;
7582 /* Modern browsers */
7582 /* Modern browsers */
7583 flex: 1;
7583 flex: 1;
7584 }
7584 }
7585 .hbox.box-flex,
7585 .hbox.box-flex,
7586 .vbox.box-flex,
7586 .vbox.box-flex,
7587 .box-flex {
7587 .box-flex {
7588 /* Old browsers */
7588 /* Old browsers */
7589 /* Old browsers */
7589 /* Old browsers */
7590 -webkit-box-flex: 1;
7590 -webkit-box-flex: 1;
7591 -moz-box-flex: 1;
7591 -moz-box-flex: 1;
7592 box-flex: 1;
7592 box-flex: 1;
7593 /* Modern browsers */
7593 /* Modern browsers */
7594 flex: 1;
7594 flex: 1;
7595 }
7595 }
7596 .hbox.box-flex2,
7596 .hbox.box-flex2,
7597 .vbox.box-flex2,
7597 .vbox.box-flex2,
7598 .box-flex2 {
7598 .box-flex2 {
7599 /* Old browsers */
7599 /* Old browsers */
7600 -webkit-box-flex: 2;
7600 -webkit-box-flex: 2;
7601 -moz-box-flex: 2;
7601 -moz-box-flex: 2;
7602 box-flex: 2;
7602 box-flex: 2;
7603 /* Modern browsers */
7603 /* Modern browsers */
7604 flex: 2;
7604 flex: 2;
7605 }
7605 }
7606 .box-group1 {
7606 .box-group1 {
7607 /* Deprecated */
7607 /* Deprecated */
7608 -webkit-box-flex-group: 1;
7608 -webkit-box-flex-group: 1;
7609 -moz-box-flex-group: 1;
7609 -moz-box-flex-group: 1;
7610 box-flex-group: 1;
7610 box-flex-group: 1;
7611 }
7611 }
7612 .box-group2 {
7612 .box-group2 {
7613 /* Deprecated */
7613 /* Deprecated */
7614 -webkit-box-flex-group: 2;
7614 -webkit-box-flex-group: 2;
7615 -moz-box-flex-group: 2;
7615 -moz-box-flex-group: 2;
7616 box-flex-group: 2;
7616 box-flex-group: 2;
7617 }
7617 }
7618 .hbox.start,
7618 .hbox.start,
7619 .vbox.start,
7619 .vbox.start,
7620 .start {
7620 .start {
7621 /* Old browsers */
7621 /* Old browsers */
7622 -webkit-box-pack: start;
7622 -webkit-box-pack: start;
7623 -moz-box-pack: start;
7623 -moz-box-pack: start;
7624 box-pack: start;
7624 box-pack: start;
7625 /* Modern browsers */
7625 /* Modern browsers */
7626 justify-content: flex-start;
7626 justify-content: flex-start;
7627 }
7627 }
7628 .hbox.end,
7628 .hbox.end,
7629 .vbox.end,
7629 .vbox.end,
7630 .end {
7630 .end {
7631 /* Old browsers */
7631 /* Old browsers */
7632 -webkit-box-pack: end;
7632 -webkit-box-pack: end;
7633 -moz-box-pack: end;
7633 -moz-box-pack: end;
7634 box-pack: end;
7634 box-pack: end;
7635 /* Modern browsers */
7635 /* Modern browsers */
7636 justify-content: flex-end;
7636 justify-content: flex-end;
7637 }
7637 }
7638 .hbox.center,
7638 .hbox.center,
7639 .vbox.center,
7639 .vbox.center,
7640 .center {
7640 .center {
7641 /* Old browsers */
7641 /* Old browsers */
7642 -webkit-box-pack: center;
7642 -webkit-box-pack: center;
7643 -moz-box-pack: center;
7643 -moz-box-pack: center;
7644 box-pack: center;
7644 box-pack: center;
7645 /* Modern browsers */
7645 /* Modern browsers */
7646 justify-content: center;
7646 justify-content: center;
7647 }
7647 }
7648 .hbox.baseline,
7648 .hbox.baseline,
7649 .vbox.baseline,
7649 .vbox.baseline,
7650 .baseline {
7650 .baseline {
7651 /* Old browsers */
7651 /* Old browsers */
7652 -webkit-box-pack: baseline;
7652 -webkit-box-pack: baseline;
7653 -moz-box-pack: baseline;
7653 -moz-box-pack: baseline;
7654 box-pack: baseline;
7654 box-pack: baseline;
7655 /* Modern browsers */
7655 /* Modern browsers */
7656 justify-content: baseline;
7656 justify-content: baseline;
7657 }
7657 }
7658 .hbox.stretch,
7658 .hbox.stretch,
7659 .vbox.stretch,
7659 .vbox.stretch,
7660 .stretch {
7660 .stretch {
7661 /* Old browsers */
7661 /* Old browsers */
7662 -webkit-box-pack: stretch;
7662 -webkit-box-pack: stretch;
7663 -moz-box-pack: stretch;
7663 -moz-box-pack: stretch;
7664 box-pack: stretch;
7664 box-pack: stretch;
7665 /* Modern browsers */
7665 /* Modern browsers */
7666 justify-content: stretch;
7666 justify-content: stretch;
7667 }
7667 }
7668 .hbox.align-start,
7668 .hbox.align-start,
7669 .vbox.align-start,
7669 .vbox.align-start,
7670 .align-start {
7670 .align-start {
7671 /* Old browsers */
7671 /* Old browsers */
7672 -webkit-box-align: start;
7672 -webkit-box-align: start;
7673 -moz-box-align: start;
7673 -moz-box-align: start;
7674 box-align: start;
7674 box-align: start;
7675 /* Modern browsers */
7675 /* Modern browsers */
7676 align-items: flex-start;
7676 align-items: flex-start;
7677 }
7677 }
7678 .hbox.align-end,
7678 .hbox.align-end,
7679 .vbox.align-end,
7679 .vbox.align-end,
7680 .align-end {
7680 .align-end {
7681 /* Old browsers */
7681 /* Old browsers */
7682 -webkit-box-align: end;
7682 -webkit-box-align: end;
7683 -moz-box-align: end;
7683 -moz-box-align: end;
7684 box-align: end;
7684 box-align: end;
7685 /* Modern browsers */
7685 /* Modern browsers */
7686 align-items: flex-end;
7686 align-items: flex-end;
7687 }
7687 }
7688 .hbox.align-center,
7688 .hbox.align-center,
7689 .vbox.align-center,
7689 .vbox.align-center,
7690 .align-center {
7690 .align-center {
7691 /* Old browsers */
7691 /* Old browsers */
7692 -webkit-box-align: center;
7692 -webkit-box-align: center;
7693 -moz-box-align: center;
7693 -moz-box-align: center;
7694 box-align: center;
7694 box-align: center;
7695 /* Modern browsers */
7695 /* Modern browsers */
7696 align-items: center;
7696 align-items: center;
7697 }
7697 }
7698 .hbox.align-baseline,
7698 .hbox.align-baseline,
7699 .vbox.align-baseline,
7699 .vbox.align-baseline,
7700 .align-baseline {
7700 .align-baseline {
7701 /* Old browsers */
7701 /* Old browsers */
7702 -webkit-box-align: baseline;
7702 -webkit-box-align: baseline;
7703 -moz-box-align: baseline;
7703 -moz-box-align: baseline;
7704 box-align: baseline;
7704 box-align: baseline;
7705 /* Modern browsers */
7705 /* Modern browsers */
7706 align-items: baseline;
7706 align-items: baseline;
7707 }
7707 }
7708 .hbox.align-stretch,
7708 .hbox.align-stretch,
7709 .vbox.align-stretch,
7709 .vbox.align-stretch,
7710 .align-stretch {
7710 .align-stretch {
7711 /* Old browsers */
7711 /* Old browsers */
7712 -webkit-box-align: stretch;
7712 -webkit-box-align: stretch;
7713 -moz-box-align: stretch;
7713 -moz-box-align: stretch;
7714 box-align: stretch;
7714 box-align: stretch;
7715 /* Modern browsers */
7715 /* Modern browsers */
7716 align-items: stretch;
7716 align-items: stretch;
7717 }
7717 }
7718 div.error {
7718 div.error {
7719 margin: 2em;
7719 margin: 2em;
7720 text-align: center;
7720 text-align: center;
7721 }
7721 }
7722 div.error > h1 {
7722 div.error > h1 {
7723 font-size: 500%;
7723 font-size: 500%;
7724 line-height: normal;
7724 line-height: normal;
7725 }
7725 }
7726 div.error > p {
7726 div.error > p {
7727 font-size: 200%;
7727 font-size: 200%;
7728 line-height: normal;
7728 line-height: normal;
7729 }
7729 }
7730 div.traceback-wrapper {
7730 div.traceback-wrapper {
7731 text-align: left;
7731 text-align: left;
7732 max-width: 800px;
7732 max-width: 800px;
7733 margin: auto;
7733 margin: auto;
7734 }
7734 }
7735 /**
7735 /**
7736 * Primary styles
7736 * Primary styles
7737 *
7737 *
7738 * Author: IPython Development Team
7738 * Author: IPython Development Team
7739 */
7739 */
7740 body {
7740 body {
7741 background-color: white;
7741 background-color: white;
7742 /* This makes sure that the body covers the entire window and needs to
7742 /* This makes sure that the body covers the entire window and needs to
7743 be in a different element than the display: box in wrapper below */
7743 be in a different element than the display: box in wrapper below */
7744 position: absolute;
7744 position: absolute;
7745 left: 0px;
7745 left: 0px;
7746 right: 0px;
7746 right: 0px;
7747 top: 0px;
7747 top: 0px;
7748 bottom: 0px;
7748 bottom: 0px;
7749 overflow: visible;
7749 overflow: visible;
7750 }
7750 }
7751 div#header {
7751 div#header {
7752 /* Initially hidden to prevent FLOUC */
7752 /* Initially hidden to prevent FLOUC */
7753 display: none;
7753 display: none;
7754 background-color: #ffffff;
7754 background-color: #ffffff;
7755 box-sizing: border-box;
7756 -moz-box-sizing: border-box;
7757 -webkit-box-sizing: border-box;
7758 /* Display over codemirror */
7755 /* Display over codemirror */
7759 z-index: 100;
7756 z-index: 100;
7760 }
7757 }
7761 div#header #header-container {
7758 div#header #header-container {
7762 padding-left: 30px;
7759 padding-left: 30px;
7763 padding-bottom: 5px;
7760 padding-bottom: 5px;
7764 padding-top: 5px;
7761 padding-top: 5px;
7765 box-sizing: border-box;
7762 box-sizing: border-box;
7766 -moz-box-sizing: border-box;
7763 -moz-box-sizing: border-box;
7767 -webkit-box-sizing: border-box;
7764 -webkit-box-sizing: border-box;
7768 }
7765 }
7769 div#header .header-bar {
7766 div#header .header-bar {
7770 width: 100%;
7767 width: 100%;
7771 height: 0px;
7768 height: 0px;
7772 border-bottom: 1px solid #e7e7e7;
7769 border-bottom: 1px solid #e7e7e7;
7773 }
7770 }
7774 #header-spacer {
7771 #header-spacer {
7775 width: 100%;
7772 width: 100%;
7776 visibility: hidden;
7773 visibility: hidden;
7777 }
7774 }
7778 #ipython_notebook {
7775 #ipython_notebook {
7779 padding-left: 0px;
7776 padding-left: 0px;
7780 padding-top: 3px;
7777 padding-top: 3px;
7781 padding-bottom: 3px;
7778 padding-bottom: 3px;
7782 }
7779 }
7783 #noscript {
7780 #noscript {
7784 width: auto;
7781 width: auto;
7785 padding-top: 16px;
7782 padding-top: 16px;
7786 padding-bottom: 16px;
7783 padding-bottom: 16px;
7787 text-align: center;
7784 text-align: center;
7788 font-size: 22px;
7785 font-size: 22px;
7789 color: red;
7786 color: red;
7790 font-weight: bold;
7787 font-weight: bold;
7791 }
7788 }
7792 #ipython_notebook img {
7789 #ipython_notebook img {
7793 font-family: Verdana, "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;
7790 font-family: Verdana, "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;
7794 height: 24px;
7791 height: 24px;
7795 text-decoration: none;
7792 text-decoration: none;
7796 color: black;
7793 color: black;
7797 }
7794 }
7798 #site {
7795 #site {
7799 width: 100%;
7796 width: 100%;
7800 display: none;
7797 display: none;
7801 box-sizing: border-box;
7798 box-sizing: border-box;
7802 -moz-box-sizing: border-box;
7799 -moz-box-sizing: border-box;
7803 -webkit-box-sizing: border-box;
7800 -webkit-box-sizing: border-box;
7804 }
7801 }
7805 /* Smaller buttons */
7802 /* Smaller buttons */
7806 .ui-button .ui-button-text {
7803 .ui-button .ui-button-text {
7807 padding: 0.2em 0.8em;
7804 padding: 0.2em 0.8em;
7808 font-size: 77%;
7805 font-size: 77%;
7809 }
7806 }
7810 input.ui-button {
7807 input.ui-button {
7811 padding: 0.3em 0.9em;
7808 padding: 0.3em 0.9em;
7812 }
7809 }
7813 span#login_widget {
7810 span#login_widget {
7814 float: right;
7811 float: right;
7815 }
7812 }
7816 span#login_widget > .button,
7813 span#login_widget > .button,
7817 #logout {
7814 #logout {
7818 color: #333333;
7815 color: #333333;
7819 background-color: #ffffff;
7816 background-color: #ffffff;
7820 border-color: #cccccc;
7817 border-color: #cccccc;
7821 }
7818 }
7822 span#login_widget > .button:hover,
7819 span#login_widget > .button:hover,
7823 #logout:hover,
7820 #logout:hover,
7824 span#login_widget > .button:focus,
7821 span#login_widget > .button:focus,
7825 #logout:focus,
7822 #logout:focus,
7826 span#login_widget > .button:active,
7823 span#login_widget > .button:active,
7827 #logout:active,
7824 #logout:active,
7828 span#login_widget > .button.active,
7825 span#login_widget > .button.active,
7829 #logout.active,
7826 #logout.active,
7830 .open .dropdown-togglespan#login_widget > .button,
7827 .open .dropdown-togglespan#login_widget > .button,
7831 .open .dropdown-toggle#logout {
7828 .open .dropdown-toggle#logout {
7832 color: #333333;
7829 color: #333333;
7833 background-color: #ebebeb;
7830 background-color: #ebebeb;
7834 border-color: #adadad;
7831 border-color: #adadad;
7835 }
7832 }
7836 span#login_widget > .button:active,
7833 span#login_widget > .button:active,
7837 #logout:active,
7834 #logout:active,
7838 span#login_widget > .button.active,
7835 span#login_widget > .button.active,
7839 #logout.active,
7836 #logout.active,
7840 .open .dropdown-togglespan#login_widget > .button,
7837 .open .dropdown-togglespan#login_widget > .button,
7841 .open .dropdown-toggle#logout {
7838 .open .dropdown-toggle#logout {
7842 background-image: none;
7839 background-image: none;
7843 }
7840 }
7844 span#login_widget > .button.disabled,
7841 span#login_widget > .button.disabled,
7845 #logout.disabled,
7842 #logout.disabled,
7846 span#login_widget > .button[disabled],
7843 span#login_widget > .button[disabled],
7847 #logout[disabled],
7844 #logout[disabled],
7848 fieldset[disabled] span#login_widget > .button,
7845 fieldset[disabled] span#login_widget > .button,
7849 fieldset[disabled] #logout,
7846 fieldset[disabled] #logout,
7850 span#login_widget > .button.disabled:hover,
7847 span#login_widget > .button.disabled:hover,
7851 #logout.disabled:hover,
7848 #logout.disabled:hover,
7852 span#login_widget > .button[disabled]:hover,
7849 span#login_widget > .button[disabled]:hover,
7853 #logout[disabled]:hover,
7850 #logout[disabled]:hover,
7854 fieldset[disabled] span#login_widget > .button:hover,
7851 fieldset[disabled] span#login_widget > .button:hover,
7855 fieldset[disabled] #logout:hover,
7852 fieldset[disabled] #logout:hover,
7856 span#login_widget > .button.disabled:focus,
7853 span#login_widget > .button.disabled:focus,
7857 #logout.disabled:focus,
7854 #logout.disabled:focus,
7858 span#login_widget > .button[disabled]:focus,
7855 span#login_widget > .button[disabled]:focus,
7859 #logout[disabled]:focus,
7856 #logout[disabled]:focus,
7860 fieldset[disabled] span#login_widget > .button:focus,
7857 fieldset[disabled] span#login_widget > .button:focus,
7861 fieldset[disabled] #logout:focus,
7858 fieldset[disabled] #logout:focus,
7862 span#login_widget > .button.disabled:active,
7859 span#login_widget > .button.disabled:active,
7863 #logout.disabled:active,
7860 #logout.disabled:active,
7864 span#login_widget > .button[disabled]:active,
7861 span#login_widget > .button[disabled]:active,
7865 #logout[disabled]:active,
7862 #logout[disabled]:active,
7866 fieldset[disabled] span#login_widget > .button:active,
7863 fieldset[disabled] span#login_widget > .button:active,
7867 fieldset[disabled] #logout:active,
7864 fieldset[disabled] #logout:active,
7868 span#login_widget > .button.disabled.active,
7865 span#login_widget > .button.disabled.active,
7869 #logout.disabled.active,
7866 #logout.disabled.active,
7870 span#login_widget > .button[disabled].active,
7867 span#login_widget > .button[disabled].active,
7871 #logout[disabled].active,
7868 #logout[disabled].active,
7872 fieldset[disabled] span#login_widget > .button.active,
7869 fieldset[disabled] span#login_widget > .button.active,
7873 fieldset[disabled] #logout.active {
7870 fieldset[disabled] #logout.active {
7874 background-color: #ffffff;
7871 background-color: #ffffff;
7875 border-color: #cccccc;
7872 border-color: #cccccc;
7876 }
7873 }
7877 span#login_widget > .button .badge,
7874 span#login_widget > .button .badge,
7878 #logout .badge {
7875 #logout .badge {
7879 color: #ffffff;
7876 color: #ffffff;
7880 background-color: #333333;
7877 background-color: #333333;
7881 }
7878 }
7882 .nav-header {
7879 .nav-header {
7883 text-transform: none;
7880 text-transform: none;
7884 }
7881 }
7885 #header > span {
7882 #header > span {
7886 margin-top: 10px;
7883 margin-top: 10px;
7887 }
7884 }
7888 .modal_stretch .modal-dialog {
7885 .modal_stretch .modal-dialog {
7889 /* Old browsers */
7886 /* Old browsers */
7890 display: -webkit-box;
7887 display: -webkit-box;
7891 -webkit-box-orient: vertical;
7888 -webkit-box-orient: vertical;
7892 -webkit-box-align: stretch;
7889 -webkit-box-align: stretch;
7893 display: -moz-box;
7890 display: -moz-box;
7894 -moz-box-orient: vertical;
7891 -moz-box-orient: vertical;
7895 -moz-box-align: stretch;
7892 -moz-box-align: stretch;
7896 display: box;
7893 display: box;
7897 box-orient: vertical;
7894 box-orient: vertical;
7898 box-align: stretch;
7895 box-align: stretch;
7899 /* Modern browsers */
7896 /* Modern browsers */
7900 display: flex;
7897 display: flex;
7901 flex-direction: column;
7898 flex-direction: column;
7902 align-items: stretch;
7899 align-items: stretch;
7903 min-height: 80%;
7900 min-height: 80%;
7904 }
7901 }
7905 .modal_stretch .modal-dialog .modal-body {
7902 .modal_stretch .modal-dialog .modal-body {
7906 max-height: none;
7903 max-height: none;
7907 flex: 1;
7904 flex: 1;
7908 }
7905 }
7909 @media (min-width: 768px) {
7906 @media (min-width: 768px) {
7910 .modal .modal-dialog {
7907 .modal .modal-dialog {
7911 width: 700px;
7908 width: 700px;
7912 }
7909 }
7913 }
7910 }
7914 /*!
7911 /*!
7915 *
7912 *
7916 * IPython auth
7913 * IPython auth
7917 *
7914 *
7918 */
7915 */
7919 .center-nav {
7916 .center-nav {
7920 display: inline-block;
7917 display: inline-block;
7921 margin-bottom: -4px;
7918 margin-bottom: -4px;
7922 }
7919 }
7923 /*!
7920 /*!
7924 *
7921 *
7925 * IPython tree view
7922 * IPython tree view
7926 *
7923 *
7927 */
7924 */
7928 /* We need an invisible input field on top of the sentense*/
7925 /* We need an invisible input field on top of the sentense*/
7929 /* "Drag file onto the list ..." */
7926 /* "Drag file onto the list ..." */
7930 .alternate_upload {
7927 .alternate_upload {
7931 background-color: none;
7928 background-color: none;
7932 display: inline;
7929 display: inline;
7933 }
7930 }
7934 .alternate_upload.form {
7931 .alternate_upload.form {
7935 padding: 0;
7932 padding: 0;
7936 margin: 0;
7933 margin: 0;
7937 }
7934 }
7938 .alternate_upload input.fileinput {
7935 .alternate_upload input.fileinput {
7939 display: inline;
7936 display: inline;
7940 opacity: 0;
7937 opacity: 0;
7941 z-index: 2;
7938 z-index: 2;
7942 width: 12ex;
7939 width: 12ex;
7943 margin-right: -12ex;
7940 margin-right: -12ex;
7944 }
7941 }
7945 .alternate_upload .input-overlay {
7942 .alternate_upload .input-overlay {
7946 display: inline-block;
7943 display: inline-block;
7947 font-weight: bold;
7944 font-weight: bold;
7948 }
7945 }
7949 /**
7946 /**
7950 * Primary styles
7947 * Primary styles
7951 *
7948 *
7952 * Author: IPython Development Team
7949 * Author: IPython Development Team
7953 */
7950 */
7954 ul#tabs {
7951 ul#tabs {
7955 margin-bottom: 4px;
7952 margin-bottom: 4px;
7956 }
7953 }
7957 ul#tabs a {
7954 ul#tabs a {
7958 padding-top: 6px;
7955 padding-top: 6px;
7959 padding-bottom: 4px;
7956 padding-bottom: 4px;
7960 }
7957 }
7961 ul.breadcrumb a:focus,
7958 ul.breadcrumb a:focus,
7962 ul.breadcrumb a:hover {
7959 ul.breadcrumb a:hover {
7963 text-decoration: none;
7960 text-decoration: none;
7964 }
7961 }
7965 ul.breadcrumb i.icon-home {
7962 ul.breadcrumb i.icon-home {
7966 font-size: 16px;
7963 font-size: 16px;
7967 margin-right: 4px;
7964 margin-right: 4px;
7968 }
7965 }
7969 ul.breadcrumb span {
7966 ul.breadcrumb span {
7970 color: #5e5e5e;
7967 color: #5e5e5e;
7971 }
7968 }
7972 .list_toolbar {
7969 .list_toolbar {
7973 padding: 4px 0 4px 0;
7970 padding: 4px 0 4px 0;
7974 vertical-align: middle;
7971 vertical-align: middle;
7975 }
7972 }
7976 .list_toolbar .tree-buttons {
7973 .list_toolbar .tree-buttons {
7977 padding-top: 2px;
7974 padding-top: 2px;
7978 }
7975 }
7979 .list_toolbar [class*="span"] {
7976 .list_toolbar [class*="span"] {
7980 min-height: 24px;
7977 min-height: 24px;
7981 }
7978 }
7982 .list_header {
7979 .list_header {
7983 font-weight: bold;
7980 font-weight: bold;
7984 }
7981 }
7985 .list_container {
7982 .list_container {
7986 margin-top: 4px;
7983 margin-top: 4px;
7987 margin-bottom: 20px;
7984 margin-bottom: 20px;
7988 border: 1px solid #ababab;
7985 border: 1px solid #ababab;
7989 border-radius: 4px;
7986 border-radius: 4px;
7990 }
7987 }
7991 .list_container > div {
7988 .list_container > div {
7992 border-bottom: 1px solid #ababab;
7989 border-bottom: 1px solid #ababab;
7993 }
7990 }
7994 .list_container > div:hover .list-item {
7991 .list_container > div:hover .list-item {
7995 background-color: red;
7992 background-color: red;
7996 }
7993 }
7997 .list_container > div:last-child {
7994 .list_container > div:last-child {
7998 border: none;
7995 border: none;
7999 }
7996 }
8000 .list_item:hover .list_item {
7997 .list_item:hover .list_item {
8001 background-color: #ddd;
7998 background-color: #ddd;
8002 }
7999 }
8003 .list_item a {
8000 .list_item a {
8004 text-decoration: none;
8001 text-decoration: none;
8005 }
8002 }
8006 .action_col {
8003 .action_col {
8007 text-align: right;
8004 text-align: right;
8008 }
8005 }
8009 .list_header > div,
8006 .list_header > div,
8010 .list_item > div {
8007 .list_item > div {
8011 padding-top: 4px;
8008 padding-top: 4px;
8012 padding-bottom: 4px;
8009 padding-bottom: 4px;
8013 padding-left: 7px;
8010 padding-left: 7px;
8014 padding-right: 7px;
8011 padding-right: 7px;
8015 line-height: 22px;
8012 line-height: 22px;
8016 }
8013 }
8017 .item_name {
8014 .item_name {
8018 line-height: 22px;
8015 line-height: 22px;
8019 height: 24px;
8016 height: 24px;
8020 }
8017 }
8021 .item_icon {
8018 .item_icon {
8022 font-size: 14px;
8019 font-size: 14px;
8023 color: #5e5e5e;
8020 color: #5e5e5e;
8024 margin-right: 7px;
8021 margin-right: 7px;
8025 }
8022 }
8026 .item_buttons {
8023 .item_buttons {
8027 line-height: 1em;
8024 line-height: 1em;
8028 }
8025 }
8029 .item_buttons .btn {
8026 .item_buttons .btn {
8030 min-width: 13ex;
8027 min-width: 13ex;
8031 }
8028 }
8032 .toolbar_info {
8029 .toolbar_info {
8033 height: 24px;
8030 height: 24px;
8034 line-height: 24px;
8031 line-height: 24px;
8035 }
8032 }
8036 input.nbname_input,
8033 input.nbname_input,
8037 input.engine_num_input {
8034 input.engine_num_input {
8038 padding-top: 3px;
8035 padding-top: 3px;
8039 padding-bottom: 3px;
8036 padding-bottom: 3px;
8040 height: 22px;
8037 height: 22px;
8041 line-height: 14px;
8038 line-height: 14px;
8042 margin: 0px;
8039 margin: 0px;
8043 }
8040 }
8044 input.engine_num_input {
8041 input.engine_num_input {
8045 width: 60px;
8042 width: 60px;
8046 }
8043 }
8047 .highlight_text {
8044 .highlight_text {
8048 color: blue;
8045 color: blue;
8049 }
8046 }
8050 #project_name > .breadcrumb {
8047 #project_name > .breadcrumb {
8051 padding: 0px;
8048 padding: 0px;
8052 margin-bottom: 0px;
8049 margin-bottom: 0px;
8053 background-color: transparent;
8050 background-color: transparent;
8054 font-weight: bold;
8051 font-weight: bold;
8055 }
8052 }
8056 .tab-content .row {
8053 .tab-content .row {
8057 margin-left: 0px;
8054 margin-left: 0px;
8058 margin-right: 0px;
8055 margin-right: 0px;
8059 }
8056 }
8060 .folder_icon:before {
8057 .folder_icon:before {
8061 display: inline-block;
8058 display: inline-block;
8062 font: normal normal normal 14px/1 FontAwesome;
8059 font: normal normal normal 14px/1 FontAwesome;
8063 font-size: inherit;
8060 font-size: inherit;
8064 text-rendering: auto;
8061 text-rendering: auto;
8065 -webkit-font-smoothing: antialiased;
8062 -webkit-font-smoothing: antialiased;
8066 -moz-osx-font-smoothing: grayscale;
8063 -moz-osx-font-smoothing: grayscale;
8067 content: "\f114";
8064 content: "\f114";
8068 }
8065 }
8069 .folder_icon:before.pull-left {
8066 .folder_icon:before.pull-left {
8070 margin-right: .3em;
8067 margin-right: .3em;
8071 }
8068 }
8072 .folder_icon:before.pull-right {
8069 .folder_icon:before.pull-right {
8073 margin-left: .3em;
8070 margin-left: .3em;
8074 }
8071 }
8075 .notebook_icon:before {
8072 .notebook_icon:before {
8076 display: inline-block;
8073 display: inline-block;
8077 font: normal normal normal 14px/1 FontAwesome;
8074 font: normal normal normal 14px/1 FontAwesome;
8078 font-size: inherit;
8075 font-size: inherit;
8079 text-rendering: auto;
8076 text-rendering: auto;
8080 -webkit-font-smoothing: antialiased;
8077 -webkit-font-smoothing: antialiased;
8081 -moz-osx-font-smoothing: grayscale;
8078 -moz-osx-font-smoothing: grayscale;
8082 content: "\f02d";
8079 content: "\f02d";
8083 }
8080 }
8084 .notebook_icon:before.pull-left {
8081 .notebook_icon:before.pull-left {
8085 margin-right: .3em;
8082 margin-right: .3em;
8086 }
8083 }
8087 .notebook_icon:before.pull-right {
8084 .notebook_icon:before.pull-right {
8088 margin-left: .3em;
8085 margin-left: .3em;
8089 }
8086 }
8090 .file_icon:before {
8087 .file_icon:before {
8091 display: inline-block;
8088 display: inline-block;
8092 font: normal normal normal 14px/1 FontAwesome;
8089 font: normal normal normal 14px/1 FontAwesome;
8093 font-size: inherit;
8090 font-size: inherit;
8094 text-rendering: auto;
8091 text-rendering: auto;
8095 -webkit-font-smoothing: antialiased;
8092 -webkit-font-smoothing: antialiased;
8096 -moz-osx-font-smoothing: grayscale;
8093 -moz-osx-font-smoothing: grayscale;
8097 content: "\f016";
8094 content: "\f016";
8098 }
8095 }
8099 .file_icon:before.pull-left {
8096 .file_icon:before.pull-left {
8100 margin-right: .3em;
8097 margin-right: .3em;
8101 }
8098 }
8102 .file_icon:before.pull-right {
8099 .file_icon:before.pull-right {
8103 margin-left: .3em;
8100 margin-left: .3em;
8104 }
8101 }
8105 ul#new-notebook-menu {
8102 ul#new-notebook-menu {
8106 left: auto;
8103 left: auto;
8107 right: 0;
8104 right: 0;
8108 }
8105 }
8109 .kernel-menu-icon {
8106 .kernel-menu-icon {
8110 padding-right: 12px;
8107 padding-right: 12px;
8111 width: 24px;
8108 width: 24px;
8112 content: "\f096";
8109 content: "\f096";
8113 }
8110 }
8114 .kernel-menu-icon:before {
8111 .kernel-menu-icon:before {
8115 content: "\f096";
8112 content: "\f096";
8116 }
8113 }
8117 .kernel-menu-icon-current:before {
8114 .kernel-menu-icon-current:before {
8118 content: "\f00c";
8115 content: "\f00c";
8119 }
8116 }
8120 /*!
8117 /*!
8121 *
8118 *
8119 * IPython text editor webapp
8120 *
8121 */
8122 .selected-keymap i.fa {
8123 padding: 0px 5px;
8124 }
8125 .selected-keymap i.fa:before {
8126 content: "\f00c";
8127 }
8128 #mode-menu {
8129 overflow: auto;
8130 max-height: 20em;
8131 }
8132 #texteditor-container {
8133 border-bottom: 1px solid #ccc;
8134 }
8135 #filename {
8136 font-size: 16pt;
8137 display: table;
8138 padding: 0px 5px;
8139 }
8140 /*!
8141 *
8122 * IPython notebook
8142 * IPython notebook
8123 *
8143 *
8124 */
8144 */
8125 /* CSS font colors for translated ANSI colors. */
8145 /* CSS font colors for translated ANSI colors. */
8126 .ansibold {
8146 .ansibold {
8127 font-weight: bold;
8147 font-weight: bold;
8128 }
8148 }
8129 /* use dark versions for foreground, to improve visibility */
8149 /* use dark versions for foreground, to improve visibility */
8130 .ansiblack {
8150 .ansiblack {
8131 color: black;
8151 color: black;
8132 }
8152 }
8133 .ansired {
8153 .ansired {
8134 color: darkred;
8154 color: darkred;
8135 }
8155 }
8136 .ansigreen {
8156 .ansigreen {
8137 color: darkgreen;
8157 color: darkgreen;
8138 }
8158 }
8139 .ansiyellow {
8159 .ansiyellow {
8140 color: #c4a000;
8160 color: #c4a000;
8141 }
8161 }
8142 .ansiblue {
8162 .ansiblue {
8143 color: darkblue;
8163 color: darkblue;
8144 }
8164 }
8145 .ansipurple {
8165 .ansipurple {
8146 color: darkviolet;
8166 color: darkviolet;
8147 }
8167 }
8148 .ansicyan {
8168 .ansicyan {
8149 color: steelblue;
8169 color: steelblue;
8150 }
8170 }
8151 .ansigray {
8171 .ansigray {
8152 color: gray;
8172 color: gray;
8153 }
8173 }
8154 /* and light for background, for the same reason */
8174 /* and light for background, for the same reason */
8155 .ansibgblack {
8175 .ansibgblack {
8156 background-color: black;
8176 background-color: black;
8157 }
8177 }
8158 .ansibgred {
8178 .ansibgred {
8159 background-color: red;
8179 background-color: red;
8160 }
8180 }
8161 .ansibggreen {
8181 .ansibggreen {
8162 background-color: green;
8182 background-color: green;
8163 }
8183 }
8164 .ansibgyellow {
8184 .ansibgyellow {
8165 background-color: yellow;
8185 background-color: yellow;
8166 }
8186 }
8167 .ansibgblue {
8187 .ansibgblue {
8168 background-color: blue;
8188 background-color: blue;
8169 }
8189 }
8170 .ansibgpurple {
8190 .ansibgpurple {
8171 background-color: magenta;
8191 background-color: magenta;
8172 }
8192 }
8173 .ansibgcyan {
8193 .ansibgcyan {
8174 background-color: cyan;
8194 background-color: cyan;
8175 }
8195 }
8176 .ansibggray {
8196 .ansibggray {
8177 background-color: gray;
8197 background-color: gray;
8178 }
8198 }
8179 div.cell {
8199 div.cell {
8180 border: 1px solid transparent;
8200 border: 1px solid transparent;
8181 /* Old browsers */
8201 /* Old browsers */
8182 display: -webkit-box;
8202 display: -webkit-box;
8183 -webkit-box-orient: vertical;
8203 -webkit-box-orient: vertical;
8184 -webkit-box-align: stretch;
8204 -webkit-box-align: stretch;
8185 display: -moz-box;
8205 display: -moz-box;
8186 -moz-box-orient: vertical;
8206 -moz-box-orient: vertical;
8187 -moz-box-align: stretch;
8207 -moz-box-align: stretch;
8188 display: box;
8208 display: box;
8189 box-orient: vertical;
8209 box-orient: vertical;
8190 box-align: stretch;
8210 box-align: stretch;
8191 /* Modern browsers */
8211 /* Modern browsers */
8192 display: flex;
8212 display: flex;
8193 flex-direction: column;
8213 flex-direction: column;
8194 align-items: stretch;
8214 align-items: stretch;
8195 border-radius: 4px;
8215 border-radius: 4px;
8196 box-sizing: border-box;
8216 box-sizing: border-box;
8197 -moz-box-sizing: border-box;
8217 -moz-box-sizing: border-box;
8198 -webkit-box-sizing: border-box;
8218 -webkit-box-sizing: border-box;
8199 border-width: thin;
8219 border-width: thin;
8200 border-style: solid;
8220 border-style: solid;
8201 width: 100%;
8221 width: 100%;
8202 padding: 5px 5px 5px 0px;
8222 padding: 5px 5px 5px 0px;
8203 /* This acts as a spacer between cells, that is outside the border */
8223 /* This acts as a spacer between cells, that is outside the border */
8204 margin: 0px;
8224 margin: 0px;
8205 outline: none;
8225 outline: none;
8206 }
8226 }
8207 div.cell.selected {
8227 div.cell.selected {
8208 border-color: #ababab;
8228 border-color: #ababab;
8209 }
8229 }
8210 div.cell.edit_mode {
8230 div.cell.edit_mode {
8211 border-color: green;
8231 border-color: green;
8212 }
8232 }
8213 div.prompt {
8233 div.prompt {
8214 /* This needs to be wide enough for 3 digit prompt numbers: In[100]: */
8234 /* This needs to be wide enough for 3 digit prompt numbers: In[100]: */
8215 min-width: 15ex;
8235 min-width: 15ex;
8216 /* This padding is tuned to match the padding on the CodeMirror editor. */
8236 /* This padding is tuned to match the padding on the CodeMirror editor. */
8217 padding: 0.4em;
8237 padding: 0.4em;
8218 margin: 0px;
8238 margin: 0px;
8219 font-family: monospace;
8239 font-family: monospace;
8220 text-align: right;
8240 text-align: right;
8221 /* This has to match that of the the CodeMirror class line-height below */
8241 /* This has to match that of the the CodeMirror class line-height below */
8222 line-height: 1.21429em;
8242 line-height: 1.21429em;
8223 }
8243 }
8224 @media (max-width: 480px) {
8244 @media (max-width: 480px) {
8225 div.prompt {
8245 div.prompt {
8226 text-align: left;
8246 text-align: left;
8227 }
8247 }
8228 }
8248 }
8229 div.inner_cell {
8249 div.inner_cell {
8230 /* Old browsers */
8250 /* Old browsers */
8231 display: -webkit-box;
8251 display: -webkit-box;
8232 -webkit-box-orient: vertical;
8252 -webkit-box-orient: vertical;
8233 -webkit-box-align: stretch;
8253 -webkit-box-align: stretch;
8234 display: -moz-box;
8254 display: -moz-box;
8235 -moz-box-orient: vertical;
8255 -moz-box-orient: vertical;
8236 -moz-box-align: stretch;
8256 -moz-box-align: stretch;
8237 display: box;
8257 display: box;
8238 box-orient: vertical;
8258 box-orient: vertical;
8239 box-align: stretch;
8259 box-align: stretch;
8240 /* Modern browsers */
8260 /* Modern browsers */
8241 display: flex;
8261 display: flex;
8242 flex-direction: column;
8262 flex-direction: column;
8243 align-items: stretch;
8263 align-items: stretch;
8244 /* Old browsers */
8264 /* Old browsers */
8245 -webkit-box-flex: 1;
8265 -webkit-box-flex: 1;
8246 -moz-box-flex: 1;
8266 -moz-box-flex: 1;
8247 box-flex: 1;
8267 box-flex: 1;
8248 /* Modern browsers */
8268 /* Modern browsers */
8249 flex: 1;
8269 flex: 1;
8250 }
8270 }
8251 /* input_area and input_prompt must match in top border and margin for alignment */
8271 /* input_area and input_prompt must match in top border and margin for alignment */
8252 div.input_area {
8272 div.input_area {
8253 border: 1px solid #cfcfcf;
8273 border: 1px solid #cfcfcf;
8254 border-radius: 4px;
8274 border-radius: 4px;
8255 background: #f7f7f7;
8275 background: #f7f7f7;
8256 line-height: 1.21429em;
8276 line-height: 1.21429em;
8257 }
8277 }
8258 /* This is needed so that empty prompt areas can collapse to zero height when there
8278 /* This is needed so that empty prompt areas can collapse to zero height when there
8259 is no content in the output_subarea and the prompt. The main purpose of this is
8279 is no content in the output_subarea and the prompt. The main purpose of this is
8260 to make sure that empty JavaScript output_subareas have no height. */
8280 to make sure that empty JavaScript output_subareas have no height. */
8261 div.prompt:empty {
8281 div.prompt:empty {
8262 padding-top: 0;
8282 padding-top: 0;
8263 padding-bottom: 0;
8283 padding-bottom: 0;
8264 }
8284 }
8265 div.unrecognized_cell {
8285 div.unrecognized_cell {
8266 padding: 5px 5px 5px 0px;
8286 padding: 5px 5px 5px 0px;
8267 /* Old browsers */
8287 /* Old browsers */
8268 display: -webkit-box;
8288 display: -webkit-box;
8269 -webkit-box-orient: horizontal;
8289 -webkit-box-orient: horizontal;
8270 -webkit-box-align: stretch;
8290 -webkit-box-align: stretch;
8271 display: -moz-box;
8291 display: -moz-box;
8272 -moz-box-orient: horizontal;
8292 -moz-box-orient: horizontal;
8273 -moz-box-align: stretch;
8293 -moz-box-align: stretch;
8274 display: box;
8294 display: box;
8275 box-orient: horizontal;
8295 box-orient: horizontal;
8276 box-align: stretch;
8296 box-align: stretch;
8277 /* Modern browsers */
8297 /* Modern browsers */
8278 display: flex;
8298 display: flex;
8279 flex-direction: row;
8299 flex-direction: row;
8280 align-items: stretch;
8300 align-items: stretch;
8281 }
8301 }
8282 div.unrecognized_cell .inner_cell {
8302 div.unrecognized_cell .inner_cell {
8283 border-radius: 4px;
8303 border-radius: 4px;
8284 padding: 5px;
8304 padding: 5px;
8285 font-weight: bold;
8305 font-weight: bold;
8286 color: red;
8306 color: red;
8287 border: 1px solid #cfcfcf;
8307 border: 1px solid #cfcfcf;
8288 background: #eaeaea;
8308 background: #eaeaea;
8289 }
8309 }
8290 div.unrecognized_cell .inner_cell a {
8310 div.unrecognized_cell .inner_cell a {
8291 color: inherit;
8311 color: inherit;
8292 text-decoration: none;
8312 text-decoration: none;
8293 }
8313 }
8294 div.unrecognized_cell .inner_cell a:hover {
8314 div.unrecognized_cell .inner_cell a:hover {
8295 color: inherit;
8315 color: inherit;
8296 text-decoration: none;
8316 text-decoration: none;
8297 }
8317 }
8298 @media (max-width: 480px) {
8318 @media (max-width: 480px) {
8299 div.unrecognized_cell > div.prompt {
8319 div.unrecognized_cell > div.prompt {
8300 display: none;
8320 display: none;
8301 }
8321 }
8302 }
8322 }
8303 /* any special styling for code cells that are currently running goes here */
8323 /* any special styling for code cells that are currently running goes here */
8304 div.input {
8324 div.input {
8305 page-break-inside: avoid;
8325 page-break-inside: avoid;
8306 /* Old browsers */
8326 /* Old browsers */
8307 display: -webkit-box;
8327 display: -webkit-box;
8308 -webkit-box-orient: horizontal;
8328 -webkit-box-orient: horizontal;
8309 -webkit-box-align: stretch;
8329 -webkit-box-align: stretch;
8310 display: -moz-box;
8330 display: -moz-box;
8311 -moz-box-orient: horizontal;
8331 -moz-box-orient: horizontal;
8312 -moz-box-align: stretch;
8332 -moz-box-align: stretch;
8313 display: box;
8333 display: box;
8314 box-orient: horizontal;
8334 box-orient: horizontal;
8315 box-align: stretch;
8335 box-align: stretch;
8316 /* Modern browsers */
8336 /* Modern browsers */
8317 display: flex;
8337 display: flex;
8318 flex-direction: row;
8338 flex-direction: row;
8319 align-items: stretch;
8339 align-items: stretch;
8320 }
8340 }
8321 @media (max-width: 480px) {
8341 @media (max-width: 480px) {
8322 div.input {
8342 div.input {
8323 /* Old browsers */
8343 /* Old browsers */
8324 display: -webkit-box;
8344 display: -webkit-box;
8325 -webkit-box-orient: vertical;
8345 -webkit-box-orient: vertical;
8326 -webkit-box-align: stretch;
8346 -webkit-box-align: stretch;
8327 display: -moz-box;
8347 display: -moz-box;
8328 -moz-box-orient: vertical;
8348 -moz-box-orient: vertical;
8329 -moz-box-align: stretch;
8349 -moz-box-align: stretch;
8330 display: box;
8350 display: box;
8331 box-orient: vertical;
8351 box-orient: vertical;
8332 box-align: stretch;
8352 box-align: stretch;
8333 /* Modern browsers */
8353 /* Modern browsers */
8334 display: flex;
8354 display: flex;
8335 flex-direction: column;
8355 flex-direction: column;
8336 align-items: stretch;
8356 align-items: stretch;
8337 }
8357 }
8338 }
8358 }
8339 /* input_area and input_prompt must match in top border and margin for alignment */
8359 /* input_area and input_prompt must match in top border and margin for alignment */
8340 div.input_prompt {
8360 div.input_prompt {
8341 color: navy;
8361 color: navy;
8342 border-top: 1px solid transparent;
8362 border-top: 1px solid transparent;
8343 }
8363 }
8344 div.input_area > div.highlight {
8364 div.input_area > div.highlight {
8345 margin: 0.4em;
8365 margin: 0.4em;
8346 border: none;
8366 border: none;
8347 padding: 0px;
8367 padding: 0px;
8348 background-color: transparent;
8368 background-color: transparent;
8349 }
8369 }
8350 div.input_area > div.highlight > pre {
8370 div.input_area > div.highlight > pre {
8351 margin: 0px;
8371 margin: 0px;
8352 border: none;
8372 border: none;
8353 padding: 0px;
8373 padding: 0px;
8354 background-color: transparent;
8374 background-color: transparent;
8355 }
8375 }
8356 /* The following gets added to the <head> if it is detected that the user has a
8376 /* The following gets added to the <head> if it is detected that the user has a
8357 * monospace font with inconsistent normal/bold/italic height. See
8377 * monospace font with inconsistent normal/bold/italic height. See
8358 * notebookmain.js. Such fonts will have keywords vertically offset with
8378 * notebookmain.js. Such fonts will have keywords vertically offset with
8359 * respect to the rest of the text. The user should select a better font.
8379 * respect to the rest of the text. The user should select a better font.
8360 * See: https://github.com/ipython/ipython/issues/1503
8380 * See: https://github.com/ipython/ipython/issues/1503
8361 *
8381 *
8362 * .CodeMirror span {
8382 * .CodeMirror span {
8363 * vertical-align: bottom;
8383 * vertical-align: bottom;
8364 * }
8384 * }
8365 */
8385 */
8366 .CodeMirror {
8386 .CodeMirror {
8367 line-height: 1.21429em;
8387 line-height: 1.21429em;
8368 /* Changed from 1em to our global default */
8388 /* Changed from 1em to our global default */
8369 height: auto;
8389 height: auto;
8370 /* Changed to auto to autogrow */
8390 /* Changed to auto to autogrow */
8371 background: none;
8391 background: none;
8372 /* Changed from white to allow our bg to show through */
8392 /* Changed from white to allow our bg to show through */
8373 }
8393 }
8374 .CodeMirror-scroll {
8394 .CodeMirror-scroll {
8375 /* The CodeMirror docs are a bit fuzzy on if overflow-y should be hidden or visible.*/
8395 /* The CodeMirror docs are a bit fuzzy on if overflow-y should be hidden or visible.*/
8376 /* We have found that if it is visible, vertical scrollbars appear with font size changes.*/
8396 /* We have found that if it is visible, vertical scrollbars appear with font size changes.*/
8377 overflow-y: hidden;
8397 overflow-y: hidden;
8378 overflow-x: auto;
8398 overflow-x: auto;
8379 }
8399 }
8380 .CodeMirror-lines {
8400 .CodeMirror-lines {
8381 /* In CM2, this used to be 0.4em, but in CM3 it went to 4px. We need the em value because */
8401 /* In CM2, this used to be 0.4em, but in CM3 it went to 4px. We need the em value because */
8382 /* we have set a different line-height and want this to scale with that. */
8402 /* we have set a different line-height and want this to scale with that. */
8383 padding: 0.4em;
8403 padding: 0.4em;
8384 }
8404 }
8385 .CodeMirror-linenumber {
8405 .CodeMirror-linenumber {
8386 padding: 0 8px 0 4px;
8406 padding: 0 8px 0 4px;
8387 }
8407 }
8388 .CodeMirror-gutters {
8408 .CodeMirror-gutters {
8389 border-bottom-left-radius: 4px;
8409 border-bottom-left-radius: 4px;
8390 border-top-left-radius: 4px;
8410 border-top-left-radius: 4px;
8391 }
8411 }
8392 .CodeMirror pre {
8412 .CodeMirror pre {
8393 /* In CM3 this went to 4px from 0 in CM2. We need the 0 value because of how we size */
8413 /* In CM3 this went to 4px from 0 in CM2. We need the 0 value because of how we size */
8394 /* .CodeMirror-lines */
8414 /* .CodeMirror-lines */
8395 padding: 0;
8415 padding: 0;
8396 border: 0;
8416 border: 0;
8397 border-radius: 0;
8417 border-radius: 0;
8398 }
8418 }
8399 .CodeMirror-vscrollbar,
8419 .CodeMirror-vscrollbar,
8400 .CodeMirror-hscrollbar {
8420 .CodeMirror-hscrollbar {
8401 display: none !important;
8421 display: none !important;
8402 }
8422 }
8403 /*
8423 /*
8404
8424
8405 Original style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>
8425 Original style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>
8406 Adapted from GitHub theme
8426 Adapted from GitHub theme
8407
8427
8408 */
8428 */
8409 .highlight-base {
8429 .highlight-base {
8410 color: #000000;
8430 color: #000000;
8411 }
8431 }
8412 .highlight-variable {
8432 .highlight-variable {
8413 color: #000000;
8433 color: #000000;
8414 }
8434 }
8415 .highlight-variable-2 {
8435 .highlight-variable-2 {
8416 color: #1a1a1a;
8436 color: #1a1a1a;
8417 }
8437 }
8418 .highlight-variable-3 {
8438 .highlight-variable-3 {
8419 color: #333333;
8439 color: #333333;
8420 }
8440 }
8421 .highlight-string {
8441 .highlight-string {
8422 color: #BA2121;
8442 color: #BA2121;
8423 }
8443 }
8424 .highlight-comment {
8444 .highlight-comment {
8425 color: #408080;
8445 color: #408080;
8426 font-style: italic;
8446 font-style: italic;
8427 }
8447 }
8428 .highlight-number {
8448 .highlight-number {
8429 color: #080;
8449 color: #080;
8430 }
8450 }
8431 .highlight-atom {
8451 .highlight-atom {
8432 color: #88F;
8452 color: #88F;
8433 }
8453 }
8434 .highlight-keyword {
8454 .highlight-keyword {
8435 color: #008000;
8455 color: #008000;
8436 font-weight: bold;
8456 font-weight: bold;
8437 }
8457 }
8438 .highlight-builtin {
8458 .highlight-builtin {
8439 color: #008000;
8459 color: #008000;
8440 }
8460 }
8441 .highlight-error {
8461 .highlight-error {
8442 color: #f00;
8462 color: #f00;
8443 }
8463 }
8444 .highlight-operator {
8464 .highlight-operator {
8445 color: #AA22FF;
8465 color: #AA22FF;
8446 font-weight: bold;
8466 font-weight: bold;
8447 }
8467 }
8448 .highlight-meta {
8468 .highlight-meta {
8449 color: #AA22FF;
8469 color: #AA22FF;
8450 }
8470 }
8451 /* previously not defined, copying from default codemirror */
8471 /* previously not defined, copying from default codemirror */
8452 .highlight-def {
8472 .highlight-def {
8453 color: #00f;
8473 color: #00f;
8454 }
8474 }
8455 .highlight-string-2 {
8475 .highlight-string-2 {
8456 color: #f50;
8476 color: #f50;
8457 }
8477 }
8458 .highlight-qualifier {
8478 .highlight-qualifier {
8459 color: #555;
8479 color: #555;
8460 }
8480 }
8461 .highlight-bracket {
8481 .highlight-bracket {
8462 color: #997;
8482 color: #997;
8463 }
8483 }
8464 .highlight-tag {
8484 .highlight-tag {
8465 color: #170;
8485 color: #170;
8466 }
8486 }
8467 .highlight-attribute {
8487 .highlight-attribute {
8468 color: #00c;
8488 color: #00c;
8469 }
8489 }
8470 .highlight-header {
8490 .highlight-header {
8471 color: blue;
8491 color: blue;
8472 }
8492 }
8473 .highlight-quote {
8493 .highlight-quote {
8474 color: #090;
8494 color: #090;
8475 }
8495 }
8476 .highlight-link {
8496 .highlight-link {
8477 color: #00c;
8497 color: #00c;
8478 }
8498 }
8479 /* apply the same style to codemirror */
8499 /* apply the same style to codemirror */
8480 .cm-s-ipython span.cm-keyword {
8500 .cm-s-ipython span.cm-keyword {
8481 color: #008000;
8501 color: #008000;
8482 font-weight: bold;
8502 font-weight: bold;
8483 }
8503 }
8484 .cm-s-ipython span.cm-atom {
8504 .cm-s-ipython span.cm-atom {
8485 color: #88F;
8505 color: #88F;
8486 }
8506 }
8487 .cm-s-ipython span.cm-number {
8507 .cm-s-ipython span.cm-number {
8488 color: #080;
8508 color: #080;
8489 }
8509 }
8490 .cm-s-ipython span.cm-def {
8510 .cm-s-ipython span.cm-def {
8491 color: #00f;
8511 color: #00f;
8492 }
8512 }
8493 .cm-s-ipython span.cm-variable {
8513 .cm-s-ipython span.cm-variable {
8494 color: #000000;
8514 color: #000000;
8495 }
8515 }
8496 .cm-s-ipython span.cm-operator {
8516 .cm-s-ipython span.cm-operator {
8497 color: #AA22FF;
8517 color: #AA22FF;
8498 font-weight: bold;
8518 font-weight: bold;
8499 }
8519 }
8500 .cm-s-ipython span.cm-variable-2 {
8520 .cm-s-ipython span.cm-variable-2 {
8501 color: #1a1a1a;
8521 color: #1a1a1a;
8502 }
8522 }
8503 .cm-s-ipython span.cm-variable-3 {
8523 .cm-s-ipython span.cm-variable-3 {
8504 color: #333333;
8524 color: #333333;
8505 }
8525 }
8506 .cm-s-ipython span.cm-comment {
8526 .cm-s-ipython span.cm-comment {
8507 color: #408080;
8527 color: #408080;
8508 font-style: italic;
8528 font-style: italic;
8509 }
8529 }
8510 .cm-s-ipython span.cm-string {
8530 .cm-s-ipython span.cm-string {
8511 color: #BA2121;
8531 color: #BA2121;
8512 }
8532 }
8513 .cm-s-ipython span.cm-string-2 {
8533 .cm-s-ipython span.cm-string-2 {
8514 color: #f50;
8534 color: #f50;
8515 }
8535 }
8516 .cm-s-ipython span.cm-meta {
8536 .cm-s-ipython span.cm-meta {
8517 color: #AA22FF;
8537 color: #AA22FF;
8518 }
8538 }
8519 .cm-s-ipython span.cm-qualifier {
8539 .cm-s-ipython span.cm-qualifier {
8520 color: #555;
8540 color: #555;
8521 }
8541 }
8522 .cm-s-ipython span.cm-builtin {
8542 .cm-s-ipython span.cm-builtin {
8523 color: #008000;
8543 color: #008000;
8524 }
8544 }
8525 .cm-s-ipython span.cm-bracket {
8545 .cm-s-ipython span.cm-bracket {
8526 color: #997;
8546 color: #997;
8527 }
8547 }
8528 .cm-s-ipython span.cm-tag {
8548 .cm-s-ipython span.cm-tag {
8529 color: #170;
8549 color: #170;
8530 }
8550 }
8531 .cm-s-ipython span.cm-attribute {
8551 .cm-s-ipython span.cm-attribute {
8532 color: #00c;
8552 color: #00c;
8533 }
8553 }
8534 .cm-s-ipython span.cm-header {
8554 .cm-s-ipython span.cm-header {
8535 color: blue;
8555 color: blue;
8536 }
8556 }
8537 .cm-s-ipython span.cm-quote {
8557 .cm-s-ipython span.cm-quote {
8538 color: #090;
8558 color: #090;
8539 }
8559 }
8540 .cm-s-ipython span.cm-link {
8560 .cm-s-ipython span.cm-link {
8541 color: #00c;
8561 color: #00c;
8542 }
8562 }
8543 .cm-s-ipython span.cm-error {
8563 .cm-s-ipython span.cm-error {
8544 color: #f00;
8564 color: #f00;
8545 }
8565 }
8546 .cm-s-ipython span.cm-tab {
8566 .cm-s-ipython span.cm-tab {
8547 background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);
8567 background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);
8548 background-position: right;
8568 background-position: right;
8549 background-repeat: no-repeat;
8569 background-repeat: no-repeat;
8550 }
8570 }
8551 div.output_wrapper {
8571 div.output_wrapper {
8552 /* this position must be relative to enable descendents to be absolute within it */
8572 /* this position must be relative to enable descendents to be absolute within it */
8553 position: relative;
8573 position: relative;
8554 /* Old browsers */
8574 /* Old browsers */
8555 display: -webkit-box;
8575 display: -webkit-box;
8556 -webkit-box-orient: vertical;
8576 -webkit-box-orient: vertical;
8557 -webkit-box-align: stretch;
8577 -webkit-box-align: stretch;
8558 display: -moz-box;
8578 display: -moz-box;
8559 -moz-box-orient: vertical;
8579 -moz-box-orient: vertical;
8560 -moz-box-align: stretch;
8580 -moz-box-align: stretch;
8561 display: box;
8581 display: box;
8562 box-orient: vertical;
8582 box-orient: vertical;
8563 box-align: stretch;
8583 box-align: stretch;
8564 /* Modern browsers */
8584 /* Modern browsers */
8565 display: flex;
8585 display: flex;
8566 flex-direction: column;
8586 flex-direction: column;
8567 align-items: stretch;
8587 align-items: stretch;
8568 }
8588 }
8569 /* class for the output area when it should be height-limited */
8589 /* class for the output area when it should be height-limited */
8570 div.output_scroll {
8590 div.output_scroll {
8571 /* ideally, this would be max-height, but FF barfs all over that */
8591 /* ideally, this would be max-height, but FF barfs all over that */
8572 height: 24em;
8592 height: 24em;
8573 /* FF needs this *and the wrapper* to specify full width, or it will shrinkwrap */
8593 /* FF needs this *and the wrapper* to specify full width, or it will shrinkwrap */
8574 width: 100%;
8594 width: 100%;
8575 overflow: auto;
8595 overflow: auto;
8576 border-radius: 4px;
8596 border-radius: 4px;
8577 -webkit-box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
8597 -webkit-box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
8578 box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
8598 box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
8579 display: block;
8599 display: block;
8580 }
8600 }
8581 /* output div while it is collapsed */
8601 /* output div while it is collapsed */
8582 div.output_collapsed {
8602 div.output_collapsed {
8583 margin: 0px;
8603 margin: 0px;
8584 padding: 0px;
8604 padding: 0px;
8585 /* Old browsers */
8605 /* Old browsers */
8586 display: -webkit-box;
8606 display: -webkit-box;
8587 -webkit-box-orient: vertical;
8607 -webkit-box-orient: vertical;
8588 -webkit-box-align: stretch;
8608 -webkit-box-align: stretch;
8589 display: -moz-box;
8609 display: -moz-box;
8590 -moz-box-orient: vertical;
8610 -moz-box-orient: vertical;
8591 -moz-box-align: stretch;
8611 -moz-box-align: stretch;
8592 display: box;
8612 display: box;
8593 box-orient: vertical;
8613 box-orient: vertical;
8594 box-align: stretch;
8614 box-align: stretch;
8595 /* Modern browsers */
8615 /* Modern browsers */
8596 display: flex;
8616 display: flex;
8597 flex-direction: column;
8617 flex-direction: column;
8598 align-items: stretch;
8618 align-items: stretch;
8599 }
8619 }
8600 div.out_prompt_overlay {
8620 div.out_prompt_overlay {
8601 height: 100%;
8621 height: 100%;
8602 padding: 0px 0.4em;
8622 padding: 0px 0.4em;
8603 position: absolute;
8623 position: absolute;
8604 border-radius: 4px;
8624 border-radius: 4px;
8605 }
8625 }
8606 div.out_prompt_overlay:hover {
8626 div.out_prompt_overlay:hover {
8607 /* use inner shadow to get border that is computed the same on WebKit/FF */
8627 /* use inner shadow to get border that is computed the same on WebKit/FF */
8608 -webkit-box-shadow: inset 0 0 1px #000000;
8628 -webkit-box-shadow: inset 0 0 1px #000000;
8609 box-shadow: inset 0 0 1px #000000;
8629 box-shadow: inset 0 0 1px #000000;
8610 background: rgba(240, 240, 240, 0.5);
8630 background: rgba(240, 240, 240, 0.5);
8611 }
8631 }
8612 div.output_prompt {
8632 div.output_prompt {
8613 color: darkred;
8633 color: darkred;
8614 }
8634 }
8615 /* This class is the outer container of all output sections. */
8635 /* This class is the outer container of all output sections. */
8616 div.output_area {
8636 div.output_area {
8617 padding: 0px;
8637 padding: 0px;
8618 page-break-inside: avoid;
8638 page-break-inside: avoid;
8619 /* Old browsers */
8639 /* Old browsers */
8620 display: -webkit-box;
8640 display: -webkit-box;
8621 -webkit-box-orient: horizontal;
8641 -webkit-box-orient: horizontal;
8622 -webkit-box-align: stretch;
8642 -webkit-box-align: stretch;
8623 display: -moz-box;
8643 display: -moz-box;
8624 -moz-box-orient: horizontal;
8644 -moz-box-orient: horizontal;
8625 -moz-box-align: stretch;
8645 -moz-box-align: stretch;
8626 display: box;
8646 display: box;
8627 box-orient: horizontal;
8647 box-orient: horizontal;
8628 box-align: stretch;
8648 box-align: stretch;
8629 /* Modern browsers */
8649 /* Modern browsers */
8630 display: flex;
8650 display: flex;
8631 flex-direction: row;
8651 flex-direction: row;
8632 align-items: stretch;
8652 align-items: stretch;
8633 }
8653 }
8634 div.output_area .MathJax_Display {
8654 div.output_area .MathJax_Display {
8635 text-align: left !important;
8655 text-align: left !important;
8636 }
8656 }
8637 div.output_area .rendered_html table {
8657 div.output_area .rendered_html table {
8638 margin-left: 0;
8658 margin-left: 0;
8639 margin-right: 0;
8659 margin-right: 0;
8640 }
8660 }
8641 div.output_area .rendered_html img {
8661 div.output_area .rendered_html img {
8642 margin-left: 0;
8662 margin-left: 0;
8643 margin-right: 0;
8663 margin-right: 0;
8644 }
8664 }
8645 /* This is needed to protect the pre formating from global settings such
8665 /* This is needed to protect the pre formating from global settings such
8646 as that of bootstrap */
8666 as that of bootstrap */
8647 .output {
8667 .output {
8648 /* Old browsers */
8668 /* Old browsers */
8649 display: -webkit-box;
8669 display: -webkit-box;
8650 -webkit-box-orient: vertical;
8670 -webkit-box-orient: vertical;
8651 -webkit-box-align: stretch;
8671 -webkit-box-align: stretch;
8652 display: -moz-box;
8672 display: -moz-box;
8653 -moz-box-orient: vertical;
8673 -moz-box-orient: vertical;
8654 -moz-box-align: stretch;
8674 -moz-box-align: stretch;
8655 display: box;
8675 display: box;
8656 box-orient: vertical;
8676 box-orient: vertical;
8657 box-align: stretch;
8677 box-align: stretch;
8658 /* Modern browsers */
8678 /* Modern browsers */
8659 display: flex;
8679 display: flex;
8660 flex-direction: column;
8680 flex-direction: column;
8661 align-items: stretch;
8681 align-items: stretch;
8662 }
8682 }
8663 @media (max-width: 480px) {
8683 @media (max-width: 480px) {
8664 div.output_area {
8684 div.output_area {
8665 /* Old browsers */
8685 /* Old browsers */
8666 display: -webkit-box;
8686 display: -webkit-box;
8667 -webkit-box-orient: vertical;
8687 -webkit-box-orient: vertical;
8668 -webkit-box-align: stretch;
8688 -webkit-box-align: stretch;
8669 display: -moz-box;
8689 display: -moz-box;
8670 -moz-box-orient: vertical;
8690 -moz-box-orient: vertical;
8671 -moz-box-align: stretch;
8691 -moz-box-align: stretch;
8672 display: box;
8692 display: box;
8673 box-orient: vertical;
8693 box-orient: vertical;
8674 box-align: stretch;
8694 box-align: stretch;
8675 /* Modern browsers */
8695 /* Modern browsers */
8676 display: flex;
8696 display: flex;
8677 flex-direction: column;
8697 flex-direction: column;
8678 align-items: stretch;
8698 align-items: stretch;
8679 }
8699 }
8680 }
8700 }
8681 div.output_area pre {
8701 div.output_area pre {
8682 margin: 0;
8702 margin: 0;
8683 padding: 0;
8703 padding: 0;
8684 border: 0;
8704 border: 0;
8685 vertical-align: baseline;
8705 vertical-align: baseline;
8686 color: black;
8706 color: black;
8687 background-color: transparent;
8707 background-color: transparent;
8688 border-radius: 0;
8708 border-radius: 0;
8689 }
8709 }
8690 /* This class is for the output subarea inside the output_area and after
8710 /* This class is for the output subarea inside the output_area and after
8691 the prompt div. */
8711 the prompt div. */
8692 div.output_subarea {
8712 div.output_subarea {
8693 padding: 0.4em 0.4em 0em 0.4em;
8713 padding: 0.4em 0.4em 0em 0.4em;
8694 /* Old browsers */
8714 /* Old browsers */
8695 -webkit-box-flex: 1;
8715 -webkit-box-flex: 1;
8696 -moz-box-flex: 1;
8716 -moz-box-flex: 1;
8697 box-flex: 1;
8717 box-flex: 1;
8698 /* Modern browsers */
8718 /* Modern browsers */
8699 flex: 1;
8719 flex: 1;
8700 }
8720 }
8701 /* The rest of the output_* classes are for special styling of the different
8721 /* The rest of the output_* classes are for special styling of the different
8702 output types */
8722 output types */
8703 /* all text output has this class: */
8723 /* all text output has this class: */
8704 div.output_text {
8724 div.output_text {
8705 text-align: left;
8725 text-align: left;
8706 color: #000000;
8726 color: #000000;
8707 /* This has to match that of the the CodeMirror class line-height below */
8727 /* This has to match that of the the CodeMirror class line-height below */
8708 line-height: 1.21429em;
8728 line-height: 1.21429em;
8709 }
8729 }
8710 /* stdout/stderr are 'text' as well as 'stream', but execute_result/error are *not* streams */
8730 /* stdout/stderr are 'text' as well as 'stream', but execute_result/error are *not* streams */
8711 div.output_stderr {
8731 div.output_stderr {
8712 background: #fdd;
8732 background: #fdd;
8713 /* very light red background for stderr */
8733 /* very light red background for stderr */
8714 }
8734 }
8715 div.output_latex {
8735 div.output_latex {
8716 text-align: left;
8736 text-align: left;
8717 }
8737 }
8718 /* Empty output_javascript divs should have no height */
8738 /* Empty output_javascript divs should have no height */
8719 div.output_javascript:empty {
8739 div.output_javascript:empty {
8720 padding: 0;
8740 padding: 0;
8721 }
8741 }
8722 .js-error {
8742 .js-error {
8723 color: darkred;
8743 color: darkred;
8724 }
8744 }
8725 /* raw_input styles */
8745 /* raw_input styles */
8726 div.raw_input_container {
8746 div.raw_input_container {
8727 font-family: monospace;
8747 font-family: monospace;
8728 padding-top: 5px;
8748 padding-top: 5px;
8729 }
8749 }
8730 span.raw_input_prompt {
8750 span.raw_input_prompt {
8731 /* nothing needed here */
8751 /* nothing needed here */
8732 }
8752 }
8733 input.raw_input {
8753 input.raw_input {
8734 font-family: inherit;
8754 font-family: inherit;
8735 font-size: inherit;
8755 font-size: inherit;
8736 color: inherit;
8756 color: inherit;
8737 width: auto;
8757 width: auto;
8738 /* make sure input baseline aligns with prompt */
8758 /* make sure input baseline aligns with prompt */
8739 vertical-align: baseline;
8759 vertical-align: baseline;
8740 /* padding + margin = 0.5em between prompt and cursor */
8760 /* padding + margin = 0.5em between prompt and cursor */
8741 padding: 0em 0.25em;
8761 padding: 0em 0.25em;
8742 margin: 0em 0.25em;
8762 margin: 0em 0.25em;
8743 }
8763 }
8744 input.raw_input:focus {
8764 input.raw_input:focus {
8745 box-shadow: none;
8765 box-shadow: none;
8746 }
8766 }
8747 p.p-space {
8767 p.p-space {
8748 margin-bottom: 10px;
8768 margin-bottom: 10px;
8749 }
8769 }
8750 div.output_unrecognized {
8770 div.output_unrecognized {
8751 padding: 5px;
8771 padding: 5px;
8752 font-weight: bold;
8772 font-weight: bold;
8753 color: red;
8773 color: red;
8754 }
8774 }
8755 div.output_unrecognized a {
8775 div.output_unrecognized a {
8756 color: inherit;
8776 color: inherit;
8757 text-decoration: none;
8777 text-decoration: none;
8758 }
8778 }
8759 div.output_unrecognized a:hover {
8779 div.output_unrecognized a:hover {
8760 color: inherit;
8780 color: inherit;
8761 text-decoration: none;
8781 text-decoration: none;
8762 }
8782 }
8763 .rendered_html {
8783 .rendered_html {
8764 color: #000000;
8784 color: #000000;
8765 /* any extras will just be numbers: */
8785 /* any extras will just be numbers: */
8766 }
8786 }
8767 .rendered_html em {
8787 .rendered_html em {
8768 font-style: italic;
8788 font-style: italic;
8769 }
8789 }
8770 .rendered_html strong {
8790 .rendered_html strong {
8771 font-weight: bold;
8791 font-weight: bold;
8772 }
8792 }
8773 .rendered_html u {
8793 .rendered_html u {
8774 text-decoration: underline;
8794 text-decoration: underline;
8775 }
8795 }
8776 .rendered_html :link {
8796 .rendered_html :link {
8777 text-decoration: underline;
8797 text-decoration: underline;
8778 }
8798 }
8779 .rendered_html :visited {
8799 .rendered_html :visited {
8780 text-decoration: underline;
8800 text-decoration: underline;
8781 }
8801 }
8782 .rendered_html h1 {
8802 .rendered_html h1 {
8783 font-size: 185.7%;
8803 font-size: 185.7%;
8784 margin: 1.08em 0 0 0;
8804 margin: 1.08em 0 0 0;
8785 font-weight: bold;
8805 font-weight: bold;
8786 line-height: 1.0;
8806 line-height: 1.0;
8787 }
8807 }
8788 .rendered_html h2 {
8808 .rendered_html h2 {
8789 font-size: 157.1%;
8809 font-size: 157.1%;
8790 margin: 1.27em 0 0 0;
8810 margin: 1.27em 0 0 0;
8791 font-weight: bold;
8811 font-weight: bold;
8792 line-height: 1.0;
8812 line-height: 1.0;
8793 }
8813 }
8794 .rendered_html h3 {
8814 .rendered_html h3 {
8795 font-size: 128.6%;
8815 font-size: 128.6%;
8796 margin: 1.55em 0 0 0;
8816 margin: 1.55em 0 0 0;
8797 font-weight: bold;
8817 font-weight: bold;
8798 line-height: 1.0;
8818 line-height: 1.0;
8799 }
8819 }
8800 .rendered_html h4 {
8820 .rendered_html h4 {
8801 font-size: 100%;
8821 font-size: 100%;
8802 margin: 2em 0 0 0;
8822 margin: 2em 0 0 0;
8803 font-weight: bold;
8823 font-weight: bold;
8804 line-height: 1.0;
8824 line-height: 1.0;
8805 }
8825 }
8806 .rendered_html h5 {
8826 .rendered_html h5 {
8807 font-size: 100%;
8827 font-size: 100%;
8808 margin: 2em 0 0 0;
8828 margin: 2em 0 0 0;
8809 font-weight: bold;
8829 font-weight: bold;
8810 line-height: 1.0;
8830 line-height: 1.0;
8811 font-style: italic;
8831 font-style: italic;
8812 }
8832 }
8813 .rendered_html h6 {
8833 .rendered_html h6 {
8814 font-size: 100%;
8834 font-size: 100%;
8815 margin: 2em 0 0 0;
8835 margin: 2em 0 0 0;
8816 font-weight: bold;
8836 font-weight: bold;
8817 line-height: 1.0;
8837 line-height: 1.0;
8818 font-style: italic;
8838 font-style: italic;
8819 }
8839 }
8820 .rendered_html h1:first-child {
8840 .rendered_html h1:first-child {
8821 margin-top: 0.538em;
8841 margin-top: 0.538em;
8822 }
8842 }
8823 .rendered_html h2:first-child {
8843 .rendered_html h2:first-child {
8824 margin-top: 0.636em;
8844 margin-top: 0.636em;
8825 }
8845 }
8826 .rendered_html h3:first-child {
8846 .rendered_html h3:first-child {
8827 margin-top: 0.777em;
8847 margin-top: 0.777em;
8828 }
8848 }
8829 .rendered_html h4:first-child {
8849 .rendered_html h4:first-child {
8830 margin-top: 1em;
8850 margin-top: 1em;
8831 }
8851 }
8832 .rendered_html h5:first-child {
8852 .rendered_html h5:first-child {
8833 margin-top: 1em;
8853 margin-top: 1em;
8834 }
8854 }
8835 .rendered_html h6:first-child {
8855 .rendered_html h6:first-child {
8836 margin-top: 1em;
8856 margin-top: 1em;
8837 }
8857 }
8838 .rendered_html ul {
8858 .rendered_html ul {
8839 list-style: disc;
8859 list-style: disc;
8840 margin: 0em 2em;
8860 margin: 0em 2em;
8841 padding-left: 0px;
8861 padding-left: 0px;
8842 }
8862 }
8843 .rendered_html ul ul {
8863 .rendered_html ul ul {
8844 list-style: square;
8864 list-style: square;
8845 margin: 0em 2em;
8865 margin: 0em 2em;
8846 }
8866 }
8847 .rendered_html ul ul ul {
8867 .rendered_html ul ul ul {
8848 list-style: circle;
8868 list-style: circle;
8849 margin: 0em 2em;
8869 margin: 0em 2em;
8850 }
8870 }
8851 .rendered_html ol {
8871 .rendered_html ol {
8852 list-style: decimal;
8872 list-style: decimal;
8853 margin: 0em 2em;
8873 margin: 0em 2em;
8854 padding-left: 0px;
8874 padding-left: 0px;
8855 }
8875 }
8856 .rendered_html ol ol {
8876 .rendered_html ol ol {
8857 list-style: upper-alpha;
8877 list-style: upper-alpha;
8858 margin: 0em 2em;
8878 margin: 0em 2em;
8859 }
8879 }
8860 .rendered_html ol ol ol {
8880 .rendered_html ol ol ol {
8861 list-style: lower-alpha;
8881 list-style: lower-alpha;
8862 margin: 0em 2em;
8882 margin: 0em 2em;
8863 }
8883 }
8864 .rendered_html ol ol ol ol {
8884 .rendered_html ol ol ol ol {
8865 list-style: lower-roman;
8885 list-style: lower-roman;
8866 margin: 0em 2em;
8886 margin: 0em 2em;
8867 }
8887 }
8868 .rendered_html ol ol ol ol ol {
8888 .rendered_html ol ol ol ol ol {
8869 list-style: decimal;
8889 list-style: decimal;
8870 margin: 0em 2em;
8890 margin: 0em 2em;
8871 }
8891 }
8872 .rendered_html * + ul {
8892 .rendered_html * + ul {
8873 margin-top: 1em;
8893 margin-top: 1em;
8874 }
8894 }
8875 .rendered_html * + ol {
8895 .rendered_html * + ol {
8876 margin-top: 1em;
8896 margin-top: 1em;
8877 }
8897 }
8878 .rendered_html hr {
8898 .rendered_html hr {
8879 color: black;
8899 color: black;
8880 background-color: black;
8900 background-color: black;
8881 }
8901 }
8882 .rendered_html pre {
8902 .rendered_html pre {
8883 margin: 1em 2em;
8903 margin: 1em 2em;
8884 }
8904 }
8885 .rendered_html pre,
8905 .rendered_html pre,
8886 .rendered_html code {
8906 .rendered_html code {
8887 border: 0;
8907 border: 0;
8888 background-color: #ffffff;
8908 background-color: #ffffff;
8889 color: #000000;
8909 color: #000000;
8890 font-size: 100%;
8910 font-size: 100%;
8891 padding: 0px;
8911 padding: 0px;
8892 }
8912 }
8893 .rendered_html blockquote {
8913 .rendered_html blockquote {
8894 margin: 1em 2em;
8914 margin: 1em 2em;
8895 }
8915 }
8896 .rendered_html table {
8916 .rendered_html table {
8897 margin-left: auto;
8917 margin-left: auto;
8898 margin-right: auto;
8918 margin-right: auto;
8899 border: 1px solid black;
8919 border: 1px solid black;
8900 border-collapse: collapse;
8920 border-collapse: collapse;
8901 }
8921 }
8902 .rendered_html tr,
8922 .rendered_html tr,
8903 .rendered_html th,
8923 .rendered_html th,
8904 .rendered_html td {
8924 .rendered_html td {
8905 border: 1px solid black;
8925 border: 1px solid black;
8906 border-collapse: collapse;
8926 border-collapse: collapse;
8907 margin: 1em 2em;
8927 margin: 1em 2em;
8908 }
8928 }
8909 .rendered_html td,
8929 .rendered_html td,
8910 .rendered_html th {
8930 .rendered_html th {
8911 text-align: left;
8931 text-align: left;
8912 vertical-align: middle;
8932 vertical-align: middle;
8913 padding: 4px;
8933 padding: 4px;
8914 }
8934 }
8915 .rendered_html th {
8935 .rendered_html th {
8916 font-weight: bold;
8936 font-weight: bold;
8917 }
8937 }
8918 .rendered_html * + table {
8938 .rendered_html * + table {
8919 margin-top: 1em;
8939 margin-top: 1em;
8920 }
8940 }
8921 .rendered_html p {
8941 .rendered_html p {
8922 text-align: justify;
8942 text-align: justify;
8923 }
8943 }
8924 .rendered_html * + p {
8944 .rendered_html * + p {
8925 margin-top: 1em;
8945 margin-top: 1em;
8926 }
8946 }
8927 .rendered_html img {
8947 .rendered_html img {
8928 display: block;
8948 display: block;
8929 margin-left: auto;
8949 margin-left: auto;
8930 margin-right: auto;
8950 margin-right: auto;
8931 }
8951 }
8932 .rendered_html * + img {
8952 .rendered_html * + img {
8933 margin-top: 1em;
8953 margin-top: 1em;
8934 }
8954 }
8935 div.text_cell {
8955 div.text_cell {
8936 padding: 5px 5px 5px 0px;
8956 padding: 5px 5px 5px 0px;
8937 /* Old browsers */
8957 /* Old browsers */
8938 display: -webkit-box;
8958 display: -webkit-box;
8939 -webkit-box-orient: horizontal;
8959 -webkit-box-orient: horizontal;
8940 -webkit-box-align: stretch;
8960 -webkit-box-align: stretch;
8941 display: -moz-box;
8961 display: -moz-box;
8942 -moz-box-orient: horizontal;
8962 -moz-box-orient: horizontal;
8943 -moz-box-align: stretch;
8963 -moz-box-align: stretch;
8944 display: box;
8964 display: box;
8945 box-orient: horizontal;
8965 box-orient: horizontal;
8946 box-align: stretch;
8966 box-align: stretch;
8947 /* Modern browsers */
8967 /* Modern browsers */
8948 display: flex;
8968 display: flex;
8949 flex-direction: row;
8969 flex-direction: row;
8950 align-items: stretch;
8970 align-items: stretch;
8951 }
8971 }
8952 @media (max-width: 480px) {
8972 @media (max-width: 480px) {
8953 div.text_cell > div.prompt {
8973 div.text_cell > div.prompt {
8954 display: none;
8974 display: none;
8955 }
8975 }
8956 }
8976 }
8957 div.text_cell_render {
8977 div.text_cell_render {
8958 /*font-family: "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;*/
8978 /*font-family: "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;*/
8959 outline: none;
8979 outline: none;
8960 resize: none;
8980 resize: none;
8961 width: inherit;
8981 width: inherit;
8962 border-style: none;
8982 border-style: none;
8963 padding: 0.5em 0.5em 0.5em 0.4em;
8983 padding: 0.5em 0.5em 0.5em 0.4em;
8964 color: #000000;
8984 color: #000000;
8965 box-sizing: border-box;
8985 box-sizing: border-box;
8966 -moz-box-sizing: border-box;
8986 -moz-box-sizing: border-box;
8967 -webkit-box-sizing: border-box;
8987 -webkit-box-sizing: border-box;
8968 }
8988 }
8969 a.anchor-link:link {
8989 a.anchor-link:link {
8970 text-decoration: none;
8990 text-decoration: none;
8971 padding: 0px 20px;
8991 padding: 0px 20px;
8972 visibility: hidden;
8992 visibility: hidden;
8973 }
8993 }
8974 h1:hover .anchor-link,
8994 h1:hover .anchor-link,
8975 h2:hover .anchor-link,
8995 h2:hover .anchor-link,
8976 h3:hover .anchor-link,
8996 h3:hover .anchor-link,
8977 h4:hover .anchor-link,
8997 h4:hover .anchor-link,
8978 h5:hover .anchor-link,
8998 h5:hover .anchor-link,
8979 h6:hover .anchor-link {
8999 h6:hover .anchor-link {
8980 visibility: visible;
9000 visibility: visible;
8981 }
9001 }
8982 .text_cell.rendered .input_area {
9002 .text_cell.rendered .input_area {
8983 display: none;
9003 display: none;
8984 }
9004 }
8985 .text_cell.unrendered .text_cell_render {
9005 .text_cell.unrendered .text_cell_render {
8986 display: none;
9006 display: none;
8987 }
9007 }
8988 .cm-header-1,
9008 .cm-header-1,
8989 .cm-header-2,
9009 .cm-header-2,
8990 .cm-header-3,
9010 .cm-header-3,
8991 .cm-header-4,
9011 .cm-header-4,
8992 .cm-header-5,
9012 .cm-header-5,
8993 .cm-header-6 {
9013 .cm-header-6 {
8994 font-weight: bold;
9014 font-weight: bold;
8995 font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
9015 font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
8996 }
9016 }
8997 .cm-header-1 {
9017 .cm-header-1 {
8998 font-size: 185.7%;
9018 font-size: 185.7%;
8999 }
9019 }
9000 .cm-header-2 {
9020 .cm-header-2 {
9001 font-size: 157.1%;
9021 font-size: 157.1%;
9002 }
9022 }
9003 .cm-header-3 {
9023 .cm-header-3 {
9004 font-size: 128.6%;
9024 font-size: 128.6%;
9005 }
9025 }
9006 .cm-header-4 {
9026 .cm-header-4 {
9007 font-size: 110%;
9027 font-size: 110%;
9008 }
9028 }
9009 .cm-header-5 {
9029 .cm-header-5 {
9010 font-size: 100%;
9030 font-size: 100%;
9011 font-style: italic;
9031 font-style: italic;
9012 }
9032 }
9013 .cm-header-6 {
9033 .cm-header-6 {
9014 font-size: 100%;
9034 font-size: 100%;
9015 font-style: italic;
9035 font-style: italic;
9016 }
9036 }
9017 .widget-area {
9037 .widget-area {
9018 /*
9038 /*
9019 LESS file that styles IPython notebook widgets and the area they sit in.
9039 LESS file that styles IPython notebook widgets and the area they sit in.
9020
9040
9021 The widget area typically looks something like this:
9041 The widget area typically looks something like this:
9022 +------------------------------------------+
9042 +------------------------------------------+
9023 | widget-area |
9043 | widget-area |
9024 | +--------+---------------------------+ |
9044 | +--------+---------------------------+ |
9025 | | prompt | widget-subarea | |
9045 | | prompt | widget-subarea | |
9026 | | | +--------+ +--------+ | |
9046 | | | +--------+ +--------+ | |
9027 | | | | widget | | widget | | |
9047 | | | | widget | | widget | | |
9028 | | | +--------+ +--------+ | |
9048 | | | +--------+ +--------+ | |
9029 | +--------+---------------------------+ |
9049 | +--------+---------------------------+ |
9030 +------------------------------------------+
9050 +------------------------------------------+
9031 */
9051 */
9032 page-break-inside: avoid;
9052 page-break-inside: avoid;
9033 /* Old browsers */
9053 /* Old browsers */
9034 display: -webkit-box;
9054 display: -webkit-box;
9035 -webkit-box-orient: horizontal;
9055 -webkit-box-orient: horizontal;
9036 -webkit-box-align: stretch;
9056 -webkit-box-align: stretch;
9037 display: -moz-box;
9057 display: -moz-box;
9038 -moz-box-orient: horizontal;
9058 -moz-box-orient: horizontal;
9039 -moz-box-align: stretch;
9059 -moz-box-align: stretch;
9040 display: box;
9060 display: box;
9041 box-orient: horizontal;
9061 box-orient: horizontal;
9042 box-align: stretch;
9062 box-align: stretch;
9043 /* Modern browsers */
9063 /* Modern browsers */
9044 display: flex;
9064 display: flex;
9045 flex-direction: row;
9065 flex-direction: row;
9046 align-items: stretch;
9066 align-items: stretch;
9047 }
9067 }
9048 .widget-area .widget-subarea {
9068 .widget-area .widget-subarea {
9049 padding: 0.44em 0.4em 0.4em 1px;
9069 padding: 0.44em 0.4em 0.4em 1px;
9050 margin-left: 6px;
9070 margin-left: 6px;
9051 box-sizing: border-box;
9071 box-sizing: border-box;
9052 -moz-box-sizing: border-box;
9072 -moz-box-sizing: border-box;
9053 -webkit-box-sizing: border-box;
9073 -webkit-box-sizing: border-box;
9054 /* Old browsers */
9074 /* Old browsers */
9055 display: -webkit-box;
9075 display: -webkit-box;
9056 -webkit-box-orient: vertical;
9076 -webkit-box-orient: vertical;
9057 -webkit-box-align: stretch;
9077 -webkit-box-align: stretch;
9058 display: -moz-box;
9078 display: -moz-box;
9059 -moz-box-orient: vertical;
9079 -moz-box-orient: vertical;
9060 -moz-box-align: stretch;
9080 -moz-box-align: stretch;
9061 display: box;
9081 display: box;
9062 box-orient: vertical;
9082 box-orient: vertical;
9063 box-align: stretch;
9083 box-align: stretch;
9064 /* Modern browsers */
9084 /* Modern browsers */
9065 display: flex;
9085 display: flex;
9066 flex-direction: column;
9086 flex-direction: column;
9067 align-items: stretch;
9087 align-items: stretch;
9068 /* Old browsers */
9088 /* Old browsers */
9069 -webkit-box-flex: 2;
9089 -webkit-box-flex: 2;
9070 -moz-box-flex: 2;
9090 -moz-box-flex: 2;
9071 box-flex: 2;
9091 box-flex: 2;
9072 /* Modern browsers */
9092 /* Modern browsers */
9073 flex: 2;
9093 flex: 2;
9074 /* Old browsers */
9094 /* Old browsers */
9075 -webkit-box-align: start;
9095 -webkit-box-align: start;
9076 -moz-box-align: start;
9096 -moz-box-align: start;
9077 box-align: start;
9097 box-align: start;
9078 /* Modern browsers */
9098 /* Modern browsers */
9079 align-items: flex-start;
9099 align-items: flex-start;
9080 }
9100 }
9081 /* THE CLASSES BELOW CAN APPEAR ANYWHERE IN THE DOM (POSSIBLEY OUTSIDE OF
9101 /* THE CLASSES BELOW CAN APPEAR ANYWHERE IN THE DOM (POSSIBLEY OUTSIDE OF
9082 THE WIDGET AREA). */
9102 THE WIDGET AREA). */
9083 .slide-track {
9103 .slide-track {
9084 /* Slider Track */
9104 /* Slider Track */
9085 border: 1px solid #CCCCCC;
9105 border: 1px solid #CCCCCC;
9086 background: #FFFFFF;
9106 background: #FFFFFF;
9087 border-radius: 4px;
9107 border-radius: 4px;
9088 /* Round the corners of the slide track */
9108 /* Round the corners of the slide track */
9089 }
9109 }
9090 .widget-hslider {
9110 .widget-hslider {
9091 /* Horizontal jQuery Slider
9111 /* Horizontal jQuery Slider
9092
9112
9093 Both the horizontal and vertical versions of the slider are characterized
9113 Both the horizontal and vertical versions of the slider are characterized
9094 by a styled div that contains an invisible jQuery slide div which
9114 by a styled div that contains an invisible jQuery slide div which
9095 contains a visible slider handle div. This is requred so we can control
9115 contains a visible slider handle div. This is requred so we can control
9096 how the slider is drawn and 'fix' the issue where the slide handle
9116 how the slider is drawn and 'fix' the issue where the slide handle
9097 doesn't stop at the end of the slide.
9117 doesn't stop at the end of the slide.
9098
9118
9099 Both horizontal and vertical sliders have this div nesting:
9119 Both horizontal and vertical sliders have this div nesting:
9100 +------------------------------------------+
9120 +------------------------------------------+
9101 | widget-(h/v)slider |
9121 | widget-(h/v)slider |
9102 | +--------+---------------------------+ |
9122 | +--------+---------------------------+ |
9103 | | ui-slider | |
9123 | | ui-slider | |
9104 | | +------------------+ | |
9124 | | +------------------+ | |
9105 | | | ui-slider-handle | | |
9125 | | | ui-slider-handle | | |
9106 | | +------------------+ | |
9126 | | +------------------+ | |
9107 | +--------+---------------------------+ |
9127 | +--------+---------------------------+ |
9108 +------------------------------------------+
9128 +------------------------------------------+
9109 */
9129 */
9110 /* Fix the padding of the slide track so the ui-slider is sized
9130 /* Fix the padding of the slide track so the ui-slider is sized
9111 correctly. */
9131 correctly. */
9112 padding-left: 8px;
9132 padding-left: 8px;
9113 padding-right: 5px;
9133 padding-right: 5px;
9114 overflow: visible;
9134 overflow: visible;
9115 /* Default size of the slider */
9135 /* Default size of the slider */
9116 width: 350px;
9136 width: 350px;
9117 height: 5px;
9137 height: 5px;
9118 max-height: 5px;
9138 max-height: 5px;
9119 margin-top: 13px;
9139 margin-top: 13px;
9120 margin-bottom: 10px;
9140 margin-bottom: 10px;
9121 /* Style the slider track */
9141 /* Style the slider track */
9122 /* Slider Track */
9142 /* Slider Track */
9123 border: 1px solid #CCCCCC;
9143 border: 1px solid #CCCCCC;
9124 background: #FFFFFF;
9144 background: #FFFFFF;
9125 border-radius: 4px;
9145 border-radius: 4px;
9126 /* Round the corners of the slide track */
9146 /* Round the corners of the slide track */
9127 /* Make the div a flex box (makes FF behave correctly). */
9147 /* Make the div a flex box (makes FF behave correctly). */
9128 /* Old browsers */
9148 /* Old browsers */
9129 display: -webkit-box;
9149 display: -webkit-box;
9130 -webkit-box-orient: horizontal;
9150 -webkit-box-orient: horizontal;
9131 -webkit-box-align: stretch;
9151 -webkit-box-align: stretch;
9132 display: -moz-box;
9152 display: -moz-box;
9133 -moz-box-orient: horizontal;
9153 -moz-box-orient: horizontal;
9134 -moz-box-align: stretch;
9154 -moz-box-align: stretch;
9135 display: box;
9155 display: box;
9136 box-orient: horizontal;
9156 box-orient: horizontal;
9137 box-align: stretch;
9157 box-align: stretch;
9138 /* Modern browsers */
9158 /* Modern browsers */
9139 display: flex;
9159 display: flex;
9140 flex-direction: row;
9160 flex-direction: row;
9141 align-items: stretch;
9161 align-items: stretch;
9142 }
9162 }
9143 .widget-hslider .ui-slider {
9163 .widget-hslider .ui-slider {
9144 /* Inner, invisible slide div */
9164 /* Inner, invisible slide div */
9145 border: 0px !important;
9165 border: 0px !important;
9146 background: none !important;
9166 background: none !important;
9147 /* Old browsers */
9167 /* Old browsers */
9148 display: -webkit-box;
9168 display: -webkit-box;
9149 -webkit-box-orient: horizontal;
9169 -webkit-box-orient: horizontal;
9150 -webkit-box-align: stretch;
9170 -webkit-box-align: stretch;
9151 display: -moz-box;
9171 display: -moz-box;
9152 -moz-box-orient: horizontal;
9172 -moz-box-orient: horizontal;
9153 -moz-box-align: stretch;
9173 -moz-box-align: stretch;
9154 display: box;
9174 display: box;
9155 box-orient: horizontal;
9175 box-orient: horizontal;
9156 box-align: stretch;
9176 box-align: stretch;
9157 /* Modern browsers */
9177 /* Modern browsers */
9158 display: flex;
9178 display: flex;
9159 flex-direction: row;
9179 flex-direction: row;
9160 align-items: stretch;
9180 align-items: stretch;
9161 /* Old browsers */
9181 /* Old browsers */
9162 -webkit-box-flex: 1;
9182 -webkit-box-flex: 1;
9163 -moz-box-flex: 1;
9183 -moz-box-flex: 1;
9164 box-flex: 1;
9184 box-flex: 1;
9165 /* Modern browsers */
9185 /* Modern browsers */
9166 flex: 1;
9186 flex: 1;
9167 }
9187 }
9168 .widget-hslider .ui-slider .ui-slider-handle {
9188 .widget-hslider .ui-slider .ui-slider-handle {
9169 width: 14px !important;
9189 width: 14px !important;
9170 height: 28px !important;
9190 height: 28px !important;
9171 margin-top: -8px !important;
9191 margin-top: -8px !important;
9172 }
9192 }
9173 .widget-hslider .ui-slider .ui-slider-range {
9193 .widget-hslider .ui-slider .ui-slider-range {
9174 height: 12px !important;
9194 height: 12px !important;
9175 margin-top: -4px !important;
9195 margin-top: -4px !important;
9176 }
9196 }
9177 .widget-vslider {
9197 .widget-vslider {
9178 /* Vertical jQuery Slider */
9198 /* Vertical jQuery Slider */
9179 /* Fix the padding of the slide track so the ui-slider is sized
9199 /* Fix the padding of the slide track so the ui-slider is sized
9180 correctly. */
9200 correctly. */
9181 padding-bottom: 8px;
9201 padding-bottom: 8px;
9182 overflow: visible;
9202 overflow: visible;
9183 /* Default size of the slider */
9203 /* Default size of the slider */
9184 width: 5px;
9204 width: 5px;
9185 max-width: 5px;
9205 max-width: 5px;
9186 height: 250px;
9206 height: 250px;
9187 margin-left: 12px;
9207 margin-left: 12px;
9188 /* Style the slider track */
9208 /* Style the slider track */
9189 /* Slider Track */
9209 /* Slider Track */
9190 border: 1px solid #CCCCCC;
9210 border: 1px solid #CCCCCC;
9191 background: #FFFFFF;
9211 background: #FFFFFF;
9192 border-radius: 4px;
9212 border-radius: 4px;
9193 /* Round the corners of the slide track */
9213 /* Round the corners of the slide track */
9194 /* Make the div a flex box (makes FF behave correctly). */
9214 /* Make the div a flex box (makes FF behave correctly). */
9195 /* Old browsers */
9215 /* Old browsers */
9196 display: -webkit-box;
9216 display: -webkit-box;
9197 -webkit-box-orient: vertical;
9217 -webkit-box-orient: vertical;
9198 -webkit-box-align: stretch;
9218 -webkit-box-align: stretch;
9199 display: -moz-box;
9219 display: -moz-box;
9200 -moz-box-orient: vertical;
9220 -moz-box-orient: vertical;
9201 -moz-box-align: stretch;
9221 -moz-box-align: stretch;
9202 display: box;
9222 display: box;
9203 box-orient: vertical;
9223 box-orient: vertical;
9204 box-align: stretch;
9224 box-align: stretch;
9205 /* Modern browsers */
9225 /* Modern browsers */
9206 display: flex;
9226 display: flex;
9207 flex-direction: column;
9227 flex-direction: column;
9208 align-items: stretch;
9228 align-items: stretch;
9209 }
9229 }
9210 .widget-vslider .ui-slider {
9230 .widget-vslider .ui-slider {
9211 /* Inner, invisible slide div */
9231 /* Inner, invisible slide div */
9212 border: 0px !important;
9232 border: 0px !important;
9213 background: none !important;
9233 background: none !important;
9214 margin-left: -4px;
9234 margin-left: -4px;
9215 margin-top: 5px;
9235 margin-top: 5px;
9216 /* Old browsers */
9236 /* Old browsers */
9217 display: -webkit-box;
9237 display: -webkit-box;
9218 -webkit-box-orient: vertical;
9238 -webkit-box-orient: vertical;
9219 -webkit-box-align: stretch;
9239 -webkit-box-align: stretch;
9220 display: -moz-box;
9240 display: -moz-box;
9221 -moz-box-orient: vertical;
9241 -moz-box-orient: vertical;
9222 -moz-box-align: stretch;
9242 -moz-box-align: stretch;
9223 display: box;
9243 display: box;
9224 box-orient: vertical;
9244 box-orient: vertical;
9225 box-align: stretch;
9245 box-align: stretch;
9226 /* Modern browsers */
9246 /* Modern browsers */
9227 display: flex;
9247 display: flex;
9228 flex-direction: column;
9248 flex-direction: column;
9229 align-items: stretch;
9249 align-items: stretch;
9230 /* Old browsers */
9250 /* Old browsers */
9231 -webkit-box-flex: 1;
9251 -webkit-box-flex: 1;
9232 -moz-box-flex: 1;
9252 -moz-box-flex: 1;
9233 box-flex: 1;
9253 box-flex: 1;
9234 /* Modern browsers */
9254 /* Modern browsers */
9235 flex: 1;
9255 flex: 1;
9236 }
9256 }
9237 .widget-vslider .ui-slider .ui-slider-handle {
9257 .widget-vslider .ui-slider .ui-slider-handle {
9238 width: 28px !important;
9258 width: 28px !important;
9239 height: 14px !important;
9259 height: 14px !important;
9240 margin-left: -9px;
9260 margin-left: -9px;
9241 }
9261 }
9242 .widget-vslider .ui-slider .ui-slider-range {
9262 .widget-vslider .ui-slider .ui-slider-range {
9243 width: 12px !important;
9263 width: 12px !important;
9244 margin-left: -1px !important;
9264 margin-left: -1px !important;
9245 }
9265 }
9246 .widget-text {
9266 .widget-text {
9247 /* String Textbox - used for TextBoxView and TextAreaView */
9267 /* String Textbox - used for TextBoxView and TextAreaView */
9248 width: 350px;
9268 width: 350px;
9249 margin: 0px !important;
9269 margin: 0px !important;
9250 }
9270 }
9251 .widget-listbox {
9271 .widget-listbox {
9252 /* Listbox */
9272 /* Listbox */
9253 width: 350px;
9273 width: 350px;
9254 margin-bottom: 0px;
9274 margin-bottom: 0px;
9255 }
9275 }
9256 .widget-numeric-text {
9276 .widget-numeric-text {
9257 /* Single Line Textbox - used for IntTextView and FloatTextView */
9277 /* Single Line Textbox - used for IntTextView and FloatTextView */
9258 width: 150px;
9278 width: 150px;
9259 margin: 0px !important;
9279 margin: 0px !important;
9260 }
9280 }
9261 .widget-progress {
9281 .widget-progress {
9262 /* Progress Bar */
9282 /* Progress Bar */
9263 margin-top: 6px;
9283 margin-top: 6px;
9264 width: 350px;
9284 width: 350px;
9265 }
9285 }
9266 .widget-progress .progress-bar {
9286 .widget-progress .progress-bar {
9267 /* Disable progress bar animation */
9287 /* Disable progress bar animation */
9268 -webkit-transition: none;
9288 -webkit-transition: none;
9269 -moz-transition: none;
9289 -moz-transition: none;
9270 -ms-transition: none;
9290 -ms-transition: none;
9271 -o-transition: none;
9291 -o-transition: none;
9272 transition: none;
9292 transition: none;
9273 }
9293 }
9274 .widget-combo-btn {
9294 .widget-combo-btn {
9275 /* ComboBox Main Button */
9295 /* ComboBox Main Button */
9276 min-width: 125px;
9296 min-width: 125px;
9277 }
9297 }
9278 .widget_item .dropdown-menu li a {
9298 .widget_item .dropdown-menu li a {
9279 color: inherit;
9299 color: inherit;
9280 }
9300 }
9281 .widget-hbox {
9301 .widget-hbox {
9282 /* Horizontal widgets */
9302 /* Horizontal widgets */
9283 /* Old browsers */
9303 /* Old browsers */
9284 display: -webkit-box;
9304 display: -webkit-box;
9285 -webkit-box-orient: horizontal;
9305 -webkit-box-orient: horizontal;
9286 -webkit-box-align: stretch;
9306 -webkit-box-align: stretch;
9287 display: -moz-box;
9307 display: -moz-box;
9288 -moz-box-orient: horizontal;
9308 -moz-box-orient: horizontal;
9289 -moz-box-align: stretch;
9309 -moz-box-align: stretch;
9290 display: box;
9310 display: box;
9291 box-orient: horizontal;
9311 box-orient: horizontal;
9292 box-align: stretch;
9312 box-align: stretch;
9293 /* Modern browsers */
9313 /* Modern browsers */
9294 display: flex;
9314 display: flex;
9295 flex-direction: row;
9315 flex-direction: row;
9296 align-items: stretch;
9316 align-items: stretch;
9297 margin-top: 0px !important;
9317 margin-top: 0px !important;
9298 margin-bottom: 0px !important;
9318 margin-bottom: 0px !important;
9299 margin-right: 5px;
9319 margin-right: 5px;
9300 margin-left: 5px;
9320 margin-left: 5px;
9301 }
9321 }
9302 .widget-hbox input[type="checkbox"] {
9322 .widget-hbox input[type="checkbox"] {
9303 margin-top: 9px;
9323 margin-top: 9px;
9304 margin-bottom: 10px;
9324 margin-bottom: 10px;
9305 }
9325 }
9306 .widget-hbox .widget-label {
9326 .widget-hbox .widget-label {
9307 /* Horizontal Label */
9327 /* Horizontal Label */
9308 min-width: 10ex;
9328 min-width: 10ex;
9309 padding-right: 8px;
9329 padding-right: 8px;
9310 padding-top: 5px;
9330 padding-top: 5px;
9311 text-align: right;
9331 text-align: right;
9312 vertical-align: text-top;
9332 vertical-align: text-top;
9313 }
9333 }
9314 .widget-hbox .widget-readout {
9334 .widget-hbox .widget-readout {
9315 padding-left: 8px;
9335 padding-left: 8px;
9316 padding-top: 5px;
9336 padding-top: 5px;
9317 text-align: left;
9337 text-align: left;
9318 vertical-align: text-top;
9338 vertical-align: text-top;
9319 }
9339 }
9320 .widget-vbox {
9340 .widget-vbox {
9321 /* Vertical widgets */
9341 /* Vertical widgets */
9322 /* Old browsers */
9342 /* Old browsers */
9323 display: -webkit-box;
9343 display: -webkit-box;
9324 -webkit-box-orient: vertical;
9344 -webkit-box-orient: vertical;
9325 -webkit-box-align: stretch;
9345 -webkit-box-align: stretch;
9326 display: -moz-box;
9346 display: -moz-box;
9327 -moz-box-orient: vertical;
9347 -moz-box-orient: vertical;
9328 -moz-box-align: stretch;
9348 -moz-box-align: stretch;
9329 display: box;
9349 display: box;
9330 box-orient: vertical;
9350 box-orient: vertical;
9331 box-align: stretch;
9351 box-align: stretch;
9332 /* Modern browsers */
9352 /* Modern browsers */
9333 display: flex;
9353 display: flex;
9334 flex-direction: column;
9354 flex-direction: column;
9335 align-items: stretch;
9355 align-items: stretch;
9336 }
9356 }
9337 .widget-vbox .widget-label {
9357 .widget-vbox .widget-label {
9338 /* Vertical Label */
9358 /* Vertical Label */
9339 padding-bottom: 5px;
9359 padding-bottom: 5px;
9340 text-align: center;
9360 text-align: center;
9341 vertical-align: text-bottom;
9361 vertical-align: text-bottom;
9342 }
9362 }
9343 .widget-vbox .widget-readout {
9363 .widget-vbox .widget-readout {
9344 /* Vertical Label */
9364 /* Vertical Label */
9345 padding-top: 5px;
9365 padding-top: 5px;
9346 text-align: center;
9366 text-align: center;
9347 vertical-align: text-top;
9367 vertical-align: text-top;
9348 }
9368 }
9349 .widget-modal {
9369 .widget-modal {
9350 /* Box - ModalView */
9370 /* Box - ModalView */
9351 overflow: hidden;
9371 overflow: hidden;
9352 position: absolute !important;
9372 position: absolute !important;
9353 top: 0px;
9373 top: 0px;
9354 left: 0px;
9374 left: 0px;
9355 margin-left: 0px !important;
9375 margin-left: 0px !important;
9356 }
9376 }
9357 .widget-modal-body {
9377 .widget-modal-body {
9358 /* Box - ModalView Body */
9378 /* Box - ModalView Body */
9359 max-height: none !important;
9379 max-height: none !important;
9360 }
9380 }
9361 .widget-box {
9381 .widget-box {
9362 /* Box */
9382 /* Box */
9363 box-sizing: border-box;
9383 box-sizing: border-box;
9364 -moz-box-sizing: border-box;
9384 -moz-box-sizing: border-box;
9365 -webkit-box-sizing: border-box;
9385 -webkit-box-sizing: border-box;
9366 /* Old browsers */
9386 /* Old browsers */
9367 -webkit-box-align: start;
9387 -webkit-box-align: start;
9368 -moz-box-align: start;
9388 -moz-box-align: start;
9369 box-align: start;
9389 box-align: start;
9370 /* Modern browsers */
9390 /* Modern browsers */
9371 align-items: flex-start;
9391 align-items: flex-start;
9372 }
9392 }
9373 .widget-radio-box {
9393 .widget-radio-box {
9374 /* Contains RadioButtonsWidget */
9394 /* Contains RadioButtonsWidget */
9375 /* Old browsers */
9395 /* Old browsers */
9376 display: -webkit-box;
9396 display: -webkit-box;
9377 -webkit-box-orient: vertical;
9397 -webkit-box-orient: vertical;
9378 -webkit-box-align: stretch;
9398 -webkit-box-align: stretch;
9379 display: -moz-box;
9399 display: -moz-box;
9380 -moz-box-orient: vertical;
9400 -moz-box-orient: vertical;
9381 -moz-box-align: stretch;
9401 -moz-box-align: stretch;
9382 display: box;
9402 display: box;
9383 box-orient: vertical;
9403 box-orient: vertical;
9384 box-align: stretch;
9404 box-align: stretch;
9385 /* Modern browsers */
9405 /* Modern browsers */
9386 display: flex;
9406 display: flex;
9387 flex-direction: column;
9407 flex-direction: column;
9388 align-items: stretch;
9408 align-items: stretch;
9389 box-sizing: border-box;
9409 box-sizing: border-box;
9390 -moz-box-sizing: border-box;
9410 -moz-box-sizing: border-box;
9391 -webkit-box-sizing: border-box;
9411 -webkit-box-sizing: border-box;
9392 padding-top: 4px;
9412 padding-top: 4px;
9393 }
9413 }
9394 .widget-radio-box label {
9414 .widget-radio-box label {
9395 margin-top: 0px;
9415 margin-top: 0px;
9396 }
9416 }
9397 .docked-widget-modal {
9417 .docked-widget-modal {
9398 /* Horizontal Label */
9418 /* Horizontal Label */
9399 overflow: hidden;
9419 overflow: hidden;
9400 position: relative !important;
9420 position: relative !important;
9401 top: 0px !important;
9421 top: 0px !important;
9402 left: 0px !important;
9422 left: 0px !important;
9403 margin-left: 0px !important;
9423 margin-left: 0px !important;
9404 }
9424 }
9405 /*!
9425 /*!
9406 *
9426 *
9407 * IPython notebook webapp
9427 * IPython notebook webapp
9408 *
9428 *
9409 */
9429 */
9410 body {
9430 body {
9411 background-color: #ffffff;
9431 background-color: #ffffff;
9412 }
9432 }
9413 @media (max-width: 767px) {
9433 @media (max-width: 767px) {
9414 body.notebook_app {
9434 body.notebook_app {
9415 padding-left: 0px;
9435 padding-left: 0px;
9416 padding-right: 0px;
9436 padding-right: 0px;
9417 }
9437 }
9418 }
9438 }
9419 #ipython-main-app {
9439 #ipython-main-app {
9420 box-sizing: border-box;
9440 box-sizing: border-box;
9421 -moz-box-sizing: border-box;
9441 -moz-box-sizing: border-box;
9422 -webkit-box-sizing: border-box;
9442 -webkit-box-sizing: border-box;
9423 }
9443 }
9424 span#notebook_name {
9425 height: 1em;
9426 line-height: 1em;
9427 padding: 3px;
9428 border: none;
9429 font-size: 146.5%;
9430 border-radius: 4px;
9431 }
9432 span#notebook_name:hover {
9433 background-color: #e6e6e6;
9434 }
9435 div#notebook_panel {
9444 div#notebook_panel {
9436 margin: 0px 0px 0px 0px;
9445 margin: 0px 0px 0px 0px;
9437 padding: 0px;
9446 padding: 0px;
9438 box-sizing: border-box;
9447 box-sizing: border-box;
9439 -moz-box-sizing: border-box;
9448 -moz-box-sizing: border-box;
9440 -webkit-box-sizing: border-box;
9449 -webkit-box-sizing: border-box;
9441 }
9450 }
9442 div#notebook {
9451 div#notebook {
9443 font-size: 14px;
9452 font-size: 14px;
9444 line-height: 20px;
9453 line-height: 20px;
9445 overflow-y: hidden;
9454 overflow-y: hidden;
9446 overflow-x: auto;
9455 overflow-x: auto;
9447 width: 100%;
9456 width: 100%;
9448 /* This spaces the cell away from the edge of the notebook area */
9457 /* This spaces the cell away from the edge of the notebook area */
9449 padding: 2em 0 2em 0;
9458 padding: 2em 0 2em 0;
9450 margin: 0px;
9459 margin: 0px;
9451 outline: none;
9460 outline: none;
9452 box-sizing: border-box;
9461 box-sizing: border-box;
9453 -moz-box-sizing: border-box;
9462 -moz-box-sizing: border-box;
9454 -webkit-box-sizing: border-box;
9463 -webkit-box-sizing: border-box;
9455 }
9464 }
9456 div.ui-widget-content {
9465 div.ui-widget-content {
9457 border: 1px solid #ababab;
9466 border: 1px solid #ababab;
9458 outline: none;
9467 outline: none;
9459 }
9468 }
9460 pre.dialog {
9469 pre.dialog {
9461 background-color: #f7f7f7;
9470 background-color: #f7f7f7;
9462 border: 1px solid #ddd;
9471 border: 1px solid #ddd;
9463 border-radius: 4px;
9472 border-radius: 4px;
9464 padding: 0.4em;
9473 padding: 0.4em;
9465 padding-left: 2em;
9474 padding-left: 2em;
9466 }
9475 }
9467 p.dialog {
9476 p.dialog {
9468 padding: 0.2em;
9477 padding: 0.2em;
9469 }
9478 }
9470 /* Word-wrap output correctly. This is the CSS3 spelling, though Firefox seems
9479 /* Word-wrap output correctly. This is the CSS3 spelling, though Firefox seems
9471 to not honor it correctly. Webkit browsers (Chrome, rekonq, Safari) do.
9480 to not honor it correctly. Webkit browsers (Chrome, rekonq, Safari) do.
9472 */
9481 */
9473 pre,
9482 pre,
9474 code,
9483 code,
9475 kbd,
9484 kbd,
9476 samp {
9485 samp {
9477 white-space: pre-wrap;
9486 white-space: pre-wrap;
9478 }
9487 }
9479 #fonttest {
9488 #fonttest {
9480 font-family: monospace;
9489 font-family: monospace;
9481 }
9490 }
9482 p {
9491 p {
9483 margin-bottom: 0;
9492 margin-bottom: 0;
9484 }
9493 }
9485 .end_space {
9494 .end_space {
9486 height: 200px;
9495 height: 200px;
9487 }
9496 }
9488 .lower-header-bar {
9497 .lower-header-bar {
9489 width: 100%;
9498 width: 100%;
9490 height: 0px;
9499 height: 0px;
9491 border-bottom: 1px solid #e7e7e7;
9500 border-bottom: 1px solid #e7e7e7;
9492 margin-bottom: -1px;
9501 margin-bottom: -1px;
9493 }
9502 }
9494 .notebook_app #header {
9503 .notebook_app #header {
9495 -webkit-box-shadow: 1px 4px 9px -6px rgba(0, 0, 0, 0.25);
9504 -webkit-box-shadow: 1px 4px 9px -6px rgba(0, 0, 0, 0.25);
9496 box-shadow: 1px 4px 9px -6px rgba(0, 0, 0, 0.25);
9505 box-shadow: 1px 4px 9px -6px rgba(0, 0, 0, 0.25);
9497 }
9506 }
9498 /* CSS for the cell toolbar */
9507 /* CSS for the cell toolbar */
9499 .celltoolbar {
9508 .celltoolbar {
9500 border: thin solid #CFCFCF;
9509 border: thin solid #CFCFCF;
9501 border-bottom: none;
9510 border-bottom: none;
9502 background: #EEE;
9511 background: #EEE;
9503 border-radius: 4px 4px 0px 0px;
9512 border-radius: 4px 4px 0px 0px;
9504 width: 100%;
9513 width: 100%;
9505 height: 29px;
9514 height: 29px;
9506 padding-right: 4px;
9515 padding-right: 4px;
9507 /* Old browsers */
9516 /* Old browsers */
9508 display: -webkit-box;
9517 display: -webkit-box;
9509 -webkit-box-orient: horizontal;
9518 -webkit-box-orient: horizontal;
9510 -webkit-box-align: stretch;
9519 -webkit-box-align: stretch;
9511 display: -moz-box;
9520 display: -moz-box;
9512 -moz-box-orient: horizontal;
9521 -moz-box-orient: horizontal;
9513 -moz-box-align: stretch;
9522 -moz-box-align: stretch;
9514 display: box;
9523 display: box;
9515 box-orient: horizontal;
9524 box-orient: horizontal;
9516 box-align: stretch;
9525 box-align: stretch;
9517 /* Modern browsers */
9526 /* Modern browsers */
9518 display: flex;
9527 display: flex;
9519 flex-direction: row;
9528 flex-direction: row;
9520 align-items: stretch;
9529 align-items: stretch;
9521 /* Old browsers */
9530 /* Old browsers */
9522 -webkit-box-pack: end;
9531 -webkit-box-pack: end;
9523 -moz-box-pack: end;
9532 -moz-box-pack: end;
9524 box-pack: end;
9533 box-pack: end;
9525 /* Modern browsers */
9534 /* Modern browsers */
9526 justify-content: flex-end;
9535 justify-content: flex-end;
9527 }
9536 }
9528 .ctb_hideshow {
9537 .ctb_hideshow {
9529 display: none;
9538 display: none;
9530 vertical-align: bottom;
9539 vertical-align: bottom;
9531 }
9540 }
9532 /* ctb_show is added to the ctb_hideshow div to show the cell toolbar.
9541 /* ctb_show is added to the ctb_hideshow div to show the cell toolbar.
9533 Cell toolbars are only shown when the ctb_global_show class is also set.
9542 Cell toolbars are only shown when the ctb_global_show class is also set.
9534 */
9543 */
9535 .ctb_global_show .ctb_show.ctb_hideshow {
9544 .ctb_global_show .ctb_show.ctb_hideshow {
9536 display: block;
9545 display: block;
9537 }
9546 }
9538 .ctb_global_show .ctb_show + .input_area,
9547 .ctb_global_show .ctb_show + .input_area,
9539 .ctb_global_show .ctb_show + div.text_cell_input {
9548 .ctb_global_show .ctb_show + div.text_cell_input {
9540 border-top-right-radius: 0px;
9549 border-top-right-radius: 0px;
9541 border-top-left-radius: 0px;
9550 border-top-left-radius: 0px;
9542 }
9551 }
9543 .celltoolbar {
9552 .celltoolbar {
9544 font-size: 87%;
9553 font-size: 87%;
9545 padding-top: 3px;
9554 padding-top: 3px;
9546 }
9555 }
9547 .celltoolbar select {
9556 .celltoolbar select {
9548 display: block;
9557 display: block;
9549 width: 100%;
9558 width: 100%;
9550 height: 32px;
9559 height: 32px;
9551 padding: 6px 12px;
9560 padding: 6px 12px;
9552 font-size: 13px;
9561 font-size: 13px;
9553 line-height: 1.42857143;
9562 line-height: 1.42857143;
9554 color: #555555;
9563 color: #555555;
9555 background-color: #ffffff;
9564 background-color: #ffffff;
9556 background-image: none;
9565 background-image: none;
9557 border: 1px solid #cccccc;
9566 border: 1px solid #cccccc;
9558 border-radius: 4px;
9567 border-radius: 4px;
9559 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
9568 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
9560 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
9569 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
9561 -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
9570 -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
9562 transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
9571 transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
9563 height: 30px;
9572 height: 30px;
9564 padding: 5px 10px;
9573 padding: 5px 10px;
9565 font-size: 12px;
9574 font-size: 12px;
9566 line-height: 1.5;
9575 line-height: 1.5;
9567 border-radius: 3px;
9576 border-radius: 3px;
9568 width: inherit;
9577 width: inherit;
9569 font-size: 87%;
9578 font-size: 87%;
9570 height: 22px;
9579 height: 22px;
9571 display: inline-block;
9580 display: inline-block;
9572 }
9581 }
9573 .celltoolbar select:focus {
9582 .celltoolbar select:focus {
9574 border-color: #66afe9;
9583 border-color: #66afe9;
9575 outline: 0;
9584 outline: 0;
9576 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
9585 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
9577 box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
9586 box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
9578 }
9587 }
9579 .celltoolbar select::-moz-placeholder {
9588 .celltoolbar select::-moz-placeholder {
9580 color: #999999;
9589 color: #999999;
9581 opacity: 1;
9590 opacity: 1;
9582 }
9591 }
9583 .celltoolbar select:-ms-input-placeholder {
9592 .celltoolbar select:-ms-input-placeholder {
9584 color: #999999;
9593 color: #999999;
9585 }
9594 }
9586 .celltoolbar select::-webkit-input-placeholder {
9595 .celltoolbar select::-webkit-input-placeholder {
9587 color: #999999;
9596 color: #999999;
9588 }
9597 }
9589 .celltoolbar select[disabled],
9598 .celltoolbar select[disabled],
9590 .celltoolbar select[readonly],
9599 .celltoolbar select[readonly],
9591 fieldset[disabled] .celltoolbar select {
9600 fieldset[disabled] .celltoolbar select {
9592 cursor: not-allowed;
9601 cursor: not-allowed;
9593 background-color: #eeeeee;
9602 background-color: #eeeeee;
9594 opacity: 1;
9603 opacity: 1;
9595 }
9604 }
9596 textarea.celltoolbar select {
9605 textarea.celltoolbar select {
9597 height: auto;
9606 height: auto;
9598 }
9607 }
9599 select.celltoolbar select {
9608 select.celltoolbar select {
9600 height: 30px;
9609 height: 30px;
9601 line-height: 30px;
9610 line-height: 30px;
9602 }
9611 }
9603 textarea.celltoolbar select,
9612 textarea.celltoolbar select,
9604 select[multiple].celltoolbar select {
9613 select[multiple].celltoolbar select {
9605 height: auto;
9614 height: auto;
9606 }
9615 }
9607 .celltoolbar label {
9616 .celltoolbar label {
9608 margin-left: 5px;
9617 margin-left: 5px;
9609 margin-right: 5px;
9618 margin-right: 5px;
9610 }
9619 }
9611 .completions {
9620 .completions {
9612 position: absolute;
9621 position: absolute;
9613 z-index: 10;
9622 z-index: 10;
9614 overflow: hidden;
9623 overflow: hidden;
9615 border: 1px solid #ababab;
9624 border: 1px solid #ababab;
9616 border-radius: 4px;
9625 border-radius: 4px;
9617 -webkit-box-shadow: 0px 6px 10px -1px #adadad;
9626 -webkit-box-shadow: 0px 6px 10px -1px #adadad;
9618 box-shadow: 0px 6px 10px -1px #adadad;
9627 box-shadow: 0px 6px 10px -1px #adadad;
9619 }
9628 }
9620 .completions select {
9629 .completions select {
9621 background: white;
9630 background: white;
9622 outline: none;
9631 outline: none;
9623 border: none;
9632 border: none;
9624 padding: 0px;
9633 padding: 0px;
9625 margin: 0px;
9634 margin: 0px;
9626 overflow: auto;
9635 overflow: auto;
9627 font-family: monospace;
9636 font-family: monospace;
9628 font-size: 110%;
9637 font-size: 110%;
9629 color: #000000;
9638 color: #000000;
9630 width: auto;
9639 width: auto;
9631 }
9640 }
9632 .completions select option.context {
9641 .completions select option.context {
9633 color: #3071a9;
9642 color: #3071a9;
9634 }
9643 }
9635 #kernel_selector_widget {
9644 #kernel_selector_widget {
9636 margin-right: 1em;
9645 margin-right: 1em;
9637 float: right;
9646 float: right;
9638 }
9647 }
9639 #kernel_selector_widget > button {
9648 #kernel_selector_widget > button {
9640 color: #333333;
9649 color: #333333;
9641 background-color: #ffffff;
9650 background-color: #ffffff;
9642 border-color: #cccccc;
9651 border-color: #cccccc;
9643 }
9652 }
9644 #kernel_selector_widget > button:hover,
9653 #kernel_selector_widget > button:hover,
9645 #kernel_selector_widget > button:focus,
9654 #kernel_selector_widget > button:focus,
9646 #kernel_selector_widget > button:active,
9655 #kernel_selector_widget > button:active,
9647 #kernel_selector_widget > button.active,
9656 #kernel_selector_widget > button.active,
9648 .open .dropdown-toggle#kernel_selector_widget > button {
9657 .open .dropdown-toggle#kernel_selector_widget > button {
9649 color: #333333;
9658 color: #333333;
9650 background-color: #ebebeb;
9659 background-color: #ebebeb;
9651 border-color: #adadad;
9660 border-color: #adadad;
9652 }
9661 }
9653 #kernel_selector_widget > button:active,
9662 #kernel_selector_widget > button:active,
9654 #kernel_selector_widget > button.active,
9663 #kernel_selector_widget > button.active,
9655 .open .dropdown-toggle#kernel_selector_widget > button {
9664 .open .dropdown-toggle#kernel_selector_widget > button {
9656 background-image: none;
9665 background-image: none;
9657 }
9666 }
9658 #kernel_selector_widget > button.disabled,
9667 #kernel_selector_widget > button.disabled,
9659 #kernel_selector_widget > button[disabled],
9668 #kernel_selector_widget > button[disabled],
9660 fieldset[disabled] #kernel_selector_widget > button,
9669 fieldset[disabled] #kernel_selector_widget > button,
9661 #kernel_selector_widget > button.disabled:hover,
9670 #kernel_selector_widget > button.disabled:hover,
9662 #kernel_selector_widget > button[disabled]:hover,
9671 #kernel_selector_widget > button[disabled]:hover,
9663 fieldset[disabled] #kernel_selector_widget > button:hover,
9672 fieldset[disabled] #kernel_selector_widget > button:hover,
9664 #kernel_selector_widget > button.disabled:focus,
9673 #kernel_selector_widget > button.disabled:focus,
9665 #kernel_selector_widget > button[disabled]:focus,
9674 #kernel_selector_widget > button[disabled]:focus,
9666 fieldset[disabled] #kernel_selector_widget > button:focus,
9675 fieldset[disabled] #kernel_selector_widget > button:focus,
9667 #kernel_selector_widget > button.disabled:active,
9676 #kernel_selector_widget > button.disabled:active,
9668 #kernel_selector_widget > button[disabled]:active,
9677 #kernel_selector_widget > button[disabled]:active,
9669 fieldset[disabled] #kernel_selector_widget > button:active,
9678 fieldset[disabled] #kernel_selector_widget > button:active,
9670 #kernel_selector_widget > button.disabled.active,
9679 #kernel_selector_widget > button.disabled.active,
9671 #kernel_selector_widget > button[disabled].active,
9680 #kernel_selector_widget > button[disabled].active,
9672 fieldset[disabled] #kernel_selector_widget > button.active {
9681 fieldset[disabled] #kernel_selector_widget > button.active {
9673 background-color: #ffffff;
9682 background-color: #ffffff;
9674 border-color: #cccccc;
9683 border-color: #cccccc;
9675 }
9684 }
9676 #kernel_selector_widget > button .badge {
9685 #kernel_selector_widget > button .badge {
9677 color: #ffffff;
9686 color: #ffffff;
9678 background-color: #333333;
9687 background-color: #333333;
9679 }
9688 }
9680 #kernel_selector_widget > button > span.caret {
9689 #kernel_selector_widget > button > span.caret {
9681 margin-top: 0px;
9690 margin-top: 0px;
9682 }
9691 }
9683 #menubar {
9692 #menubar {
9684 margin-top: 0px;
9685 box-sizing: border-box;
9693 box-sizing: border-box;
9686 -moz-box-sizing: border-box;
9694 -moz-box-sizing: border-box;
9687 -webkit-box-sizing: border-box;
9695 -webkit-box-sizing: border-box;
9688 }
9696 }
9689 #menubar .navbar {
9697 #menubar .navbar {
9690 border-top: 1px;
9698 border-top: 1px;
9691 border-radius: 0px 0px 4px 4px;
9699 border-radius: 0px 0px 4px 4px;
9692 margin-bottom: 6px;
9700 margin-bottom: 6px;
9693 }
9701 }
9694 #menubar .navbar-toggle {
9702 #menubar .navbar-toggle {
9695 float: left;
9703 float: left;
9696 }
9704 }
9697 #menubar .navbar-collapse {
9705 #menubar .navbar-collapse {
9698 clear: left;
9706 clear: left;
9699 }
9707 }
9700 .nav-wrapper {
9708 .nav-wrapper {
9701 border-bottom: 1px solid #e7e7e7;
9709 border-bottom: 1px solid #e7e7e7;
9702 }
9710 }
9703 i.menu-icon {
9711 i.menu-icon {
9704 padding-top: 4px;
9712 padding-top: 4px;
9705 }
9713 }
9706 ul#help_menu li a {
9714 ul#help_menu li a {
9707 overflow: hidden;
9715 overflow: hidden;
9708 padding-right: 2.2em;
9716 padding-right: 2.2em;
9709 }
9717 }
9710 ul#help_menu li a i {
9718 ul#help_menu li a i {
9711 margin-right: -1.2em;
9719 margin-right: -1.2em;
9712 }
9720 }
9713 .dropdown-submenu {
9721 .dropdown-submenu {
9714 position: relative;
9722 position: relative;
9715 }
9723 }
9716 .dropdown-submenu > .dropdown-menu {
9724 .dropdown-submenu > .dropdown-menu {
9717 top: 0;
9725 top: 0;
9718 left: 100%;
9726 left: 100%;
9719 margin-top: -6px;
9727 margin-top: -6px;
9720 margin-left: -1px;
9728 margin-left: -1px;
9721 -webkit-border-radius: 0 6px 6px 6px;
9729 -webkit-border-radius: 0 6px 6px 6px;
9722 -moz-border-radius: 0 6px 6px 6px;
9730 -moz-border-radius: 0 6px 6px 6px;
9723 border-radius: 0 6px 6px 6px;
9731 border-radius: 0 6px 6px 6px;
9724 }
9732 }
9725 .dropdown-submenu:hover > .dropdown-menu {
9733 .dropdown-submenu:hover > .dropdown-menu {
9726 display: block;
9734 display: block;
9727 }
9735 }
9728 .dropdown-submenu > a:after {
9736 .dropdown-submenu > a:after {
9729 display: block;
9737 display: block;
9730 content: " ";
9738 content: " ";
9731 float: right;
9739 float: right;
9732 width: 0;
9740 width: 0;
9733 height: 0;
9741 height: 0;
9734 border-color: transparent;
9742 border-color: transparent;
9735 border-style: solid;
9743 border-style: solid;
9736 border-width: 5px 0 5px 5px;
9744 border-width: 5px 0 5px 5px;
9737 border-left-color: #cccccc;
9745 border-left-color: #cccccc;
9738 margin-top: 5px;
9746 margin-top: 5px;
9739 margin-right: -10px;
9747 margin-right: -10px;
9740 }
9748 }
9741 .dropdown-submenu:hover > a:after {
9749 .dropdown-submenu:hover > a:after {
9742 border-left-color: #ffffff;
9750 border-left-color: #ffffff;
9743 }
9751 }
9744 .dropdown-submenu.pull-left {
9752 .dropdown-submenu.pull-left {
9745 float: none;
9753 float: none;
9746 }
9754 }
9747 .dropdown-submenu.pull-left > .dropdown-menu {
9755 .dropdown-submenu.pull-left > .dropdown-menu {
9748 left: -100%;
9756 left: -100%;
9749 margin-left: 10px;
9757 margin-left: 10px;
9750 -webkit-border-radius: 6px 0 6px 6px;
9758 -webkit-border-radius: 6px 0 6px 6px;
9751 -moz-border-radius: 6px 0 6px 6px;
9759 -moz-border-radius: 6px 0 6px 6px;
9752 border-radius: 6px 0 6px 6px;
9760 border-radius: 6px 0 6px 6px;
9753 }
9761 }
9754 #notification_area {
9762 #notification_area {
9755 float: right !important;
9763 float: right !important;
9756 float: right;
9764 float: right;
9757 z-index: 10;
9765 z-index: 10;
9758 }
9766 }
9759 .indicator_area {
9767 .indicator_area {
9760 color: #777777;
9768 color: #777777;
9761 margin-left: 5px;
9769 margin-left: 5px;
9762 margin-right: 5px;
9770 margin-right: 5px;
9763 width: 11px;
9771 width: 11px;
9764 z-index: 10;
9772 z-index: 10;
9765 text-align: center;
9773 text-align: center;
9766 }
9774 }
9767 #kernel_indicator {
9775 #kernel_indicator {
9768 float: right !important;
9776 float: right !important;
9769 float: right;
9777 float: right;
9770 color: #777777;
9778 color: #777777;
9771 margin-left: 5px;
9779 margin-left: 5px;
9772 margin-right: 5px;
9780 margin-right: 5px;
9773 width: 11px;
9781 width: 11px;
9774 z-index: 10;
9782 z-index: 10;
9775 text-align: center;
9783 text-align: center;
9776 }
9784 }
9777 #modal_indicator {
9785 #modal_indicator {
9778 float: right !important;
9786 float: right !important;
9779 float: right;
9787 float: right;
9780 color: #777777;
9788 color: #777777;
9781 margin-left: 5px;
9789 margin-left: 5px;
9782 margin-right: 5px;
9790 margin-right: 5px;
9783 width: 11px;
9791 width: 11px;
9784 z-index: 10;
9792 z-index: 10;
9785 text-align: center;
9793 text-align: center;
9786 }
9794 }
9787 .edit_mode_icon:before {
9795 .edit_mode_icon:before {
9788 display: inline-block;
9796 display: inline-block;
9789 font: normal normal normal 14px/1 FontAwesome;
9797 font: normal normal normal 14px/1 FontAwesome;
9790 font-size: inherit;
9798 font-size: inherit;
9791 text-rendering: auto;
9799 text-rendering: auto;
9792 -webkit-font-smoothing: antialiased;
9800 -webkit-font-smoothing: antialiased;
9793 -moz-osx-font-smoothing: grayscale;
9801 -moz-osx-font-smoothing: grayscale;
9794 content: "\f040";
9802 content: "\f040";
9795 }
9803 }
9796 .edit_mode_icon:before.pull-left {
9804 .edit_mode_icon:before.pull-left {
9797 margin-right: .3em;
9805 margin-right: .3em;
9798 }
9806 }
9799 .edit_mode_icon:before.pull-right {
9807 .edit_mode_icon:before.pull-right {
9800 margin-left: .3em;
9808 margin-left: .3em;
9801 }
9809 }
9802 .command_mode_icon:before {
9810 .command_mode_icon:before {
9803 display: inline-block;
9811 display: inline-block;
9804 font: normal normal normal 14px/1 FontAwesome;
9812 font: normal normal normal 14px/1 FontAwesome;
9805 font-size: inherit;
9813 font-size: inherit;
9806 text-rendering: auto;
9814 text-rendering: auto;
9807 -webkit-font-smoothing: antialiased;
9815 -webkit-font-smoothing: antialiased;
9808 -moz-osx-font-smoothing: grayscale;
9816 -moz-osx-font-smoothing: grayscale;
9809 content: ' ';
9817 content: ' ';
9810 }
9818 }
9811 .command_mode_icon:before.pull-left {
9819 .command_mode_icon:before.pull-left {
9812 margin-right: .3em;
9820 margin-right: .3em;
9813 }
9821 }
9814 .command_mode_icon:before.pull-right {
9822 .command_mode_icon:before.pull-right {
9815 margin-left: .3em;
9823 margin-left: .3em;
9816 }
9824 }
9817 .kernel_idle_icon:before {
9825 .kernel_idle_icon:before {
9818 display: inline-block;
9826 display: inline-block;
9819 font: normal normal normal 14px/1 FontAwesome;
9827 font: normal normal normal 14px/1 FontAwesome;
9820 font-size: inherit;
9828 font-size: inherit;
9821 text-rendering: auto;
9829 text-rendering: auto;
9822 -webkit-font-smoothing: antialiased;
9830 -webkit-font-smoothing: antialiased;
9823 -moz-osx-font-smoothing: grayscale;
9831 -moz-osx-font-smoothing: grayscale;
9824 content: "\f10c";
9832 content: "\f10c";
9825 }
9833 }
9826 .kernel_idle_icon:before.pull-left {
9834 .kernel_idle_icon:before.pull-left {
9827 margin-right: .3em;
9835 margin-right: .3em;
9828 }
9836 }
9829 .kernel_idle_icon:before.pull-right {
9837 .kernel_idle_icon:before.pull-right {
9830 margin-left: .3em;
9838 margin-left: .3em;
9831 }
9839 }
9832 .kernel_busy_icon:before {
9840 .kernel_busy_icon:before {
9833 display: inline-block;
9841 display: inline-block;
9834 font: normal normal normal 14px/1 FontAwesome;
9842 font: normal normal normal 14px/1 FontAwesome;
9835 font-size: inherit;
9843 font-size: inherit;
9836 text-rendering: auto;
9844 text-rendering: auto;
9837 -webkit-font-smoothing: antialiased;
9845 -webkit-font-smoothing: antialiased;
9838 -moz-osx-font-smoothing: grayscale;
9846 -moz-osx-font-smoothing: grayscale;
9839 content: "\f111";
9847 content: "\f111";
9840 }
9848 }
9841 .kernel_busy_icon:before.pull-left {
9849 .kernel_busy_icon:before.pull-left {
9842 margin-right: .3em;
9850 margin-right: .3em;
9843 }
9851 }
9844 .kernel_busy_icon:before.pull-right {
9852 .kernel_busy_icon:before.pull-right {
9845 margin-left: .3em;
9853 margin-left: .3em;
9846 }
9854 }
9847 .kernel_dead_icon:before {
9855 .kernel_dead_icon:before {
9848 display: inline-block;
9856 display: inline-block;
9849 font: normal normal normal 14px/1 FontAwesome;
9857 font: normal normal normal 14px/1 FontAwesome;
9850 font-size: inherit;
9858 font-size: inherit;
9851 text-rendering: auto;
9859 text-rendering: auto;
9852 -webkit-font-smoothing: antialiased;
9860 -webkit-font-smoothing: antialiased;
9853 -moz-osx-font-smoothing: grayscale;
9861 -moz-osx-font-smoothing: grayscale;
9854 content: "\f1e2";
9862 content: "\f1e2";
9855 }
9863 }
9856 .kernel_dead_icon:before.pull-left {
9864 .kernel_dead_icon:before.pull-left {
9857 margin-right: .3em;
9865 margin-right: .3em;
9858 }
9866 }
9859 .kernel_dead_icon:before.pull-right {
9867 .kernel_dead_icon:before.pull-right {
9860 margin-left: .3em;
9868 margin-left: .3em;
9861 }
9869 }
9862 .kernel_disconnected_icon:before {
9870 .kernel_disconnected_icon:before {
9863 display: inline-block;
9871 display: inline-block;
9864 font: normal normal normal 14px/1 FontAwesome;
9872 font: normal normal normal 14px/1 FontAwesome;
9865 font-size: inherit;
9873 font-size: inherit;
9866 text-rendering: auto;
9874 text-rendering: auto;
9867 -webkit-font-smoothing: antialiased;
9875 -webkit-font-smoothing: antialiased;
9868 -moz-osx-font-smoothing: grayscale;
9876 -moz-osx-font-smoothing: grayscale;
9869 content: "\f127";
9877 content: "\f127";
9870 }
9878 }
9871 .kernel_disconnected_icon:before.pull-left {
9879 .kernel_disconnected_icon:before.pull-left {
9872 margin-right: .3em;
9880 margin-right: .3em;
9873 }
9881 }
9874 .kernel_disconnected_icon:before.pull-right {
9882 .kernel_disconnected_icon:before.pull-right {
9875 margin-left: .3em;
9883 margin-left: .3em;
9876 }
9884 }
9877 .notification_widget {
9885 .notification_widget {
9878 color: #777777;
9886 color: #777777;
9879 z-index: 10;
9887 z-index: 10;
9880 background: rgba(240, 240, 240, 0.5);
9888 background: rgba(240, 240, 240, 0.5);
9881 color: #333333;
9889 color: #333333;
9882 background-color: #ffffff;
9890 background-color: #ffffff;
9883 border-color: #cccccc;
9891 border-color: #cccccc;
9884 }
9892 }
9885 .notification_widget:hover,
9893 .notification_widget:hover,
9886 .notification_widget:focus,
9894 .notification_widget:focus,
9887 .notification_widget:active,
9895 .notification_widget:active,
9888 .notification_widget.active,
9896 .notification_widget.active,
9889 .open .dropdown-toggle.notification_widget {
9897 .open .dropdown-toggle.notification_widget {
9890 color: #333333;
9898 color: #333333;
9891 background-color: #ebebeb;
9899 background-color: #ebebeb;
9892 border-color: #adadad;
9900 border-color: #adadad;
9893 }
9901 }
9894 .notification_widget:active,
9902 .notification_widget:active,
9895 .notification_widget.active,
9903 .notification_widget.active,
9896 .open .dropdown-toggle.notification_widget {
9904 .open .dropdown-toggle.notification_widget {
9897 background-image: none;
9905 background-image: none;
9898 }
9906 }
9899 .notification_widget.disabled,
9907 .notification_widget.disabled,
9900 .notification_widget[disabled],
9908 .notification_widget[disabled],
9901 fieldset[disabled] .notification_widget,
9909 fieldset[disabled] .notification_widget,
9902 .notification_widget.disabled:hover,
9910 .notification_widget.disabled:hover,
9903 .notification_widget[disabled]:hover,
9911 .notification_widget[disabled]:hover,
9904 fieldset[disabled] .notification_widget:hover,
9912 fieldset[disabled] .notification_widget:hover,
9905 .notification_widget.disabled:focus,
9913 .notification_widget.disabled:focus,
9906 .notification_widget[disabled]:focus,
9914 .notification_widget[disabled]:focus,
9907 fieldset[disabled] .notification_widget:focus,
9915 fieldset[disabled] .notification_widget:focus,
9908 .notification_widget.disabled:active,
9916 .notification_widget.disabled:active,
9909 .notification_widget[disabled]:active,
9917 .notification_widget[disabled]:active,
9910 fieldset[disabled] .notification_widget:active,
9918 fieldset[disabled] .notification_widget:active,
9911 .notification_widget.disabled.active,
9919 .notification_widget.disabled.active,
9912 .notification_widget[disabled].active,
9920 .notification_widget[disabled].active,
9913 fieldset[disabled] .notification_widget.active {
9921 fieldset[disabled] .notification_widget.active {
9914 background-color: #ffffff;
9922 background-color: #ffffff;
9915 border-color: #cccccc;
9923 border-color: #cccccc;
9916 }
9924 }
9917 .notification_widget .badge {
9925 .notification_widget .badge {
9918 color: #ffffff;
9926 color: #ffffff;
9919 background-color: #333333;
9927 background-color: #333333;
9920 }
9928 }
9921 .notification_widget.warning {
9929 .notification_widget.warning {
9922 color: #ffffff;
9930 color: #ffffff;
9923 background-color: #f0ad4e;
9931 background-color: #f0ad4e;
9924 border-color: #eea236;
9932 border-color: #eea236;
9925 }
9933 }
9926 .notification_widget.warning:hover,
9934 .notification_widget.warning:hover,
9927 .notification_widget.warning:focus,
9935 .notification_widget.warning:focus,
9928 .notification_widget.warning:active,
9936 .notification_widget.warning:active,
9929 .notification_widget.warning.active,
9937 .notification_widget.warning.active,
9930 .open .dropdown-toggle.notification_widget.warning {
9938 .open .dropdown-toggle.notification_widget.warning {
9931 color: #ffffff;
9939 color: #ffffff;
9932 background-color: #ed9c28;
9940 background-color: #ed9c28;
9933 border-color: #d58512;
9941 border-color: #d58512;
9934 }
9942 }
9935 .notification_widget.warning:active,
9943 .notification_widget.warning:active,
9936 .notification_widget.warning.active,
9944 .notification_widget.warning.active,
9937 .open .dropdown-toggle.notification_widget.warning {
9945 .open .dropdown-toggle.notification_widget.warning {
9938 background-image: none;
9946 background-image: none;
9939 }
9947 }
9940 .notification_widget.warning.disabled,
9948 .notification_widget.warning.disabled,
9941 .notification_widget.warning[disabled],
9949 .notification_widget.warning[disabled],
9942 fieldset[disabled] .notification_widget.warning,
9950 fieldset[disabled] .notification_widget.warning,
9943 .notification_widget.warning.disabled:hover,
9951 .notification_widget.warning.disabled:hover,
9944 .notification_widget.warning[disabled]:hover,
9952 .notification_widget.warning[disabled]:hover,
9945 fieldset[disabled] .notification_widget.warning:hover,
9953 fieldset[disabled] .notification_widget.warning:hover,
9946 .notification_widget.warning.disabled:focus,
9954 .notification_widget.warning.disabled:focus,
9947 .notification_widget.warning[disabled]:focus,
9955 .notification_widget.warning[disabled]:focus,
9948 fieldset[disabled] .notification_widget.warning:focus,
9956 fieldset[disabled] .notification_widget.warning:focus,
9949 .notification_widget.warning.disabled:active,
9957 .notification_widget.warning.disabled:active,
9950 .notification_widget.warning[disabled]:active,
9958 .notification_widget.warning[disabled]:active,
9951 fieldset[disabled] .notification_widget.warning:active,
9959 fieldset[disabled] .notification_widget.warning:active,
9952 .notification_widget.warning.disabled.active,
9960 .notification_widget.warning.disabled.active,
9953 .notification_widget.warning[disabled].active,
9961 .notification_widget.warning[disabled].active,
9954 fieldset[disabled] .notification_widget.warning.active {
9962 fieldset[disabled] .notification_widget.warning.active {
9955 background-color: #f0ad4e;
9963 background-color: #f0ad4e;
9956 border-color: #eea236;
9964 border-color: #eea236;
9957 }
9965 }
9958 .notification_widget.warning .badge {
9966 .notification_widget.warning .badge {
9959 color: #f0ad4e;
9967 color: #f0ad4e;
9960 background-color: #ffffff;
9968 background-color: #ffffff;
9961 }
9969 }
9962 .notification_widget.success {
9970 .notification_widget.success {
9963 color: #ffffff;
9971 color: #ffffff;
9964 background-color: #5cb85c;
9972 background-color: #5cb85c;
9965 border-color: #4cae4c;
9973 border-color: #4cae4c;
9966 }
9974 }
9967 .notification_widget.success:hover,
9975 .notification_widget.success:hover,
9968 .notification_widget.success:focus,
9976 .notification_widget.success:focus,
9969 .notification_widget.success:active,
9977 .notification_widget.success:active,
9970 .notification_widget.success.active,
9978 .notification_widget.success.active,
9971 .open .dropdown-toggle.notification_widget.success {
9979 .open .dropdown-toggle.notification_widget.success {
9972 color: #ffffff;
9980 color: #ffffff;
9973 background-color: #47a447;
9981 background-color: #47a447;
9974 border-color: #398439;
9982 border-color: #398439;
9975 }
9983 }
9976 .notification_widget.success:active,
9984 .notification_widget.success:active,
9977 .notification_widget.success.active,
9985 .notification_widget.success.active,
9978 .open .dropdown-toggle.notification_widget.success {
9986 .open .dropdown-toggle.notification_widget.success {
9979 background-image: none;
9987 background-image: none;
9980 }
9988 }
9981 .notification_widget.success.disabled,
9989 .notification_widget.success.disabled,
9982 .notification_widget.success[disabled],
9990 .notification_widget.success[disabled],
9983 fieldset[disabled] .notification_widget.success,
9991 fieldset[disabled] .notification_widget.success,
9984 .notification_widget.success.disabled:hover,
9992 .notification_widget.success.disabled:hover,
9985 .notification_widget.success[disabled]:hover,
9993 .notification_widget.success[disabled]:hover,
9986 fieldset[disabled] .notification_widget.success:hover,
9994 fieldset[disabled] .notification_widget.success:hover,
9987 .notification_widget.success.disabled:focus,
9995 .notification_widget.success.disabled:focus,
9988 .notification_widget.success[disabled]:focus,
9996 .notification_widget.success[disabled]:focus,
9989 fieldset[disabled] .notification_widget.success:focus,
9997 fieldset[disabled] .notification_widget.success:focus,
9990 .notification_widget.success.disabled:active,
9998 .notification_widget.success.disabled:active,
9991 .notification_widget.success[disabled]:active,
9999 .notification_widget.success[disabled]:active,
9992 fieldset[disabled] .notification_widget.success:active,
10000 fieldset[disabled] .notification_widget.success:active,
9993 .notification_widget.success.disabled.active,
10001 .notification_widget.success.disabled.active,
9994 .notification_widget.success[disabled].active,
10002 .notification_widget.success[disabled].active,
9995 fieldset[disabled] .notification_widget.success.active {
10003 fieldset[disabled] .notification_widget.success.active {
9996 background-color: #5cb85c;
10004 background-color: #5cb85c;
9997 border-color: #4cae4c;
10005 border-color: #4cae4c;
9998 }
10006 }
9999 .notification_widget.success .badge {
10007 .notification_widget.success .badge {
10000 color: #5cb85c;
10008 color: #5cb85c;
10001 background-color: #ffffff;
10009 background-color: #ffffff;
10002 }
10010 }
10003 .notification_widget.info {
10011 .notification_widget.info {
10004 color: #ffffff;
10012 color: #ffffff;
10005 background-color: #5bc0de;
10013 background-color: #5bc0de;
10006 border-color: #46b8da;
10014 border-color: #46b8da;
10007 }
10015 }
10008 .notification_widget.info:hover,
10016 .notification_widget.info:hover,
10009 .notification_widget.info:focus,
10017 .notification_widget.info:focus,
10010 .notification_widget.info:active,
10018 .notification_widget.info:active,
10011 .notification_widget.info.active,
10019 .notification_widget.info.active,
10012 .open .dropdown-toggle.notification_widget.info {
10020 .open .dropdown-toggle.notification_widget.info {
10013 color: #ffffff;
10021 color: #ffffff;
10014 background-color: #39b3d7;
10022 background-color: #39b3d7;
10015 border-color: #269abc;
10023 border-color: #269abc;
10016 }
10024 }
10017 .notification_widget.info:active,
10025 .notification_widget.info:active,
10018 .notification_widget.info.active,
10026 .notification_widget.info.active,
10019 .open .dropdown-toggle.notification_widget.info {
10027 .open .dropdown-toggle.notification_widget.info {
10020 background-image: none;
10028 background-image: none;
10021 }
10029 }
10022 .notification_widget.info.disabled,
10030 .notification_widget.info.disabled,
10023 .notification_widget.info[disabled],
10031 .notification_widget.info[disabled],
10024 fieldset[disabled] .notification_widget.info,
10032 fieldset[disabled] .notification_widget.info,
10025 .notification_widget.info.disabled:hover,
10033 .notification_widget.info.disabled:hover,
10026 .notification_widget.info[disabled]:hover,
10034 .notification_widget.info[disabled]:hover,
10027 fieldset[disabled] .notification_widget.info:hover,
10035 fieldset[disabled] .notification_widget.info:hover,
10028 .notification_widget.info.disabled:focus,
10036 .notification_widget.info.disabled:focus,
10029 .notification_widget.info[disabled]:focus,
10037 .notification_widget.info[disabled]:focus,
10030 fieldset[disabled] .notification_widget.info:focus,
10038 fieldset[disabled] .notification_widget.info:focus,
10031 .notification_widget.info.disabled:active,
10039 .notification_widget.info.disabled:active,
10032 .notification_widget.info[disabled]:active,
10040 .notification_widget.info[disabled]:active,
10033 fieldset[disabled] .notification_widget.info:active,
10041 fieldset[disabled] .notification_widget.info:active,
10034 .notification_widget.info.disabled.active,
10042 .notification_widget.info.disabled.active,
10035 .notification_widget.info[disabled].active,
10043 .notification_widget.info[disabled].active,
10036 fieldset[disabled] .notification_widget.info.active {
10044 fieldset[disabled] .notification_widget.info.active {
10037 background-color: #5bc0de;
10045 background-color: #5bc0de;
10038 border-color: #46b8da;
10046 border-color: #46b8da;
10039 }
10047 }
10040 .notification_widget.info .badge {
10048 .notification_widget.info .badge {
10041 color: #5bc0de;
10049 color: #5bc0de;
10042 background-color: #ffffff;
10050 background-color: #ffffff;
10043 }
10051 }
10044 .notification_widget.danger {
10052 .notification_widget.danger {
10045 color: #ffffff;
10053 color: #ffffff;
10046 background-color: #d9534f;
10054 background-color: #d9534f;
10047 border-color: #d43f3a;
10055 border-color: #d43f3a;
10048 }
10056 }
10049 .notification_widget.danger:hover,
10057 .notification_widget.danger:hover,
10050 .notification_widget.danger:focus,
10058 .notification_widget.danger:focus,
10051 .notification_widget.danger:active,
10059 .notification_widget.danger:active,
10052 .notification_widget.danger.active,
10060 .notification_widget.danger.active,
10053 .open .dropdown-toggle.notification_widget.danger {
10061 .open .dropdown-toggle.notification_widget.danger {
10054 color: #ffffff;
10062 color: #ffffff;
10055 background-color: #d2322d;
10063 background-color: #d2322d;
10056 border-color: #ac2925;
10064 border-color: #ac2925;
10057 }
10065 }
10058 .notification_widget.danger:active,
10066 .notification_widget.danger:active,
10059 .notification_widget.danger.active,
10067 .notification_widget.danger.active,
10060 .open .dropdown-toggle.notification_widget.danger {
10068 .open .dropdown-toggle.notification_widget.danger {
10061 background-image: none;
10069 background-image: none;
10062 }
10070 }
10063 .notification_widget.danger.disabled,
10071 .notification_widget.danger.disabled,
10064 .notification_widget.danger[disabled],
10072 .notification_widget.danger[disabled],
10065 fieldset[disabled] .notification_widget.danger,
10073 fieldset[disabled] .notification_widget.danger,
10066 .notification_widget.danger.disabled:hover,
10074 .notification_widget.danger.disabled:hover,
10067 .notification_widget.danger[disabled]:hover,
10075 .notification_widget.danger[disabled]:hover,
10068 fieldset[disabled] .notification_widget.danger:hover,
10076 fieldset[disabled] .notification_widget.danger:hover,
10069 .notification_widget.danger.disabled:focus,
10077 .notification_widget.danger.disabled:focus,
10070 .notification_widget.danger[disabled]:focus,
10078 .notification_widget.danger[disabled]:focus,
10071 fieldset[disabled] .notification_widget.danger:focus,
10079 fieldset[disabled] .notification_widget.danger:focus,
10072 .notification_widget.danger.disabled:active,
10080 .notification_widget.danger.disabled:active,
10073 .notification_widget.danger[disabled]:active,
10081 .notification_widget.danger[disabled]:active,
10074 fieldset[disabled] .notification_widget.danger:active,
10082 fieldset[disabled] .notification_widget.danger:active,
10075 .notification_widget.danger.disabled.active,
10083 .notification_widget.danger.disabled.active,
10076 .notification_widget.danger[disabled].active,
10084 .notification_widget.danger[disabled].active,
10077 fieldset[disabled] .notification_widget.danger.active {
10085 fieldset[disabled] .notification_widget.danger.active {
10078 background-color: #d9534f;
10086 background-color: #d9534f;
10079 border-color: #d43f3a;
10087 border-color: #d43f3a;
10080 }
10088 }
10081 .notification_widget.danger .badge {
10089 .notification_widget.danger .badge {
10082 color: #d9534f;
10090 color: #d9534f;
10083 background-color: #ffffff;
10091 background-color: #ffffff;
10084 }
10092 }
10085 div#pager {
10093 div#pager {
10086 background-color: #ffffff;
10094 background-color: #ffffff;
10087 font-size: 14px;
10095 font-size: 14px;
10088 line-height: 20px;
10096 line-height: 20px;
10089 overflow: hidden;
10097 overflow: hidden;
10090 display: none;
10098 display: none;
10091 position: fixed;
10099 position: fixed;
10092 bottom: 0px;
10100 bottom: 0px;
10093 width: 100%;
10101 width: 100%;
10094 max-height: 50%;
10102 max-height: 50%;
10095 padding-top: 7px;
10103 padding-top: 7px;
10096 /* Display over codemirror */
10104 /* Display over codemirror */
10097 z-index: 100;
10105 z-index: 100;
10098 /* Hack which prevents jquery ui resizable from changing top. */
10106 /* Hack which prevents jquery ui resizable from changing top. */
10099 top: inherit !important;
10107 top: inherit !important;
10100 }
10108 }
10101 div#pager pre {
10109 div#pager pre {
10102 line-height: 1.21429em;
10110 line-height: 1.21429em;
10103 color: #000000;
10111 color: #000000;
10104 background-color: #f7f7f7;
10112 background-color: #f7f7f7;
10105 padding: 0.4em;
10113 padding: 0.4em;
10106 }
10114 }
10107 div#pager #pager-button-area {
10115 div#pager #pager-button-area {
10108 position: absolute;
10116 position: absolute;
10109 top: 7px;
10117 top: 7px;
10110 right: 20px;
10118 right: 20px;
10111 }
10119 }
10112 div#pager #pager-contents {
10120 div#pager #pager-contents {
10113 position: relative;
10121 position: relative;
10114 overflow: auto;
10122 overflow: auto;
10115 width: 100%;
10123 width: 100%;
10116 height: 100%;
10124 height: 100%;
10117 }
10125 }
10118 div#pager #pager-contents #pager-container {
10126 div#pager #pager-contents #pager-container {
10119 position: relative;
10127 position: relative;
10120 padding: 15px 0px;
10128 padding: 15px 0px;
10121 box-sizing: border-box;
10129 box-sizing: border-box;
10122 -moz-box-sizing: border-box;
10130 -moz-box-sizing: border-box;
10123 -webkit-box-sizing: border-box;
10131 -webkit-box-sizing: border-box;
10124 }
10132 }
10125 div#pager .ui-resizable-handle {
10133 div#pager .ui-resizable-handle {
10126 top: 0px;
10134 top: 0px;
10127 height: 7px;
10135 height: 7px;
10128 background: #cfcfcf;
10136 background: #cfcfcf;
10129 border-bottom: 1px solid #ababab;
10137 border-bottom: 1px solid #ababab;
10130 }
10138 }
10131 .quickhelp {
10139 .quickhelp {
10132 /* Old browsers */
10140 /* Old browsers */
10133 display: -webkit-box;
10141 display: -webkit-box;
10134 -webkit-box-orient: horizontal;
10142 -webkit-box-orient: horizontal;
10135 -webkit-box-align: stretch;
10143 -webkit-box-align: stretch;
10136 display: -moz-box;
10144 display: -moz-box;
10137 -moz-box-orient: horizontal;
10145 -moz-box-orient: horizontal;
10138 -moz-box-align: stretch;
10146 -moz-box-align: stretch;
10139 display: box;
10147 display: box;
10140 box-orient: horizontal;
10148 box-orient: horizontal;
10141 box-align: stretch;
10149 box-align: stretch;
10142 /* Modern browsers */
10150 /* Modern browsers */
10143 display: flex;
10151 display: flex;
10144 flex-direction: row;
10152 flex-direction: row;
10145 align-items: stretch;
10153 align-items: stretch;
10146 }
10154 }
10147 .shortcut_key {
10155 .shortcut_key {
10148 display: inline-block;
10156 display: inline-block;
10149 width: 20ex;
10157 width: 20ex;
10150 text-align: right;
10158 text-align: right;
10151 font-family: monospace;
10159 font-family: monospace;
10152 }
10160 }
10153 .shortcut_descr {
10161 .shortcut_descr {
10154 display: inline-block;
10162 display: inline-block;
10155 /* Old browsers */
10163 /* Old browsers */
10156 -webkit-box-flex: 1;
10164 -webkit-box-flex: 1;
10157 -moz-box-flex: 1;
10165 -moz-box-flex: 1;
10158 box-flex: 1;
10166 box-flex: 1;
10159 /* Modern browsers */
10167 /* Modern browsers */
10160 flex: 1;
10168 flex: 1;
10161 }
10169 }
10162 span#save_widget {
10170 span.save_widget {
10163 margin-top: 6px;
10171 margin-top: 6px;
10164 }
10172 }
10165 span#checkpoint_status,
10173 span.save_widget span.filename {
10166 span#autosave_status {
10174 height: 1em;
10175 line-height: 1em;
10176 padding: 3px;
10177 border: none;
10178 font-size: 146.5%;
10179 border-radius: 4px;
10180 }
10181 span.save_widget span.filename:hover {
10182 background-color: #e6e6e6;
10183 }
10184 span.checkpoint_status,
10185 span.autosave_status {
10167 font-size: small;
10186 font-size: small;
10168 }
10187 }
10169 @media (max-width: 767px) {
10188 @media (max-width: 767px) {
10170 span#save_widget {
10189 span.save_widget {
10171 font-size: small;
10190 font-size: small;
10172 }
10191 }
10173 span#checkpoint_status,
10192 span.checkpoint_status,
10174 span#autosave_status {
10193 span.autosave_status {
10175 font-size: x-small;
10176 }
10177 }
10178 @media (max-width: 767px) {
10179 span#checkpoint_status,
10180 span#autosave_status {
10181 display: none;
10194 display: none;
10182 }
10195 }
10183 }
10196 }
10184 @media (min-width: 768px) and (max-width: 979px) {
10197 @media (min-width: 768px) and (max-width: 979px) {
10185 span#checkpoint_status {
10198 span.checkpoint_status {
10186 display: none;
10199 display: none;
10187 }
10200 }
10188 span#autosave_status {
10201 span.autosave_status {
10189 font-size: x-small;
10202 font-size: x-small;
10190 }
10203 }
10191 }
10204 }
10192 .toolbar {
10205 .toolbar {
10193 padding: 0px;
10206 padding: 0px;
10194 margin-left: -5px;
10207 margin-left: -5px;
10195 margin-top: -5px;
10208 margin-top: -5px;
10196 margin-bottom: 5px;
10209 margin-bottom: 5px;
10197 box-sizing: border-box;
10210 box-sizing: border-box;
10198 -moz-box-sizing: border-box;
10211 -moz-box-sizing: border-box;
10199 -webkit-box-sizing: border-box;
10212 -webkit-box-sizing: border-box;
10200 }
10213 }
10201 .toolbar select,
10214 .toolbar select,
10202 .toolbar label {
10215 .toolbar label {
10203 width: auto;
10216 width: auto;
10204 vertical-align: middle;
10217 vertical-align: middle;
10205 margin-right: 2px;
10218 margin-right: 2px;
10206 margin-bottom: 0px;
10219 margin-bottom: 0px;
10207 display: inline;
10220 display: inline;
10208 font-size: 92%;
10221 font-size: 92%;
10209 margin-left: 0.3em;
10222 margin-left: 0.3em;
10210 margin-right: 0.3em;
10223 margin-right: 0.3em;
10211 padding: 0px;
10224 padding: 0px;
10212 padding-top: 3px;
10225 padding-top: 3px;
10213 }
10226 }
10214 .toolbar .btn {
10227 .toolbar .btn {
10215 padding: 2px 8px;
10228 padding: 2px 8px;
10216 }
10229 }
10217 .toolbar .btn-group {
10230 .toolbar .btn-group {
10218 margin-top: 0px;
10231 margin-top: 0px;
10219 margin-left: 5px;
10232 margin-left: 5px;
10220 }
10233 }
10221 #maintoolbar {
10234 #maintoolbar {
10222 margin-bottom: -3px;
10235 margin-bottom: -3px;
10223 margin-top: -8px;
10236 margin-top: -8px;
10224 border: 0px;
10237 border: 0px;
10225 min-height: 27px;
10238 min-height: 27px;
10226 margin-left: 32px;
10239 margin-left: 32px;
10227 padding-top: 11px;
10240 padding-top: 11px;
10228 padding-bottom: 3px;
10241 padding-bottom: 3px;
10229 }
10242 }
10230 #maintoolbar .navbar-text {
10243 #maintoolbar .navbar-text {
10231 float: none;
10244 float: none;
10232 vertical-align: middle;
10245 vertical-align: middle;
10233 text-align: right;
10246 text-align: right;
10234 margin-left: 5px;
10247 margin-left: 5px;
10235 margin-right: 0px;
10248 margin-right: 0px;
10236 margin-top: 0px;
10249 margin-top: 0px;
10237 }
10250 }
10238 .select-xs {
10251 .select-xs {
10239 height: 24px;
10252 height: 24px;
10240 }
10253 }
10241 /**
10254 /**
10242 * Primary styles
10255 * Primary styles
10243 *
10256 *
10244 * Author: IPython Development Team
10257 * Author: IPython Development Team
10245 */
10258 */
10246 /** WARNING IF YOU ARE EDITTING THIS FILE, if this is a .css file, It has a lot
10259 /** WARNING IF YOU ARE EDITTING THIS FILE, if this is a .css file, It has a lot
10247 * of chance of beeing generated from the ../less/[samename].less file, you can
10260 * of chance of beeing generated from the ../less/[samename].less file, you can
10248 * try to get back the less file by reverting somme commit in history
10261 * try to get back the less file by reverting somme commit in history
10249 **/
10262 **/
10250 /*
10263 /*
10251 * We'll try to get something pretty, so we
10264 * We'll try to get something pretty, so we
10252 * have some strange css to have the scroll bar on
10265 * have some strange css to have the scroll bar on
10253 * the left with fix button on the top right of the tooltip
10266 * the left with fix button on the top right of the tooltip
10254 */
10267 */
10255 @-moz-keyframes fadeOut {
10268 @-moz-keyframes fadeOut {
10256 from {
10269 from {
10257 opacity: 1;
10270 opacity: 1;
10258 }
10271 }
10259 to {
10272 to {
10260 opacity: 0;
10273 opacity: 0;
10261 }
10274 }
10262 }
10275 }
10263 @-webkit-keyframes fadeOut {
10276 @-webkit-keyframes fadeOut {
10264 from {
10277 from {
10265 opacity: 1;
10278 opacity: 1;
10266 }
10279 }
10267 to {
10280 to {
10268 opacity: 0;
10281 opacity: 0;
10269 }
10282 }
10270 }
10283 }
10271 @-moz-keyframes fadeIn {
10284 @-moz-keyframes fadeIn {
10272 from {
10285 from {
10273 opacity: 0;
10286 opacity: 0;
10274 }
10287 }
10275 to {
10288 to {
10276 opacity: 1;
10289 opacity: 1;
10277 }
10290 }
10278 }
10291 }
10279 @-webkit-keyframes fadeIn {
10292 @-webkit-keyframes fadeIn {
10280 from {
10293 from {
10281 opacity: 0;
10294 opacity: 0;
10282 }
10295 }
10283 to {
10296 to {
10284 opacity: 1;
10297 opacity: 1;
10285 }
10298 }
10286 }
10299 }
10287 /*properties of tooltip after "expand"*/
10300 /*properties of tooltip after "expand"*/
10288 .bigtooltip {
10301 .bigtooltip {
10289 overflow: auto;
10302 overflow: auto;
10290 height: 200px;
10303 height: 200px;
10291 -webkit-transition-property: height;
10304 -webkit-transition-property: height;
10292 -webkit-transition-duration: 500ms;
10305 -webkit-transition-duration: 500ms;
10293 -moz-transition-property: height;
10306 -moz-transition-property: height;
10294 -moz-transition-duration: 500ms;
10307 -moz-transition-duration: 500ms;
10295 transition-property: height;
10308 transition-property: height;
10296 transition-duration: 500ms;
10309 transition-duration: 500ms;
10297 }
10310 }
10298 /*properties of tooltip before "expand"*/
10311 /*properties of tooltip before "expand"*/
10299 .smalltooltip {
10312 .smalltooltip {
10300 -webkit-transition-property: height;
10313 -webkit-transition-property: height;
10301 -webkit-transition-duration: 500ms;
10314 -webkit-transition-duration: 500ms;
10302 -moz-transition-property: height;
10315 -moz-transition-property: height;
10303 -moz-transition-duration: 500ms;
10316 -moz-transition-duration: 500ms;
10304 transition-property: height;
10317 transition-property: height;
10305 transition-duration: 500ms;
10318 transition-duration: 500ms;
10306 text-overflow: ellipsis;
10319 text-overflow: ellipsis;
10307 overflow: hidden;
10320 overflow: hidden;
10308 height: 80px;
10321 height: 80px;
10309 }
10322 }
10310 .tooltipbuttons {
10323 .tooltipbuttons {
10311 position: absolute;
10324 position: absolute;
10312 padding-right: 15px;
10325 padding-right: 15px;
10313 top: 0px;
10326 top: 0px;
10314 right: 0px;
10327 right: 0px;
10315 }
10328 }
10316 .tooltiptext {
10329 .tooltiptext {
10317 /*avoid the button to overlap on some docstring*/
10330 /*avoid the button to overlap on some docstring*/
10318 padding-right: 30px;
10331 padding-right: 30px;
10319 }
10332 }
10320 .ipython_tooltip {
10333 .ipython_tooltip {
10321 max-width: 700px;
10334 max-width: 700px;
10322 /*fade-in animation when inserted*/
10335 /*fade-in animation when inserted*/
10323 -webkit-animation: fadeOut 400ms;
10336 -webkit-animation: fadeOut 400ms;
10324 -moz-animation: fadeOut 400ms;
10337 -moz-animation: fadeOut 400ms;
10325 animation: fadeOut 400ms;
10338 animation: fadeOut 400ms;
10326 -webkit-animation: fadeIn 400ms;
10339 -webkit-animation: fadeIn 400ms;
10327 -moz-animation: fadeIn 400ms;
10340 -moz-animation: fadeIn 400ms;
10328 animation: fadeIn 400ms;
10341 animation: fadeIn 400ms;
10329 vertical-align: middle;
10342 vertical-align: middle;
10330 background-color: #f7f7f7;
10343 background-color: #f7f7f7;
10331 overflow: visible;
10344 overflow: visible;
10332 border: #ababab 1px solid;
10345 border: #ababab 1px solid;
10333 outline: none;
10346 outline: none;
10334 padding: 3px;
10347 padding: 3px;
10335 margin: 0px;
10348 margin: 0px;
10336 padding-left: 7px;
10349 padding-left: 7px;
10337 font-family: monospace;
10350 font-family: monospace;
10338 min-height: 50px;
10351 min-height: 50px;
10339 -moz-box-shadow: 0px 6px 10px -1px #adadad;
10352 -moz-box-shadow: 0px 6px 10px -1px #adadad;
10340 -webkit-box-shadow: 0px 6px 10px -1px #adadad;
10353 -webkit-box-shadow: 0px 6px 10px -1px #adadad;
10341 box-shadow: 0px 6px 10px -1px #adadad;
10354 box-shadow: 0px 6px 10px -1px #adadad;
10342 border-radius: 4px;
10355 border-radius: 4px;
10343 position: absolute;
10356 position: absolute;
10344 z-index: 1000;
10357 z-index: 1000;
10345 }
10358 }
10346 .ipython_tooltip a {
10359 .ipython_tooltip a {
10347 float: right;
10360 float: right;
10348 }
10361 }
10349 .ipython_tooltip .tooltiptext pre {
10362 .ipython_tooltip .tooltiptext pre {
10350 border: 0;
10363 border: 0;
10351 border-radius: 0;
10364 border-radius: 0;
10352 font-size: 100%;
10365 font-size: 100%;
10353 background-color: #f7f7f7;
10366 background-color: #f7f7f7;
10354 }
10367 }
10355 .pretooltiparrow {
10368 .pretooltiparrow {
10356 left: 0px;
10369 left: 0px;
10357 margin: 0px;
10370 margin: 0px;
10358 top: -16px;
10371 top: -16px;
10359 width: 40px;
10372 width: 40px;
10360 height: 16px;
10373 height: 16px;
10361 overflow: hidden;
10374 overflow: hidden;
10362 position: absolute;
10375 position: absolute;
10363 }
10376 }
10364 .pretooltiparrow:before {
10377 .pretooltiparrow:before {
10365 background-color: #f7f7f7;
10378 background-color: #f7f7f7;
10366 border: 1px #ababab solid;
10379 border: 1px #ababab solid;
10367 z-index: 11;
10380 z-index: 11;
10368 content: "";
10381 content: "";
10369 position: absolute;
10382 position: absolute;
10370 left: 15px;
10383 left: 15px;
10371 top: 10px;
10384 top: 10px;
10372 width: 25px;
10385 width: 25px;
10373 height: 25px;
10386 height: 25px;
10374 -webkit-transform: rotate(45deg);
10387 -webkit-transform: rotate(45deg);
10375 -moz-transform: rotate(45deg);
10388 -moz-transform: rotate(45deg);
10376 -ms-transform: rotate(45deg);
10389 -ms-transform: rotate(45deg);
10377 -o-transform: rotate(45deg);
10390 -o-transform: rotate(45deg);
10378 }
10391 }
10379 .terminal {
10392 .terminal {
10380 float: left;
10393 float: left;
10381 border: black solid 5px;
10394 border: black solid 5px;
10382 font-family: "DejaVu Sans Mono", "Liberation Mono", monospace;
10395 font-family: "DejaVu Sans Mono", "Liberation Mono", monospace;
10383 font-size: 11px;
10396 font-size: 11px;
10384 color: white;
10397 color: white;
10385 background: black;
10398 background: black;
10386 }
10399 }
10387 .terminal-cursor {
10400 .terminal-cursor {
10388 color: black;
10401 color: black;
10389 background: white;
10402 background: white;
10390 }
10403 }
10391 #terminado-container {
10404 #terminado-container {
10392 margin: 8px;
10405 margin: 8px;
10393 }
10406 }
10394 /*# sourceMappingURL=style.min.css.map */ No newline at end of file
10407 /*# sourceMappingURL=style.min.css.map */
@@ -1,508 +1,508 b''
1 // Copyright (c) IPython Development Team.
1 // Copyright (c) IPython Development Team.
2 // Distributed under the terms of the Modified BSD License.
2 // Distributed under the terms of the Modified BSD License.
3
3
4 define([
4 define([
5 'base/js/namespace',
5 'base/js/namespace',
6 'jquery',
6 'jquery',
7 'base/js/utils',
7 'base/js/utils',
8 'base/js/dialog',
8 'base/js/dialog',
9 'base/js/events',
9 'base/js/events',
10 ], function(IPython, $, utils, dialog, events) {
10 ], function(IPython, $, utils, dialog, events) {
11 "use strict";
11 "use strict";
12
12
13 var NotebookList = function (selector, options) {
13 var NotebookList = function (selector, options) {
14 /**
14 /**
15 * Constructor
15 * Constructor
16 *
16 *
17 * Parameters:
17 * Parameters:
18 * selector: string
18 * selector: string
19 * options: dictionary
19 * options: dictionary
20 * Dictionary of keyword arguments.
20 * Dictionary of keyword arguments.
21 * session_list: SessionList instance
21 * session_list: SessionList instance
22 * element_name: string
22 * element_name: string
23 * base_url: string
23 * base_url: string
24 * notebook_path: string
24 * notebook_path: string
25 * contents: Contents instance
25 * contents: Contents instance
26 */
26 */
27 var that = this;
27 var that = this;
28 this.session_list = options.session_list;
28 this.session_list = options.session_list;
29 // allow code re-use by just changing element_name in kernellist.js
29 // allow code re-use by just changing element_name in kernellist.js
30 this.element_name = options.element_name || 'notebook';
30 this.element_name = options.element_name || 'notebook';
31 this.selector = selector;
31 this.selector = selector;
32 if (this.selector !== undefined) {
32 if (this.selector !== undefined) {
33 this.element = $(selector);
33 this.element = $(selector);
34 this.style();
34 this.style();
35 this.bind_events();
35 this.bind_events();
36 }
36 }
37 this.notebooks_list = [];
37 this.notebooks_list = [];
38 this.sessions = {};
38 this.sessions = {};
39 this.base_url = options.base_url || utils.get_body_data("baseUrl");
39 this.base_url = options.base_url || utils.get_body_data("baseUrl");
40 this.notebook_path = options.notebook_path || utils.get_body_data("notebookPath");
40 this.notebook_path = options.notebook_path || utils.get_body_data("notebookPath");
41 this.contents = options.contents;
41 this.contents = options.contents;
42 if (this.session_list && this.session_list.events) {
42 if (this.session_list && this.session_list.events) {
43 this.session_list.events.on('sessions_loaded.Dashboard',
43 this.session_list.events.on('sessions_loaded.Dashboard',
44 function(e, d) { that.sessions_loaded(d); });
44 function(e, d) { that.sessions_loaded(d); });
45 }
45 }
46 };
46 };
47
47
48 NotebookList.prototype.style = function () {
48 NotebookList.prototype.style = function () {
49 var prefix = '#' + this.element_name;
49 var prefix = '#' + this.element_name;
50 $(prefix + '_toolbar').addClass('list_toolbar');
50 $(prefix + '_toolbar').addClass('list_toolbar');
51 $(prefix + '_list_info').addClass('toolbar_info');
51 $(prefix + '_list_info').addClass('toolbar_info');
52 $(prefix + '_buttons').addClass('toolbar_buttons');
52 $(prefix + '_buttons').addClass('toolbar_buttons');
53 $(prefix + '_list_header').addClass('list_header');
53 $(prefix + '_list_header').addClass('list_header');
54 this.element.addClass("list_container");
54 this.element.addClass("list_container");
55 };
55 };
56
56
57
57
58 NotebookList.prototype.bind_events = function () {
58 NotebookList.prototype.bind_events = function () {
59 var that = this;
59 var that = this;
60 $('#refresh_' + this.element_name + '_list').click(function () {
60 $('#refresh_' + this.element_name + '_list').click(function () {
61 that.load_sessions();
61 that.load_sessions();
62 });
62 });
63 this.element.bind('dragover', function () {
63 this.element.bind('dragover', function () {
64 return false;
64 return false;
65 });
65 });
66 this.element.bind('drop', function(event){
66 this.element.bind('drop', function(event){
67 that.handleFilesUpload(event,'drop');
67 that.handleFilesUpload(event,'drop');
68 return false;
68 return false;
69 });
69 });
70 };
70 };
71
71
72 NotebookList.prototype.handleFilesUpload = function(event, dropOrForm) {
72 NotebookList.prototype.handleFilesUpload = function(event, dropOrForm) {
73 var that = this;
73 var that = this;
74 var files;
74 var files;
75 if(dropOrForm =='drop'){
75 if(dropOrForm =='drop'){
76 files = event.originalEvent.dataTransfer.files;
76 files = event.originalEvent.dataTransfer.files;
77 } else
77 } else
78 {
78 {
79 files = event.originalEvent.target.files;
79 files = event.originalEvent.target.files;
80 }
80 }
81 for (var i = 0; i < files.length; i++) {
81 for (var i = 0; i < files.length; i++) {
82 var f = files[i];
82 var f = files[i];
83 var name_and_ext = utils.splitext(f.name);
83 var name_and_ext = utils.splitext(f.name);
84 var file_ext = name_and_ext[1];
84 var file_ext = name_and_ext[1];
85
85
86 var reader = new FileReader();
86 var reader = new FileReader();
87 if (file_ext === '.ipynb') {
87 if (file_ext === '.ipynb') {
88 reader.readAsText(f);
88 reader.readAsText(f);
89 } else {
89 } else {
90 // read non-notebook files as binary
90 // read non-notebook files as binary
91 reader.readAsArrayBuffer(f);
91 reader.readAsArrayBuffer(f);
92 }
92 }
93 var item = that.new_item(0);
93 var item = that.new_item(0);
94 item.addClass('new-file');
94 item.addClass('new-file');
95 that.add_name_input(f.name, item, file_ext == '.ipynb' ? 'notebook' : 'file');
95 that.add_name_input(f.name, item, file_ext == '.ipynb' ? 'notebook' : 'file');
96 // Store the list item in the reader so we can use it later
96 // Store the list item in the reader so we can use it later
97 // to know which item it belongs to.
97 // to know which item it belongs to.
98 $(reader).data('item', item);
98 $(reader).data('item', item);
99 reader.onload = function (event) {
99 reader.onload = function (event) {
100 var item = $(event.target).data('item');
100 var item = $(event.target).data('item');
101 that.add_file_data(event.target.result, item);
101 that.add_file_data(event.target.result, item);
102 that.add_upload_button(item);
102 that.add_upload_button(item);
103 };
103 };
104 reader.onerror = function (event) {
104 reader.onerror = function (event) {
105 var item = $(event.target).data('item');
105 var item = $(event.target).data('item');
106 var name = item.data('name');
106 var name = item.data('name');
107 item.remove();
107 item.remove();
108 dialog.modal({
108 dialog.modal({
109 title : 'Failed to read file',
109 title : 'Failed to read file',
110 body : "Failed to read file '" + name + "'",
110 body : "Failed to read file '" + name + "'",
111 buttons : {'OK' : { 'class' : 'btn-primary' }}
111 buttons : {'OK' : { 'class' : 'btn-primary' }}
112 });
112 });
113 };
113 };
114 }
114 }
115 // Replace the file input form wth a clone of itself. This is required to
115 // Replace the file input form wth a clone of itself. This is required to
116 // reset the form. Otherwise, if you upload a file, delete it and try to
116 // reset the form. Otherwise, if you upload a file, delete it and try to
117 // upload it again, the changed event won't fire.
117 // upload it again, the changed event won't fire.
118 var form = $('input.fileinput');
118 var form = $('input.fileinput');
119 form.replaceWith(form.clone(true));
119 form.replaceWith(form.clone(true));
120 return false;
120 return false;
121 };
121 };
122
122
123 NotebookList.prototype.clear_list = function (remove_uploads) {
123 NotebookList.prototype.clear_list = function (remove_uploads) {
124 /**
124 /**
125 * Clears the navigation tree.
125 * Clears the navigation tree.
126 *
126 *
127 * Parameters
127 * Parameters
128 * remove_uploads: bool=False
128 * remove_uploads: bool=False
129 * Should upload prompts also be removed from the tree.
129 * Should upload prompts also be removed from the tree.
130 */
130 */
131 if (remove_uploads) {
131 if (remove_uploads) {
132 this.element.children('.list_item').remove();
132 this.element.children('.list_item').remove();
133 } else {
133 } else {
134 this.element.children('.list_item:not(.new-file)').remove();
134 this.element.children('.list_item:not(.new-file)').remove();
135 }
135 }
136 };
136 };
137
137
138 NotebookList.prototype.load_sessions = function(){
138 NotebookList.prototype.load_sessions = function(){
139 this.session_list.load_sessions();
139 this.session_list.load_sessions();
140 };
140 };
141
141
142
142
143 NotebookList.prototype.sessions_loaded = function(data){
143 NotebookList.prototype.sessions_loaded = function(data){
144 this.sessions = data;
144 this.sessions = data;
145 this.load_list();
145 this.load_list();
146 };
146 };
147
147
148 NotebookList.prototype.load_list = function () {
148 NotebookList.prototype.load_list = function () {
149 var that = this;
149 var that = this;
150 this.contents.list_contents(that.notebook_path).then(
150 this.contents.list_contents(that.notebook_path).then(
151 $.proxy(this.draw_notebook_list, this),
151 $.proxy(this.draw_notebook_list, this),
152 function(error) {
152 function(error) {
153 that.draw_notebook_list({content: []}, "Server error: " + error.message);
153 that.draw_notebook_list({content: []}, "Server error: " + error.message);
154 }
154 }
155 );
155 );
156 };
156 };
157
157
158 /**
158 /**
159 * Draw the list of notebooks
159 * Draw the list of notebooks
160 * @method draw_notebook_list
160 * @method draw_notebook_list
161 * @param {Array} list An array of dictionaries representing files or
161 * @param {Array} list An array of dictionaries representing files or
162 * directories.
162 * directories.
163 * @param {String} error_msg An error message
163 * @param {String} error_msg An error message
164 */
164 */
165 NotebookList.prototype.draw_notebook_list = function (list, error_msg) {
165 NotebookList.prototype.draw_notebook_list = function (list, error_msg) {
166 var message = error_msg || 'Notebook list empty.';
166 var message = error_msg || 'Notebook list empty.';
167 var item = null;
167 var item = null;
168 var model = null;
168 var model = null;
169 var len = list.content.length;
169 var len = list.content.length;
170 this.clear_list();
170 this.clear_list();
171 var n_uploads = this.element.children('.list_item').length;
171 var n_uploads = this.element.children('.list_item').length;
172 if (len === 0) {
172 if (len === 0) {
173 item = this.new_item(0);
173 item = this.new_item(0);
174 var span12 = item.children().first();
174 var span12 = item.children().first();
175 span12.empty();
175 span12.empty();
176 span12.append($('<div style="margin:auto;text-align:center;color:grey"/>').text(message));
176 span12.append($('<div style="margin:auto;text-align:center;color:grey"/>').text(message));
177 }
177 }
178 var path = this.notebook_path;
178 var path = this.notebook_path;
179 var offset = n_uploads;
179 var offset = n_uploads;
180 if (path !== '') {
180 if (path !== '') {
181 item = this.new_item(offset);
181 item = this.new_item(offset);
182 model = {
182 model = {
183 type: 'directory',
183 type: 'directory',
184 name: '..',
184 name: '..',
185 path: utils.url_path_split(path)[0],
185 path: utils.url_path_split(path)[0],
186 };
186 };
187 this.add_link(model, item);
187 this.add_link(model, item);
188 offset += 1;
188 offset += 1;
189 }
189 }
190 for (var i=0; i<len; i++) {
190 for (var i=0; i<len; i++) {
191 model = list.content[i];
191 model = list.content[i];
192 item = this.new_item(i+offset);
192 item = this.new_item(i+offset);
193 this.add_link(model, item);
193 this.add_link(model, item);
194 }
194 }
195 // Trigger an event when we've finished drawing the notebook list.
195 // Trigger an event when we've finished drawing the notebook list.
196 events.trigger('draw_notebook_list.NotebookList');
196 events.trigger('draw_notebook_list.NotebookList');
197 };
197 };
198
198
199
199
200 NotebookList.prototype.new_item = function (index) {
200 NotebookList.prototype.new_item = function (index) {
201 var item = $('<div/>').addClass("list_item").addClass("row");
201 var item = $('<div/>').addClass("list_item").addClass("row");
202 // item.addClass('list_item ui-widget ui-widget-content ui-helper-clearfix');
202 // item.addClass('list_item ui-widget ui-widget-content ui-helper-clearfix');
203 // item.css('border-top-style','none');
203 // item.css('border-top-style','none');
204 item.append($("<div/>").addClass("col-md-12").append(
204 item.append($("<div/>").addClass("col-md-12").append(
205 $('<i/>').addClass('item_icon')
205 $('<i/>').addClass('item_icon')
206 ).append(
206 ).append(
207 $("<a/>").addClass("item_link").append(
207 $("<a/>").addClass("item_link").append(
208 $("<span/>").addClass("item_name")
208 $("<span/>").addClass("item_name")
209 )
209 )
210 ).append(
210 ).append(
211 $('<div/>').addClass("item_buttons btn-group pull-right")
211 $('<div/>').addClass("item_buttons btn-group pull-right")
212 ));
212 ));
213
213
214 if (index === -1) {
214 if (index === -1) {
215 this.element.append(item);
215 this.element.append(item);
216 } else {
216 } else {
217 this.element.children().eq(index).after(item);
217 this.element.children().eq(index).after(item);
218 }
218 }
219 return item;
219 return item;
220 };
220 };
221
221
222
222
223 NotebookList.icons = {
223 NotebookList.icons = {
224 directory: 'folder_icon',
224 directory: 'folder_icon',
225 notebook: 'notebook_icon',
225 notebook: 'notebook_icon',
226 file: 'file_icon',
226 file: 'file_icon',
227 };
227 };
228
228
229 NotebookList.uri_prefixes = {
229 NotebookList.uri_prefixes = {
230 directory: 'tree',
230 directory: 'tree',
231 notebook: 'notebooks',
231 notebook: 'notebooks',
232 file: 'files',
232 file: 'edit',
233 };
233 };
234
234
235
235
236 NotebookList.prototype.add_link = function (model, item) {
236 NotebookList.prototype.add_link = function (model, item) {
237 var path = model.path,
237 var path = model.path,
238 name = model.name;
238 name = model.name;
239 item.data('name', name);
239 item.data('name', name);
240 item.data('path', path);
240 item.data('path', path);
241 item.find(".item_name").text(name);
241 item.find(".item_name").text(name);
242 var icon = NotebookList.icons[model.type];
242 var icon = NotebookList.icons[model.type];
243 var uri_prefix = NotebookList.uri_prefixes[model.type];
243 var uri_prefix = NotebookList.uri_prefixes[model.type];
244 item.find(".item_icon").addClass(icon).addClass('icon-fixed-width');
244 item.find(".item_icon").addClass(icon).addClass('icon-fixed-width');
245 var link = item.find("a.item_link")
245 var link = item.find("a.item_link")
246 .attr('href',
246 .attr('href',
247 utils.url_join_encode(
247 utils.url_join_encode(
248 this.base_url,
248 this.base_url,
249 uri_prefix,
249 uri_prefix,
250 path
250 path
251 )
251 )
252 );
252 );
253 // directory nav doesn't open new tabs
253 // directory nav doesn't open new tabs
254 // files, notebooks do
254 // files, notebooks do
255 if (model.type !== "directory") {
255 if (model.type !== "directory") {
256 link.attr('target','_blank');
256 link.attr('target','_blank');
257 }
257 }
258 if (model.type !== 'directory') {
258 if (model.type !== 'directory') {
259 this.add_duplicate_button(item);
259 this.add_duplicate_button(item);
260 }
260 }
261 if (model.type == 'file') {
261 if (model.type == 'file') {
262 this.add_delete_button(item);
262 this.add_delete_button(item);
263 } else if (model.type == 'notebook') {
263 } else if (model.type == 'notebook') {
264 if (this.sessions[path] === undefined){
264 if (this.sessions[path] === undefined){
265 this.add_delete_button(item);
265 this.add_delete_button(item);
266 } else {
266 } else {
267 this.add_shutdown_button(item, this.sessions[path]);
267 this.add_shutdown_button(item, this.sessions[path]);
268 }
268 }
269 }
269 }
270 };
270 };
271
271
272
272
273 NotebookList.prototype.add_name_input = function (name, item, icon_type) {
273 NotebookList.prototype.add_name_input = function (name, item, icon_type) {
274 item.data('name', name);
274 item.data('name', name);
275 item.find(".item_icon").addClass(NotebookList.icons[icon_type]).addClass('icon-fixed-width');
275 item.find(".item_icon").addClass(NotebookList.icons[icon_type]).addClass('icon-fixed-width');
276 item.find(".item_name").empty().append(
276 item.find(".item_name").empty().append(
277 $('<input/>')
277 $('<input/>')
278 .addClass("filename_input")
278 .addClass("filename_input")
279 .attr('value', name)
279 .attr('value', name)
280 .attr('size', '30')
280 .attr('size', '30')
281 .attr('type', 'text')
281 .attr('type', 'text')
282 .keyup(function(event){
282 .keyup(function(event){
283 if(event.keyCode == 13){item.find('.upload_button').click();}
283 if(event.keyCode == 13){item.find('.upload_button').click();}
284 else if(event.keyCode == 27){item.remove();}
284 else if(event.keyCode == 27){item.remove();}
285 })
285 })
286 );
286 );
287 };
287 };
288
288
289
289
290 NotebookList.prototype.add_file_data = function (data, item) {
290 NotebookList.prototype.add_file_data = function (data, item) {
291 item.data('filedata', data);
291 item.data('filedata', data);
292 };
292 };
293
293
294
294
295 NotebookList.prototype.add_shutdown_button = function (item, session) {
295 NotebookList.prototype.add_shutdown_button = function (item, session) {
296 var that = this;
296 var that = this;
297 var shutdown_button = $("<button/>").text("Shutdown").addClass("btn btn-xs btn-danger").
297 var shutdown_button = $("<button/>").text("Shutdown").addClass("btn btn-xs btn-danger").
298 click(function (e) {
298 click(function (e) {
299 var settings = {
299 var settings = {
300 processData : false,
300 processData : false,
301 cache : false,
301 cache : false,
302 type : "DELETE",
302 type : "DELETE",
303 dataType : "json",
303 dataType : "json",
304 success : function () {
304 success : function () {
305 that.load_sessions();
305 that.load_sessions();
306 },
306 },
307 error : utils.log_ajax_error,
307 error : utils.log_ajax_error,
308 };
308 };
309 var url = utils.url_join_encode(
309 var url = utils.url_join_encode(
310 that.base_url,
310 that.base_url,
311 'api/sessions',
311 'api/sessions',
312 session
312 session
313 );
313 );
314 $.ajax(url, settings);
314 $.ajax(url, settings);
315 return false;
315 return false;
316 });
316 });
317 item.find(".item_buttons").append(shutdown_button);
317 item.find(".item_buttons").append(shutdown_button);
318 };
318 };
319
319
320 NotebookList.prototype.add_duplicate_button = function (item) {
320 NotebookList.prototype.add_duplicate_button = function (item) {
321 var notebooklist = this;
321 var notebooklist = this;
322 var duplicate_button = $("<button/>").text("Duplicate").addClass("btn btn-default btn-xs").
322 var duplicate_button = $("<button/>").text("Duplicate").addClass("btn btn-default btn-xs").
323 click(function (e) {
323 click(function (e) {
324 // $(this) is the button that was clicked.
324 // $(this) is the button that was clicked.
325 var that = $(this);
325 var that = $(this);
326 var name = item.data('name');
326 var name = item.data('name');
327 var path = item.data('path');
327 var path = item.data('path');
328 var message = 'Are you sure you want to duplicate ' + name + '?';
328 var message = 'Are you sure you want to duplicate ' + name + '?';
329 var copy_from = {copy_from : path};
329 var copy_from = {copy_from : path};
330 IPython.dialog.modal({
330 IPython.dialog.modal({
331 title : "Duplicate " + name,
331 title : "Duplicate " + name,
332 body : message,
332 body : message,
333 buttons : {
333 buttons : {
334 Duplicate : {
334 Duplicate : {
335 class: "btn-primary",
335 class: "btn-primary",
336 click: function() {
336 click: function() {
337 notebooklist.contents.copy(path, notebooklist.notebook_path).then(function () {
337 notebooklist.contents.copy(path, notebooklist.notebook_path).then(function () {
338 notebooklist.load_list();
338 notebooklist.load_list();
339 });
339 });
340 }
340 }
341 },
341 },
342 Cancel : {}
342 Cancel : {}
343 }
343 }
344 });
344 });
345 return false;
345 return false;
346 });
346 });
347 item.find(".item_buttons").append(duplicate_button);
347 item.find(".item_buttons").append(duplicate_button);
348 };
348 };
349
349
350 NotebookList.prototype.add_delete_button = function (item) {
350 NotebookList.prototype.add_delete_button = function (item) {
351 var notebooklist = this;
351 var notebooklist = this;
352 var delete_button = $("<button/>").text("Delete").addClass("btn btn-default btn-xs").
352 var delete_button = $("<button/>").text("Delete").addClass("btn btn-default btn-xs").
353 click(function (e) {
353 click(function (e) {
354 // $(this) is the button that was clicked.
354 // $(this) is the button that was clicked.
355 var that = $(this);
355 var that = $(this);
356 // We use the filename from the parent list_item element's
356 // We use the filename from the parent list_item element's
357 // data because the outer scope's values change as we iterate through the loop.
357 // data because the outer scope's values change as we iterate through the loop.
358 var parent_item = that.parents('div.list_item');
358 var parent_item = that.parents('div.list_item');
359 var name = parent_item.data('name');
359 var name = parent_item.data('name');
360 var path = parent_item.data('path');
360 var path = parent_item.data('path');
361 var message = 'Are you sure you want to permanently delete the file: ' + name + '?';
361 var message = 'Are you sure you want to permanently delete the file: ' + name + '?';
362 dialog.modal({
362 dialog.modal({
363 title : "Delete file",
363 title : "Delete file",
364 body : message,
364 body : message,
365 buttons : {
365 buttons : {
366 Delete : {
366 Delete : {
367 class: "btn-danger",
367 class: "btn-danger",
368 click: function() {
368 click: function() {
369 notebooklist.contents.delete(path).then(
369 notebooklist.contents.delete(path).then(
370 function() {
370 function() {
371 notebooklist.notebook_deleted(path);
371 notebooklist.notebook_deleted(path);
372 }
372 }
373 );
373 );
374 }
374 }
375 },
375 },
376 Cancel : {}
376 Cancel : {}
377 }
377 }
378 });
378 });
379 return false;
379 return false;
380 });
380 });
381 item.find(".item_buttons").append(delete_button);
381 item.find(".item_buttons").append(delete_button);
382 };
382 };
383
383
384 NotebookList.prototype.notebook_deleted = function(path) {
384 NotebookList.prototype.notebook_deleted = function(path) {
385 /**
385 /**
386 * Remove the deleted notebook.
386 * Remove the deleted notebook.
387 */
387 */
388 $( ":data(path)" ).each(function() {
388 $( ":data(path)" ).each(function() {
389 var element = $(this);
389 var element = $(this);
390 if (element.data("path") == path) {
390 if (element.data("path") == path) {
391 element.remove();
391 element.remove();
392 events.trigger('notebook_deleted.NotebookList');
392 events.trigger('notebook_deleted.NotebookList');
393 }
393 }
394 });
394 });
395 };
395 };
396
396
397
397
398 NotebookList.prototype.add_upload_button = function (item) {
398 NotebookList.prototype.add_upload_button = function (item) {
399 var that = this;
399 var that = this;
400 var upload_button = $('<button/>').text("Upload")
400 var upload_button = $('<button/>').text("Upload")
401 .addClass('btn btn-primary btn-xs upload_button')
401 .addClass('btn btn-primary btn-xs upload_button')
402 .click(function (e) {
402 .click(function (e) {
403 var filename = item.find('.item_name > input').val();
403 var filename = item.find('.item_name > input').val();
404 var path = utils.url_path_join(that.notebook_path, filename);
404 var path = utils.url_path_join(that.notebook_path, filename);
405 var filedata = item.data('filedata');
405 var filedata = item.data('filedata');
406 var format = 'text';
406 var format = 'text';
407 if (filename.length === 0 || filename[0] === '.') {
407 if (filename.length === 0 || filename[0] === '.') {
408 dialog.modal({
408 dialog.modal({
409 title : 'Invalid file name',
409 title : 'Invalid file name',
410 body : "File names must be at least one character and not start with a dot",
410 body : "File names must be at least one character and not start with a dot",
411 buttons : {'OK' : { 'class' : 'btn-primary' }}
411 buttons : {'OK' : { 'class' : 'btn-primary' }}
412 });
412 });
413 return false;
413 return false;
414 }
414 }
415 if (filedata instanceof ArrayBuffer) {
415 if (filedata instanceof ArrayBuffer) {
416 // base64-encode binary file data
416 // base64-encode binary file data
417 var bytes = '';
417 var bytes = '';
418 var buf = new Uint8Array(filedata);
418 var buf = new Uint8Array(filedata);
419 var nbytes = buf.byteLength;
419 var nbytes = buf.byteLength;
420 for (var i=0; i<nbytes; i++) {
420 for (var i=0; i<nbytes; i++) {
421 bytes += String.fromCharCode(buf[i]);
421 bytes += String.fromCharCode(buf[i]);
422 }
422 }
423 filedata = btoa(bytes);
423 filedata = btoa(bytes);
424 format = 'base64';
424 format = 'base64';
425 }
425 }
426 var model = {};
426 var model = {};
427
427
428 var name_and_ext = utils.splitext(filename);
428 var name_and_ext = utils.splitext(filename);
429 var file_ext = name_and_ext[1];
429 var file_ext = name_and_ext[1];
430 var content_type;
430 var content_type;
431 if (file_ext === '.ipynb') {
431 if (file_ext === '.ipynb') {
432 model.type = 'notebook';
432 model.type = 'notebook';
433 model.format = 'json';
433 model.format = 'json';
434 try {
434 try {
435 model.content = JSON.parse(filedata);
435 model.content = JSON.parse(filedata);
436 } catch (e) {
436 } catch (e) {
437 dialog.modal({
437 dialog.modal({
438 title : 'Cannot upload invalid Notebook',
438 title : 'Cannot upload invalid Notebook',
439 body : "The error was: " + e,
439 body : "The error was: " + e,
440 buttons : {'OK' : {
440 buttons : {'OK' : {
441 'class' : 'btn-primary',
441 'class' : 'btn-primary',
442 click: function () {
442 click: function () {
443 item.remove();
443 item.remove();
444 }
444 }
445 }}
445 }}
446 });
446 });
447 return false;
447 return false;
448 }
448 }
449 content_type = 'application/json';
449 content_type = 'application/json';
450 } else {
450 } else {
451 model.type = 'file';
451 model.type = 'file';
452 model.format = format;
452 model.format = format;
453 model.content = filedata;
453 model.content = filedata;
454 content_type = 'application/octet-stream';
454 content_type = 'application/octet-stream';
455 }
455 }
456 filedata = item.data('filedata');
456 filedata = item.data('filedata');
457
457
458 var on_success = function () {
458 var on_success = function () {
459 item.removeClass('new-file');
459 item.removeClass('new-file');
460 that.add_link(model, item);
460 that.add_link(model, item);
461 that.add_delete_button(item);
461 that.add_delete_button(item);
462 that.session_list.load_sessions();
462 that.session_list.load_sessions();
463 };
463 };
464
464
465 var exists = false;
465 var exists = false;
466 $.each(that.element.find('.list_item:not(.new-file)'), function(k,v){
466 $.each(that.element.find('.list_item:not(.new-file)'), function(k,v){
467 if ($(v).data('name') === filename) { exists = true; return false; }
467 if ($(v).data('name') === filename) { exists = true; return false; }
468 });
468 });
469
469
470 if (exists) {
470 if (exists) {
471 dialog.modal({
471 dialog.modal({
472 title : "Replace file",
472 title : "Replace file",
473 body : 'There is already a file named ' + filename + ', do you want to replace it?',
473 body : 'There is already a file named ' + filename + ', do you want to replace it?',
474 buttons : {
474 buttons : {
475 Overwrite : {
475 Overwrite : {
476 class: "btn-danger",
476 class: "btn-danger",
477 click: function () {
477 click: function () {
478 that.contents.save(path, model).then(on_success);
478 that.contents.save(path, model).then(on_success);
479 }
479 }
480 },
480 },
481 Cancel : {
481 Cancel : {
482 click: function() { item.remove(); }
482 click: function() { item.remove(); }
483 }
483 }
484 }
484 }
485 });
485 });
486 } else {
486 } else {
487 that.contents.save(path, model).then(on_success);
487 that.contents.save(path, model).then(on_success);
488 }
488 }
489
489
490 return false;
490 return false;
491 });
491 });
492 var cancel_button = $('<button/>').text("Cancel")
492 var cancel_button = $('<button/>').text("Cancel")
493 .addClass("btn btn-default btn-xs")
493 .addClass("btn btn-default btn-xs")
494 .click(function (e) {
494 .click(function (e) {
495 item.remove();
495 item.remove();
496 return false;
496 return false;
497 });
497 });
498 item.find(".item_buttons").empty()
498 item.find(".item_buttons").empty()
499 .append(upload_button)
499 .append(upload_button)
500 .append(cancel_button);
500 .append(cancel_button);
501 };
501 };
502
502
503
503
504 // Backwards compatability.
504 // Backwards compatability.
505 IPython.NotebookList = NotebookList;
505 IPython.NotebookList = NotebookList;
506
506
507 return {'NotebookList': NotebookList};
507 return {'NotebookList': NotebookList};
508 });
508 });
@@ -1,72 +1,92 b''
1 {% extends "page.html" %}
1 {% extends "page.html" %}
2
2
3 {% block title %}{{page_title}}{% endblock %}
3 {% block title %}{{page_title}}{% endblock %}
4
4
5 {% block stylesheet %}
5 {% block stylesheet %}
6 <link rel="stylesheet" href="{{ static_url('components/codemirror/lib/codemirror.css') }}">
6 <link rel="stylesheet" href="{{ static_url('components/codemirror/lib/codemirror.css') }}">
7 <link rel="stylesheet" href="{{ static_url('components/codemirror/addon/dialog/dialog.css') }}">
7 <link rel="stylesheet" href="{{ static_url('components/codemirror/addon/dialog/dialog.css') }}">
8 <style>
9 #texteditor-container {
10 border-bottom: 1px solid #ccc;
11 }
12
13 #filename {
14 font-size: 16pt;
15 display: table;
16 padding: 0px 5px;
17 }
18 </style>
19
20 {{super()}}
8 {{super()}}
21 {% endblock %}
9 {% endblock %}
22
10
23 {% block params %}
11 {% block params %}
24
12
25 data-base-url="{{base_url}}"
13 data-base-url="{{base_url}}"
26 data-file-path="{{file_path}}"
14 data-file-path="{{file_path}}"
27
15
28 {% endblock %}
16 {% endblock %}
29
17
30 {% block header %}
18 {% block headercontainer %}
31
19
32 <span id="filename">{{ basename }}</span>
20 <span id="save_widget" class="pull-left save_widget">
21 <span class="filename"></span>
22 <span class="last_modified"></span>
23 </span>
33
24
34 {% endblock %}
25 {% endblock %}
35
26
36 {% block site %}
27 {% block header %}
37
28
38 <div id="menubar-container" class="container">
29 <div id="menubar-container" class="container">
39 <div id="menubar">
30 <div id="menubar">
40 <div id="menus" class="navbar navbar-default" role="navigation">
31 <div id="menus" class="navbar navbar-default" role="navigation">
41 <div class="container-fluid">
32 <div class="container-fluid">
42 <button type="button" class="btn btn-default navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
33 <button type="button" class="btn btn-default navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
43 <i class="fa fa-bars"></i>
34 <i class="fa fa-bars"></i>
44 <span class="navbar-text">Menu</span>
35 <span class="navbar-text">Menu</span>
45 </button>
36 </button>
46 <ul class="nav navbar-nav navbar-right">
37 <ul class="nav navbar-nav navbar-right">
47 <li id="notification_area"></li>
38 <li id="notification_area"></li>
48 </ul>
39 </ul>
49 <div class="navbar-collapse collapse">
40 <div class="navbar-collapse collapse">
50 <ul class="nav navbar-nav">
41 <ul class="nav navbar-nav">
51 <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">File</a>
42 <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">File</a>
52 <ul id="file_menu" class="dropdown-menu">
43 <ul id="file-menu" class="dropdown-menu">
53 <li id="save_file"><a href="#">Save</a></li>
44 <li id="new-file"><a href="#">New</a></li>
45 <li id="save-file"><a href="#">Save</a></li>
46 <li id="rename-file"><a href="#">Rename</a></li>
47 </ul>
48 </li>
49 <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">Edit</a>
50 <ul id="edit-menu" class="dropdown-menu">
51 <li id="menu-find"><a href="#">Find</a></li>
52 <li id="menu-replace"><a href="#">Find &amp; Replace</a></li>
53 <li class="divider"></li>
54 <li class="dropdown-header">Key Map</li>
55 <li id="menu-keymap-default"><a href="#">Default<i class="fa"></i></a></li>
56 <li id="menu-keymap-sublime"><a href="#">Sublime Text<i class="fa"></i></a></li>
57 <li id="menu-keymap-vim"><a href="#">Vim<i class="fa"></i></a></li>
58 <li id="menu-keymap-emacs"><a href="#">emacs<i class="fa"></i></a></li>
59 </ul>
60 </li>
61 <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">View</a>
62 <ul id="view-menu" class="dropdown-menu">
63 <li id="menu-line-numbers"><a href="#">Toggle Line Numbers</a></li>
54 </ul>
64 </ul>
55 </li>
65 </li>
66 <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">Language</a>
67 <ul id="mode-menu" class="dropdown-menu">
56 </ul>
68 </ul>
69 </li>
70 </ul>
71 <p id="current-mode" class="navbar-text navbar-right">current mode</p>
57 </div>
72 </div>
58 </div>
73 </div>
59 </div>
74 </div>
60 </div>
75 </div>
61 </div>
76 </div>
62
77
78 {% endblock %}
79
80 {% block site %}
81
82
63 <div id="texteditor-container" class="container"></div>
83 <div id="texteditor-container" class="container"></div>
64
84
65 {% endblock %}
85 {% endblock %}
66
86
67 {% block script %}
87 {% block script %}
68
88
69 {{super()}}
89 {{super()}}
70
90
71 <script src="{{ static_url("edit/js/main.js") }}" type="text/javascript" charset="utf-8"></script>
91 <script src="{{ static_url("edit/js/main.js") }}" type="text/javascript" charset="utf-8"></script>
72 {% endblock %}
92 {% endblock %}
@@ -1,331 +1,331 b''
1 {% extends "page.html" %}
1 {% extends "page.html" %}
2
2
3 {% block stylesheet %}
3 {% block stylesheet %}
4
4
5 {% if mathjax_url %}
5 {% if mathjax_url %}
6 <script type="text/javascript" src="{{mathjax_url}}?config=TeX-AMS_HTML-full&delayStartupUntil=configured" charset="utf-8"></script>
6 <script type="text/javascript" src="{{mathjax_url}}?config=TeX-AMS_HTML-full&delayStartupUntil=configured" charset="utf-8"></script>
7 {% endif %}
7 {% endif %}
8 <script type="text/javascript">
8 <script type="text/javascript">
9 // MathJax disabled, set as null to distingish from *missing* MathJax,
9 // MathJax disabled, set as null to distingish from *missing* MathJax,
10 // where it will be undefined, and should prompt a dialog later.
10 // where it will be undefined, and should prompt a dialog later.
11 window.mathjax_url = "{{mathjax_url}}";
11 window.mathjax_url = "{{mathjax_url}}";
12 </script>
12 </script>
13
13
14 <link rel="stylesheet" href="{{ static_url("components/bootstrap-tour/build/css/bootstrap-tour.min.css") }}" type="text/css" />
14 <link rel="stylesheet" href="{{ static_url("components/bootstrap-tour/build/css/bootstrap-tour.min.css") }}" type="text/css" />
15 <link rel="stylesheet" href="{{ static_url("components/codemirror/lib/codemirror.css") }}">
15 <link rel="stylesheet" href="{{ static_url("components/codemirror/lib/codemirror.css") }}">
16
16
17 {{super()}}
17 {{super()}}
18
18
19 <link rel="stylesheet" href="{{ static_url("notebook/css/override.css") }}" type="text/css" />
19 <link rel="stylesheet" href="{{ static_url("notebook/css/override.css") }}" type="text/css" />
20
20
21 {% endblock %}
21 {% endblock %}
22
22
23 {% block params %}
23 {% block params %}
24
24
25 data-project="{{project}}"
25 data-project="{{project}}"
26 data-base-url="{{base_url}}"
26 data-base-url="{{base_url}}"
27 data-ws-url="{{ws_url}}"
27 data-ws-url="{{ws_url}}"
28 data-notebook-name="{{notebook_name}}"
28 data-notebook-name="{{notebook_name}}"
29 data-notebook-path="{{notebook_path}}"
29 data-notebook-path="{{notebook_path}}"
30 class="notebook_app"
30 class="notebook_app"
31
31
32 {% endblock %}
32 {% endblock %}
33
33
34
34
35 {% block headercontainer %}
35 {% block headercontainer %}
36
36
37
37
38 <span id="save_widget" class="nav pull-left">
38 <span id="save_widget" class="pull-left save_widget">
39 <span id="notebook_name"></span>
39 <span class="filename"></span>
40 <span id="checkpoint_status"></span>
40 <span class="checkpoint_status"></span>
41 <span id="autosave_status"></span>
41 <span class="autosave_status"></span>
42 </span>
42 </span>
43
43
44 <span id="kernel_selector_widget" class="pull-right dropdown">
44 <span id="kernel_selector_widget" class="pull-right dropdown">
45 <button class="dropdown-toggle btn btn-sm navbar-btn" data-toggle="dropdown" type='button' id="current_kernel_spec">
45 <button class="dropdown-toggle btn btn-sm navbar-btn" data-toggle="dropdown" type='button' id="current_kernel_spec">
46 <span class='kernel_name'>Kernel</span>
46 <span class='kernel_name'>Kernel</span>
47 <span class="caret"></span>
47 <span class="caret"></span>
48 </button>
48 </button>
49 <ul id="kernel_selector" class="dropdown-menu">
49 <ul id="kernel_selector" class="dropdown-menu">
50 </ul>
50 </ul>
51 </span>
51 </span>
52
52
53 {% endblock headercontainer %}
53 {% endblock headercontainer %}
54
54
55 {% block header %}
55 {% block header %}
56 <div id="menubar-container" class="container">
56 <div id="menubar-container" class="container">
57 <div id="menubar">
57 <div id="menubar">
58 <div id="menus" class="navbar navbar-default" role="navigation">
58 <div id="menus" class="navbar navbar-default" role="navigation">
59 <div class="container-fluid">
59 <div class="container-fluid">
60 <button type="button" class="btn btn-default navbar-btn navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
60 <button type="button" class="btn btn-default navbar-btn navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
61 <i class="fa fa-bars"></i>
61 <i class="fa fa-bars"></i>
62 <span class="navbar-text">Menu</span>
62 <span class="navbar-text">Menu</span>
63 </button>
63 </button>
64 <p id="kernel_indicator" class="navbar-text">
64 <p id="kernel_indicator" class="navbar-text">
65 <i id="kernel_indicator_icon"></i>
65 <i id="kernel_indicator_icon"></i>
66 </p>
66 </p>
67 <p id="modal_indicator" class="navbar-text">
67 <p id="modal_indicator" class="navbar-text">
68 <i id="modal_indicator_icon"></i>
68 <i id="modal_indicator_icon"></i>
69 </p>
69 </p>
70 <span id="notification_area"></span>
70 <span id="notification_area"></span>
71 <div class="navbar-collapse collapse">
71 <div class="navbar-collapse collapse">
72 <ul class="nav navbar-nav">
72 <ul class="nav navbar-nav">
73 <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">File</a>
73 <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">File</a>
74 <ul id="file_menu" class="dropdown-menu">
74 <ul id="file_menu" class="dropdown-menu">
75 <li id="new_notebook"
75 <li id="new_notebook"
76 title="Make a new notebook (Opens a new window)">
76 title="Make a new notebook (Opens a new window)">
77 <a href="#">New</a></li>
77 <a href="#">New</a></li>
78 <li id="open_notebook"
78 <li id="open_notebook"
79 title="Opens a new window with the Dashboard view">
79 title="Opens a new window with the Dashboard view">
80 <a href="#">Open...</a></li>
80 <a href="#">Open...</a></li>
81 <!-- <hr/> -->
81 <!-- <hr/> -->
82 <li class="divider"></li>
82 <li class="divider"></li>
83 <li id="copy_notebook"
83 <li id="copy_notebook"
84 title="Open a copy of this notebook's contents and start a new kernel">
84 title="Open a copy of this notebook's contents and start a new kernel">
85 <a href="#">Make a Copy...</a></li>
85 <a href="#">Make a Copy...</a></li>
86 <li id="rename_notebook"><a href="#">Rename...</a></li>
86 <li id="rename_notebook"><a href="#">Rename...</a></li>
87 <li id="save_checkpoint"><a href="#">Save and Checkpoint</a></li>
87 <li id="save_checkpoint"><a href="#">Save and Checkpoint</a></li>
88 <!-- <hr/> -->
88 <!-- <hr/> -->
89 <li class="divider"></li>
89 <li class="divider"></li>
90 <li id="restore_checkpoint" class="dropdown-submenu"><a href="#">Revert to Checkpoint</a>
90 <li id="restore_checkpoint" class="dropdown-submenu"><a href="#">Revert to Checkpoint</a>
91 <ul class="dropdown-menu">
91 <ul class="dropdown-menu">
92 <li><a href="#"></a></li>
92 <li><a href="#"></a></li>
93 <li><a href="#"></a></li>
93 <li><a href="#"></a></li>
94 <li><a href="#"></a></li>
94 <li><a href="#"></a></li>
95 <li><a href="#"></a></li>
95 <li><a href="#"></a></li>
96 <li><a href="#"></a></li>
96 <li><a href="#"></a></li>
97 </ul>
97 </ul>
98 </li>
98 </li>
99 <li class="divider"></li>
99 <li class="divider"></li>
100 <li id="print_preview"><a href="#">Print Preview</a></li>
100 <li id="print_preview"><a href="#">Print Preview</a></li>
101 <li class="dropdown-submenu"><a href="#">Download as</a>
101 <li class="dropdown-submenu"><a href="#">Download as</a>
102 <ul class="dropdown-menu">
102 <ul class="dropdown-menu">
103 <li id="download_ipynb"><a href="#">IPython Notebook (.ipynb)</a></li>
103 <li id="download_ipynb"><a href="#">IPython Notebook (.ipynb)</a></li>
104 <li id="download_script"><a href="#">Script</a></li>
104 <li id="download_script"><a href="#">Script</a></li>
105 <li id="download_html"><a href="#">HTML (.html)</a></li>
105 <li id="download_html"><a href="#">HTML (.html)</a></li>
106 <li id="download_rst"><a href="#">reST (.rst)</a></li>
106 <li id="download_rst"><a href="#">reST (.rst)</a></li>
107 <li id="download_pdf"><a href="#">PDF (.pdf)</a></li>
107 <li id="download_pdf"><a href="#">PDF (.pdf)</a></li>
108 </ul>
108 </ul>
109 </li>
109 </li>
110 <li class="divider"></li>
110 <li class="divider"></li>
111 <li id="trust_notebook"
111 <li id="trust_notebook"
112 title="Trust the output of this notebook">
112 title="Trust the output of this notebook">
113 <a href="#" >Trust Notebook</a></li>
113 <a href="#" >Trust Notebook</a></li>
114 <li class="divider"></li>
114 <li class="divider"></li>
115 <li id="kill_and_exit"
115 <li id="kill_and_exit"
116 title="Shutdown this notebook's kernel, and close this window">
116 title="Shutdown this notebook's kernel, and close this window">
117 <a href="#" >Close and halt</a></li>
117 <a href="#" >Close and halt</a></li>
118 </ul>
118 </ul>
119 </li>
119 </li>
120 <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">Edit</a>
120 <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">Edit</a>
121 <ul id="edit_menu" class="dropdown-menu">
121 <ul id="edit_menu" class="dropdown-menu">
122 <li id="cut_cell"><a href="#">Cut Cell</a></li>
122 <li id="cut_cell"><a href="#">Cut Cell</a></li>
123 <li id="copy_cell"><a href="#">Copy Cell</a></li>
123 <li id="copy_cell"><a href="#">Copy Cell</a></li>
124 <li id="paste_cell_above" class="disabled"><a href="#">Paste Cell Above</a></li>
124 <li id="paste_cell_above" class="disabled"><a href="#">Paste Cell Above</a></li>
125 <li id="paste_cell_below" class="disabled"><a href="#">Paste Cell Below</a></li>
125 <li id="paste_cell_below" class="disabled"><a href="#">Paste Cell Below</a></li>
126 <li id="paste_cell_replace" class="disabled"><a href="#">Paste Cell &amp; Replace</a></li>
126 <li id="paste_cell_replace" class="disabled"><a href="#">Paste Cell &amp; Replace</a></li>
127 <li id="delete_cell"><a href="#">Delete Cell</a></li>
127 <li id="delete_cell"><a href="#">Delete Cell</a></li>
128 <li id="undelete_cell" class="disabled"><a href="#">Undo Delete Cell</a></li>
128 <li id="undelete_cell" class="disabled"><a href="#">Undo Delete Cell</a></li>
129 <li class="divider"></li>
129 <li class="divider"></li>
130 <li id="split_cell"><a href="#">Split Cell</a></li>
130 <li id="split_cell"><a href="#">Split Cell</a></li>
131 <li id="merge_cell_above"><a href="#">Merge Cell Above</a></li>
131 <li id="merge_cell_above"><a href="#">Merge Cell Above</a></li>
132 <li id="merge_cell_below"><a href="#">Merge Cell Below</a></li>
132 <li id="merge_cell_below"><a href="#">Merge Cell Below</a></li>
133 <li class="divider"></li>
133 <li class="divider"></li>
134 <li id="move_cell_up"><a href="#">Move Cell Up</a></li>
134 <li id="move_cell_up"><a href="#">Move Cell Up</a></li>
135 <li id="move_cell_down"><a href="#">Move Cell Down</a></li>
135 <li id="move_cell_down"><a href="#">Move Cell Down</a></li>
136 <li class="divider"></li>
136 <li class="divider"></li>
137 <li id="edit_nb_metadata"><a href="#">Edit Notebook Metadata</a></li>
137 <li id="edit_nb_metadata"><a href="#">Edit Notebook Metadata</a></li>
138 </ul>
138 </ul>
139 </li>
139 </li>
140 <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">View</a>
140 <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">View</a>
141 <ul id="view_menu" class="dropdown-menu">
141 <ul id="view_menu" class="dropdown-menu">
142 <li id="toggle_header"
142 <li id="toggle_header"
143 title="Show/Hide the IPython Notebook logo and notebook title (above menu bar)">
143 title="Show/Hide the IPython Notebook logo and notebook title (above menu bar)">
144 <a href="#">Toggle Header</a></li>
144 <a href="#">Toggle Header</a></li>
145 <li id="toggle_toolbar"
145 <li id="toggle_toolbar"
146 title="Show/Hide the action icons (below menu bar)">
146 title="Show/Hide the action icons (below menu bar)">
147 <a href="#">Toggle Toolbar</a></li>
147 <a href="#">Toggle Toolbar</a></li>
148 </ul>
148 </ul>
149 </li>
149 </li>
150 <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">Insert</a>
150 <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">Insert</a>
151 <ul id="insert_menu" class="dropdown-menu">
151 <ul id="insert_menu" class="dropdown-menu">
152 <li id="insert_cell_above"
152 <li id="insert_cell_above"
153 title="Insert an empty Code cell above the currently active cell">
153 title="Insert an empty Code cell above the currently active cell">
154 <a href="#">Insert Cell Above</a></li>
154 <a href="#">Insert Cell Above</a></li>
155 <li id="insert_cell_below"
155 <li id="insert_cell_below"
156 title="Insert an empty Code cell below the currently active cell">
156 title="Insert an empty Code cell below the currently active cell">
157 <a href="#">Insert Cell Below</a></li>
157 <a href="#">Insert Cell Below</a></li>
158 </ul>
158 </ul>
159 </li>
159 </li>
160 <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">Cell</a>
160 <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">Cell</a>
161 <ul id="cell_menu" class="dropdown-menu">
161 <ul id="cell_menu" class="dropdown-menu">
162 <li id="run_cell" title="Run this cell, and move cursor to the next one">
162 <li id="run_cell" title="Run this cell, and move cursor to the next one">
163 <a href="#">Run</a></li>
163 <a href="#">Run</a></li>
164 <li id="run_cell_select_below" title="Run this cell, select below">
164 <li id="run_cell_select_below" title="Run this cell, select below">
165 <a href="#">Run and Select Below</a></li>
165 <a href="#">Run and Select Below</a></li>
166 <li id="run_cell_insert_below" title="Run this cell, insert below">
166 <li id="run_cell_insert_below" title="Run this cell, insert below">
167 <a href="#">Run and Insert Below</a></li>
167 <a href="#">Run and Insert Below</a></li>
168 <li id="run_all_cells" title="Run all cells in the notebook">
168 <li id="run_all_cells" title="Run all cells in the notebook">
169 <a href="#">Run All</a></li>
169 <a href="#">Run All</a></li>
170 <li id="run_all_cells_above" title="Run all cells above (but not including) this cell">
170 <li id="run_all_cells_above" title="Run all cells above (but not including) this cell">
171 <a href="#">Run All Above</a></li>
171 <a href="#">Run All Above</a></li>
172 <li id="run_all_cells_below" title="Run this cell and all cells below it">
172 <li id="run_all_cells_below" title="Run this cell and all cells below it">
173 <a href="#">Run All Below</a></li>
173 <a href="#">Run All Below</a></li>
174 <li class="divider"></li>
174 <li class="divider"></li>
175 <li id="change_cell_type" class="dropdown-submenu"
175 <li id="change_cell_type" class="dropdown-submenu"
176 title="All cells in the notebook have a cell type. By default, new cells are created as 'Code' cells">
176 title="All cells in the notebook have a cell type. By default, new cells are created as 'Code' cells">
177 <a href="#">Cell Type</a>
177 <a href="#">Cell Type</a>
178 <ul class="dropdown-menu">
178 <ul class="dropdown-menu">
179 <li id="to_code"
179 <li id="to_code"
180 title="Contents will be sent to the kernel for execution, and output will display in the footer of cell">
180 title="Contents will be sent to the kernel for execution, and output will display in the footer of cell">
181 <a href="#">Code</a></li>
181 <a href="#">Code</a></li>
182 <li id="to_markdown"
182 <li id="to_markdown"
183 title="Contents will be rendered as HTML and serve as explanatory text">
183 title="Contents will be rendered as HTML and serve as explanatory text">
184 <a href="#">Markdown</a></li>
184 <a href="#">Markdown</a></li>
185 <li id="to_raw"
185 <li id="to_raw"
186 title="Contents will pass through nbconvert unmodified">
186 title="Contents will pass through nbconvert unmodified">
187 <a href="#">Raw NBConvert</a></li>
187 <a href="#">Raw NBConvert</a></li>
188 </ul>
188 </ul>
189 </li>
189 </li>
190 <li class="divider"></li>
190 <li class="divider"></li>
191 <li id="current_outputs" class="dropdown-submenu"><a href="#">Current Output</a>
191 <li id="current_outputs" class="dropdown-submenu"><a href="#">Current Output</a>
192 <ul class="dropdown-menu">
192 <ul class="dropdown-menu">
193 <li id="toggle_current_output"
193 <li id="toggle_current_output"
194 title="Hide/Show the output of the current cell">
194 title="Hide/Show the output of the current cell">
195 <a href="#">Toggle</a>
195 <a href="#">Toggle</a>
196 </li>
196 </li>
197 <li id="toggle_current_output_scroll"
197 <li id="toggle_current_output_scroll"
198 title="Scroll the output of the current cell">
198 title="Scroll the output of the current cell">
199 <a href="#">Toggle Scrolling</a>
199 <a href="#">Toggle Scrolling</a>
200 </li>
200 </li>
201 <li id="clear_current_output"
201 <li id="clear_current_output"
202 title="Clear the output of the current cell">
202 title="Clear the output of the current cell">
203 <a href="#">Clear</a>
203 <a href="#">Clear</a>
204 </li>
204 </li>
205 </ul>
205 </ul>
206 </li>
206 </li>
207 <li id="all_outputs" class="dropdown-submenu"><a href="#">All Output</a>
207 <li id="all_outputs" class="dropdown-submenu"><a href="#">All Output</a>
208 <ul class="dropdown-menu">
208 <ul class="dropdown-menu">
209 <li id="toggle_all_output"
209 <li id="toggle_all_output"
210 title="Hide/Show the output of all cells">
210 title="Hide/Show the output of all cells">
211 <a href="#">Toggle</a>
211 <a href="#">Toggle</a>
212 </li>
212 </li>
213 <li id="toggle_all_output_scroll"
213 <li id="toggle_all_output_scroll"
214 title="Scroll the output of all cells">
214 title="Scroll the output of all cells">
215 <a href="#">Toggle Scrolling</a>
215 <a href="#">Toggle Scrolling</a>
216 </li>
216 </li>
217 <li id="clear_all_output"
217 <li id="clear_all_output"
218 title="Clear the output of all cells">
218 title="Clear the output of all cells">
219 <a href="#">Clear</a>
219 <a href="#">Clear</a>
220 </li>
220 </li>
221 </ul>
221 </ul>
222 </li>
222 </li>
223 </ul>
223 </ul>
224 </li>
224 </li>
225 <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">Kernel</a>
225 <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">Kernel</a>
226 <ul id="kernel_menu" class="dropdown-menu">
226 <ul id="kernel_menu" class="dropdown-menu">
227 <li id="int_kernel"
227 <li id="int_kernel"
228 title="Send KeyboardInterrupt (CTRL-C) to the Kernel">
228 title="Send KeyboardInterrupt (CTRL-C) to the Kernel">
229 <a href="#">Interrupt</a>
229 <a href="#">Interrupt</a>
230 </li>
230 </li>
231 <li id="restart_kernel"
231 <li id="restart_kernel"
232 title="Restart the Kernel">
232 title="Restart the Kernel">
233 <a href="#">Restart</a>
233 <a href="#">Restart</a>
234 </li>
234 </li>
235 <li id="reconnect_kernel"
235 <li id="reconnect_kernel"
236 title="Reconnect to the Kernel">
236 title="Reconnect to the Kernel">
237 <a href="#">Reconnect</a>
237 <a href="#">Reconnect</a>
238 </li>
238 </li>
239 <li class="divider"></li>
239 <li class="divider"></li>
240 <li id="menu-change-kernel" class="dropdown-submenu">
240 <li id="menu-change-kernel" class="dropdown-submenu">
241 <a href="#">Change kernel</a>
241 <a href="#">Change kernel</a>
242 <ul class="dropdown-menu" id="menu-change-kernel-submenu"></ul>
242 <ul class="dropdown-menu" id="menu-change-kernel-submenu"></ul>
243 </li>
243 </li>
244 </ul>
244 </ul>
245 </li>
245 </li>
246 <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">Help</a>
246 <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">Help</a>
247 <ul id="help_menu" class="dropdown-menu">
247 <ul id="help_menu" class="dropdown-menu">
248 <li id="notebook_tour" title="A quick tour of the notebook user interface"><a href="#">User Interface Tour</a></li>
248 <li id="notebook_tour" title="A quick tour of the notebook user interface"><a href="#">User Interface Tour</a></li>
249 <li id="keyboard_shortcuts" title="Opens a tooltip with all keyboard shortcuts"><a href="#">Keyboard Shortcuts</a></li>
249 <li id="keyboard_shortcuts" title="Opens a tooltip with all keyboard shortcuts"><a href="#">Keyboard Shortcuts</a></li>
250 <li class="divider"></li>
250 <li class="divider"></li>
251 {% set
251 {% set
252 sections = (
252 sections = (
253 (
253 (
254 ("http://ipython.org/documentation.html","IPython Help",True),
254 ("http://ipython.org/documentation.html","IPython Help",True),
255 ("http://nbviewer.ipython.org/github/ipython/ipython/tree/2.x/examples/Index.ipynb", "Notebook Help", True),
255 ("http://nbviewer.ipython.org/github/ipython/ipython/tree/2.x/examples/Index.ipynb", "Notebook Help", True),
256 ),(
256 ),(
257 ("http://docs.python.org","Python",True),
257 ("http://docs.python.org","Python",True),
258 ("http://help.github.com/articles/github-flavored-markdown","Markdown",True),
258 ("http://help.github.com/articles/github-flavored-markdown","Markdown",True),
259 ("http://docs.scipy.org/doc/numpy/reference/","NumPy",True),
259 ("http://docs.scipy.org/doc/numpy/reference/","NumPy",True),
260 ("http://docs.scipy.org/doc/scipy/reference/","SciPy",True),
260 ("http://docs.scipy.org/doc/scipy/reference/","SciPy",True),
261 ("http://matplotlib.org/contents.html","Matplotlib",True),
261 ("http://matplotlib.org/contents.html","Matplotlib",True),
262 ("http://docs.sympy.org/latest/index.html","SymPy",True),
262 ("http://docs.sympy.org/latest/index.html","SymPy",True),
263 ("http://pandas.pydata.org/pandas-docs/stable/","pandas", True)
263 ("http://pandas.pydata.org/pandas-docs/stable/","pandas", True)
264 )
264 )
265 )
265 )
266 %}
266 %}
267
267
268 {% for helplinks in sections %}
268 {% for helplinks in sections %}
269 {% for link in helplinks %}
269 {% for link in helplinks %}
270 <li><a href="{{link[0]}}" {{'target="_blank" title="Opens in a new window"' if link[2]}}>
270 <li><a href="{{link[0]}}" {{'target="_blank" title="Opens in a new window"' if link[2]}}>
271 {{'<i class="fa fa-external-link menu-icon pull-right"></i>' if link[2]}}
271 {{'<i class="fa fa-external-link menu-icon pull-right"></i>' if link[2]}}
272 {{link[1]}}
272 {{link[1]}}
273 </a></li>
273 </a></li>
274 {% endfor %}
274 {% endfor %}
275 {% if not loop.last %}
275 {% if not loop.last %}
276 <li class="divider"></li>
276 <li class="divider"></li>
277 {% endif %}
277 {% endif %}
278 {% endfor %}
278 {% endfor %}
279 <li class="divider"></li>
279 <li class="divider"></li>
280 <li title="About IPython Notebook"><a id="notebook_about" href="#">About</a></li>
280 <li title="About IPython Notebook"><a id="notebook_about" href="#">About</a></li>
281 </ul>
281 </ul>
282 </li>
282 </li>
283 </ul>
283 </ul>
284 </div>
284 </div>
285 </div>
285 </div>
286 </div>
286 </div>
287 </div>
287 </div>
288
288
289 <div id="maintoolbar" class="navbar">
289 <div id="maintoolbar" class="navbar">
290 <div class="toolbar-inner navbar-inner navbar-nobg">
290 <div class="toolbar-inner navbar-inner navbar-nobg">
291 <div id="maintoolbar-container" class="container"></div>
291 <div id="maintoolbar-container" class="container"></div>
292 </div>
292 </div>
293 </div>
293 </div>
294 </div>
294 </div>
295
295
296 <div class="lower-header-bar"></div>
296 <div class="lower-header-bar"></div>
297 {% endblock header %}
297 {% endblock header %}
298
298
299 {% block site %}
299 {% block site %}
300
300
301
301
302 <div id="ipython-main-app">
302 <div id="ipython-main-app">
303 <div id="notebook_panel">
303 <div id="notebook_panel">
304 <div id="notebook"></div>
304 <div id="notebook"></div>
305 </div>
305 </div>
306 </div>
306 </div>
307
307
308 <div id="pager">
308 <div id="pager">
309 <div id="pager-contents">
309 <div id="pager-contents">
310 <div id="pager-container" class="container"></div>
310 <div id="pager-container" class="container"></div>
311 </div>
311 </div>
312 <div id='pager-button-area'></div>
312 <div id='pager-button-area'></div>
313 </div>
313 </div>
314
314
315 <div id='tooltip' class='ipython_tooltip' style='display:none'></div>
315 <div id='tooltip' class='ipython_tooltip' style='display:none'></div>
316
316
317
317
318 {% endblock %}
318 {% endblock %}
319
319
320
320
321 {% block script %}
321 {% block script %}
322 {{super()}}
322 {{super()}}
323 <script type="text/javascript">
323 <script type="text/javascript">
324 sys_info = {{sys_info}};
324 sys_info = {{sys_info}};
325 </script>
325 </script>
326
326
327 <script src="{{ static_url("components/text-encoding/lib/encoding.js") }}" charset="utf-8"></script>
327 <script src="{{ static_url("components/text-encoding/lib/encoding.js") }}" charset="utf-8"></script>
328
328
329 <script src="{{ static_url("notebook/js/main.js") }}" charset="utf-8"></script>
329 <script src="{{ static_url("notebook/js/main.js") }}" charset="utf-8"></script>
330
330
331 {% endblock %}
331 {% endblock %}
General Comments 0
You need to be logged in to leave comments. Login now