##// END OF EJS Templates
Merge pull request #6991 from minrk/unhandled-types...
Thomas Kluyver -
r19117:bc59b4a1 merge
parent child Browse files
Show More
@@ -1,597 +1,675 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 /**
4 /**
5 *
5 *
6 *
6 *
7 * @module cell
7 * @module cell
8 * @namespace cell
8 * @namespace cell
9 * @class Cell
9 * @class Cell
10 */
10 */
11
11
12
12
13 define([
13 define([
14 'base/js/namespace',
14 'base/js/namespace',
15 'jquery',
15 'jquery',
16 'base/js/utils',
16 'base/js/utils',
17 'codemirror/lib/codemirror',
17 'codemirror/lib/codemirror',
18 'codemirror/addon/edit/matchbrackets',
18 'codemirror/addon/edit/matchbrackets',
19 'codemirror/addon/edit/closebrackets',
19 'codemirror/addon/edit/closebrackets',
20 'codemirror/addon/comment/comment'
20 'codemirror/addon/comment/comment'
21 ], function(IPython, $, utils, CodeMirror, cm_match, cm_closeb, cm_comment) {
21 ], function(IPython, $, utils, CodeMirror, cm_match, cm_closeb, cm_comment) {
22 // TODO: remove IPython dependency here
22 // TODO: remove IPython dependency here
23 "use strict";
23 "use strict";
24
24
25 var Cell = function (options) {
25 var Cell = function (options) {
26 /* Constructor
26 /* Constructor
27 *
27 *
28 * The Base `Cell` class from which to inherit.
28 * The Base `Cell` class from which to inherit.
29 * @constructor
29 * @constructor
30 * @param:
30 * @param:
31 * options: dictionary
31 * options: dictionary
32 * Dictionary of keyword arguments.
32 * Dictionary of keyword arguments.
33 * events: $(Events) instance
33 * events: $(Events) instance
34 * config: dictionary
34 * config: dictionary
35 * keyboard_manager: KeyboardManager instance
35 * keyboard_manager: KeyboardManager instance
36 */
36 */
37 options = options || {};
37 options = options || {};
38 this.keyboard_manager = options.keyboard_manager;
38 this.keyboard_manager = options.keyboard_manager;
39 this.events = options.events;
39 this.events = options.events;
40 var config = utils.mergeopt(Cell, options.config);
40 var config = utils.mergeopt(Cell, options.config);
41 // superclass default overwrite our default
41 // superclass default overwrite our default
42
42
43 this.placeholder = config.placeholder || '';
43 this.placeholder = config.placeholder || '';
44 this.read_only = config.cm_config.readOnly;
44 this.read_only = config.cm_config.readOnly;
45 this.selected = false;
45 this.selected = false;
46 this.rendered = false;
46 this.rendered = false;
47 this.mode = 'command';
47 this.mode = 'command';
48
48
49 // Metadata property
49 // Metadata property
50 var that = this;
50 var that = this;
51 this._metadata = {};
51 this._metadata = {};
52 Object.defineProperty(this, 'metadata', {
52 Object.defineProperty(this, 'metadata', {
53 get: function() { return that._metadata; },
53 get: function() { return that._metadata; },
54 set: function(value) {
54 set: function(value) {
55 that._metadata = value;
55 that._metadata = value;
56 that.celltoolbar.rebuild();
56 if (that.celltoolbar) {
57 that.celltoolbar.rebuild();
58 }
57 }
59 }
58 });
60 });
59
61
60 // load this from metadata later ?
62 // load this from metadata later ?
61 this.user_highlight = 'auto';
63 this.user_highlight = 'auto';
62 this.cm_config = config.cm_config;
64 this.cm_config = config.cm_config;
63 this.cell_id = utils.uuid();
65 this.cell_id = utils.uuid();
64 this._options = config;
66 this._options = config;
65
67
66 // For JS VM engines optimization, attributes should be all set (even
68 // For JS VM engines optimization, attributes should be all set (even
67 // to null) in the constructor, and if possible, if different subclass
69 // to null) in the constructor, and if possible, if different subclass
68 // have new attributes with same name, they should be created in the
70 // have new attributes with same name, they should be created in the
69 // same order. Easiest is to create and set to null in parent class.
71 // same order. Easiest is to create and set to null in parent class.
70
72
71 this.element = null;
73 this.element = null;
72 this.cell_type = this.cell_type || null;
74 this.cell_type = this.cell_type || null;
73 this.code_mirror = null;
75 this.code_mirror = null;
74
76
75 this.create_element();
77 this.create_element();
76 if (this.element !== null) {
78 if (this.element !== null) {
77 this.element.data("cell", this);
79 this.element.data("cell", this);
78 this.bind_events();
80 this.bind_events();
79 this.init_classes();
81 this.init_classes();
80 }
82 }
81 };
83 };
82
84
83 Cell.options_default = {
85 Cell.options_default = {
84 cm_config : {
86 cm_config : {
85 indentUnit : 4,
87 indentUnit : 4,
86 readOnly: false,
88 readOnly: false,
87 theme: "default",
89 theme: "default",
88 extraKeys: {
90 extraKeys: {
89 "Cmd-Right":"goLineRight",
91 "Cmd-Right":"goLineRight",
90 "End":"goLineRight",
92 "End":"goLineRight",
91 "Cmd-Left":"goLineLeft"
93 "Cmd-Left":"goLineLeft"
92 }
94 }
93 }
95 }
94 };
96 };
95
97
96 // FIXME: Workaround CM Bug #332 (Safari segfault on drag)
98 // FIXME: Workaround CM Bug #332 (Safari segfault on drag)
97 // by disabling drag/drop altogether on Safari
99 // by disabling drag/drop altogether on Safari
98 // https://github.com/codemirror/CodeMirror/issues/332
100 // https://github.com/codemirror/CodeMirror/issues/332
99 if (utils.browser[0] == "Safari") {
101 if (utils.browser[0] == "Safari") {
100 Cell.options_default.cm_config.dragDrop = false;
102 Cell.options_default.cm_config.dragDrop = false;
101 }
103 }
102
104
103 /**
105 /**
104 * Empty. Subclasses must implement create_element.
106 * Empty. Subclasses must implement create_element.
105 * This should contain all the code to create the DOM element in notebook
107 * This should contain all the code to create the DOM element in notebook
106 * and will be called by Base Class constructor.
108 * and will be called by Base Class constructor.
107 * @method create_element
109 * @method create_element
108 */
110 */
109 Cell.prototype.create_element = function () {
111 Cell.prototype.create_element = function () {
110 };
112 };
111
113
112 Cell.prototype.init_classes = function () {
114 Cell.prototype.init_classes = function () {
113 // Call after this.element exists to initialize the css classes
115 // Call after this.element exists to initialize the css classes
114 // related to selected, rendered and mode.
116 // related to selected, rendered and mode.
115 if (this.selected) {
117 if (this.selected) {
116 this.element.addClass('selected');
118 this.element.addClass('selected');
117 } else {
119 } else {
118 this.element.addClass('unselected');
120 this.element.addClass('unselected');
119 }
121 }
120 if (this.rendered) {
122 if (this.rendered) {
121 this.element.addClass('rendered');
123 this.element.addClass('rendered');
122 } else {
124 } else {
123 this.element.addClass('unrendered');
125 this.element.addClass('unrendered');
124 }
126 }
125 if (this.mode === 'edit') {
127 if (this.mode === 'edit') {
126 this.element.addClass('edit_mode');
128 this.element.addClass('edit_mode');
127 } else {
129 } else {
128 this.element.addClass('command_mode');
130 this.element.addClass('command_mode');
129 }
131 }
130 };
132 };
131
133
132 /**
134 /**
133 * Subclasses can implement override bind_events.
135 * Subclasses can implement override bind_events.
134 * Be carefull to call the parent method when overwriting as it fires event.
136 * Be carefull to call the parent method when overwriting as it fires event.
135 * this will be triggerd after create_element in constructor.
137 * this will be triggerd after create_element in constructor.
136 * @method bind_events
138 * @method bind_events
137 */
139 */
138 Cell.prototype.bind_events = function () {
140 Cell.prototype.bind_events = function () {
139 var that = this;
141 var that = this;
140 // We trigger events so that Cell doesn't have to depend on Notebook.
142 // We trigger events so that Cell doesn't have to depend on Notebook.
141 that.element.click(function (event) {
143 that.element.click(function (event) {
142 if (!that.selected) {
144 if (!that.selected) {
143 that.events.trigger('select.Cell', {'cell':that});
145 that.events.trigger('select.Cell', {'cell':that});
144 }
146 }
145 });
147 });
146 that.element.focusin(function (event) {
148 that.element.focusin(function (event) {
147 if (!that.selected) {
149 if (!that.selected) {
148 that.events.trigger('select.Cell', {'cell':that});
150 that.events.trigger('select.Cell', {'cell':that});
149 }
151 }
150 });
152 });
151 if (this.code_mirror) {
153 if (this.code_mirror) {
152 this.code_mirror.on("change", function(cm, change) {
154 this.code_mirror.on("change", function(cm, change) {
153 that.events.trigger("set_dirty.Notebook", {value: true});
155 that.events.trigger("set_dirty.Notebook", {value: true});
154 });
156 });
155 }
157 }
156 if (this.code_mirror) {
158 if (this.code_mirror) {
157 this.code_mirror.on('focus', function(cm, change) {
159 this.code_mirror.on('focus', function(cm, change) {
158 that.events.trigger('edit_mode.Cell', {cell: that});
160 that.events.trigger('edit_mode.Cell', {cell: that});
159 });
161 });
160 }
162 }
161 if (this.code_mirror) {
163 if (this.code_mirror) {
162 this.code_mirror.on('blur', function(cm, change) {
164 this.code_mirror.on('blur', function(cm, change) {
163 that.events.trigger('command_mode.Cell', {cell: that});
165 that.events.trigger('command_mode.Cell', {cell: that});
164 });
166 });
165 }
167 }
166
168
167 this.element.dblclick(function () {
169 this.element.dblclick(function () {
168 if (that.selected === false) {
170 if (that.selected === false) {
169 this.events.trigger('select.Cell', {'cell':that});
171 this.events.trigger('select.Cell', {'cell':that});
170 }
172 }
171 var cont = that.unrender();
173 var cont = that.unrender();
172 if (cont) {
174 if (cont) {
173 that.focus_editor();
175 that.focus_editor();
174 }
176 }
175 });
177 });
176 };
178 };
177
179
178 /**
180 /**
179 * This method gets called in CodeMirror's onKeyDown/onKeyPress
181 * This method gets called in CodeMirror's onKeyDown/onKeyPress
180 * handlers and is used to provide custom key handling.
182 * handlers and is used to provide custom key handling.
181 *
183 *
182 * To have custom handling, subclasses should override this method, but still call it
184 * To have custom handling, subclasses should override this method, but still call it
183 * in order to process the Edit mode keyboard shortcuts.
185 * in order to process the Edit mode keyboard shortcuts.
184 *
186 *
185 * @method handle_codemirror_keyevent
187 * @method handle_codemirror_keyevent
186 * @param {CodeMirror} editor - The codemirror instance bound to the cell
188 * @param {CodeMirror} editor - The codemirror instance bound to the cell
187 * @param {event} event - key press event which either should or should not be handled by CodeMirror
189 * @param {event} event - key press event which either should or should not be handled by CodeMirror
188 * @return {Boolean} `true` if CodeMirror should ignore the event, `false` Otherwise
190 * @return {Boolean} `true` if CodeMirror should ignore the event, `false` Otherwise
189 */
191 */
190 Cell.prototype.handle_codemirror_keyevent = function (editor, event) {
192 Cell.prototype.handle_codemirror_keyevent = function (editor, event) {
191 var shortcuts = this.keyboard_manager.edit_shortcuts;
193 var shortcuts = this.keyboard_manager.edit_shortcuts;
192
194
193 var cur = editor.getCursor();
195 var cur = editor.getCursor();
194 if((cur.line !== 0 || cur.ch !==0) && event.keyCode === 38){
196 if((cur.line !== 0 || cur.ch !==0) && event.keyCode === 38){
195 event._ipkmIgnore = true;
197 event._ipkmIgnore = true;
196 }
198 }
197 var nLastLine = editor.lastLine()
199 var nLastLine = editor.lastLine();
198 if( ( event.keyCode === 40)
200 if ((event.keyCode === 40) &&
199 && (( cur.line !== nLastLine)
201 ((cur.line !== nLastLine) ||
200 || ( cur.ch !== editor.getLineHandle(nLastLine).text.length))
202 (cur.ch !== editor.getLineHandle(nLastLine).text.length))
201 ){
203 ) {
202 event._ipkmIgnore = true;
204 event._ipkmIgnore = true;
203 }
205 }
204 // if this is an edit_shortcuts shortcut, the global keyboard/shortcut
206 // if this is an edit_shortcuts shortcut, the global keyboard/shortcut
205 // manager will handle it
207 // manager will handle it
206 if (shortcuts.handles(event)) {
208 if (shortcuts.handles(event)) {
207 return true;
209 return true;
208 }
210 }
209
211
210 return false;
212 return false;
211 };
213 };
212
214
213
215
214 /**
216 /**
215 * Triger typsetting of math by mathjax on current cell element
217 * Triger typsetting of math by mathjax on current cell element
216 * @method typeset
218 * @method typeset
217 */
219 */
218 Cell.prototype.typeset = function () {
220 Cell.prototype.typeset = function () {
219 if (window.MathJax) {
221 if (window.MathJax) {
220 var cell_math = this.element.get(0);
222 var cell_math = this.element.get(0);
221 MathJax.Hub.Queue(["Typeset", MathJax.Hub, cell_math]);
223 MathJax.Hub.Queue(["Typeset", MathJax.Hub, cell_math]);
222 }
224 }
223 };
225 };
224
226
225 /**
227 /**
226 * handle cell level logic when a cell is selected
228 * handle cell level logic when a cell is selected
227 * @method select
229 * @method select
228 * @return is the action being taken
230 * @return is the action being taken
229 */
231 */
230 Cell.prototype.select = function () {
232 Cell.prototype.select = function () {
231 if (!this.selected) {
233 if (!this.selected) {
232 this.element.addClass('selected');
234 this.element.addClass('selected');
233 this.element.removeClass('unselected');
235 this.element.removeClass('unselected');
234 this.selected = true;
236 this.selected = true;
235 return true;
237 return true;
236 } else {
238 } else {
237 return false;
239 return false;
238 }
240 }
239 };
241 };
240
242
241 /**
243 /**
242 * handle cell level logic when a cell is unselected
244 * handle cell level logic when a cell is unselected
243 * @method unselect
245 * @method unselect
244 * @return is the action being taken
246 * @return is the action being taken
245 */
247 */
246 Cell.prototype.unselect = function () {
248 Cell.prototype.unselect = function () {
247 if (this.selected) {
249 if (this.selected) {
248 this.element.addClass('unselected');
250 this.element.addClass('unselected');
249 this.element.removeClass('selected');
251 this.element.removeClass('selected');
250 this.selected = false;
252 this.selected = false;
251 return true;
253 return true;
252 } else {
254 } else {
253 return false;
255 return false;
254 }
256 }
255 };
257 };
256
258
257 /**
259 /**
260 * should be overritten by subclass
261 * @method execute
262 */
263 Cell.prototype.execute = function () {
264 return;
265 };
266
267 /**
258 * handle cell level logic when a cell is rendered
268 * handle cell level logic when a cell is rendered
259 * @method render
269 * @method render
260 * @return is the action being taken
270 * @return is the action being taken
261 */
271 */
262 Cell.prototype.render = function () {
272 Cell.prototype.render = function () {
263 if (!this.rendered) {
273 if (!this.rendered) {
264 this.element.addClass('rendered');
274 this.element.addClass('rendered');
265 this.element.removeClass('unrendered');
275 this.element.removeClass('unrendered');
266 this.rendered = true;
276 this.rendered = true;
267 return true;
277 return true;
268 } else {
278 } else {
269 return false;
279 return false;
270 }
280 }
271 };
281 };
272
282
273 /**
283 /**
274 * handle cell level logic when a cell is unrendered
284 * handle cell level logic when a cell is unrendered
275 * @method unrender
285 * @method unrender
276 * @return is the action being taken
286 * @return is the action being taken
277 */
287 */
278 Cell.prototype.unrender = function () {
288 Cell.prototype.unrender = function () {
279 if (this.rendered) {
289 if (this.rendered) {
280 this.element.addClass('unrendered');
290 this.element.addClass('unrendered');
281 this.element.removeClass('rendered');
291 this.element.removeClass('rendered');
282 this.rendered = false;
292 this.rendered = false;
283 return true;
293 return true;
284 } else {
294 } else {
285 return false;
295 return false;
286 }
296 }
287 };
297 };
288
298
289 /**
299 /**
290 * Delegates keyboard shortcut handling to either IPython keyboard
300 * Delegates keyboard shortcut handling to either IPython keyboard
291 * manager when in command mode, or CodeMirror when in edit mode
301 * manager when in command mode, or CodeMirror when in edit mode
292 *
302 *
293 * @method handle_keyevent
303 * @method handle_keyevent
294 * @param {CodeMirror} editor - The codemirror instance bound to the cell
304 * @param {CodeMirror} editor - The codemirror instance bound to the cell
295 * @param {event} - key event to be handled
305 * @param {event} - key event to be handled
296 * @return {Boolean} `true` if CodeMirror should ignore the event, `false` Otherwise
306 * @return {Boolean} `true` if CodeMirror should ignore the event, `false` Otherwise
297 */
307 */
298 Cell.prototype.handle_keyevent = function (editor, event) {
308 Cell.prototype.handle_keyevent = function (editor, event) {
299 if (this.mode === 'command') {
309 if (this.mode === 'command') {
300 return true;
310 return true;
301 } else if (this.mode === 'edit') {
311 } else if (this.mode === 'edit') {
302 return this.handle_codemirror_keyevent(editor, event);
312 return this.handle_codemirror_keyevent(editor, event);
303 }
313 }
304 };
314 };
305
315
306 /**
316 /**
307 * @method at_top
317 * @method at_top
308 * @return {Boolean}
318 * @return {Boolean}
309 */
319 */
310 Cell.prototype.at_top = function () {
320 Cell.prototype.at_top = function () {
311 var cm = this.code_mirror;
321 var cm = this.code_mirror;
312 var cursor = cm.getCursor();
322 var cursor = cm.getCursor();
313 if (cursor.line === 0 && cursor.ch === 0) {
323 if (cursor.line === 0 && cursor.ch === 0) {
314 return true;
324 return true;
315 }
325 }
316 return false;
326 return false;
317 };
327 };
318
328
319 /**
329 /**
320 * @method at_bottom
330 * @method at_bottom
321 * @return {Boolean}
331 * @return {Boolean}
322 * */
332 * */
323 Cell.prototype.at_bottom = function () {
333 Cell.prototype.at_bottom = function () {
324 var cm = this.code_mirror;
334 var cm = this.code_mirror;
325 var cursor = cm.getCursor();
335 var cursor = cm.getCursor();
326 if (cursor.line === (cm.lineCount()-1) && cursor.ch === cm.getLine(cursor.line).length) {
336 if (cursor.line === (cm.lineCount()-1) && cursor.ch === cm.getLine(cursor.line).length) {
327 return true;
337 return true;
328 }
338 }
329 return false;
339 return false;
330 };
340 };
331
341
332 /**
342 /**
333 * enter the command mode for the cell
343 * enter the command mode for the cell
334 * @method command_mode
344 * @method command_mode
335 * @return is the action being taken
345 * @return is the action being taken
336 */
346 */
337 Cell.prototype.command_mode = function () {
347 Cell.prototype.command_mode = function () {
338 if (this.mode !== 'command') {
348 if (this.mode !== 'command') {
339 this.element.addClass('command_mode');
349 this.element.addClass('command_mode');
340 this.element.removeClass('edit_mode');
350 this.element.removeClass('edit_mode');
341 this.mode = 'command';
351 this.mode = 'command';
342 return true;
352 return true;
343 } else {
353 } else {
344 return false;
354 return false;
345 }
355 }
346 };
356 };
347
357
348 /**
358 /**
349 * enter the edit mode for the cell
359 * enter the edit mode for the cell
350 * @method command_mode
360 * @method command_mode
351 * @return is the action being taken
361 * @return is the action being taken
352 */
362 */
353 Cell.prototype.edit_mode = function () {
363 Cell.prototype.edit_mode = function () {
354 if (this.mode !== 'edit') {
364 if (this.mode !== 'edit') {
355 this.element.addClass('edit_mode');
365 this.element.addClass('edit_mode');
356 this.element.removeClass('command_mode');
366 this.element.removeClass('command_mode');
357 this.mode = 'edit';
367 this.mode = 'edit';
358 return true;
368 return true;
359 } else {
369 } else {
360 return false;
370 return false;
361 }
371 }
362 };
372 };
363
373
364 /**
374 /**
365 * Focus the cell in the DOM sense
375 * Focus the cell in the DOM sense
366 * @method focus_cell
376 * @method focus_cell
367 */
377 */
368 Cell.prototype.focus_cell = function () {
378 Cell.prototype.focus_cell = function () {
369 this.element.focus();
379 this.element.focus();
370 };
380 };
371
381
372 /**
382 /**
373 * Focus the editor area so a user can type
383 * Focus the editor area so a user can type
374 *
384 *
375 * NOTE: If codemirror is focused via a mouse click event, you don't want to
385 * NOTE: If codemirror is focused via a mouse click event, you don't want to
376 * call this because it will cause a page jump.
386 * call this because it will cause a page jump.
377 * @method focus_editor
387 * @method focus_editor
378 */
388 */
379 Cell.prototype.focus_editor = function () {
389 Cell.prototype.focus_editor = function () {
380 this.refresh();
390 this.refresh();
381 this.code_mirror.focus();
391 this.code_mirror.focus();
382 };
392 };
383
393
384 /**
394 /**
385 * Refresh codemirror instance
395 * Refresh codemirror instance
386 * @method refresh
396 * @method refresh
387 */
397 */
388 Cell.prototype.refresh = function () {
398 Cell.prototype.refresh = function () {
389 this.code_mirror.refresh();
399 if (this.code_mirror) {
400 this.code_mirror.refresh();
401 }
390 };
402 };
391
403
392 /**
404 /**
393 * should be overritten by subclass
405 * should be overritten by subclass
394 * @method get_text
406 * @method get_text
395 */
407 */
396 Cell.prototype.get_text = function () {
408 Cell.prototype.get_text = function () {
397 };
409 };
398
410
399 /**
411 /**
400 * should be overritten by subclass
412 * should be overritten by subclass
401 * @method set_text
413 * @method set_text
402 * @param {string} text
414 * @param {string} text
403 */
415 */
404 Cell.prototype.set_text = function (text) {
416 Cell.prototype.set_text = function (text) {
405 };
417 };
406
418
407 /**
419 /**
408 * should be overritten by subclass
420 * should be overritten by subclass
409 * serialise cell to json.
421 * serialise cell to json.
410 * @method toJSON
422 * @method toJSON
411 **/
423 **/
412 Cell.prototype.toJSON = function () {
424 Cell.prototype.toJSON = function () {
413 var data = {};
425 var data = {};
414 // deepcopy the metadata so copied cells don't share the same object
426 // deepcopy the metadata so copied cells don't share the same object
415 data.metadata = JSON.parse(JSON.stringify(this.metadata));
427 data.metadata = JSON.parse(JSON.stringify(this.metadata));
416 data.cell_type = this.cell_type;
428 data.cell_type = this.cell_type;
417 return data;
429 return data;
418 };
430 };
419
431
420 /**
432 /**
421 * should be overritten by subclass
433 * should be overritten by subclass
422 * @method fromJSON
434 * @method fromJSON
423 **/
435 **/
424 Cell.prototype.fromJSON = function (data) {
436 Cell.prototype.fromJSON = function (data) {
425 if (data.metadata !== undefined) {
437 if (data.metadata !== undefined) {
426 this.metadata = data.metadata;
438 this.metadata = data.metadata;
427 }
439 }
428 };
440 };
429
441
430
442
431 /**
443 /**
432 * can the cell be split into two cells (false if not deletable)
444 * can the cell be split into two cells (false if not deletable)
433 * @method is_splittable
445 * @method is_splittable
434 **/
446 **/
435 Cell.prototype.is_splittable = function () {
447 Cell.prototype.is_splittable = function () {
436 return this.is_deletable();
448 return this.is_deletable();
437 };
449 };
438
450
439
451
440 /**
452 /**
441 * can the cell be merged with other cells (false if not deletable)
453 * can the cell be merged with other cells (false if not deletable)
442 * @method is_mergeable
454 * @method is_mergeable
443 **/
455 **/
444 Cell.prototype.is_mergeable = function () {
456 Cell.prototype.is_mergeable = function () {
445 return this.is_deletable();
457 return this.is_deletable();
446 };
458 };
447
459
448 /**
460 /**
449 * is the cell deletable? only false (undeletable) if
461 * is the cell deletable? only false (undeletable) if
450 * metadata.deletable is explicitly false -- everything else
462 * metadata.deletable is explicitly false -- everything else
451 * counts as true
463 * counts as true
452 *
464 *
453 * @method is_deletable
465 * @method is_deletable
454 **/
466 **/
455 Cell.prototype.is_deletable = function () {
467 Cell.prototype.is_deletable = function () {
456 if (this.metadata.deletable === false) {
468 if (this.metadata.deletable === false) {
457 return false;
469 return false;
458 }
470 }
459 return true;
471 return true;
460 };
472 };
461
473
462 /**
474 /**
463 * @return {String} - the text before the cursor
475 * @return {String} - the text before the cursor
464 * @method get_pre_cursor
476 * @method get_pre_cursor
465 **/
477 **/
466 Cell.prototype.get_pre_cursor = function () {
478 Cell.prototype.get_pre_cursor = function () {
467 var cursor = this.code_mirror.getCursor();
479 var cursor = this.code_mirror.getCursor();
468 var text = this.code_mirror.getRange({line:0, ch:0}, cursor);
480 var text = this.code_mirror.getRange({line:0, ch:0}, cursor);
469 text = text.replace(/^\n+/, '').replace(/\n+$/, '');
481 text = text.replace(/^\n+/, '').replace(/\n+$/, '');
470 return text;
482 return text;
471 };
483 };
472
484
473
485
474 /**
486 /**
475 * @return {String} - the text after the cursor
487 * @return {String} - the text after the cursor
476 * @method get_post_cursor
488 * @method get_post_cursor
477 **/
489 **/
478 Cell.prototype.get_post_cursor = function () {
490 Cell.prototype.get_post_cursor = function () {
479 var cursor = this.code_mirror.getCursor();
491 var cursor = this.code_mirror.getCursor();
480 var last_line_num = this.code_mirror.lineCount()-1;
492 var last_line_num = this.code_mirror.lineCount()-1;
481 var last_line_len = this.code_mirror.getLine(last_line_num).length;
493 var last_line_len = this.code_mirror.getLine(last_line_num).length;
482 var end = {line:last_line_num, ch:last_line_len};
494 var end = {line:last_line_num, ch:last_line_len};
483 var text = this.code_mirror.getRange(cursor, end);
495 var text = this.code_mirror.getRange(cursor, end);
484 text = text.replace(/^\n+/, '').replace(/\n+$/, '');
496 text = text.replace(/^\n+/, '').replace(/\n+$/, '');
485 return text;
497 return text;
486 };
498 };
487
499
488 /**
500 /**
489 * Show/Hide CodeMirror LineNumber
501 * Show/Hide CodeMirror LineNumber
490 * @method show_line_numbers
502 * @method show_line_numbers
491 *
503 *
492 * @param value {Bool} show (true), or hide (false) the line number in CodeMirror
504 * @param value {Bool} show (true), or hide (false) the line number in CodeMirror
493 **/
505 **/
494 Cell.prototype.show_line_numbers = function (value) {
506 Cell.prototype.show_line_numbers = function (value) {
495 this.code_mirror.setOption('lineNumbers', value);
507 this.code_mirror.setOption('lineNumbers', value);
496 this.code_mirror.refresh();
508 this.code_mirror.refresh();
497 };
509 };
498
510
499 /**
511 /**
500 * Toggle CodeMirror LineNumber
512 * Toggle CodeMirror LineNumber
501 * @method toggle_line_numbers
513 * @method toggle_line_numbers
502 **/
514 **/
503 Cell.prototype.toggle_line_numbers = function () {
515 Cell.prototype.toggle_line_numbers = function () {
504 var val = this.code_mirror.getOption('lineNumbers');
516 var val = this.code_mirror.getOption('lineNumbers');
505 this.show_line_numbers(!val);
517 this.show_line_numbers(!val);
506 };
518 };
507
519
508 /**
520 /**
509 * Force codemirror highlight mode
521 * Force codemirror highlight mode
510 * @method force_highlight
522 * @method force_highlight
511 * @param {object} - CodeMirror mode
523 * @param {object} - CodeMirror mode
512 **/
524 **/
513 Cell.prototype.force_highlight = function(mode) {
525 Cell.prototype.force_highlight = function(mode) {
514 this.user_highlight = mode;
526 this.user_highlight = mode;
515 this.auto_highlight();
527 this.auto_highlight();
516 };
528 };
517
529
518 /**
530 /**
519 * Try to autodetect cell highlight mode, or use selected mode
531 * Try to autodetect cell highlight mode, or use selected mode
520 * @methods _auto_highlight
532 * @methods _auto_highlight
521 * @private
533 * @private
522 * @param {String|object|undefined} - CodeMirror mode | 'auto'
534 * @param {String|object|undefined} - CodeMirror mode | 'auto'
523 **/
535 **/
524 Cell.prototype._auto_highlight = function (modes) {
536 Cell.prototype._auto_highlight = function (modes) {
525 //Here we handle manually selected modes
537 //Here we handle manually selected modes
526 var that = this;
538 var that = this;
527 var mode;
539 var mode;
528 if( this.user_highlight !== undefined && this.user_highlight != 'auto' )
540 if( this.user_highlight !== undefined && this.user_highlight != 'auto' )
529 {
541 {
530 mode = this.user_highlight;
542 mode = this.user_highlight;
531 CodeMirror.autoLoadMode(this.code_mirror, mode);
543 CodeMirror.autoLoadMode(this.code_mirror, mode);
532 this.code_mirror.setOption('mode', mode);
544 this.code_mirror.setOption('mode', mode);
533 return;
545 return;
534 }
546 }
535 var current_mode = this.code_mirror.getOption('mode', mode);
547 var current_mode = this.code_mirror.getOption('mode', mode);
536 var first_line = this.code_mirror.getLine(0);
548 var first_line = this.code_mirror.getLine(0);
537 // loop on every pairs
549 // loop on every pairs
538 for(mode in modes) {
550 for(mode in modes) {
539 var regs = modes[mode].reg;
551 var regs = modes[mode].reg;
540 // only one key every time but regexp can't be keys...
552 // only one key every time but regexp can't be keys...
541 for(var i=0; i<regs.length; i++) {
553 for(var i=0; i<regs.length; i++) {
542 // here we handle non magic_modes
554 // here we handle non magic_modes
543 if(first_line.match(regs[i]) !== null) {
555 if(first_line.match(regs[i]) !== null) {
544 if(current_mode == mode){
556 if(current_mode == mode){
545 return;
557 return;
546 }
558 }
547 if (mode.search('magic_') !== 0) {
559 if (mode.search('magic_') !== 0) {
548 utils.requireCodeMirrorMode(mode, function () {
560 utils.requireCodeMirrorMode(mode, function () {
549 that.code_mirror.setOption('mode', mode);
561 that.code_mirror.setOption('mode', mode);
550 });
562 });
551 return;
563 return;
552 }
564 }
553 var open = modes[mode].open || "%%";
565 var open = modes[mode].open || "%%";
554 var close = modes[mode].close || "%%end";
566 var close = modes[mode].close || "%%end";
555 var magic_mode = mode;
567 var magic_mode = mode;
556 mode = magic_mode.substr(6);
568 mode = magic_mode.substr(6);
557 if(current_mode == magic_mode){
569 if(current_mode == magic_mode){
558 return;
570 return;
559 }
571 }
560 utils.requireCodeMirrorMode(mode, function () {
572 utils.requireCodeMirrorMode(mode, function () {
561 // create on the fly a mode that switch between
573 // create on the fly a mode that switch between
562 // plain/text and something else, otherwise `%%` is
574 // plain/text and something else, otherwise `%%` is
563 // source of some highlight issues.
575 // source of some highlight issues.
564 CodeMirror.defineMode(magic_mode, function(config) {
576 CodeMirror.defineMode(magic_mode, function(config) {
565 return CodeMirror.multiplexingMode(
577 return CodeMirror.multiplexingMode(
566 CodeMirror.getMode(config, 'text/plain'),
578 CodeMirror.getMode(config, 'text/plain'),
567 // always set something on close
579 // always set something on close
568 {open: open, close: close,
580 {open: open, close: close,
569 mode: CodeMirror.getMode(config, mode),
581 mode: CodeMirror.getMode(config, mode),
570 delimStyle: "delimit"
582 delimStyle: "delimit"
571 }
583 }
572 );
584 );
573 });
585 });
574 that.code_mirror.setOption('mode', magic_mode);
586 that.code_mirror.setOption('mode', magic_mode);
575 });
587 });
576 return;
588 return;
577 }
589 }
578 }
590 }
579 }
591 }
580 // fallback on default
592 // fallback on default
581 var default_mode;
593 var default_mode;
582 try {
594 try {
583 default_mode = this._options.cm_config.mode;
595 default_mode = this._options.cm_config.mode;
584 } catch(e) {
596 } catch(e) {
585 default_mode = 'text/plain';
597 default_mode = 'text/plain';
586 }
598 }
587 if( current_mode === default_mode){
599 if( current_mode === default_mode){
588 return;
600 return;
589 }
601 }
590 this.code_mirror.setOption('mode', default_mode);
602 this.code_mirror.setOption('mode', default_mode);
591 };
603 };
592
604
605 var UnrecognizedCell = function (options) {
606 /** Constructor for unrecognized cells */
607 Cell.apply(this, arguments);
608 this.cell_type = 'unrecognized';
609 this.celltoolbar = null;
610 this.data = {};
611
612 Object.seal(this);
613 };
614
615 UnrecognizedCell.prototype = Object.create(Cell.prototype);
616
617
618 // cannot merge or split unrecognized cells
619 UnrecognizedCell.prototype.is_mergeable = function () {
620 return false;
621 };
622
623 UnrecognizedCell.prototype.is_splittable = function () {
624 return false;
625 };
626
627 UnrecognizedCell.prototype.toJSON = function () {
628 // deepcopy the metadata so copied cells don't share the same object
629 return JSON.parse(JSON.stringify(this.data));
630 };
631
632 UnrecognizedCell.prototype.fromJSON = function (data) {
633 this.data = data;
634 if (data.metadata !== undefined) {
635 this.metadata = data.metadata;
636 } else {
637 data.metadata = this.metadata;
638 }
639 this.element.find('.inner_cell').find("a").text("Unrecognized cell type: " + data.cell_type);
640 };
641
642 UnrecognizedCell.prototype.create_element = function () {
643 Cell.prototype.create_element.apply(this, arguments);
644 var cell = this.element = $("<div>").addClass('cell unrecognized_cell');
645 cell.attr('tabindex','2');
646
647 var prompt = $('<div/>').addClass('prompt input_prompt');
648 cell.append(prompt);
649 var inner_cell = $('<div/>').addClass('inner_cell');
650 inner_cell.append(
651 $("<a>")
652 .attr("href", "#")
653 .text("Unrecognized cell type")
654 );
655 cell.append(inner_cell);
656 this.element = cell;
657 };
658
659 UnrecognizedCell.prototype.bind_events = function () {
660 Cell.prototype.bind_events.apply(this, arguments);
661 var cell = this;
662
663 this.element.find('.inner_cell').find("a").click(function () {
664 cell.events.trigger('unrecognized_cell.Cell', {cell: cell})
665 });
666 };
667
593 // Backwards compatibility.
668 // Backwards compatibility.
594 IPython.Cell = Cell;
669 IPython.Cell = Cell;
595
670
596 return {'Cell': Cell};
671 return {
672 Cell: Cell,
673 UnrecognizedCell: UnrecognizedCell
674 };
597 });
675 });
@@ -1,2495 +1,2510 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 'notebook/js/cell',
9 'notebook/js/textcell',
10 'notebook/js/textcell',
10 'notebook/js/codecell',
11 'notebook/js/codecell',
11 'services/sessions/session',
12 'services/sessions/session',
12 'notebook/js/celltoolbar',
13 'notebook/js/celltoolbar',
13 'components/marked/lib/marked',
14 'components/marked/lib/marked',
14 'codemirror/lib/codemirror',
15 'codemirror/lib/codemirror',
15 'codemirror/addon/runmode/runmode',
16 'codemirror/addon/runmode/runmode',
16 'notebook/js/mathjaxutils',
17 'notebook/js/mathjaxutils',
17 'base/js/keyboard',
18 'base/js/keyboard',
18 'notebook/js/tooltip',
19 'notebook/js/tooltip',
19 'notebook/js/celltoolbarpresets/default',
20 'notebook/js/celltoolbarpresets/default',
20 'notebook/js/celltoolbarpresets/rawcell',
21 'notebook/js/celltoolbarpresets/rawcell',
21 'notebook/js/celltoolbarpresets/slideshow',
22 'notebook/js/celltoolbarpresets/slideshow',
22 'notebook/js/scrollmanager'
23 'notebook/js/scrollmanager'
23 ], function (
24 ], function (
24 IPython,
25 IPython,
25 $,
26 $,
26 utils,
27 utils,
27 dialog,
28 dialog,
28 textcell,
29 cellmod,
29 codecell,
30 textcell,
31 codecell,
30 session,
32 session,
31 celltoolbar,
33 celltoolbar,
32 marked,
34 marked,
33 CodeMirror,
35 CodeMirror,
34 runMode,
36 runMode,
35 mathjaxutils,
37 mathjaxutils,
36 keyboard,
38 keyboard,
37 tooltip,
39 tooltip,
38 default_celltoolbar,
40 default_celltoolbar,
39 rawcell_celltoolbar,
41 rawcell_celltoolbar,
40 slideshow_celltoolbar,
42 slideshow_celltoolbar,
41 scrollmanager
43 scrollmanager
42 ) {
44 ) {
43 "use strict";
45 "use strict";
44
46
45 var Notebook = function (selector, options) {
47 var Notebook = function (selector, options) {
46 // Constructor
48 // Constructor
47 //
49 //
48 // A notebook contains and manages cells.
50 // A notebook contains and manages cells.
49 //
51 //
50 // Parameters:
52 // Parameters:
51 // selector: string
53 // selector: string
52 // options: dictionary
54 // options: dictionary
53 // Dictionary of keyword arguments.
55 // Dictionary of keyword arguments.
54 // events: $(Events) instance
56 // events: $(Events) instance
55 // keyboard_manager: KeyboardManager instance
57 // keyboard_manager: KeyboardManager instance
56 // contents: Contents instance
58 // contents: Contents instance
57 // save_widget: SaveWidget instance
59 // save_widget: SaveWidget instance
58 // config: dictionary
60 // config: dictionary
59 // base_url : string
61 // base_url : string
60 // notebook_path : string
62 // notebook_path : string
61 // notebook_name : string
63 // notebook_name : string
62 this.config = utils.mergeopt(Notebook, options.config);
64 this.config = utils.mergeopt(Notebook, options.config);
63 this.base_url = options.base_url;
65 this.base_url = options.base_url;
64 this.notebook_path = options.notebook_path;
66 this.notebook_path = options.notebook_path;
65 this.notebook_name = options.notebook_name;
67 this.notebook_name = options.notebook_name;
66 this.events = options.events;
68 this.events = options.events;
67 this.keyboard_manager = options.keyboard_manager;
69 this.keyboard_manager = options.keyboard_manager;
68 this.contents = options.contents;
70 this.contents = options.contents;
69 this.save_widget = options.save_widget;
71 this.save_widget = options.save_widget;
70 this.tooltip = new tooltip.Tooltip(this.events);
72 this.tooltip = new tooltip.Tooltip(this.events);
71 this.ws_url = options.ws_url;
73 this.ws_url = options.ws_url;
72 this._session_starting = false;
74 this._session_starting = false;
73 this.default_cell_type = this.config.default_cell_type || 'code';
75 this.default_cell_type = this.config.default_cell_type || 'code';
74
76
75 // Create default scroll manager.
77 // Create default scroll manager.
76 this.scroll_manager = new scrollmanager.ScrollManager(this);
78 this.scroll_manager = new scrollmanager.ScrollManager(this);
77
79
78 // TODO: This code smells (and the other `= this` line a couple lines down)
80 // TODO: This code smells (and the other `= this` line a couple lines down)
79 // We need a better way to deal with circular instance references.
81 // We need a better way to deal with circular instance references.
80 this.keyboard_manager.notebook = this;
82 this.keyboard_manager.notebook = this;
81 this.save_widget.notebook = this;
83 this.save_widget.notebook = this;
82
84
83 mathjaxutils.init();
85 mathjaxutils.init();
84
86
85 if (marked) {
87 if (marked) {
86 marked.setOptions({
88 marked.setOptions({
87 gfm : true,
89 gfm : true,
88 tables: true,
90 tables: true,
89 // FIXME: probably want central config for CodeMirror theme when we have js config
91 // FIXME: probably want central config for CodeMirror theme when we have js config
90 langPrefix: "cm-s-ipython language-",
92 langPrefix: "cm-s-ipython language-",
91 highlight: function(code, lang, callback) {
93 highlight: function(code, lang, callback) {
92 if (!lang) {
94 if (!lang) {
93 // no language, no highlight
95 // no language, no highlight
94 if (callback) {
96 if (callback) {
95 callback(null, code);
97 callback(null, code);
96 return;
98 return;
97 } else {
99 } else {
98 return code;
100 return code;
99 }
101 }
100 }
102 }
101 utils.requireCodeMirrorMode(lang, function () {
103 utils.requireCodeMirrorMode(lang, function () {
102 var el = document.createElement("div");
104 var el = document.createElement("div");
103 var mode = CodeMirror.getMode({}, lang);
105 var mode = CodeMirror.getMode({}, lang);
104 if (!mode) {
106 if (!mode) {
105 console.log("No CodeMirror mode: " + lang);
107 console.log("No CodeMirror mode: " + lang);
106 callback(null, code);
108 callback(null, code);
107 return;
109 return;
108 }
110 }
109 try {
111 try {
110 CodeMirror.runMode(code, mode, el);
112 CodeMirror.runMode(code, mode, el);
111 callback(null, el.innerHTML);
113 callback(null, el.innerHTML);
112 } catch (err) {
114 } catch (err) {
113 console.log("Failed to highlight " + lang + " code", err);
115 console.log("Failed to highlight " + lang + " code", err);
114 callback(err, code);
116 callback(err, code);
115 }
117 }
116 }, function (err) {
118 }, function (err) {
117 console.log("No CodeMirror mode: " + lang);
119 console.log("No CodeMirror mode: " + lang);
118 callback(err, code);
120 callback(err, code);
119 });
121 });
120 }
122 }
121 });
123 });
122 }
124 }
123
125
124 this.element = $(selector);
126 this.element = $(selector);
125 this.element.scroll();
127 this.element.scroll();
126 this.element.data("notebook", this);
128 this.element.data("notebook", this);
127 this.next_prompt_number = 1;
129 this.next_prompt_number = 1;
128 this.session = null;
130 this.session = null;
129 this.kernel = null;
131 this.kernel = null;
130 this.clipboard = null;
132 this.clipboard = null;
131 this.undelete_backup = null;
133 this.undelete_backup = null;
132 this.undelete_index = null;
134 this.undelete_index = null;
133 this.undelete_below = false;
135 this.undelete_below = false;
134 this.paste_enabled = false;
136 this.paste_enabled = false;
135 this.writable = false;
137 this.writable = false;
136 // It is important to start out in command mode to match the intial mode
138 // It is important to start out in command mode to match the intial mode
137 // of the KeyboardManager.
139 // of the KeyboardManager.
138 this.mode = 'command';
140 this.mode = 'command';
139 this.set_dirty(false);
141 this.set_dirty(false);
140 this.metadata = {};
142 this.metadata = {};
141 this._checkpoint_after_save = false;
143 this._checkpoint_after_save = false;
142 this.last_checkpoint = null;
144 this.last_checkpoint = null;
143 this.checkpoints = [];
145 this.checkpoints = [];
144 this.autosave_interval = 0;
146 this.autosave_interval = 0;
145 this.autosave_timer = null;
147 this.autosave_timer = null;
146 // autosave *at most* every two minutes
148 // autosave *at most* every two minutes
147 this.minimum_autosave_interval = 120000;
149 this.minimum_autosave_interval = 120000;
148 this.notebook_name_blacklist_re = /[\/\\:]/;
150 this.notebook_name_blacklist_re = /[\/\\:]/;
149 this.nbformat = 4; // Increment this when changing the nbformat
151 this.nbformat = 4; // Increment this when changing the nbformat
150 this.nbformat_minor = 0; // Increment this when changing the nbformat
152 this.nbformat_minor = this.current_nbformat_minor = 0; // Increment this when changing the nbformat
151 this.codemirror_mode = 'ipython';
153 this.codemirror_mode = 'ipython';
152 this.create_elements();
154 this.create_elements();
153 this.bind_events();
155 this.bind_events();
154 this.kernel_selector = null;
156 this.kernel_selector = null;
155 this.dirty = null;
157 this.dirty = null;
156 this.trusted = null;
158 this.trusted = null;
157 this._fully_loaded = false;
159 this._fully_loaded = false;
158
160
159 // Trigger cell toolbar registration.
161 // Trigger cell toolbar registration.
160 default_celltoolbar.register(this);
162 default_celltoolbar.register(this);
161 rawcell_celltoolbar.register(this);
163 rawcell_celltoolbar.register(this);
162 slideshow_celltoolbar.register(this);
164 slideshow_celltoolbar.register(this);
163
165
164 // prevent assign to miss-typed properties.
166 // prevent assign to miss-typed properties.
165 Object.seal(this);
167 Object.seal(this);
166 };
168 };
167
169
168 Notebook.options_default = {
170 Notebook.options_default = {
169 // can be any cell type, or the special values of
171 // can be any cell type, or the special values of
170 // 'above', 'below', or 'selected' to get the value from another cell.
172 // 'above', 'below', or 'selected' to get the value from another cell.
171 Notebook: {
173 Notebook: {
172 default_cell_type: 'code'
174 default_cell_type: 'code'
173 }
175 }
174 };
176 };
175
177
176
178
177 /**
179 /**
178 * Create an HTML and CSS representation of the notebook.
180 * Create an HTML and CSS representation of the notebook.
179 *
181 *
180 * @method create_elements
182 * @method create_elements
181 */
183 */
182 Notebook.prototype.create_elements = function () {
184 Notebook.prototype.create_elements = function () {
183 var that = this;
185 var that = this;
184 this.element.attr('tabindex','-1');
186 this.element.attr('tabindex','-1');
185 this.container = $("<div/>").addClass("container").attr("id", "notebook-container");
187 this.container = $("<div/>").addClass("container").attr("id", "notebook-container");
186 // We add this end_space div to the end of the notebook div to:
188 // We add this end_space div to the end of the notebook div to:
187 // i) provide a margin between the last cell and the end of the notebook
189 // i) provide a margin between the last cell and the end of the notebook
188 // ii) to prevent the div from scrolling up when the last cell is being
190 // ii) to prevent the div from scrolling up when the last cell is being
189 // edited, but is too low on the page, which browsers will do automatically.
191 // edited, but is too low on the page, which browsers will do automatically.
190 var end_space = $('<div/>').addClass('end_space');
192 var end_space = $('<div/>').addClass('end_space');
191 end_space.dblclick(function (e) {
193 end_space.dblclick(function (e) {
192 var ncells = that.ncells();
194 var ncells = that.ncells();
193 that.insert_cell_below('code',ncells-1);
195 that.insert_cell_below('code',ncells-1);
194 });
196 });
195 this.element.append(this.container);
197 this.element.append(this.container);
196 this.container.append(end_space);
198 this.container.append(end_space);
197 };
199 };
198
200
199 /**
201 /**
200 * Bind JavaScript events: key presses and custom IPython events.
202 * Bind JavaScript events: key presses and custom IPython events.
201 *
203 *
202 * @method bind_events
204 * @method bind_events
203 */
205 */
204 Notebook.prototype.bind_events = function () {
206 Notebook.prototype.bind_events = function () {
205 var that = this;
207 var that = this;
206
208
207 this.events.on('set_next_input.Notebook', function (event, data) {
209 this.events.on('set_next_input.Notebook', function (event, data) {
208 var index = that.find_cell_index(data.cell);
210 var index = that.find_cell_index(data.cell);
209 var new_cell = that.insert_cell_below('code',index);
211 var new_cell = that.insert_cell_below('code',index);
210 new_cell.set_text(data.text);
212 new_cell.set_text(data.text);
211 that.dirty = true;
213 that.dirty = true;
212 });
214 });
213
215
216 this.events.on('unrecognized_cell.Cell', function () {
217 that.warn_nbformat_minor();
218 });
219
220 this.events.on('unrecognized_output.OutputArea', function () {
221 that.warn_nbformat_minor();
222 });
223
214 this.events.on('set_dirty.Notebook', function (event, data) {
224 this.events.on('set_dirty.Notebook', function (event, data) {
215 that.dirty = data.value;
225 that.dirty = data.value;
216 });
226 });
217
227
218 this.events.on('trust_changed.Notebook', function (event, trusted) {
228 this.events.on('trust_changed.Notebook', function (event, trusted) {
219 that.trusted = trusted;
229 that.trusted = trusted;
220 });
230 });
221
231
222 this.events.on('select.Cell', function (event, data) {
232 this.events.on('select.Cell', function (event, data) {
223 var index = that.find_cell_index(data.cell);
233 var index = that.find_cell_index(data.cell);
224 that.select(index);
234 that.select(index);
225 });
235 });
226
236
227 this.events.on('edit_mode.Cell', function (event, data) {
237 this.events.on('edit_mode.Cell', function (event, data) {
228 that.handle_edit_mode(data.cell);
238 that.handle_edit_mode(data.cell);
229 });
239 });
230
240
231 this.events.on('command_mode.Cell', function (event, data) {
241 this.events.on('command_mode.Cell', function (event, data) {
232 that.handle_command_mode(data.cell);
242 that.handle_command_mode(data.cell);
233 });
243 });
234
244
235 this.events.on('spec_changed.Kernel', function(event, data) {
245 this.events.on('spec_changed.Kernel', function(event, data) {
236 that.metadata.kernelspec =
246 that.metadata.kernelspec =
237 {name: data.name, display_name: data.display_name};
247 {name: data.name, display_name: data.display_name};
238 });
248 });
239
249
240 this.events.on('kernel_ready.Kernel', function(event, data) {
250 this.events.on('kernel_ready.Kernel', function(event, data) {
241 var kinfo = data.kernel.info_reply;
251 var kinfo = data.kernel.info_reply;
242 var langinfo = kinfo.language_info || {};
252 var langinfo = kinfo.language_info || {};
243 if (!langinfo.name) langinfo.name = kinfo.language;
253 if (!langinfo.name) langinfo.name = kinfo.language;
244
254
245 that.metadata.language_info = langinfo;
255 that.metadata.language_info = langinfo;
246 // Mode 'null' should be plain, unhighlighted text.
256 // Mode 'null' should be plain, unhighlighted text.
247 var cm_mode = langinfo.codemirror_mode || langinfo.language || 'null';
257 var cm_mode = langinfo.codemirror_mode || langinfo.language || 'null';
248 that.set_codemirror_mode(cm_mode);
258 that.set_codemirror_mode(cm_mode);
249 });
259 });
250
260
251 var collapse_time = function (time) {
261 var collapse_time = function (time) {
252 var app_height = $('#ipython-main-app').height(); // content height
262 var app_height = $('#ipython-main-app').height(); // content height
253 var splitter_height = $('div#pager_splitter').outerHeight(true);
263 var splitter_height = $('div#pager_splitter').outerHeight(true);
254 var new_height = app_height - splitter_height;
264 var new_height = app_height - splitter_height;
255 that.element.animate({height : new_height + 'px'}, time);
265 that.element.animate({height : new_height + 'px'}, time);
256 };
266 };
257
267
258 this.element.bind('collapse_pager', function (event, extrap) {
268 this.element.bind('collapse_pager', function (event, extrap) {
259 var time = (extrap !== undefined) ? ((extrap.duration !== undefined ) ? extrap.duration : 'fast') : 'fast';
269 var time = (extrap !== undefined) ? ((extrap.duration !== undefined ) ? extrap.duration : 'fast') : 'fast';
260 collapse_time(time);
270 collapse_time(time);
261 });
271 });
262
272
263 var expand_time = function (time) {
273 var expand_time = function (time) {
264 var app_height = $('#ipython-main-app').height(); // content height
274 var app_height = $('#ipython-main-app').height(); // content height
265 var splitter_height = $('div#pager_splitter').outerHeight(true);
275 var splitter_height = $('div#pager_splitter').outerHeight(true);
266 var pager_height = $('div#pager').outerHeight(true);
276 var pager_height = $('div#pager').outerHeight(true);
267 var new_height = app_height - pager_height - splitter_height;
277 var new_height = app_height - pager_height - splitter_height;
268 that.element.animate({height : new_height + 'px'}, time);
278 that.element.animate({height : new_height + 'px'}, time);
269 };
279 };
270
280
271 this.element.bind('expand_pager', function (event, extrap) {
281 this.element.bind('expand_pager', function (event, extrap) {
272 var time = (extrap !== undefined) ? ((extrap.duration !== undefined ) ? extrap.duration : 'fast') : 'fast';
282 var time = (extrap !== undefined) ? ((extrap.duration !== undefined ) ? extrap.duration : 'fast') : 'fast';
273 expand_time(time);
283 expand_time(time);
274 });
284 });
275
285
276 // Firefox 22 broke $(window).on("beforeunload")
286 // Firefox 22 broke $(window).on("beforeunload")
277 // I'm not sure why or how.
287 // I'm not sure why or how.
278 window.onbeforeunload = function (e) {
288 window.onbeforeunload = function (e) {
279 // TODO: Make killing the kernel configurable.
289 // TODO: Make killing the kernel configurable.
280 var kill_kernel = false;
290 var kill_kernel = false;
281 if (kill_kernel) {
291 if (kill_kernel) {
282 that.session.delete();
292 that.session.delete();
283 }
293 }
284 // if we are autosaving, trigger an autosave on nav-away.
294 // if we are autosaving, trigger an autosave on nav-away.
285 // still warn, because if we don't the autosave may fail.
295 // still warn, because if we don't the autosave may fail.
286 if (that.dirty) {
296 if (that.dirty) {
287 if ( that.autosave_interval ) {
297 if ( that.autosave_interval ) {
288 // schedule autosave in a timeout
298 // schedule autosave in a timeout
289 // this gives you a chance to forcefully discard changes
299 // this gives you a chance to forcefully discard changes
290 // by reloading the page if you *really* want to.
300 // by reloading the page if you *really* want to.
291 // the timer doesn't start until you *dismiss* the dialog.
301 // the timer doesn't start until you *dismiss* the dialog.
292 setTimeout(function () {
302 setTimeout(function () {
293 if (that.dirty) {
303 if (that.dirty) {
294 that.save_notebook();
304 that.save_notebook();
295 }
305 }
296 }, 1000);
306 }, 1000);
297 return "Autosave in progress, latest changes may be lost.";
307 return "Autosave in progress, latest changes may be lost.";
298 } else {
308 } else {
299 return "Unsaved changes will be lost.";
309 return "Unsaved changes will be lost.";
300 }
310 }
301 }
311 }
302 // Null is the *only* return value that will make the browser not
312 // Null is the *only* return value that will make the browser not
303 // pop up the "don't leave" dialog.
313 // pop up the "don't leave" dialog.
304 return null;
314 return null;
305 };
315 };
306 };
316 };
317
318 Notebook.prototype.warn_nbformat_minor = function (event) {
319 // trigger a warning dialog about missing functionality from newer minor versions
320 var v = 'v' + this.nbformat + '.';
321 var orig_vs = v + this.nbformat_minor;
322 var this_vs = v + this.current_nbformat_minor;
323 var msg = "This notebook is version " + orig_vs + ", but we only fully support up to " +
324 this_vs + ". You can still work with this notebook, but cell and output types " +
325 "introduced in later notebook versions will not be available.";
326
327 dialog.modal({
328 notebook: this,
329 keyboard_manager: this.keyboard_manager,
330 title : "Newer Notebook",
331 body : msg,
332 buttons : {
333 OK : {
334 "class" : "btn-danger"
335 }
336 }
337 });
338 }
307
339
308 /**
340 /**
309 * Set the dirty flag, and trigger the set_dirty.Notebook event
341 * Set the dirty flag, and trigger the set_dirty.Notebook event
310 *
342 *
311 * @method set_dirty
343 * @method set_dirty
312 */
344 */
313 Notebook.prototype.set_dirty = function (value) {
345 Notebook.prototype.set_dirty = function (value) {
314 if (value === undefined) {
346 if (value === undefined) {
315 value = true;
347 value = true;
316 }
348 }
317 if (this.dirty == value) {
349 if (this.dirty == value) {
318 return;
350 return;
319 }
351 }
320 this.events.trigger('set_dirty.Notebook', {value: value});
352 this.events.trigger('set_dirty.Notebook', {value: value});
321 };
353 };
322
354
323 /**
355 /**
324 * Scroll the top of the page to a given cell.
356 * Scroll the top of the page to a given cell.
325 *
357 *
326 * @method scroll_to_cell
358 * @method scroll_to_cell
327 * @param {Number} cell_number An index of the cell to view
359 * @param {Number} cell_number An index of the cell to view
328 * @param {Number} time Animation time in milliseconds
360 * @param {Number} time Animation time in milliseconds
329 * @return {Number} Pixel offset from the top of the container
361 * @return {Number} Pixel offset from the top of the container
330 */
362 */
331 Notebook.prototype.scroll_to_cell = function (cell_number, time) {
363 Notebook.prototype.scroll_to_cell = function (cell_number, time) {
332 var cells = this.get_cells();
364 var cells = this.get_cells();
333 time = time || 0;
365 time = time || 0;
334 cell_number = Math.min(cells.length-1,cell_number);
366 cell_number = Math.min(cells.length-1,cell_number);
335 cell_number = Math.max(0 ,cell_number);
367 cell_number = Math.max(0 ,cell_number);
336 var scroll_value = cells[cell_number].element.position().top-cells[0].element.position().top ;
368 var scroll_value = cells[cell_number].element.position().top-cells[0].element.position().top ;
337 this.element.animate({scrollTop:scroll_value}, time);
369 this.element.animate({scrollTop:scroll_value}, time);
338 return scroll_value;
370 return scroll_value;
339 };
371 };
340
372
341 /**
373 /**
342 * Scroll to the bottom of the page.
374 * Scroll to the bottom of the page.
343 *
375 *
344 * @method scroll_to_bottom
376 * @method scroll_to_bottom
345 */
377 */
346 Notebook.prototype.scroll_to_bottom = function () {
378 Notebook.prototype.scroll_to_bottom = function () {
347 this.element.animate({scrollTop:this.element.get(0).scrollHeight}, 0);
379 this.element.animate({scrollTop:this.element.get(0).scrollHeight}, 0);
348 };
380 };
349
381
350 /**
382 /**
351 * Scroll to the top of the page.
383 * Scroll to the top of the page.
352 *
384 *
353 * @method scroll_to_top
385 * @method scroll_to_top
354 */
386 */
355 Notebook.prototype.scroll_to_top = function () {
387 Notebook.prototype.scroll_to_top = function () {
356 this.element.animate({scrollTop:0}, 0);
388 this.element.animate({scrollTop:0}, 0);
357 };
389 };
358
390
359 // Edit Notebook metadata
391 // Edit Notebook metadata
360
392
361 Notebook.prototype.edit_metadata = function () {
393 Notebook.prototype.edit_metadata = function () {
362 var that = this;
394 var that = this;
363 dialog.edit_metadata({
395 dialog.edit_metadata({
364 md: this.metadata,
396 md: this.metadata,
365 callback: function (md) {
397 callback: function (md) {
366 that.metadata = md;
398 that.metadata = md;
367 },
399 },
368 name: 'Notebook',
400 name: 'Notebook',
369 notebook: this,
401 notebook: this,
370 keyboard_manager: this.keyboard_manager});
402 keyboard_manager: this.keyboard_manager});
371 };
403 };
372
404
373 // Cell indexing, retrieval, etc.
405 // Cell indexing, retrieval, etc.
374
406
375 /**
407 /**
376 * Get all cell elements in the notebook.
408 * Get all cell elements in the notebook.
377 *
409 *
378 * @method get_cell_elements
410 * @method get_cell_elements
379 * @return {jQuery} A selector of all cell elements
411 * @return {jQuery} A selector of all cell elements
380 */
412 */
381 Notebook.prototype.get_cell_elements = function () {
413 Notebook.prototype.get_cell_elements = function () {
382 return this.container.find(".cell").not('.cell .cell');
414 return this.container.find(".cell").not('.cell .cell');
383 };
415 };
384
416
385 /**
417 /**
386 * Get a particular cell element.
418 * Get a particular cell element.
387 *
419 *
388 * @method get_cell_element
420 * @method get_cell_element
389 * @param {Number} index An index of a cell to select
421 * @param {Number} index An index of a cell to select
390 * @return {jQuery} A selector of the given cell.
422 * @return {jQuery} A selector of the given cell.
391 */
423 */
392 Notebook.prototype.get_cell_element = function (index) {
424 Notebook.prototype.get_cell_element = function (index) {
393 var result = null;
425 var result = null;
394 var e = this.get_cell_elements().eq(index);
426 var e = this.get_cell_elements().eq(index);
395 if (e.length !== 0) {
427 if (e.length !== 0) {
396 result = e;
428 result = e;
397 }
429 }
398 return result;
430 return result;
399 };
431 };
400
432
401 /**
433 /**
402 * Try to get a particular cell by msg_id.
434 * Try to get a particular cell by msg_id.
403 *
435 *
404 * @method get_msg_cell
436 * @method get_msg_cell
405 * @param {String} msg_id A message UUID
437 * @param {String} msg_id A message UUID
406 * @return {Cell} Cell or null if no cell was found.
438 * @return {Cell} Cell or null if no cell was found.
407 */
439 */
408 Notebook.prototype.get_msg_cell = function (msg_id) {
440 Notebook.prototype.get_msg_cell = function (msg_id) {
409 return codecell.CodeCell.msg_cells[msg_id] || null;
441 return codecell.CodeCell.msg_cells[msg_id] || null;
410 };
442 };
411
443
412 /**
444 /**
413 * Count the cells in this notebook.
445 * Count the cells in this notebook.
414 *
446 *
415 * @method ncells
447 * @method ncells
416 * @return {Number} The number of cells in this notebook
448 * @return {Number} The number of cells in this notebook
417 */
449 */
418 Notebook.prototype.ncells = function () {
450 Notebook.prototype.ncells = function () {
419 return this.get_cell_elements().length;
451 return this.get_cell_elements().length;
420 };
452 };
421
453
422 /**
454 /**
423 * Get all Cell objects in this notebook.
455 * Get all Cell objects in this notebook.
424 *
456 *
425 * @method get_cells
457 * @method get_cells
426 * @return {Array} This notebook's Cell objects
458 * @return {Array} This notebook's Cell objects
427 */
459 */
428 // TODO: we are often calling cells as cells()[i], which we should optimize
460 // TODO: we are often calling cells as cells()[i], which we should optimize
429 // to cells(i) or a new method.
461 // to cells(i) or a new method.
430 Notebook.prototype.get_cells = function () {
462 Notebook.prototype.get_cells = function () {
431 return this.get_cell_elements().toArray().map(function (e) {
463 return this.get_cell_elements().toArray().map(function (e) {
432 return $(e).data("cell");
464 return $(e).data("cell");
433 });
465 });
434 };
466 };
435
467
436 /**
468 /**
437 * Get a Cell object from this notebook.
469 * Get a Cell object from this notebook.
438 *
470 *
439 * @method get_cell
471 * @method get_cell
440 * @param {Number} index An index of a cell to retrieve
472 * @param {Number} index An index of a cell to retrieve
441 * @return {Cell} Cell or null if no cell was found.
473 * @return {Cell} Cell or null if no cell was found.
442 */
474 */
443 Notebook.prototype.get_cell = function (index) {
475 Notebook.prototype.get_cell = function (index) {
444 var result = null;
476 var result = null;
445 var ce = this.get_cell_element(index);
477 var ce = this.get_cell_element(index);
446 if (ce !== null) {
478 if (ce !== null) {
447 result = ce.data('cell');
479 result = ce.data('cell');
448 }
480 }
449 return result;
481 return result;
450 };
482 };
451
483
452 /**
484 /**
453 * Get the cell below a given cell.
485 * Get the cell below a given cell.
454 *
486 *
455 * @method get_next_cell
487 * @method get_next_cell
456 * @param {Cell} cell The provided cell
488 * @param {Cell} cell The provided cell
457 * @return {Cell} the next cell or null if no cell was found.
489 * @return {Cell} the next cell or null if no cell was found.
458 */
490 */
459 Notebook.prototype.get_next_cell = function (cell) {
491 Notebook.prototype.get_next_cell = function (cell) {
460 var result = null;
492 var result = null;
461 var index = this.find_cell_index(cell);
493 var index = this.find_cell_index(cell);
462 if (this.is_valid_cell_index(index+1)) {
494 if (this.is_valid_cell_index(index+1)) {
463 result = this.get_cell(index+1);
495 result = this.get_cell(index+1);
464 }
496 }
465 return result;
497 return result;
466 };
498 };
467
499
468 /**
500 /**
469 * Get the cell above a given cell.
501 * Get the cell above a given cell.
470 *
502 *
471 * @method get_prev_cell
503 * @method get_prev_cell
472 * @param {Cell} cell The provided cell
504 * @param {Cell} cell The provided cell
473 * @return {Cell} The previous cell or null if no cell was found.
505 * @return {Cell} The previous cell or null if no cell was found.
474 */
506 */
475 Notebook.prototype.get_prev_cell = function (cell) {
507 Notebook.prototype.get_prev_cell = function (cell) {
476 var result = null;
508 var result = null;
477 var index = this.find_cell_index(cell);
509 var index = this.find_cell_index(cell);
478 if (index !== null && index > 0) {
510 if (index !== null && index > 0) {
479 result = this.get_cell(index-1);
511 result = this.get_cell(index-1);
480 }
512 }
481 return result;
513 return result;
482 };
514 };
483
515
484 /**
516 /**
485 * Get the numeric index of a given cell.
517 * Get the numeric index of a given cell.
486 *
518 *
487 * @method find_cell_index
519 * @method find_cell_index
488 * @param {Cell} cell The provided cell
520 * @param {Cell} cell The provided cell
489 * @return {Number} The cell's numeric index or null if no cell was found.
521 * @return {Number} The cell's numeric index or null if no cell was found.
490 */
522 */
491 Notebook.prototype.find_cell_index = function (cell) {
523 Notebook.prototype.find_cell_index = function (cell) {
492 var result = null;
524 var result = null;
493 this.get_cell_elements().filter(function (index) {
525 this.get_cell_elements().filter(function (index) {
494 if ($(this).data("cell") === cell) {
526 if ($(this).data("cell") === cell) {
495 result = index;
527 result = index;
496 }
528 }
497 });
529 });
498 return result;
530 return result;
499 };
531 };
500
532
501 /**
533 /**
502 * Get a given index , or the selected index if none is provided.
534 * Get a given index , or the selected index if none is provided.
503 *
535 *
504 * @method index_or_selected
536 * @method index_or_selected
505 * @param {Number} index A cell's index
537 * @param {Number} index A cell's index
506 * @return {Number} The given index, or selected index if none is provided.
538 * @return {Number} The given index, or selected index if none is provided.
507 */
539 */
508 Notebook.prototype.index_or_selected = function (index) {
540 Notebook.prototype.index_or_selected = function (index) {
509 var i;
541 var i;
510 if (index === undefined || index === null) {
542 if (index === undefined || index === null) {
511 i = this.get_selected_index();
543 i = this.get_selected_index();
512 if (i === null) {
544 if (i === null) {
513 i = 0;
545 i = 0;
514 }
546 }
515 } else {
547 } else {
516 i = index;
548 i = index;
517 }
549 }
518 return i;
550 return i;
519 };
551 };
520
552
521 /**
553 /**
522 * Get the currently selected cell.
554 * Get the currently selected cell.
523 * @method get_selected_cell
555 * @method get_selected_cell
524 * @return {Cell} The selected cell
556 * @return {Cell} The selected cell
525 */
557 */
526 Notebook.prototype.get_selected_cell = function () {
558 Notebook.prototype.get_selected_cell = function () {
527 var index = this.get_selected_index();
559 var index = this.get_selected_index();
528 return this.get_cell(index);
560 return this.get_cell(index);
529 };
561 };
530
562
531 /**
563 /**
532 * Check whether a cell index is valid.
564 * Check whether a cell index is valid.
533 *
565 *
534 * @method is_valid_cell_index
566 * @method is_valid_cell_index
535 * @param {Number} index A cell index
567 * @param {Number} index A cell index
536 * @return True if the index is valid, false otherwise
568 * @return True if the index is valid, false otherwise
537 */
569 */
538 Notebook.prototype.is_valid_cell_index = function (index) {
570 Notebook.prototype.is_valid_cell_index = function (index) {
539 if (index !== null && index >= 0 && index < this.ncells()) {
571 if (index !== null && index >= 0 && index < this.ncells()) {
540 return true;
572 return true;
541 } else {
573 } else {
542 return false;
574 return false;
543 }
575 }
544 };
576 };
545
577
546 /**
578 /**
547 * Get the index of the currently selected cell.
579 * Get the index of the currently selected cell.
548
580
549 * @method get_selected_index
581 * @method get_selected_index
550 * @return {Number} The selected cell's numeric index
582 * @return {Number} The selected cell's numeric index
551 */
583 */
552 Notebook.prototype.get_selected_index = function () {
584 Notebook.prototype.get_selected_index = function () {
553 var result = null;
585 var result = null;
554 this.get_cell_elements().filter(function (index) {
586 this.get_cell_elements().filter(function (index) {
555 if ($(this).data("cell").selected === true) {
587 if ($(this).data("cell").selected === true) {
556 result = index;
588 result = index;
557 }
589 }
558 });
590 });
559 return result;
591 return result;
560 };
592 };
561
593
562
594
563 // Cell selection.
595 // Cell selection.
564
596
565 /**
597 /**
566 * Programmatically select a cell.
598 * Programmatically select a cell.
567 *
599 *
568 * @method select
600 * @method select
569 * @param {Number} index A cell's index
601 * @param {Number} index A cell's index
570 * @return {Notebook} This notebook
602 * @return {Notebook} This notebook
571 */
603 */
572 Notebook.prototype.select = function (index) {
604 Notebook.prototype.select = function (index) {
573 if (this.is_valid_cell_index(index)) {
605 if (this.is_valid_cell_index(index)) {
574 var sindex = this.get_selected_index();
606 var sindex = this.get_selected_index();
575 if (sindex !== null && index !== sindex) {
607 if (sindex !== null && index !== sindex) {
576 // If we are about to select a different cell, make sure we are
608 // If we are about to select a different cell, make sure we are
577 // first in command mode.
609 // first in command mode.
578 if (this.mode !== 'command') {
610 if (this.mode !== 'command') {
579 this.command_mode();
611 this.command_mode();
580 }
612 }
581 this.get_cell(sindex).unselect();
613 this.get_cell(sindex).unselect();
582 }
614 }
583 var cell = this.get_cell(index);
615 var cell = this.get_cell(index);
584 cell.select();
616 cell.select();
585 if (cell.cell_type === 'heading') {
617 if (cell.cell_type === 'heading') {
586 this.events.trigger('selected_cell_type_changed.Notebook',
618 this.events.trigger('selected_cell_type_changed.Notebook',
587 {'cell_type':cell.cell_type,level:cell.level}
619 {'cell_type':cell.cell_type,level:cell.level}
588 );
620 );
589 } else {
621 } else {
590 this.events.trigger('selected_cell_type_changed.Notebook',
622 this.events.trigger('selected_cell_type_changed.Notebook',
591 {'cell_type':cell.cell_type}
623 {'cell_type':cell.cell_type}
592 );
624 );
593 }
625 }
594 }
626 }
595 return this;
627 return this;
596 };
628 };
597
629
598 /**
630 /**
599 * Programmatically select the next cell.
631 * Programmatically select the next cell.
600 *
632 *
601 * @method select_next
633 * @method select_next
602 * @return {Notebook} This notebook
634 * @return {Notebook} This notebook
603 */
635 */
604 Notebook.prototype.select_next = function () {
636 Notebook.prototype.select_next = function () {
605 var index = this.get_selected_index();
637 var index = this.get_selected_index();
606 this.select(index+1);
638 this.select(index+1);
607 return this;
639 return this;
608 };
640 };
609
641
610 /**
642 /**
611 * Programmatically select the previous cell.
643 * Programmatically select the previous cell.
612 *
644 *
613 * @method select_prev
645 * @method select_prev
614 * @return {Notebook} This notebook
646 * @return {Notebook} This notebook
615 */
647 */
616 Notebook.prototype.select_prev = function () {
648 Notebook.prototype.select_prev = function () {
617 var index = this.get_selected_index();
649 var index = this.get_selected_index();
618 this.select(index-1);
650 this.select(index-1);
619 return this;
651 return this;
620 };
652 };
621
653
622
654
623 // Edit/Command mode
655 // Edit/Command mode
624
656
625 /**
657 /**
626 * Gets the index of the cell that is in edit mode.
658 * Gets the index of the cell that is in edit mode.
627 *
659 *
628 * @method get_edit_index
660 * @method get_edit_index
629 *
661 *
630 * @return index {int}
662 * @return index {int}
631 **/
663 **/
632 Notebook.prototype.get_edit_index = function () {
664 Notebook.prototype.get_edit_index = function () {
633 var result = null;
665 var result = null;
634 this.get_cell_elements().filter(function (index) {
666 this.get_cell_elements().filter(function (index) {
635 if ($(this).data("cell").mode === 'edit') {
667 if ($(this).data("cell").mode === 'edit') {
636 result = index;
668 result = index;
637 }
669 }
638 });
670 });
639 return result;
671 return result;
640 };
672 };
641
673
642 /**
674 /**
643 * Handle when a a cell blurs and the notebook should enter command mode.
675 * Handle when a a cell blurs and the notebook should enter command mode.
644 *
676 *
645 * @method handle_command_mode
677 * @method handle_command_mode
646 * @param [cell] {Cell} Cell to enter command mode on.
678 * @param [cell] {Cell} Cell to enter command mode on.
647 **/
679 **/
648 Notebook.prototype.handle_command_mode = function (cell) {
680 Notebook.prototype.handle_command_mode = function (cell) {
649 if (this.mode !== 'command') {
681 if (this.mode !== 'command') {
650 cell.command_mode();
682 cell.command_mode();
651 this.mode = 'command';
683 this.mode = 'command';
652 this.events.trigger('command_mode.Notebook');
684 this.events.trigger('command_mode.Notebook');
653 this.keyboard_manager.command_mode();
685 this.keyboard_manager.command_mode();
654 }
686 }
655 };
687 };
656
688
657 /**
689 /**
658 * Make the notebook enter command mode.
690 * Make the notebook enter command mode.
659 *
691 *
660 * @method command_mode
692 * @method command_mode
661 **/
693 **/
662 Notebook.prototype.command_mode = function () {
694 Notebook.prototype.command_mode = function () {
663 var cell = this.get_cell(this.get_edit_index());
695 var cell = this.get_cell(this.get_edit_index());
664 if (cell && this.mode !== 'command') {
696 if (cell && this.mode !== 'command') {
665 // We don't call cell.command_mode, but rather call cell.focus_cell()
697 // We don't call cell.command_mode, but rather call cell.focus_cell()
666 // which will blur and CM editor and trigger the call to
698 // which will blur and CM editor and trigger the call to
667 // handle_command_mode.
699 // handle_command_mode.
668 cell.focus_cell();
700 cell.focus_cell();
669 }
701 }
670 };
702 };
671
703
672 /**
704 /**
673 * Handle when a cell fires it's edit_mode event.
705 * Handle when a cell fires it's edit_mode event.
674 *
706 *
675 * @method handle_edit_mode
707 * @method handle_edit_mode
676 * @param [cell] {Cell} Cell to enter edit mode on.
708 * @param [cell] {Cell} Cell to enter edit mode on.
677 **/
709 **/
678 Notebook.prototype.handle_edit_mode = function (cell) {
710 Notebook.prototype.handle_edit_mode = function (cell) {
679 if (cell && this.mode !== 'edit') {
711 if (cell && this.mode !== 'edit') {
680 cell.edit_mode();
712 cell.edit_mode();
681 this.mode = 'edit';
713 this.mode = 'edit';
682 this.events.trigger('edit_mode.Notebook');
714 this.events.trigger('edit_mode.Notebook');
683 this.keyboard_manager.edit_mode();
715 this.keyboard_manager.edit_mode();
684 }
716 }
685 };
717 };
686
718
687 /**
719 /**
688 * Make a cell enter edit mode.
720 * Make a cell enter edit mode.
689 *
721 *
690 * @method edit_mode
722 * @method edit_mode
691 **/
723 **/
692 Notebook.prototype.edit_mode = function () {
724 Notebook.prototype.edit_mode = function () {
693 var cell = this.get_selected_cell();
725 var cell = this.get_selected_cell();
694 if (cell && this.mode !== 'edit') {
726 if (cell && this.mode !== 'edit') {
695 cell.unrender();
727 cell.unrender();
696 cell.focus_editor();
728 cell.focus_editor();
697 }
729 }
698 };
730 };
699
731
700 /**
732 /**
701 * Focus the currently selected cell.
733 * Focus the currently selected cell.
702 *
734 *
703 * @method focus_cell
735 * @method focus_cell
704 **/
736 **/
705 Notebook.prototype.focus_cell = function () {
737 Notebook.prototype.focus_cell = function () {
706 var cell = this.get_selected_cell();
738 var cell = this.get_selected_cell();
707 if (cell === null) {return;} // No cell is selected
739 if (cell === null) {return;} // No cell is selected
708 cell.focus_cell();
740 cell.focus_cell();
709 };
741 };
710
742
711 // Cell movement
743 // Cell movement
712
744
713 /**
745 /**
714 * Move given (or selected) cell up and select it.
746 * Move given (or selected) cell up and select it.
715 *
747 *
716 * @method move_cell_up
748 * @method move_cell_up
717 * @param [index] {integer} cell index
749 * @param [index] {integer} cell index
718 * @return {Notebook} This notebook
750 * @return {Notebook} This notebook
719 **/
751 **/
720 Notebook.prototype.move_cell_up = function (index) {
752 Notebook.prototype.move_cell_up = function (index) {
721 var i = this.index_or_selected(index);
753 var i = this.index_or_selected(index);
722 if (this.is_valid_cell_index(i) && i > 0) {
754 if (this.is_valid_cell_index(i) && i > 0) {
723 var pivot = this.get_cell_element(i-1);
755 var pivot = this.get_cell_element(i-1);
724 var tomove = this.get_cell_element(i);
756 var tomove = this.get_cell_element(i);
725 if (pivot !== null && tomove !== null) {
757 if (pivot !== null && tomove !== null) {
726 tomove.detach();
758 tomove.detach();
727 pivot.before(tomove);
759 pivot.before(tomove);
728 this.select(i-1);
760 this.select(i-1);
729 var cell = this.get_selected_cell();
761 var cell = this.get_selected_cell();
730 cell.focus_cell();
762 cell.focus_cell();
731 }
763 }
732 this.set_dirty(true);
764 this.set_dirty(true);
733 }
765 }
734 return this;
766 return this;
735 };
767 };
736
768
737
769
738 /**
770 /**
739 * Move given (or selected) cell down and select it
771 * Move given (or selected) cell down and select it
740 *
772 *
741 * @method move_cell_down
773 * @method move_cell_down
742 * @param [index] {integer} cell index
774 * @param [index] {integer} cell index
743 * @return {Notebook} This notebook
775 * @return {Notebook} This notebook
744 **/
776 **/
745 Notebook.prototype.move_cell_down = function (index) {
777 Notebook.prototype.move_cell_down = function (index) {
746 var i = this.index_or_selected(index);
778 var i = this.index_or_selected(index);
747 if (this.is_valid_cell_index(i) && this.is_valid_cell_index(i+1)) {
779 if (this.is_valid_cell_index(i) && this.is_valid_cell_index(i+1)) {
748 var pivot = this.get_cell_element(i+1);
780 var pivot = this.get_cell_element(i+1);
749 var tomove = this.get_cell_element(i);
781 var tomove = this.get_cell_element(i);
750 if (pivot !== null && tomove !== null) {
782 if (pivot !== null && tomove !== null) {
751 tomove.detach();
783 tomove.detach();
752 pivot.after(tomove);
784 pivot.after(tomove);
753 this.select(i+1);
785 this.select(i+1);
754 var cell = this.get_selected_cell();
786 var cell = this.get_selected_cell();
755 cell.focus_cell();
787 cell.focus_cell();
756 }
788 }
757 }
789 }
758 this.set_dirty();
790 this.set_dirty();
759 return this;
791 return this;
760 };
792 };
761
793
762
794
763 // Insertion, deletion.
795 // Insertion, deletion.
764
796
765 /**
797 /**
766 * Delete a cell from the notebook.
798 * Delete a cell from the notebook.
767 *
799 *
768 * @method delete_cell
800 * @method delete_cell
769 * @param [index] A cell's numeric index
801 * @param [index] A cell's numeric index
770 * @return {Notebook} This notebook
802 * @return {Notebook} This notebook
771 */
803 */
772 Notebook.prototype.delete_cell = function (index) {
804 Notebook.prototype.delete_cell = function (index) {
773 var i = this.index_or_selected(index);
805 var i = this.index_or_selected(index);
774 var cell = this.get_cell(i);
806 var cell = this.get_cell(i);
775 if (!cell.is_deletable()) {
807 if (!cell.is_deletable()) {
776 return this;
808 return this;
777 }
809 }
778
810
779 this.undelete_backup = cell.toJSON();
811 this.undelete_backup = cell.toJSON();
780 $('#undelete_cell').removeClass('disabled');
812 $('#undelete_cell').removeClass('disabled');
781 if (this.is_valid_cell_index(i)) {
813 if (this.is_valid_cell_index(i)) {
782 var old_ncells = this.ncells();
814 var old_ncells = this.ncells();
783 var ce = this.get_cell_element(i);
815 var ce = this.get_cell_element(i);
784 ce.remove();
816 ce.remove();
785 if (i === 0) {
817 if (i === 0) {
786 // Always make sure we have at least one cell.
818 // Always make sure we have at least one cell.
787 if (old_ncells === 1) {
819 if (old_ncells === 1) {
788 this.insert_cell_below('code');
820 this.insert_cell_below('code');
789 }
821 }
790 this.select(0);
822 this.select(0);
791 this.undelete_index = 0;
823 this.undelete_index = 0;
792 this.undelete_below = false;
824 this.undelete_below = false;
793 } else if (i === old_ncells-1 && i !== 0) {
825 } else if (i === old_ncells-1 && i !== 0) {
794 this.select(i-1);
826 this.select(i-1);
795 this.undelete_index = i - 1;
827 this.undelete_index = i - 1;
796 this.undelete_below = true;
828 this.undelete_below = true;
797 } else {
829 } else {
798 this.select(i);
830 this.select(i);
799 this.undelete_index = i;
831 this.undelete_index = i;
800 this.undelete_below = false;
832 this.undelete_below = false;
801 }
833 }
802 this.events.trigger('delete.Cell', {'cell': cell, 'index': i});
834 this.events.trigger('delete.Cell', {'cell': cell, 'index': i});
803 this.set_dirty(true);
835 this.set_dirty(true);
804 }
836 }
805 return this;
837 return this;
806 };
838 };
807
839
808 /**
840 /**
809 * Restore the most recently deleted cell.
841 * Restore the most recently deleted cell.
810 *
842 *
811 * @method undelete
843 * @method undelete
812 */
844 */
813 Notebook.prototype.undelete_cell = function() {
845 Notebook.prototype.undelete_cell = function() {
814 if (this.undelete_backup !== null && this.undelete_index !== null) {
846 if (this.undelete_backup !== null && this.undelete_index !== null) {
815 var current_index = this.get_selected_index();
847 var current_index = this.get_selected_index();
816 if (this.undelete_index < current_index) {
848 if (this.undelete_index < current_index) {
817 current_index = current_index + 1;
849 current_index = current_index + 1;
818 }
850 }
819 if (this.undelete_index >= this.ncells()) {
851 if (this.undelete_index >= this.ncells()) {
820 this.select(this.ncells() - 1);
852 this.select(this.ncells() - 1);
821 }
853 }
822 else {
854 else {
823 this.select(this.undelete_index);
855 this.select(this.undelete_index);
824 }
856 }
825 var cell_data = this.undelete_backup;
857 var cell_data = this.undelete_backup;
826 var new_cell = null;
858 var new_cell = null;
827 if (this.undelete_below) {
859 if (this.undelete_below) {
828 new_cell = this.insert_cell_below(cell_data.cell_type);
860 new_cell = this.insert_cell_below(cell_data.cell_type);
829 } else {
861 } else {
830 new_cell = this.insert_cell_above(cell_data.cell_type);
862 new_cell = this.insert_cell_above(cell_data.cell_type);
831 }
863 }
832 new_cell.fromJSON(cell_data);
864 new_cell.fromJSON(cell_data);
833 if (this.undelete_below) {
865 if (this.undelete_below) {
834 this.select(current_index+1);
866 this.select(current_index+1);
835 } else {
867 } else {
836 this.select(current_index);
868 this.select(current_index);
837 }
869 }
838 this.undelete_backup = null;
870 this.undelete_backup = null;
839 this.undelete_index = null;
871 this.undelete_index = null;
840 }
872 }
841 $('#undelete_cell').addClass('disabled');
873 $('#undelete_cell').addClass('disabled');
842 };
874 };
843
875
844 /**
876 /**
845 * Insert a cell so that after insertion the cell is at given index.
877 * Insert a cell so that after insertion the cell is at given index.
846 *
878 *
847 * If cell type is not provided, it will default to the type of the
879 * If cell type is not provided, it will default to the type of the
848 * currently active cell.
880 * currently active cell.
849 *
881 *
850 * Similar to insert_above, but index parameter is mandatory
882 * Similar to insert_above, but index parameter is mandatory
851 *
883 *
852 * Index will be brought back into the accessible range [0,n]
884 * Index will be brought back into the accessible range [0,n]
853 *
885 *
854 * @method insert_cell_at_index
886 * @method insert_cell_at_index
855 * @param [type] {string} in ['code','markdown', 'raw'], defaults to 'code'
887 * @param [type] {string} in ['code','markdown', 'raw'], defaults to 'code'
856 * @param [index] {int} a valid index where to insert cell
888 * @param [index] {int} a valid index where to insert cell
857 *
889 *
858 * @return cell {cell|null} created cell or null
890 * @return cell {cell|null} created cell or null
859 **/
891 **/
860 Notebook.prototype.insert_cell_at_index = function(type, index){
892 Notebook.prototype.insert_cell_at_index = function(type, index){
861
893
862 var ncells = this.ncells();
894 var ncells = this.ncells();
863 index = Math.min(index, ncells);
895 index = Math.min(index, ncells);
864 index = Math.max(index, 0);
896 index = Math.max(index, 0);
865 var cell = null;
897 var cell = null;
866 type = type || this.default_cell_type;
898 type = type || this.default_cell_type;
867 if (type === 'above') {
899 if (type === 'above') {
868 if (index > 0) {
900 if (index > 0) {
869 type = this.get_cell(index-1).cell_type;
901 type = this.get_cell(index-1).cell_type;
870 } else {
902 } else {
871 type = 'code';
903 type = 'code';
872 }
904 }
873 } else if (type === 'below') {
905 } else if (type === 'below') {
874 if (index < ncells) {
906 if (index < ncells) {
875 type = this.get_cell(index).cell_type;
907 type = this.get_cell(index).cell_type;
876 } else {
908 } else {
877 type = 'code';
909 type = 'code';
878 }
910 }
879 } else if (type === 'selected') {
911 } else if (type === 'selected') {
880 type = this.get_selected_cell().cell_type;
912 type = this.get_selected_cell().cell_type;
881 }
913 }
882
914
883 if (ncells === 0 || this.is_valid_cell_index(index) || index === ncells) {
915 if (ncells === 0 || this.is_valid_cell_index(index) || index === ncells) {
884 var cell_options = {
916 var cell_options = {
885 events: this.events,
917 events: this.events,
886 config: this.config,
918 config: this.config,
887 keyboard_manager: this.keyboard_manager,
919 keyboard_manager: this.keyboard_manager,
888 notebook: this,
920 notebook: this,
889 tooltip: this.tooltip
921 tooltip: this.tooltip
890 };
922 };
891 switch(type) {
923 switch(type) {
892 case 'code':
924 case 'code':
893 cell = new codecell.CodeCell(this.kernel, cell_options);
925 cell = new codecell.CodeCell(this.kernel, cell_options);
894 cell.set_input_prompt();
926 cell.set_input_prompt();
895 break;
927 break;
896 case 'markdown':
928 case 'markdown':
897 cell = new textcell.MarkdownCell(cell_options);
929 cell = new textcell.MarkdownCell(cell_options);
898 break;
930 break;
899 case 'raw':
931 case 'raw':
900 cell = new textcell.RawCell(cell_options);
932 cell = new textcell.RawCell(cell_options);
901 break;
933 break;
902 default:
934 default:
903 console.log("invalid cell type: ", type);
935 console.log("Unrecognized cell type: ", type, cellmod);
936 cell = new cellmod.UnrecognizedCell(cell_options);
904 }
937 }
905
938
906 if(this._insert_element_at_index(cell.element,index)) {
939 if(this._insert_element_at_index(cell.element,index)) {
907 cell.render();
940 cell.render();
908 this.events.trigger('create.Cell', {'cell': cell, 'index': index});
941 this.events.trigger('create.Cell', {'cell': cell, 'index': index});
909 cell.refresh();
942 cell.refresh();
910 // We used to select the cell after we refresh it, but there
943 // We used to select the cell after we refresh it, but there
911 // are now cases were this method is called where select is
944 // are now cases were this method is called where select is
912 // not appropriate. The selection logic should be handled by the
945 // not appropriate. The selection logic should be handled by the
913 // caller of the the top level insert_cell methods.
946 // caller of the the top level insert_cell methods.
914 this.set_dirty(true);
947 this.set_dirty(true);
915 }
948 }
916 }
949 }
917 return cell;
950 return cell;
918
951
919 };
952 };
920
953
921 /**
954 /**
922 * Insert an element at given cell index.
955 * Insert an element at given cell index.
923 *
956 *
924 * @method _insert_element_at_index
957 * @method _insert_element_at_index
925 * @param element {dom_element} a cell element
958 * @param element {dom_element} a cell element
926 * @param [index] {int} a valid index where to inser cell
959 * @param [index] {int} a valid index where to inser cell
927 * @private
960 * @private
928 *
961 *
929 * return true if everything whent fine.
962 * return true if everything whent fine.
930 **/
963 **/
931 Notebook.prototype._insert_element_at_index = function(element, index){
964 Notebook.prototype._insert_element_at_index = function(element, index){
932 if (element === undefined){
965 if (element === undefined){
933 return false;
966 return false;
934 }
967 }
935
968
936 var ncells = this.ncells();
969 var ncells = this.ncells();
937
970
938 if (ncells === 0) {
971 if (ncells === 0) {
939 // special case append if empty
972 // special case append if empty
940 this.element.find('div.end_space').before(element);
973 this.element.find('div.end_space').before(element);
941 } else if ( ncells === index ) {
974 } else if ( ncells === index ) {
942 // special case append it the end, but not empty
975 // special case append it the end, but not empty
943 this.get_cell_element(index-1).after(element);
976 this.get_cell_element(index-1).after(element);
944 } else if (this.is_valid_cell_index(index)) {
977 } else if (this.is_valid_cell_index(index)) {
945 // otherwise always somewhere to append to
978 // otherwise always somewhere to append to
946 this.get_cell_element(index).before(element);
979 this.get_cell_element(index).before(element);
947 } else {
980 } else {
948 return false;
981 return false;
949 }
982 }
950
983
951 if (this.undelete_index !== null && index <= this.undelete_index) {
984 if (this.undelete_index !== null && index <= this.undelete_index) {
952 this.undelete_index = this.undelete_index + 1;
985 this.undelete_index = this.undelete_index + 1;
953 this.set_dirty(true);
986 this.set_dirty(true);
954 }
987 }
955 return true;
988 return true;
956 };
989 };
957
990
958 /**
991 /**
959 * Insert a cell of given type above given index, or at top
992 * Insert a cell of given type above given index, or at top
960 * of notebook if index smaller than 0.
993 * of notebook if index smaller than 0.
961 *
994 *
962 * default index value is the one of currently selected cell
995 * default index value is the one of currently selected cell
963 *
996 *
964 * @method insert_cell_above
997 * @method insert_cell_above
965 * @param [type] {string} cell type
998 * @param [type] {string} cell type
966 * @param [index] {integer}
999 * @param [index] {integer}
967 *
1000 *
968 * @return handle to created cell or null
1001 * @return handle to created cell or null
969 **/
1002 **/
970 Notebook.prototype.insert_cell_above = function (type, index) {
1003 Notebook.prototype.insert_cell_above = function (type, index) {
971 index = this.index_or_selected(index);
1004 index = this.index_or_selected(index);
972 return this.insert_cell_at_index(type, index);
1005 return this.insert_cell_at_index(type, index);
973 };
1006 };
974
1007
975 /**
1008 /**
976 * Insert a cell of given type below given index, or at bottom
1009 * Insert a cell of given type below given index, or at bottom
977 * of notebook if index greater than number of cells
1010 * of notebook if index greater than number of cells
978 *
1011 *
979 * default index value is the one of currently selected cell
1012 * default index value is the one of currently selected cell
980 *
1013 *
981 * @method insert_cell_below
1014 * @method insert_cell_below
982 * @param [type] {string} cell type
1015 * @param [type] {string} cell type
983 * @param [index] {integer}
1016 * @param [index] {integer}
984 *
1017 *
985 * @return handle to created cell or null
1018 * @return handle to created cell or null
986 *
1019 *
987 **/
1020 **/
988 Notebook.prototype.insert_cell_below = function (type, index) {
1021 Notebook.prototype.insert_cell_below = function (type, index) {
989 index = this.index_or_selected(index);
1022 index = this.index_or_selected(index);
990 return this.insert_cell_at_index(type, index+1);
1023 return this.insert_cell_at_index(type, index+1);
991 };
1024 };
992
1025
993
1026
994 /**
1027 /**
995 * Insert cell at end of notebook
1028 * Insert cell at end of notebook
996 *
1029 *
997 * @method insert_cell_at_bottom
1030 * @method insert_cell_at_bottom
998 * @param {String} type cell type
1031 * @param {String} type cell type
999 *
1032 *
1000 * @return the added cell; or null
1033 * @return the added cell; or null
1001 **/
1034 **/
1002 Notebook.prototype.insert_cell_at_bottom = function (type){
1035 Notebook.prototype.insert_cell_at_bottom = function (type){
1003 var len = this.ncells();
1036 var len = this.ncells();
1004 return this.insert_cell_below(type,len-1);
1037 return this.insert_cell_below(type,len-1);
1005 };
1038 };
1006
1039
1007 /**
1040 /**
1008 * Turn a cell into a code cell.
1041 * Turn a cell into a code cell.
1009 *
1042 *
1010 * @method to_code
1043 * @method to_code
1011 * @param {Number} [index] A cell's index
1044 * @param {Number} [index] A cell's index
1012 */
1045 */
1013 Notebook.prototype.to_code = function (index) {
1046 Notebook.prototype.to_code = function (index) {
1014 var i = this.index_or_selected(index);
1047 var i = this.index_or_selected(index);
1015 if (this.is_valid_cell_index(i)) {
1048 if (this.is_valid_cell_index(i)) {
1016 var source_cell = this.get_cell(i);
1049 var source_cell = this.get_cell(i);
1017 if (!(source_cell instanceof codecell.CodeCell)) {
1050 if (!(source_cell instanceof codecell.CodeCell)) {
1018 var target_cell = this.insert_cell_below('code',i);
1051 var target_cell = this.insert_cell_below('code',i);
1019 var text = source_cell.get_text();
1052 var text = source_cell.get_text();
1020 if (text === source_cell.placeholder) {
1053 if (text === source_cell.placeholder) {
1021 text = '';
1054 text = '';
1022 }
1055 }
1023 //metadata
1056 //metadata
1024 target_cell.metadata = source_cell.metadata;
1057 target_cell.metadata = source_cell.metadata;
1025
1058
1026 target_cell.set_text(text);
1059 target_cell.set_text(text);
1027 // make this value the starting point, so that we can only undo
1060 // make this value the starting point, so that we can only undo
1028 // to this state, instead of a blank cell
1061 // to this state, instead of a blank cell
1029 target_cell.code_mirror.clearHistory();
1062 target_cell.code_mirror.clearHistory();
1030 source_cell.element.remove();
1063 source_cell.element.remove();
1031 this.select(i);
1064 this.select(i);
1032 var cursor = source_cell.code_mirror.getCursor();
1065 var cursor = source_cell.code_mirror.getCursor();
1033 target_cell.code_mirror.setCursor(cursor);
1066 target_cell.code_mirror.setCursor(cursor);
1034 this.set_dirty(true);
1067 this.set_dirty(true);
1035 }
1068 }
1036 }
1069 }
1037 };
1070 };
1038
1071
1039 /**
1072 /**
1040 * Turn a cell into a Markdown cell.
1073 * Turn a cell into a Markdown cell.
1041 *
1074 *
1042 * @method to_markdown
1075 * @method to_markdown
1043 * @param {Number} [index] A cell's index
1076 * @param {Number} [index] A cell's index
1044 */
1077 */
1045 Notebook.prototype.to_markdown = function (index) {
1078 Notebook.prototype.to_markdown = function (index) {
1046 var i = this.index_or_selected(index);
1079 var i = this.index_or_selected(index);
1047 if (this.is_valid_cell_index(i)) {
1080 if (this.is_valid_cell_index(i)) {
1048 var source_cell = this.get_cell(i);
1081 var source_cell = this.get_cell(i);
1049
1082
1050 if (!(source_cell instanceof textcell.MarkdownCell)) {
1083 if (!(source_cell instanceof textcell.MarkdownCell)) {
1051 var target_cell = this.insert_cell_below('markdown',i);
1084 var target_cell = this.insert_cell_below('markdown',i);
1052 var text = source_cell.get_text();
1085 var text = source_cell.get_text();
1053
1086
1054 if (text === source_cell.placeholder) {
1087 if (text === source_cell.placeholder) {
1055 text = '';
1088 text = '';
1056 }
1089 }
1057 // metadata
1090 // metadata
1058 target_cell.metadata = source_cell.metadata;
1091 target_cell.metadata = source_cell.metadata;
1059 // We must show the editor before setting its contents
1092 // We must show the editor before setting its contents
1060 target_cell.unrender();
1093 target_cell.unrender();
1061 target_cell.set_text(text);
1094 target_cell.set_text(text);
1062 // make this value the starting point, so that we can only undo
1095 // make this value the starting point, so that we can only undo
1063 // to this state, instead of a blank cell
1096 // to this state, instead of a blank cell
1064 target_cell.code_mirror.clearHistory();
1097 target_cell.code_mirror.clearHistory();
1065 source_cell.element.remove();
1098 source_cell.element.remove();
1066 this.select(i);
1099 this.select(i);
1067 if ((source_cell instanceof textcell.TextCell) && source_cell.rendered) {
1100 if ((source_cell instanceof textcell.TextCell) && source_cell.rendered) {
1068 target_cell.render();
1101 target_cell.render();
1069 }
1102 }
1070 var cursor = source_cell.code_mirror.getCursor();
1103 var cursor = source_cell.code_mirror.getCursor();
1071 target_cell.code_mirror.setCursor(cursor);
1104 target_cell.code_mirror.setCursor(cursor);
1072 this.set_dirty(true);
1105 this.set_dirty(true);
1073 }
1106 }
1074 }
1107 }
1075 };
1108 };
1076
1109
1077 /**
1110 /**
1078 * Turn a cell into a raw text cell.
1111 * Turn a cell into a raw text cell.
1079 *
1112 *
1080 * @method to_raw
1113 * @method to_raw
1081 * @param {Number} [index] A cell's index
1114 * @param {Number} [index] A cell's index
1082 */
1115 */
1083 Notebook.prototype.to_raw = function (index) {
1116 Notebook.prototype.to_raw = function (index) {
1084 var i = this.index_or_selected(index);
1117 var i = this.index_or_selected(index);
1085 if (this.is_valid_cell_index(i)) {
1118 if (this.is_valid_cell_index(i)) {
1086 var target_cell = null;
1119 var target_cell = null;
1087 var source_cell = this.get_cell(i);
1120 var source_cell = this.get_cell(i);
1088
1121
1089 if (!(source_cell instanceof textcell.RawCell)) {
1122 if (!(source_cell instanceof textcell.RawCell)) {
1090 target_cell = this.insert_cell_below('raw',i);
1123 target_cell = this.insert_cell_below('raw',i);
1091 var text = source_cell.get_text();
1124 var text = source_cell.get_text();
1092 if (text === source_cell.placeholder) {
1125 if (text === source_cell.placeholder) {
1093 text = '';
1126 text = '';
1094 }
1127 }
1095 //metadata
1128 //metadata
1096 target_cell.metadata = source_cell.metadata;
1129 target_cell.metadata = source_cell.metadata;
1097 // We must show the editor before setting its contents
1130 // We must show the editor before setting its contents
1098 target_cell.unrender();
1131 target_cell.unrender();
1099 target_cell.set_text(text);
1132 target_cell.set_text(text);
1100 // make this value the starting point, so that we can only undo
1133 // make this value the starting point, so that we can only undo
1101 // to this state, instead of a blank cell
1134 // to this state, instead of a blank cell
1102 target_cell.code_mirror.clearHistory();
1135 target_cell.code_mirror.clearHistory();
1103 source_cell.element.remove();
1136 source_cell.element.remove();
1104 this.select(i);
1137 this.select(i);
1105 var cursor = source_cell.code_mirror.getCursor();
1138 var cursor = source_cell.code_mirror.getCursor();
1106 target_cell.code_mirror.setCursor(cursor);
1139 target_cell.code_mirror.setCursor(cursor);
1107 this.set_dirty(true);
1140 this.set_dirty(true);
1108 }
1141 }
1109 }
1142 }
1110 };
1143 };
1111
1144
1112 Notebook.prototype._warn_heading = function () {
1145 Notebook.prototype._warn_heading = function () {
1113 // warn about heading cells being removed
1146 // warn about heading cells being removed
1114 dialog.modal({
1147 dialog.modal({
1115 notebook: this,
1148 notebook: this,
1116 keyboard_manager: this.keyboard_manager,
1149 keyboard_manager: this.keyboard_manager,
1117 title : "Use markdown headings",
1150 title : "Use markdown headings",
1118 body : $("<p/>").text(
1151 body : $("<p/>").text(
1119 'IPython no longer uses special heading cells. ' +
1152 'IPython no longer uses special heading cells. ' +
1120 'Instead, write your headings in Markdown cells using # characters:'
1153 'Instead, write your headings in Markdown cells using # characters:'
1121 ).append($('<pre/>').text(
1154 ).append($('<pre/>').text(
1122 '## This is a level 2 heading'
1155 '## This is a level 2 heading'
1123 )),
1156 )),
1124 buttons : {
1157 buttons : {
1125 "OK" : {}
1158 "OK" : {}
1126 }
1159 }
1127 });
1160 });
1128 };
1161 };
1129
1162
1130 /**
1163 /**
1131 * Turn a cell into a markdown cell with a heading.
1164 * Turn a cell into a markdown cell with a heading.
1132 *
1165 *
1133 * @method to_heading
1166 * @method to_heading
1134 * @param {Number} [index] A cell's index
1167 * @param {Number} [index] A cell's index
1135 * @param {Number} [level] A heading level (e.g., 1 for h1)
1168 * @param {Number} [level] A heading level (e.g., 1 for h1)
1136 */
1169 */
1137 Notebook.prototype.to_heading = function (index, level) {
1170 Notebook.prototype.to_heading = function (index, level) {
1138 this.to_markdown(index);
1171 this.to_markdown(index);
1139 level = level || 1;
1172 level = level || 1;
1140 var i = this.index_or_selected(index);
1173 var i = this.index_or_selected(index);
1141 if (this.is_valid_cell_index(i)) {
1174 if (this.is_valid_cell_index(i)) {
1142 var cell = this.get_cell(i);
1175 var cell = this.get_cell(i);
1143 cell.set_heading_level(level);
1176 cell.set_heading_level(level);
1144 this.set_dirty(true);
1177 this.set_dirty(true);
1145 }
1178 }
1146 };
1179 };
1147
1180
1148
1181
1149 // Cut/Copy/Paste
1182 // Cut/Copy/Paste
1150
1183
1151 /**
1184 /**
1152 * Enable UI elements for pasting cells.
1185 * Enable UI elements for pasting cells.
1153 *
1186 *
1154 * @method enable_paste
1187 * @method enable_paste
1155 */
1188 */
1156 Notebook.prototype.enable_paste = function () {
1189 Notebook.prototype.enable_paste = function () {
1157 var that = this;
1190 var that = this;
1158 if (!this.paste_enabled) {
1191 if (!this.paste_enabled) {
1159 $('#paste_cell_replace').removeClass('disabled')
1192 $('#paste_cell_replace').removeClass('disabled')
1160 .on('click', function () {that.paste_cell_replace();});
1193 .on('click', function () {that.paste_cell_replace();});
1161 $('#paste_cell_above').removeClass('disabled')
1194 $('#paste_cell_above').removeClass('disabled')
1162 .on('click', function () {that.paste_cell_above();});
1195 .on('click', function () {that.paste_cell_above();});
1163 $('#paste_cell_below').removeClass('disabled')
1196 $('#paste_cell_below').removeClass('disabled')
1164 .on('click', function () {that.paste_cell_below();});
1197 .on('click', function () {that.paste_cell_below();});
1165 this.paste_enabled = true;
1198 this.paste_enabled = true;
1166 }
1199 }
1167 };
1200 };
1168
1201
1169 /**
1202 /**
1170 * Disable UI elements for pasting cells.
1203 * Disable UI elements for pasting cells.
1171 *
1204 *
1172 * @method disable_paste
1205 * @method disable_paste
1173 */
1206 */
1174 Notebook.prototype.disable_paste = function () {
1207 Notebook.prototype.disable_paste = function () {
1175 if (this.paste_enabled) {
1208 if (this.paste_enabled) {
1176 $('#paste_cell_replace').addClass('disabled').off('click');
1209 $('#paste_cell_replace').addClass('disabled').off('click');
1177 $('#paste_cell_above').addClass('disabled').off('click');
1210 $('#paste_cell_above').addClass('disabled').off('click');
1178 $('#paste_cell_below').addClass('disabled').off('click');
1211 $('#paste_cell_below').addClass('disabled').off('click');
1179 this.paste_enabled = false;
1212 this.paste_enabled = false;
1180 }
1213 }
1181 };
1214 };
1182
1215
1183 /**
1216 /**
1184 * Cut a cell.
1217 * Cut a cell.
1185 *
1218 *
1186 * @method cut_cell
1219 * @method cut_cell
1187 */
1220 */
1188 Notebook.prototype.cut_cell = function () {
1221 Notebook.prototype.cut_cell = function () {
1189 this.copy_cell();
1222 this.copy_cell();
1190 this.delete_cell();
1223 this.delete_cell();
1191 };
1224 };
1192
1225
1193 /**
1226 /**
1194 * Copy a cell.
1227 * Copy a cell.
1195 *
1228 *
1196 * @method copy_cell
1229 * @method copy_cell
1197 */
1230 */
1198 Notebook.prototype.copy_cell = function () {
1231 Notebook.prototype.copy_cell = function () {
1199 var cell = this.get_selected_cell();
1232 var cell = this.get_selected_cell();
1200 this.clipboard = cell.toJSON();
1233 this.clipboard = cell.toJSON();
1201 // remove undeletable status from the copied cell
1234 // remove undeletable status from the copied cell
1202 if (this.clipboard.metadata.deletable !== undefined) {
1235 if (this.clipboard.metadata.deletable !== undefined) {
1203 delete this.clipboard.metadata.deletable;
1236 delete this.clipboard.metadata.deletable;
1204 }
1237 }
1205 this.enable_paste();
1238 this.enable_paste();
1206 };
1239 };
1207
1240
1208 /**
1241 /**
1209 * Replace the selected cell with a cell in the clipboard.
1242 * Replace the selected cell with a cell in the clipboard.
1210 *
1243 *
1211 * @method paste_cell_replace
1244 * @method paste_cell_replace
1212 */
1245 */
1213 Notebook.prototype.paste_cell_replace = function () {
1246 Notebook.prototype.paste_cell_replace = function () {
1214 if (this.clipboard !== null && this.paste_enabled) {
1247 if (this.clipboard !== null && this.paste_enabled) {
1215 var cell_data = this.clipboard;
1248 var cell_data = this.clipboard;
1216 var new_cell = this.insert_cell_above(cell_data.cell_type);
1249 var new_cell = this.insert_cell_above(cell_data.cell_type);
1217 new_cell.fromJSON(cell_data);
1250 new_cell.fromJSON(cell_data);
1218 var old_cell = this.get_next_cell(new_cell);
1251 var old_cell = this.get_next_cell(new_cell);
1219 this.delete_cell(this.find_cell_index(old_cell));
1252 this.delete_cell(this.find_cell_index(old_cell));
1220 this.select(this.find_cell_index(new_cell));
1253 this.select(this.find_cell_index(new_cell));
1221 }
1254 }
1222 };
1255 };
1223
1256
1224 /**
1257 /**
1225 * Paste a cell from the clipboard above the selected cell.
1258 * Paste a cell from the clipboard above the selected cell.
1226 *
1259 *
1227 * @method paste_cell_above
1260 * @method paste_cell_above
1228 */
1261 */
1229 Notebook.prototype.paste_cell_above = function () {
1262 Notebook.prototype.paste_cell_above = function () {
1230 if (this.clipboard !== null && this.paste_enabled) {
1263 if (this.clipboard !== null && this.paste_enabled) {
1231 var cell_data = this.clipboard;
1264 var cell_data = this.clipboard;
1232 var new_cell = this.insert_cell_above(cell_data.cell_type);
1265 var new_cell = this.insert_cell_above(cell_data.cell_type);
1233 new_cell.fromJSON(cell_data);
1266 new_cell.fromJSON(cell_data);
1234 new_cell.focus_cell();
1267 new_cell.focus_cell();
1235 }
1268 }
1236 };
1269 };
1237
1270
1238 /**
1271 /**
1239 * Paste a cell from the clipboard below the selected cell.
1272 * Paste a cell from the clipboard below the selected cell.
1240 *
1273 *
1241 * @method paste_cell_below
1274 * @method paste_cell_below
1242 */
1275 */
1243 Notebook.prototype.paste_cell_below = function () {
1276 Notebook.prototype.paste_cell_below = function () {
1244 if (this.clipboard !== null && this.paste_enabled) {
1277 if (this.clipboard !== null && this.paste_enabled) {
1245 var cell_data = this.clipboard;
1278 var cell_data = this.clipboard;
1246 var new_cell = this.insert_cell_below(cell_data.cell_type);
1279 var new_cell = this.insert_cell_below(cell_data.cell_type);
1247 new_cell.fromJSON(cell_data);
1280 new_cell.fromJSON(cell_data);
1248 new_cell.focus_cell();
1281 new_cell.focus_cell();
1249 }
1282 }
1250 };
1283 };
1251
1284
1252 // Split/merge
1285 // Split/merge
1253
1286
1254 /**
1287 /**
1255 * Split the selected cell into two, at the cursor.
1288 * Split the selected cell into two, at the cursor.
1256 *
1289 *
1257 * @method split_cell
1290 * @method split_cell
1258 */
1291 */
1259 Notebook.prototype.split_cell = function () {
1292 Notebook.prototype.split_cell = function () {
1260 var cell = this.get_selected_cell();
1293 var cell = this.get_selected_cell();
1261 if (cell.is_splittable()) {
1294 if (cell.is_splittable()) {
1262 var texta = cell.get_pre_cursor();
1295 var texta = cell.get_pre_cursor();
1263 var textb = cell.get_post_cursor();
1296 var textb = cell.get_post_cursor();
1264 cell.set_text(textb);
1297 cell.set_text(textb);
1265 var new_cell = this.insert_cell_above(cell.cell_type);
1298 var new_cell = this.insert_cell_above(cell.cell_type);
1266 // Unrender the new cell so we can call set_text.
1299 // Unrender the new cell so we can call set_text.
1267 new_cell.unrender();
1300 new_cell.unrender();
1268 new_cell.set_text(texta);
1301 new_cell.set_text(texta);
1269 }
1302 }
1270 };
1303 };
1271
1304
1272 /**
1305 /**
1273 * Combine the selected cell into the cell above it.
1306 * Combine the selected cell into the cell above it.
1274 *
1307 *
1275 * @method merge_cell_above
1308 * @method merge_cell_above
1276 */
1309 */
1277 Notebook.prototype.merge_cell_above = function () {
1310 Notebook.prototype.merge_cell_above = function () {
1278 var index = this.get_selected_index();
1311 var index = this.get_selected_index();
1279 var cell = this.get_cell(index);
1312 var cell = this.get_cell(index);
1280 var render = cell.rendered;
1313 var render = cell.rendered;
1281 if (!cell.is_mergeable()) {
1314 if (!cell.is_mergeable()) {
1282 return;
1315 return;
1283 }
1316 }
1284 if (index > 0) {
1317 if (index > 0) {
1285 var upper_cell = this.get_cell(index-1);
1318 var upper_cell = this.get_cell(index-1);
1286 if (!upper_cell.is_mergeable()) {
1319 if (!upper_cell.is_mergeable()) {
1287 return;
1320 return;
1288 }
1321 }
1289 var upper_text = upper_cell.get_text();
1322 var upper_text = upper_cell.get_text();
1290 var text = cell.get_text();
1323 var text = cell.get_text();
1291 if (cell instanceof codecell.CodeCell) {
1324 if (cell instanceof codecell.CodeCell) {
1292 cell.set_text(upper_text+'\n'+text);
1325 cell.set_text(upper_text+'\n'+text);
1293 } else {
1326 } else {
1294 cell.unrender(); // Must unrender before we set_text.
1327 cell.unrender(); // Must unrender before we set_text.
1295 cell.set_text(upper_text+'\n\n'+text);
1328 cell.set_text(upper_text+'\n\n'+text);
1296 if (render) {
1329 if (render) {
1297 // The rendered state of the final cell should match
1330 // The rendered state of the final cell should match
1298 // that of the original selected cell;
1331 // that of the original selected cell;
1299 cell.render();
1332 cell.render();
1300 }
1333 }
1301 }
1334 }
1302 this.delete_cell(index-1);
1335 this.delete_cell(index-1);
1303 this.select(this.find_cell_index(cell));
1336 this.select(this.find_cell_index(cell));
1304 }
1337 }
1305 };
1338 };
1306
1339
1307 /**
1340 /**
1308 * Combine the selected cell into the cell below it.
1341 * Combine the selected cell into the cell below it.
1309 *
1342 *
1310 * @method merge_cell_below
1343 * @method merge_cell_below
1311 */
1344 */
1312 Notebook.prototype.merge_cell_below = function () {
1345 Notebook.prototype.merge_cell_below = function () {
1313 var index = this.get_selected_index();
1346 var index = this.get_selected_index();
1314 var cell = this.get_cell(index);
1347 var cell = this.get_cell(index);
1315 var render = cell.rendered;
1348 var render = cell.rendered;
1316 if (!cell.is_mergeable()) {
1349 if (!cell.is_mergeable()) {
1317 return;
1350 return;
1318 }
1351 }
1319 if (index < this.ncells()-1) {
1352 if (index < this.ncells()-1) {
1320 var lower_cell = this.get_cell(index+1);
1353 var lower_cell = this.get_cell(index+1);
1321 if (!lower_cell.is_mergeable()) {
1354 if (!lower_cell.is_mergeable()) {
1322 return;
1355 return;
1323 }
1356 }
1324 var lower_text = lower_cell.get_text();
1357 var lower_text = lower_cell.get_text();
1325 var text = cell.get_text();
1358 var text = cell.get_text();
1326 if (cell instanceof codecell.CodeCell) {
1359 if (cell instanceof codecell.CodeCell) {
1327 cell.set_text(text+'\n'+lower_text);
1360 cell.set_text(text+'\n'+lower_text);
1328 } else {
1361 } else {
1329 cell.unrender(); // Must unrender before we set_text.
1362 cell.unrender(); // Must unrender before we set_text.
1330 cell.set_text(text+'\n\n'+lower_text);
1363 cell.set_text(text+'\n\n'+lower_text);
1331 if (render) {
1364 if (render) {
1332 // The rendered state of the final cell should match
1365 // The rendered state of the final cell should match
1333 // that of the original selected cell;
1366 // that of the original selected cell;
1334 cell.render();
1367 cell.render();
1335 }
1368 }
1336 }
1369 }
1337 this.delete_cell(index+1);
1370 this.delete_cell(index+1);
1338 this.select(this.find_cell_index(cell));
1371 this.select(this.find_cell_index(cell));
1339 }
1372 }
1340 };
1373 };
1341
1374
1342
1375
1343 // Cell collapsing and output clearing
1376 // Cell collapsing and output clearing
1344
1377
1345 /**
1378 /**
1346 * Hide a cell's output.
1379 * Hide a cell's output.
1347 *
1380 *
1348 * @method collapse_output
1381 * @method collapse_output
1349 * @param {Number} index A cell's numeric index
1382 * @param {Number} index A cell's numeric index
1350 */
1383 */
1351 Notebook.prototype.collapse_output = function (index) {
1384 Notebook.prototype.collapse_output = function (index) {
1352 var i = this.index_or_selected(index);
1385 var i = this.index_or_selected(index);
1353 var cell = this.get_cell(i);
1386 var cell = this.get_cell(i);
1354 if (cell !== null && (cell instanceof codecell.CodeCell)) {
1387 if (cell !== null && (cell instanceof codecell.CodeCell)) {
1355 cell.collapse_output();
1388 cell.collapse_output();
1356 this.set_dirty(true);
1389 this.set_dirty(true);
1357 }
1390 }
1358 };
1391 };
1359
1392
1360 /**
1393 /**
1361 * Hide each code cell's output area.
1394 * Hide each code cell's output area.
1362 *
1395 *
1363 * @method collapse_all_output
1396 * @method collapse_all_output
1364 */
1397 */
1365 Notebook.prototype.collapse_all_output = function () {
1398 Notebook.prototype.collapse_all_output = function () {
1366 this.get_cells().map(function (cell, i) {
1399 this.get_cells().map(function (cell, i) {
1367 if (cell instanceof codecell.CodeCell) {
1400 if (cell instanceof codecell.CodeCell) {
1368 cell.collapse_output();
1401 cell.collapse_output();
1369 }
1402 }
1370 });
1403 });
1371 // this should not be set if the `collapse` key is removed from nbformat
1404 // this should not be set if the `collapse` key is removed from nbformat
1372 this.set_dirty(true);
1405 this.set_dirty(true);
1373 };
1406 };
1374
1407
1375 /**
1408 /**
1376 * Show a cell's output.
1409 * Show a cell's output.
1377 *
1410 *
1378 * @method expand_output
1411 * @method expand_output
1379 * @param {Number} index A cell's numeric index
1412 * @param {Number} index A cell's numeric index
1380 */
1413 */
1381 Notebook.prototype.expand_output = function (index) {
1414 Notebook.prototype.expand_output = function (index) {
1382 var i = this.index_or_selected(index);
1415 var i = this.index_or_selected(index);
1383 var cell = this.get_cell(i);
1416 var cell = this.get_cell(i);
1384 if (cell !== null && (cell instanceof codecell.CodeCell)) {
1417 if (cell !== null && (cell instanceof codecell.CodeCell)) {
1385 cell.expand_output();
1418 cell.expand_output();
1386 this.set_dirty(true);
1419 this.set_dirty(true);
1387 }
1420 }
1388 };
1421 };
1389
1422
1390 /**
1423 /**
1391 * Expand each code cell's output area, and remove scrollbars.
1424 * Expand each code cell's output area, and remove scrollbars.
1392 *
1425 *
1393 * @method expand_all_output
1426 * @method expand_all_output
1394 */
1427 */
1395 Notebook.prototype.expand_all_output = function () {
1428 Notebook.prototype.expand_all_output = function () {
1396 this.get_cells().map(function (cell, i) {
1429 this.get_cells().map(function (cell, i) {
1397 if (cell instanceof codecell.CodeCell) {
1430 if (cell instanceof codecell.CodeCell) {
1398 cell.expand_output();
1431 cell.expand_output();
1399 }
1432 }
1400 });
1433 });
1401 // this should not be set if the `collapse` key is removed from nbformat
1434 // this should not be set if the `collapse` key is removed from nbformat
1402 this.set_dirty(true);
1435 this.set_dirty(true);
1403 };
1436 };
1404
1437
1405 /**
1438 /**
1406 * Clear the selected CodeCell's output area.
1439 * Clear the selected CodeCell's output area.
1407 *
1440 *
1408 * @method clear_output
1441 * @method clear_output
1409 * @param {Number} index A cell's numeric index
1442 * @param {Number} index A cell's numeric index
1410 */
1443 */
1411 Notebook.prototype.clear_output = function (index) {
1444 Notebook.prototype.clear_output = function (index) {
1412 var i = this.index_or_selected(index);
1445 var i = this.index_or_selected(index);
1413 var cell = this.get_cell(i);
1446 var cell = this.get_cell(i);
1414 if (cell !== null && (cell instanceof codecell.CodeCell)) {
1447 if (cell !== null && (cell instanceof codecell.CodeCell)) {
1415 cell.clear_output();
1448 cell.clear_output();
1416 this.set_dirty(true);
1449 this.set_dirty(true);
1417 }
1450 }
1418 };
1451 };
1419
1452
1420 /**
1453 /**
1421 * Clear each code cell's output area.
1454 * Clear each code cell's output area.
1422 *
1455 *
1423 * @method clear_all_output
1456 * @method clear_all_output
1424 */
1457 */
1425 Notebook.prototype.clear_all_output = function () {
1458 Notebook.prototype.clear_all_output = function () {
1426 this.get_cells().map(function (cell, i) {
1459 this.get_cells().map(function (cell, i) {
1427 if (cell instanceof codecell.CodeCell) {
1460 if (cell instanceof codecell.CodeCell) {
1428 cell.clear_output();
1461 cell.clear_output();
1429 }
1462 }
1430 });
1463 });
1431 this.set_dirty(true);
1464 this.set_dirty(true);
1432 };
1465 };
1433
1466
1434 /**
1467 /**
1435 * Scroll the selected CodeCell's output area.
1468 * Scroll the selected CodeCell's output area.
1436 *
1469 *
1437 * @method scroll_output
1470 * @method scroll_output
1438 * @param {Number} index A cell's numeric index
1471 * @param {Number} index A cell's numeric index
1439 */
1472 */
1440 Notebook.prototype.scroll_output = function (index) {
1473 Notebook.prototype.scroll_output = function (index) {
1441 var i = this.index_or_selected(index);
1474 var i = this.index_or_selected(index);
1442 var cell = this.get_cell(i);
1475 var cell = this.get_cell(i);
1443 if (cell !== null && (cell instanceof codecell.CodeCell)) {
1476 if (cell !== null && (cell instanceof codecell.CodeCell)) {
1444 cell.scroll_output();
1477 cell.scroll_output();
1445 this.set_dirty(true);
1478 this.set_dirty(true);
1446 }
1479 }
1447 };
1480 };
1448
1481
1449 /**
1482 /**
1450 * Expand each code cell's output area, and add a scrollbar for long output.
1483 * Expand each code cell's output area, and add a scrollbar for long output.
1451 *
1484 *
1452 * @method scroll_all_output
1485 * @method scroll_all_output
1453 */
1486 */
1454 Notebook.prototype.scroll_all_output = function () {
1487 Notebook.prototype.scroll_all_output = function () {
1455 this.get_cells().map(function (cell, i) {
1488 this.get_cells().map(function (cell, i) {
1456 if (cell instanceof codecell.CodeCell) {
1489 if (cell instanceof codecell.CodeCell) {
1457 cell.scroll_output();
1490 cell.scroll_output();
1458 }
1491 }
1459 });
1492 });
1460 // this should not be set if the `collapse` key is removed from nbformat
1493 // this should not be set if the `collapse` key is removed from nbformat
1461 this.set_dirty(true);
1494 this.set_dirty(true);
1462 };
1495 };
1463
1496
1464 /** Toggle whether a cell's output is collapsed or expanded.
1497 /** Toggle whether a cell's output is collapsed or expanded.
1465 *
1498 *
1466 * @method toggle_output
1499 * @method toggle_output
1467 * @param {Number} index A cell's numeric index
1500 * @param {Number} index A cell's numeric index
1468 */
1501 */
1469 Notebook.prototype.toggle_output = function (index) {
1502 Notebook.prototype.toggle_output = function (index) {
1470 var i = this.index_or_selected(index);
1503 var i = this.index_or_selected(index);
1471 var cell = this.get_cell(i);
1504 var cell = this.get_cell(i);
1472 if (cell !== null && (cell instanceof codecell.CodeCell)) {
1505 if (cell !== null && (cell instanceof codecell.CodeCell)) {
1473 cell.toggle_output();
1506 cell.toggle_output();
1474 this.set_dirty(true);
1507 this.set_dirty(true);
1475 }
1508 }
1476 };
1509 };
1477
1510
1478 /**
1511 /**
1479 * Hide/show the output of all cells.
1512 * Hide/show the output of all cells.
1480 *
1513 *
1481 * @method toggle_all_output
1514 * @method toggle_all_output
1482 */
1515 */
1483 Notebook.prototype.toggle_all_output = function () {
1516 Notebook.prototype.toggle_all_output = function () {
1484 this.get_cells().map(function (cell, i) {
1517 this.get_cells().map(function (cell, i) {
1485 if (cell instanceof codecell.CodeCell) {
1518 if (cell instanceof codecell.CodeCell) {
1486 cell.toggle_output();
1519 cell.toggle_output();
1487 }
1520 }
1488 });
1521 });
1489 // this should not be set if the `collapse` key is removed from nbformat
1522 // this should not be set if the `collapse` key is removed from nbformat
1490 this.set_dirty(true);
1523 this.set_dirty(true);
1491 };
1524 };
1492
1525
1493 /**
1526 /**
1494 * Toggle a scrollbar for long cell outputs.
1527 * Toggle a scrollbar for long cell outputs.
1495 *
1528 *
1496 * @method toggle_output_scroll
1529 * @method toggle_output_scroll
1497 * @param {Number} index A cell's numeric index
1530 * @param {Number} index A cell's numeric index
1498 */
1531 */
1499 Notebook.prototype.toggle_output_scroll = function (index) {
1532 Notebook.prototype.toggle_output_scroll = function (index) {
1500 var i = this.index_or_selected(index);
1533 var i = this.index_or_selected(index);
1501 var cell = this.get_cell(i);
1534 var cell = this.get_cell(i);
1502 if (cell !== null && (cell instanceof codecell.CodeCell)) {
1535 if (cell !== null && (cell instanceof codecell.CodeCell)) {
1503 cell.toggle_output_scroll();
1536 cell.toggle_output_scroll();
1504 this.set_dirty(true);
1537 this.set_dirty(true);
1505 }
1538 }
1506 };
1539 };
1507
1540
1508 /**
1541 /**
1509 * Toggle the scrolling of long output on all cells.
1542 * Toggle the scrolling of long output on all cells.
1510 *
1543 *
1511 * @method toggle_all_output_scrolling
1544 * @method toggle_all_output_scrolling
1512 */
1545 */
1513 Notebook.prototype.toggle_all_output_scroll = function () {
1546 Notebook.prototype.toggle_all_output_scroll = function () {
1514 this.get_cells().map(function (cell, i) {
1547 this.get_cells().map(function (cell, i) {
1515 if (cell instanceof codecell.CodeCell) {
1548 if (cell instanceof codecell.CodeCell) {
1516 cell.toggle_output_scroll();
1549 cell.toggle_output_scroll();
1517 }
1550 }
1518 });
1551 });
1519 // this should not be set if the `collapse` key is removed from nbformat
1552 // this should not be set if the `collapse` key is removed from nbformat
1520 this.set_dirty(true);
1553 this.set_dirty(true);
1521 };
1554 };
1522
1555
1523 // Other cell functions: line numbers, ...
1556 // Other cell functions: line numbers, ...
1524
1557
1525 /**
1558 /**
1526 * Toggle line numbers in the selected cell's input area.
1559 * Toggle line numbers in the selected cell's input area.
1527 *
1560 *
1528 * @method cell_toggle_line_numbers
1561 * @method cell_toggle_line_numbers
1529 */
1562 */
1530 Notebook.prototype.cell_toggle_line_numbers = function() {
1563 Notebook.prototype.cell_toggle_line_numbers = function() {
1531 this.get_selected_cell().toggle_line_numbers();
1564 this.get_selected_cell().toggle_line_numbers();
1532 };
1565 };
1533
1566
1534 /**
1567 /**
1535 * Set the codemirror mode for all code cells, including the default for
1568 * Set the codemirror mode for all code cells, including the default for
1536 * new code cells.
1569 * new code cells.
1537 *
1570 *
1538 * @method set_codemirror_mode
1571 * @method set_codemirror_mode
1539 */
1572 */
1540 Notebook.prototype.set_codemirror_mode = function(newmode){
1573 Notebook.prototype.set_codemirror_mode = function(newmode){
1541 if (newmode === this.codemirror_mode) {
1574 if (newmode === this.codemirror_mode) {
1542 return;
1575 return;
1543 }
1576 }
1544 this.codemirror_mode = newmode;
1577 this.codemirror_mode = newmode;
1545 codecell.CodeCell.options_default.cm_config.mode = newmode;
1578 codecell.CodeCell.options_default.cm_config.mode = newmode;
1546 var modename = newmode.mode || newmode.name || newmode;
1579 var modename = newmode.mode || newmode.name || newmode;
1547
1580
1548 var that = this;
1581 var that = this;
1549 utils.requireCodeMirrorMode(modename, function () {
1582 utils.requireCodeMirrorMode(modename, function () {
1550 that.get_cells().map(function(cell, i) {
1583 that.get_cells().map(function(cell, i) {
1551 if (cell.cell_type === 'code'){
1584 if (cell.cell_type === 'code'){
1552 cell.code_mirror.setOption('mode', newmode);
1585 cell.code_mirror.setOption('mode', newmode);
1553 // This is currently redundant, because cm_config ends up as
1586 // This is currently redundant, because cm_config ends up as
1554 // codemirror's own .options object, but I don't want to
1587 // codemirror's own .options object, but I don't want to
1555 // rely on that.
1588 // rely on that.
1556 cell.cm_config.mode = newmode;
1589 cell.cm_config.mode = newmode;
1557 }
1590 }
1558 });
1591 });
1559 });
1592 });
1560 };
1593 };
1561
1594
1562 // Session related things
1595 // Session related things
1563
1596
1564 /**
1597 /**
1565 * Start a new session and set it on each code cell.
1598 * Start a new session and set it on each code cell.
1566 *
1599 *
1567 * @method start_session
1600 * @method start_session
1568 */
1601 */
1569 Notebook.prototype.start_session = function (kernel_name) {
1602 Notebook.prototype.start_session = function (kernel_name) {
1570 if (this._session_starting) {
1603 if (this._session_starting) {
1571 throw new session.SessionAlreadyStarting();
1604 throw new session.SessionAlreadyStarting();
1572 }
1605 }
1573 this._session_starting = true;
1606 this._session_starting = true;
1574
1607
1575 var options = {
1608 var options = {
1576 base_url: this.base_url,
1609 base_url: this.base_url,
1577 ws_url: this.ws_url,
1610 ws_url: this.ws_url,
1578 notebook_path: this.notebook_path,
1611 notebook_path: this.notebook_path,
1579 notebook_name: this.notebook_name,
1612 notebook_name: this.notebook_name,
1580 kernel_name: kernel_name,
1613 kernel_name: kernel_name,
1581 notebook: this
1614 notebook: this
1582 };
1615 };
1583
1616
1584 var success = $.proxy(this._session_started, this);
1617 var success = $.proxy(this._session_started, this);
1585 var failure = $.proxy(this._session_start_failed, this);
1618 var failure = $.proxy(this._session_start_failed, this);
1586
1619
1587 if (this.session !== null) {
1620 if (this.session !== null) {
1588 this.session.restart(options, success, failure);
1621 this.session.restart(options, success, failure);
1589 } else {
1622 } else {
1590 this.session = new session.Session(options);
1623 this.session = new session.Session(options);
1591 this.session.start(success, failure);
1624 this.session.start(success, failure);
1592 }
1625 }
1593 };
1626 };
1594
1627
1595
1628
1596 /**
1629 /**
1597 * Once a session is started, link the code cells to the kernel and pass the
1630 * Once a session is started, link the code cells to the kernel and pass the
1598 * comm manager to the widget manager
1631 * comm manager to the widget manager
1599 *
1632 *
1600 */
1633 */
1601 Notebook.prototype._session_started = function (){
1634 Notebook.prototype._session_started = function (){
1602 this._session_starting = false;
1635 this._session_starting = false;
1603 this.kernel = this.session.kernel;
1636 this.kernel = this.session.kernel;
1604 var ncells = this.ncells();
1637 var ncells = this.ncells();
1605 for (var i=0; i<ncells; i++) {
1638 for (var i=0; i<ncells; i++) {
1606 var cell = this.get_cell(i);
1639 var cell = this.get_cell(i);
1607 if (cell instanceof codecell.CodeCell) {
1640 if (cell instanceof codecell.CodeCell) {
1608 cell.set_kernel(this.session.kernel);
1641 cell.set_kernel(this.session.kernel);
1609 }
1642 }
1610 }
1643 }
1611 };
1644 };
1612 Notebook.prototype._session_start_failed = function (jqxhr, status, error){
1645 Notebook.prototype._session_start_failed = function (jqxhr, status, error){
1613 this._session_starting = false;
1646 this._session_starting = false;
1614 utils.log_ajax_error(jqxhr, status, error);
1647 utils.log_ajax_error(jqxhr, status, error);
1615 };
1648 };
1616
1649
1617 /**
1650 /**
1618 * Prompt the user to restart the IPython kernel.
1651 * Prompt the user to restart the IPython kernel.
1619 *
1652 *
1620 * @method restart_kernel
1653 * @method restart_kernel
1621 */
1654 */
1622 Notebook.prototype.restart_kernel = function () {
1655 Notebook.prototype.restart_kernel = function () {
1623 var that = this;
1656 var that = this;
1624 dialog.modal({
1657 dialog.modal({
1625 notebook: this,
1658 notebook: this,
1626 keyboard_manager: this.keyboard_manager,
1659 keyboard_manager: this.keyboard_manager,
1627 title : "Restart kernel or continue running?",
1660 title : "Restart kernel or continue running?",
1628 body : $("<p/>").text(
1661 body : $("<p/>").text(
1629 'Do you want to restart the current kernel? You will lose all variables defined in it.'
1662 'Do you want to restart the current kernel? You will lose all variables defined in it.'
1630 ),
1663 ),
1631 buttons : {
1664 buttons : {
1632 "Continue running" : {},
1665 "Continue running" : {},
1633 "Restart" : {
1666 "Restart" : {
1634 "class" : "btn-danger",
1667 "class" : "btn-danger",
1635 "click" : function() {
1668 "click" : function() {
1636 that.kernel.restart();
1669 that.kernel.restart();
1637 }
1670 }
1638 }
1671 }
1639 }
1672 }
1640 });
1673 });
1641 };
1674 };
1642
1675
1643 /**
1676 /**
1644 * Execute or render cell outputs and go into command mode.
1677 * Execute or render cell outputs and go into command mode.
1645 *
1678 *
1646 * @method execute_cell
1679 * @method execute_cell
1647 */
1680 */
1648 Notebook.prototype.execute_cell = function () {
1681 Notebook.prototype.execute_cell = function () {
1649 // mode = shift, ctrl, alt
1682 // mode = shift, ctrl, alt
1650 var cell = this.get_selected_cell();
1683 var cell = this.get_selected_cell();
1651
1684
1652 cell.execute();
1685 cell.execute();
1653 this.command_mode();
1686 this.command_mode();
1654 this.set_dirty(true);
1687 this.set_dirty(true);
1655 };
1688 };
1656
1689
1657 /**
1690 /**
1658 * Execute or render cell outputs and insert a new cell below.
1691 * Execute or render cell outputs and insert a new cell below.
1659 *
1692 *
1660 * @method execute_cell_and_insert_below
1693 * @method execute_cell_and_insert_below
1661 */
1694 */
1662 Notebook.prototype.execute_cell_and_insert_below = function () {
1695 Notebook.prototype.execute_cell_and_insert_below = function () {
1663 var cell = this.get_selected_cell();
1696 var cell = this.get_selected_cell();
1664 var cell_index = this.find_cell_index(cell);
1697 var cell_index = this.find_cell_index(cell);
1665
1698
1666 cell.execute();
1699 cell.execute();
1667
1700
1668 // If we are at the end always insert a new cell and return
1701 // If we are at the end always insert a new cell and return
1669 if (cell_index === (this.ncells()-1)) {
1702 if (cell_index === (this.ncells()-1)) {
1670 this.command_mode();
1703 this.command_mode();
1671 this.insert_cell_below();
1704 this.insert_cell_below();
1672 this.select(cell_index+1);
1705 this.select(cell_index+1);
1673 this.edit_mode();
1706 this.edit_mode();
1674 this.scroll_to_bottom();
1707 this.scroll_to_bottom();
1675 this.set_dirty(true);
1708 this.set_dirty(true);
1676 return;
1709 return;
1677 }
1710 }
1678
1711
1679 this.command_mode();
1712 this.command_mode();
1680 this.insert_cell_below();
1713 this.insert_cell_below();
1681 this.select(cell_index+1);
1714 this.select(cell_index+1);
1682 this.edit_mode();
1715 this.edit_mode();
1683 this.set_dirty(true);
1716 this.set_dirty(true);
1684 };
1717 };
1685
1718
1686 /**
1719 /**
1687 * Execute or render cell outputs and select the next cell.
1720 * Execute or render cell outputs and select the next cell.
1688 *
1721 *
1689 * @method execute_cell_and_select_below
1722 * @method execute_cell_and_select_below
1690 */
1723 */
1691 Notebook.prototype.execute_cell_and_select_below = function () {
1724 Notebook.prototype.execute_cell_and_select_below = function () {
1692
1725
1693 var cell = this.get_selected_cell();
1726 var cell = this.get_selected_cell();
1694 var cell_index = this.find_cell_index(cell);
1727 var cell_index = this.find_cell_index(cell);
1695
1728
1696 cell.execute();
1729 cell.execute();
1697
1730
1698 // If we are at the end always insert a new cell and return
1731 // If we are at the end always insert a new cell and return
1699 if (cell_index === (this.ncells()-1)) {
1732 if (cell_index === (this.ncells()-1)) {
1700 this.command_mode();
1733 this.command_mode();
1701 this.insert_cell_below();
1734 this.insert_cell_below();
1702 this.select(cell_index+1);
1735 this.select(cell_index+1);
1703 this.edit_mode();
1736 this.edit_mode();
1704 this.scroll_to_bottom();
1737 this.scroll_to_bottom();
1705 this.set_dirty(true);
1738 this.set_dirty(true);
1706 return;
1739 return;
1707 }
1740 }
1708
1741
1709 this.command_mode();
1742 this.command_mode();
1710 this.select(cell_index+1);
1743 this.select(cell_index+1);
1711 this.focus_cell();
1744 this.focus_cell();
1712 this.set_dirty(true);
1745 this.set_dirty(true);
1713 };
1746 };
1714
1747
1715 /**
1748 /**
1716 * Execute all cells below the selected cell.
1749 * Execute all cells below the selected cell.
1717 *
1750 *
1718 * @method execute_cells_below
1751 * @method execute_cells_below
1719 */
1752 */
1720 Notebook.prototype.execute_cells_below = function () {
1753 Notebook.prototype.execute_cells_below = function () {
1721 this.execute_cell_range(this.get_selected_index(), this.ncells());
1754 this.execute_cell_range(this.get_selected_index(), this.ncells());
1722 this.scroll_to_bottom();
1755 this.scroll_to_bottom();
1723 };
1756 };
1724
1757
1725 /**
1758 /**
1726 * Execute all cells above the selected cell.
1759 * Execute all cells above the selected cell.
1727 *
1760 *
1728 * @method execute_cells_above
1761 * @method execute_cells_above
1729 */
1762 */
1730 Notebook.prototype.execute_cells_above = function () {
1763 Notebook.prototype.execute_cells_above = function () {
1731 this.execute_cell_range(0, this.get_selected_index());
1764 this.execute_cell_range(0, this.get_selected_index());
1732 };
1765 };
1733
1766
1734 /**
1767 /**
1735 * Execute all cells.
1768 * Execute all cells.
1736 *
1769 *
1737 * @method execute_all_cells
1770 * @method execute_all_cells
1738 */
1771 */
1739 Notebook.prototype.execute_all_cells = function () {
1772 Notebook.prototype.execute_all_cells = function () {
1740 this.execute_cell_range(0, this.ncells());
1773 this.execute_cell_range(0, this.ncells());
1741 this.scroll_to_bottom();
1774 this.scroll_to_bottom();
1742 };
1775 };
1743
1776
1744 /**
1777 /**
1745 * Execute a contiguous range of cells.
1778 * Execute a contiguous range of cells.
1746 *
1779 *
1747 * @method execute_cell_range
1780 * @method execute_cell_range
1748 * @param {Number} start Index of the first cell to execute (inclusive)
1781 * @param {Number} start Index of the first cell to execute (inclusive)
1749 * @param {Number} end Index of the last cell to execute (exclusive)
1782 * @param {Number} end Index of the last cell to execute (exclusive)
1750 */
1783 */
1751 Notebook.prototype.execute_cell_range = function (start, end) {
1784 Notebook.prototype.execute_cell_range = function (start, end) {
1752 this.command_mode();
1785 this.command_mode();
1753 for (var i=start; i<end; i++) {
1786 for (var i=start; i<end; i++) {
1754 this.select(i);
1787 this.select(i);
1755 this.execute_cell();
1788 this.execute_cell();
1756 }
1789 }
1757 };
1790 };
1758
1791
1759 // Persistance and loading
1792 // Persistance and loading
1760
1793
1761 /**
1794 /**
1762 * Getter method for this notebook's name.
1795 * Getter method for this notebook's name.
1763 *
1796 *
1764 * @method get_notebook_name
1797 * @method get_notebook_name
1765 * @return {String} This notebook's name (excluding file extension)
1798 * @return {String} This notebook's name (excluding file extension)
1766 */
1799 */
1767 Notebook.prototype.get_notebook_name = function () {
1800 Notebook.prototype.get_notebook_name = function () {
1768 var nbname = this.notebook_name.substring(0,this.notebook_name.length-6);
1801 var nbname = this.notebook_name.substring(0,this.notebook_name.length-6);
1769 return nbname;
1802 return nbname;
1770 };
1803 };
1771
1804
1772 /**
1805 /**
1773 * Setter method for this notebook's name.
1806 * Setter method for this notebook's name.
1774 *
1807 *
1775 * @method set_notebook_name
1808 * @method set_notebook_name
1776 * @param {String} name A new name for this notebook
1809 * @param {String} name A new name for this notebook
1777 */
1810 */
1778 Notebook.prototype.set_notebook_name = function (name) {
1811 Notebook.prototype.set_notebook_name = function (name) {
1779 var parent = utils.url_path_split(this.notebook_path)[0];
1812 var parent = utils.url_path_split(this.notebook_path)[0];
1780 this.notebook_name = name;
1813 this.notebook_name = name;
1781 this.notebook_path = utils.url_path_join(parent, name);
1814 this.notebook_path = utils.url_path_join(parent, name);
1782 };
1815 };
1783
1816
1784 /**
1817 /**
1785 * Check that a notebook's name is valid.
1818 * Check that a notebook's name is valid.
1786 *
1819 *
1787 * @method test_notebook_name
1820 * @method test_notebook_name
1788 * @param {String} nbname A name for this notebook
1821 * @param {String} nbname A name for this notebook
1789 * @return {Boolean} True if the name is valid, false if invalid
1822 * @return {Boolean} True if the name is valid, false if invalid
1790 */
1823 */
1791 Notebook.prototype.test_notebook_name = function (nbname) {
1824 Notebook.prototype.test_notebook_name = function (nbname) {
1792 nbname = nbname || '';
1825 nbname = nbname || '';
1793 if (nbname.length>0 && !this.notebook_name_blacklist_re.test(nbname)) {
1826 if (nbname.length>0 && !this.notebook_name_blacklist_re.test(nbname)) {
1794 return true;
1827 return true;
1795 } else {
1828 } else {
1796 return false;
1829 return false;
1797 }
1830 }
1798 };
1831 };
1799
1832
1800 /**
1833 /**
1801 * Load a notebook from JSON (.ipynb).
1834 * Load a notebook from JSON (.ipynb).
1802 *
1835 *
1803 * @method fromJSON
1836 * @method fromJSON
1804 * @param {Object} data JSON representation of a notebook
1837 * @param {Object} data JSON representation of a notebook
1805 */
1838 */
1806 Notebook.prototype.fromJSON = function (data) {
1839 Notebook.prototype.fromJSON = function (data) {
1807
1840
1808 var content = data.content;
1841 var content = data.content;
1809 var ncells = this.ncells();
1842 var ncells = this.ncells();
1810 var i;
1843 var i;
1811 for (i=0; i<ncells; i++) {
1844 for (i=0; i<ncells; i++) {
1812 // Always delete cell 0 as they get renumbered as they are deleted.
1845 // Always delete cell 0 as they get renumbered as they are deleted.
1813 this.delete_cell(0);
1846 this.delete_cell(0);
1814 }
1847 }
1815 // Save the metadata and name.
1848 // Save the metadata and name.
1816 this.metadata = content.metadata;
1849 this.metadata = content.metadata;
1817 this.notebook_name = data.name;
1850 this.notebook_name = data.name;
1818 this.notebook_path = data.path;
1851 this.notebook_path = data.path;
1819 var trusted = true;
1852 var trusted = true;
1820
1853
1821 // Trigger an event changing the kernel spec - this will set the default
1854 // Trigger an event changing the kernel spec - this will set the default
1822 // codemirror mode
1855 // codemirror mode
1823 if (this.metadata.kernelspec !== undefined) {
1856 if (this.metadata.kernelspec !== undefined) {
1824 this.events.trigger('spec_changed.Kernel', this.metadata.kernelspec);
1857 this.events.trigger('spec_changed.Kernel', this.metadata.kernelspec);
1825 }
1858 }
1826
1859
1827 // Set the codemirror mode from language_info metadata
1860 // Set the codemirror mode from language_info metadata
1828 if (this.metadata.language_info !== undefined) {
1861 if (this.metadata.language_info !== undefined) {
1829 var langinfo = this.metadata.language_info;
1862 var langinfo = this.metadata.language_info;
1830 // Mode 'null' should be plain, unhighlighted text.
1863 // Mode 'null' should be plain, unhighlighted text.
1831 var cm_mode = langinfo.codemirror_mode || langinfo.language || 'null';
1864 var cm_mode = langinfo.codemirror_mode || langinfo.language || 'null';
1832 this.set_codemirror_mode(cm_mode);
1865 this.set_codemirror_mode(cm_mode);
1833 }
1866 }
1834
1867
1835 var new_cells = content.cells;
1868 var new_cells = content.cells;
1836 ncells = new_cells.length;
1869 ncells = new_cells.length;
1837 var cell_data = null;
1870 var cell_data = null;
1838 var new_cell = null;
1871 var new_cell = null;
1839 for (i=0; i<ncells; i++) {
1872 for (i=0; i<ncells; i++) {
1840 cell_data = new_cells[i];
1873 cell_data = new_cells[i];
1841 new_cell = this.insert_cell_at_index(cell_data.cell_type, i);
1874 new_cell = this.insert_cell_at_index(cell_data.cell_type, i);
1842 new_cell.fromJSON(cell_data);
1875 new_cell.fromJSON(cell_data);
1843 if (new_cell.cell_type == 'code' && !new_cell.output_area.trusted) {
1876 if (new_cell.cell_type == 'code' && !new_cell.output_area.trusted) {
1844 trusted = false;
1877 trusted = false;
1845 }
1878 }
1846 }
1879 }
1847 if (trusted !== this.trusted) {
1880 if (trusted !== this.trusted) {
1848 this.trusted = trusted;
1881 this.trusted = trusted;
1849 this.events.trigger("trust_changed.Notebook", trusted);
1882 this.events.trigger("trust_changed.Notebook", trusted);
1850 }
1883 }
1851 };
1884 };
1852
1885
1853 /**
1886 /**
1854 * Dump this notebook into a JSON-friendly object.
1887 * Dump this notebook into a JSON-friendly object.
1855 *
1888 *
1856 * @method toJSON
1889 * @method toJSON
1857 * @return {Object} A JSON-friendly representation of this notebook.
1890 * @return {Object} A JSON-friendly representation of this notebook.
1858 */
1891 */
1859 Notebook.prototype.toJSON = function () {
1892 Notebook.prototype.toJSON = function () {
1860 // remove the conversion indicator, which only belongs in-memory
1893 // remove the conversion indicator, which only belongs in-memory
1861 delete this.metadata.orig_nbformat;
1894 delete this.metadata.orig_nbformat;
1862 delete this.metadata.orig_nbformat_minor;
1895 delete this.metadata.orig_nbformat_minor;
1863
1896
1864 var cells = this.get_cells();
1897 var cells = this.get_cells();
1865 var ncells = cells.length;
1898 var ncells = cells.length;
1866 var cell_array = new Array(ncells);
1899 var cell_array = new Array(ncells);
1867 var trusted = true;
1900 var trusted = true;
1868 for (var i=0; i<ncells; i++) {
1901 for (var i=0; i<ncells; i++) {
1869 var cell = cells[i];
1902 var cell = cells[i];
1870 if (cell.cell_type == 'code' && !cell.output_area.trusted) {
1903 if (cell.cell_type == 'code' && !cell.output_area.trusted) {
1871 trusted = false;
1904 trusted = false;
1872 }
1905 }
1873 cell_array[i] = cell.toJSON();
1906 cell_array[i] = cell.toJSON();
1874 }
1907 }
1875 var data = {
1908 var data = {
1876 cells: cell_array,
1909 cells: cell_array,
1877 metadata: this.metadata,
1910 metadata: this.metadata,
1878 nbformat: this.nbformat,
1911 nbformat: this.nbformat,
1879 nbformat_minor: this.nbformat_minor
1912 nbformat_minor: this.nbformat_minor
1880 };
1913 };
1881 if (trusted != this.trusted) {
1914 if (trusted != this.trusted) {
1882 this.trusted = trusted;
1915 this.trusted = trusted;
1883 this.events.trigger("trust_changed.Notebook", trusted);
1916 this.events.trigger("trust_changed.Notebook", trusted);
1884 }
1917 }
1885 return data;
1918 return data;
1886 };
1919 };
1887
1920
1888 /**
1921 /**
1889 * Start an autosave timer, for periodically saving the notebook.
1922 * Start an autosave timer, for periodically saving the notebook.
1890 *
1923 *
1891 * @method set_autosave_interval
1924 * @method set_autosave_interval
1892 * @param {Integer} interval the autosave interval in milliseconds
1925 * @param {Integer} interval the autosave interval in milliseconds
1893 */
1926 */
1894 Notebook.prototype.set_autosave_interval = function (interval) {
1927 Notebook.prototype.set_autosave_interval = function (interval) {
1895 var that = this;
1928 var that = this;
1896 // clear previous interval, so we don't get simultaneous timers
1929 // clear previous interval, so we don't get simultaneous timers
1897 if (this.autosave_timer) {
1930 if (this.autosave_timer) {
1898 clearInterval(this.autosave_timer);
1931 clearInterval(this.autosave_timer);
1899 }
1932 }
1900 if (!this.writable) {
1933 if (!this.writable) {
1901 // disable autosave if not writable
1934 // disable autosave if not writable
1902 interval = 0;
1935 interval = 0;
1903 }
1936 }
1904
1937
1905 this.autosave_interval = this.minimum_autosave_interval = interval;
1938 this.autosave_interval = this.minimum_autosave_interval = interval;
1906 if (interval) {
1939 if (interval) {
1907 this.autosave_timer = setInterval(function() {
1940 this.autosave_timer = setInterval(function() {
1908 if (that.dirty) {
1941 if (that.dirty) {
1909 that.save_notebook();
1942 that.save_notebook();
1910 }
1943 }
1911 }, interval);
1944 }, interval);
1912 this.events.trigger("autosave_enabled.Notebook", interval);
1945 this.events.trigger("autosave_enabled.Notebook", interval);
1913 } else {
1946 } else {
1914 this.autosave_timer = null;
1947 this.autosave_timer = null;
1915 this.events.trigger("autosave_disabled.Notebook");
1948 this.events.trigger("autosave_disabled.Notebook");
1916 }
1949 }
1917 };
1950 };
1918
1951
1919 /**
1952 /**
1920 * Save this notebook on the server. This becomes a notebook instance's
1953 * Save this notebook on the server. This becomes a notebook instance's
1921 * .save_notebook method *after* the entire notebook has been loaded.
1954 * .save_notebook method *after* the entire notebook has been loaded.
1922 *
1955 *
1923 * @method save_notebook
1956 * @method save_notebook
1924 */
1957 */
1925 Notebook.prototype.save_notebook = function () {
1958 Notebook.prototype.save_notebook = function () {
1926 if (!this._fully_loaded) {
1959 if (!this._fully_loaded) {
1927 this.events.trigger('notebook_save_failed.Notebook',
1960 this.events.trigger('notebook_save_failed.Notebook',
1928 new Error("Load failed, save is disabled")
1961 new Error("Load failed, save is disabled")
1929 );
1962 );
1930 return;
1963 return;
1931 } else if (!this.writable) {
1964 } else if (!this.writable) {
1932 this.events.trigger('notebook_save_failed.Notebook',
1965 this.events.trigger('notebook_save_failed.Notebook',
1933 new Error("Notebook is read-only")
1966 new Error("Notebook is read-only")
1934 );
1967 );
1935 return;
1968 return;
1936 }
1969 }
1937
1970
1938 // Create a JSON model to be sent to the server.
1971 // Create a JSON model to be sent to the server.
1939 var model = {
1972 var model = {
1940 type : "notebook",
1973 type : "notebook",
1941 content : this.toJSON()
1974 content : this.toJSON()
1942 };
1975 };
1943 // time the ajax call for autosave tuning purposes.
1976 // time the ajax call for autosave tuning purposes.
1944 var start = new Date().getTime();
1977 var start = new Date().getTime();
1945
1978
1946 var that = this;
1979 var that = this;
1947 return this.contents.save(this.notebook_path, model).then(
1980 return this.contents.save(this.notebook_path, model).then(
1948 $.proxy(this.save_notebook_success, this, start),
1981 $.proxy(this.save_notebook_success, this, start),
1949 function (error) {
1982 function (error) {
1950 that.events.trigger('notebook_save_failed.Notebook', error);
1983 that.events.trigger('notebook_save_failed.Notebook', error);
1951 }
1984 }
1952 );
1985 );
1953 };
1986 };
1954
1987
1955 /**
1988 /**
1956 * Success callback for saving a notebook.
1989 * Success callback for saving a notebook.
1957 *
1990 *
1958 * @method save_notebook_success
1991 * @method save_notebook_success
1959 * @param {Integer} start Time when the save request start
1992 * @param {Integer} start Time when the save request start
1960 * @param {Object} data JSON representation of a notebook
1993 * @param {Object} data JSON representation of a notebook
1961 */
1994 */
1962 Notebook.prototype.save_notebook_success = function (start, data) {
1995 Notebook.prototype.save_notebook_success = function (start, data) {
1963 this.set_dirty(false);
1996 this.set_dirty(false);
1964 if (data.message) {
1997 if (data.message) {
1965 // save succeeded, but validation failed.
1998 // save succeeded, but validation failed.
1966 var body = $("<div>");
1999 var body = $("<div>");
1967 var title = "Notebook validation failed";
2000 var title = "Notebook validation failed";
1968
2001
1969 body.append($("<p>").text(
2002 body.append($("<p>").text(
1970 "The save operation succeeded," +
2003 "The save operation succeeded," +
1971 " but the notebook does not appear to be valid." +
2004 " but the notebook does not appear to be valid." +
1972 " The validation error was:"
2005 " The validation error was:"
1973 )).append($("<div>").addClass("validation-error").append(
2006 )).append($("<div>").addClass("validation-error").append(
1974 $("<pre>").text(data.message)
2007 $("<pre>").text(data.message)
1975 ));
2008 ));
1976 dialog.modal({
2009 dialog.modal({
1977 notebook: this,
2010 notebook: this,
1978 keyboard_manager: this.keyboard_manager,
2011 keyboard_manager: this.keyboard_manager,
1979 title: title,
2012 title: title,
1980 body: body,
2013 body: body,
1981 buttons : {
2014 buttons : {
1982 OK : {
2015 OK : {
1983 "class" : "btn-primary"
2016 "class" : "btn-primary"
1984 }
2017 }
1985 }
2018 }
1986 });
2019 });
1987 }
2020 }
1988 this.events.trigger('notebook_saved.Notebook');
2021 this.events.trigger('notebook_saved.Notebook');
1989 this._update_autosave_interval(start);
2022 this._update_autosave_interval(start);
1990 if (this._checkpoint_after_save) {
2023 if (this._checkpoint_after_save) {
1991 this.create_checkpoint();
2024 this.create_checkpoint();
1992 this._checkpoint_after_save = false;
2025 this._checkpoint_after_save = false;
1993 }
2026 }
1994 };
2027 };
1995
2028
1996 /**
2029 /**
1997 * update the autosave interval based on how long the last save took
2030 * update the autosave interval based on how long the last save took
1998 *
2031 *
1999 * @method _update_autosave_interval
2032 * @method _update_autosave_interval
2000 * @param {Integer} timestamp when the save request started
2033 * @param {Integer} timestamp when the save request started
2001 */
2034 */
2002 Notebook.prototype._update_autosave_interval = function (start) {
2035 Notebook.prototype._update_autosave_interval = function (start) {
2003 var duration = (new Date().getTime() - start);
2036 var duration = (new Date().getTime() - start);
2004 if (this.autosave_interval) {
2037 if (this.autosave_interval) {
2005 // new save interval: higher of 10x save duration or parameter (default 30 seconds)
2038 // new save interval: higher of 10x save duration or parameter (default 30 seconds)
2006 var interval = Math.max(10 * duration, this.minimum_autosave_interval);
2039 var interval = Math.max(10 * duration, this.minimum_autosave_interval);
2007 // round to 10 seconds, otherwise we will be setting a new interval too often
2040 // round to 10 seconds, otherwise we will be setting a new interval too often
2008 interval = 10000 * Math.round(interval / 10000);
2041 interval = 10000 * Math.round(interval / 10000);
2009 // set new interval, if it's changed
2042 // set new interval, if it's changed
2010 if (interval != this.autosave_interval) {
2043 if (interval != this.autosave_interval) {
2011 this.set_autosave_interval(interval);
2044 this.set_autosave_interval(interval);
2012 }
2045 }
2013 }
2046 }
2014 };
2047 };
2015
2048
2016 /**
2049 /**
2017 * Explicitly trust the output of this notebook.
2050 * Explicitly trust the output of this notebook.
2018 *
2051 *
2019 * @method trust_notebook
2052 * @method trust_notebook
2020 */
2053 */
2021 Notebook.prototype.trust_notebook = function () {
2054 Notebook.prototype.trust_notebook = function () {
2022 var body = $("<div>").append($("<p>")
2055 var body = $("<div>").append($("<p>")
2023 .text("A trusted IPython notebook may execute hidden malicious code ")
2056 .text("A trusted IPython notebook may execute hidden malicious code ")
2024 .append($("<strong>")
2057 .append($("<strong>")
2025 .append(
2058 .append(
2026 $("<em>").text("when you open it")
2059 $("<em>").text("when you open it")
2027 )
2060 )
2028 ).append(".").append(
2061 ).append(".").append(
2029 " Selecting trust will immediately reload this notebook in a trusted state."
2062 " Selecting trust will immediately reload this notebook in a trusted state."
2030 ).append(
2063 ).append(
2031 " For more information, see the "
2064 " For more information, see the "
2032 ).append($("<a>").attr("href", "http://ipython.org/ipython-doc/2/notebook/security.html")
2065 ).append($("<a>").attr("href", "http://ipython.org/ipython-doc/2/notebook/security.html")
2033 .text("IPython security documentation")
2066 .text("IPython security documentation")
2034 ).append(".")
2067 ).append(".")
2035 );
2068 );
2036
2069
2037 var nb = this;
2070 var nb = this;
2038 dialog.modal({
2071 dialog.modal({
2039 notebook: this,
2072 notebook: this,
2040 keyboard_manager: this.keyboard_manager,
2073 keyboard_manager: this.keyboard_manager,
2041 title: "Trust this notebook?",
2074 title: "Trust this notebook?",
2042 body: body,
2075 body: body,
2043
2076
2044 buttons: {
2077 buttons: {
2045 Cancel : {},
2078 Cancel : {},
2046 Trust : {
2079 Trust : {
2047 class : "btn-danger",
2080 class : "btn-danger",
2048 click : function () {
2081 click : function () {
2049 var cells = nb.get_cells();
2082 var cells = nb.get_cells();
2050 for (var i = 0; i < cells.length; i++) {
2083 for (var i = 0; i < cells.length; i++) {
2051 var cell = cells[i];
2084 var cell = cells[i];
2052 if (cell.cell_type == 'code') {
2085 if (cell.cell_type == 'code') {
2053 cell.output_area.trusted = true;
2086 cell.output_area.trusted = true;
2054 }
2087 }
2055 }
2088 }
2056 nb.events.on('notebook_saved.Notebook', function () {
2089 nb.events.on('notebook_saved.Notebook', function () {
2057 window.location.reload();
2090 window.location.reload();
2058 });
2091 });
2059 nb.save_notebook();
2092 nb.save_notebook();
2060 }
2093 }
2061 }
2094 }
2062 }
2095 }
2063 });
2096 });
2064 };
2097 };
2065
2098
2066 Notebook.prototype.copy_notebook = function () {
2099 Notebook.prototype.copy_notebook = function () {
2067 var that = this;
2100 var that = this;
2068 var base_url = this.base_url;
2101 var base_url = this.base_url;
2069 var w = window.open();
2102 var w = window.open();
2070 var parent = utils.url_path_split(this.notebook_path)[0];
2103 var parent = utils.url_path_split(this.notebook_path)[0];
2071 this.contents.copy(this.notebook_path, parent).then(
2104 this.contents.copy(this.notebook_path, parent).then(
2072 function (data) {
2105 function (data) {
2073 w.location = utils.url_join_encode(
2106 w.location = utils.url_join_encode(
2074 base_url, 'notebooks', data.path
2107 base_url, 'notebooks', data.path
2075 );
2108 );
2076 },
2109 },
2077 function(error) {
2110 function(error) {
2078 w.close();
2111 w.close();
2079 that.events.trigger('notebook_copy_failed', error);
2112 that.events.trigger('notebook_copy_failed', error);
2080 }
2113 }
2081 );
2114 );
2082 };
2115 };
2083
2116
2084 Notebook.prototype.rename = function (new_name) {
2117 Notebook.prototype.rename = function (new_name) {
2085 if (!new_name.match(/\.ipynb$/)) {
2118 if (!new_name.match(/\.ipynb$/)) {
2086 new_name = new_name + ".ipynb";
2119 new_name = new_name + ".ipynb";
2087 }
2120 }
2088
2121
2089 var that = this;
2122 var that = this;
2090 var parent = utils.url_path_split(this.notebook_path)[0];
2123 var parent = utils.url_path_split(this.notebook_path)[0];
2091 var new_path = utils.url_path_join(parent, new_name);
2124 var new_path = utils.url_path_join(parent, new_name);
2092 return this.contents.rename(this.notebook_path, new_path).then(
2125 return this.contents.rename(this.notebook_path, new_path).then(
2093 function (json) {
2126 function (json) {
2094 that.notebook_name = json.name;
2127 that.notebook_name = json.name;
2095 that.notebook_path = json.path;
2128 that.notebook_path = json.path;
2096 that.session.rename_notebook(json.path);
2129 that.session.rename_notebook(json.path);
2097 that.events.trigger('notebook_renamed.Notebook', json);
2130 that.events.trigger('notebook_renamed.Notebook', json);
2098 }
2131 }
2099 );
2132 );
2100 };
2133 };
2101
2134
2102 Notebook.prototype.delete = function () {
2135 Notebook.prototype.delete = function () {
2103 this.contents.delete(this.notebook_path);
2136 this.contents.delete(this.notebook_path);
2104 };
2137 };
2105
2138
2106 /**
2139 /**
2107 * Request a notebook's data from the server.
2140 * Request a notebook's data from the server.
2108 *
2141 *
2109 * @method load_notebook
2142 * @method load_notebook
2110 * @param {String} notebook_path A notebook to load
2143 * @param {String} notebook_path A notebook to load
2111 */
2144 */
2112 Notebook.prototype.load_notebook = function (notebook_path) {
2145 Notebook.prototype.load_notebook = function (notebook_path) {
2113 this.notebook_path = notebook_path;
2146 this.notebook_path = notebook_path;
2114 this.notebook_name = utils.url_path_split(this.notebook_path)[1];
2147 this.notebook_name = utils.url_path_split(this.notebook_path)[1];
2115 this.events.trigger('notebook_loading.Notebook');
2148 this.events.trigger('notebook_loading.Notebook');
2116 this.contents.get(notebook_path, {type: 'notebook'}).then(
2149 this.contents.get(notebook_path, {type: 'notebook'}).then(
2117 $.proxy(this.load_notebook_success, this),
2150 $.proxy(this.load_notebook_success, this),
2118 $.proxy(this.load_notebook_error, this)
2151 $.proxy(this.load_notebook_error, this)
2119 );
2152 );
2120 };
2153 };
2121
2154
2122 /**
2155 /**
2123 * Success callback for loading a notebook from the server.
2156 * Success callback for loading a notebook from the server.
2124 *
2157 *
2125 * Load notebook data from the JSON response.
2158 * Load notebook data from the JSON response.
2126 *
2159 *
2127 * @method load_notebook_success
2160 * @method load_notebook_success
2128 * @param {Object} data JSON representation of a notebook
2161 * @param {Object} data JSON representation of a notebook
2129 */
2162 */
2130 Notebook.prototype.load_notebook_success = function (data) {
2163 Notebook.prototype.load_notebook_success = function (data) {
2131 var failed, msg;
2164 var failed, msg;
2132 try {
2165 try {
2133 this.fromJSON(data);
2166 this.fromJSON(data);
2134 } catch (e) {
2167 } catch (e) {
2135 failed = e;
2168 failed = e;
2136 console.log("Notebook failed to load from JSON:", e);
2169 console.log("Notebook failed to load from JSON:", e);
2137 }
2170 }
2138 if (failed || data.message) {
2171 if (failed || data.message) {
2139 // *either* fromJSON failed or validation failed
2172 // *either* fromJSON failed or validation failed
2140 var body = $("<div>");
2173 var body = $("<div>");
2141 var title;
2174 var title;
2142 if (failed) {
2175 if (failed) {
2143 title = "Notebook failed to load";
2176 title = "Notebook failed to load";
2144 body.append($("<p>").text(
2177 body.append($("<p>").text(
2145 "The error was: "
2178 "The error was: "
2146 )).append($("<div>").addClass("js-error").text(
2179 )).append($("<div>").addClass("js-error").text(
2147 failed.toString()
2180 failed.toString()
2148 )).append($("<p>").text(
2181 )).append($("<p>").text(
2149 "See the error console for details."
2182 "See the error console for details."
2150 ));
2183 ));
2151 } else {
2184 } else {
2152 title = "Notebook validation failed";
2185 title = "Notebook validation failed";
2153 }
2186 }
2154
2187
2155 if (data.message) {
2188 if (data.message) {
2156 if (failed) {
2189 if (failed) {
2157 msg = "The notebook also failed validation:";
2190 msg = "The notebook also failed validation:";
2158 } else {
2191 } else {
2159 msg = "An invalid notebook may not function properly." +
2192 msg = "An invalid notebook may not function properly." +
2160 " The validation error was:";
2193 " The validation error was:";
2161 }
2194 }
2162 body.append($("<p>").text(
2195 body.append($("<p>").text(
2163 msg
2196 msg
2164 )).append($("<div>").addClass("validation-error").append(
2197 )).append($("<div>").addClass("validation-error").append(
2165 $("<pre>").text(data.message)
2198 $("<pre>").text(data.message)
2166 ));
2199 ));
2167 }
2200 }
2168
2201
2169 dialog.modal({
2202 dialog.modal({
2170 notebook: this,
2203 notebook: this,
2171 keyboard_manager: this.keyboard_manager,
2204 keyboard_manager: this.keyboard_manager,
2172 title: title,
2205 title: title,
2173 body: body,
2206 body: body,
2174 buttons : {
2207 buttons : {
2175 OK : {
2208 OK : {
2176 "class" : "btn-primary"
2209 "class" : "btn-primary"
2177 }
2210 }
2178 }
2211 }
2179 });
2212 });
2180 }
2213 }
2181 if (this.ncells() === 0) {
2214 if (this.ncells() === 0) {
2182 this.insert_cell_below('code');
2215 this.insert_cell_below('code');
2183 this.edit_mode(0);
2216 this.edit_mode(0);
2184 } else {
2217 } else {
2185 this.select(0);
2218 this.select(0);
2186 this.handle_command_mode(this.get_cell(0));
2219 this.handle_command_mode(this.get_cell(0));
2187 }
2220 }
2188 this.set_dirty(false);
2221 this.set_dirty(false);
2189 this.scroll_to_top();
2222 this.scroll_to_top();
2190 this.writable = data.writable || false;
2223 this.writable = data.writable || false;
2191 var nbmodel = data.content;
2224 var nbmodel = data.content;
2192 var orig_nbformat = nbmodel.metadata.orig_nbformat;
2225 var orig_nbformat = nbmodel.metadata.orig_nbformat;
2193 var orig_nbformat_minor = nbmodel.metadata.orig_nbformat_minor;
2226 var orig_nbformat_minor = nbmodel.metadata.orig_nbformat_minor;
2194 if (orig_nbformat !== undefined && nbmodel.nbformat !== orig_nbformat) {
2227 if (orig_nbformat !== undefined && nbmodel.nbformat !== orig_nbformat) {
2195 var src;
2228 var src;
2196 if (nbmodel.nbformat > orig_nbformat) {
2229 if (nbmodel.nbformat > orig_nbformat) {
2197 src = " an older notebook format ";
2230 src = " an older notebook format ";
2198 } else {
2231 } else {
2199 src = " a newer notebook format ";
2232 src = " a newer notebook format ";
2200 }
2233 }
2201
2234
2202 msg = "This notebook has been converted from" + src +
2235 msg = "This notebook has been converted from" + src +
2203 "(v"+orig_nbformat+") to the current notebook " +
2236 "(v"+orig_nbformat+") to the current notebook " +
2204 "format (v"+nbmodel.nbformat+"). The next time you save this notebook, the " +
2237 "format (v"+nbmodel.nbformat+"). The next time you save this notebook, the " +
2205 "current notebook format will be used.";
2238 "current notebook format will be used.";
2206
2239
2207 if (nbmodel.nbformat > orig_nbformat) {
2240 if (nbmodel.nbformat > orig_nbformat) {
2208 msg += " Older versions of IPython may not be able to read the new format.";
2241 msg += " Older versions of IPython may not be able to read the new format.";
2209 } else {
2242 } else {
2210 msg += " Some features of the original notebook may not be available.";
2243 msg += " Some features of the original notebook may not be available.";
2211 }
2244 }
2212 msg += " To preserve the original version, close the " +
2245 msg += " To preserve the original version, close the " +
2213 "notebook without saving it.";
2246 "notebook without saving it.";
2214 dialog.modal({
2247 dialog.modal({
2215 notebook: this,
2248 notebook: this,
2216 keyboard_manager: this.keyboard_manager,
2249 keyboard_manager: this.keyboard_manager,
2217 title : "Notebook converted",
2250 title : "Notebook converted",
2218 body : msg,
2251 body : msg,
2219 buttons : {
2252 buttons : {
2220 OK : {
2253 OK : {
2221 class : "btn-primary"
2254 class : "btn-primary"
2222 }
2255 }
2223 }
2256 }
2224 });
2257 });
2225 } else if (orig_nbformat_minor !== undefined && nbmodel.nbformat_minor < orig_nbformat_minor) {
2258 } else if (this.nbformat_minor < nbmodel.nbformat_minor) {
2226 var that = this;
2259 this.nbformat_minor = nbmodel.nbformat_minor;
2227 var orig_vs = 'v' + nbmodel.nbformat + '.' + orig_nbformat_minor;
2228 var this_vs = 'v' + nbmodel.nbformat + '.' + this.nbformat_minor;
2229 msg = "This notebook is version " + orig_vs + ", but we only fully support up to " +
2230 this_vs + ". You can still work with this notebook, but some features " +
2231 "introduced in later notebook versions may not be available.";
2232
2233 dialog.modal({
2234 notebook: this,
2235 keyboard_manager: this.keyboard_manager,
2236 title : "Newer Notebook",
2237 body : msg,
2238 buttons : {
2239 OK : {
2240 class : "btn-danger"
2241 }
2242 }
2243 });
2244
2245 }
2260 }
2246
2261
2247 // Create the session after the notebook is completely loaded to prevent
2262 // Create the session after the notebook is completely loaded to prevent
2248 // code execution upon loading, which is a security risk.
2263 // code execution upon loading, which is a security risk.
2249 if (this.session === null) {
2264 if (this.session === null) {
2250 var kernelspec = this.metadata.kernelspec || {};
2265 var kernelspec = this.metadata.kernelspec || {};
2251 var kernel_name = kernelspec.name;
2266 var kernel_name = kernelspec.name;
2252
2267
2253 this.start_session(kernel_name);
2268 this.start_session(kernel_name);
2254 }
2269 }
2255 // load our checkpoint list
2270 // load our checkpoint list
2256 this.list_checkpoints();
2271 this.list_checkpoints();
2257
2272
2258 // load toolbar state
2273 // load toolbar state
2259 if (this.metadata.celltoolbar) {
2274 if (this.metadata.celltoolbar) {
2260 celltoolbar.CellToolbar.global_show();
2275 celltoolbar.CellToolbar.global_show();
2261 celltoolbar.CellToolbar.activate_preset(this.metadata.celltoolbar);
2276 celltoolbar.CellToolbar.activate_preset(this.metadata.celltoolbar);
2262 } else {
2277 } else {
2263 celltoolbar.CellToolbar.global_hide();
2278 celltoolbar.CellToolbar.global_hide();
2264 }
2279 }
2265
2280
2266 if (!this.writable) {
2281 if (!this.writable) {
2267 this.set_autosave_interval(0);
2282 this.set_autosave_interval(0);
2268 this.events.trigger('notebook_read_only.Notebook');
2283 this.events.trigger('notebook_read_only.Notebook');
2269 }
2284 }
2270
2285
2271 // now that we're fully loaded, it is safe to restore save functionality
2286 // now that we're fully loaded, it is safe to restore save functionality
2272 this._fully_loaded = true;
2287 this._fully_loaded = true;
2273 this.events.trigger('notebook_loaded.Notebook');
2288 this.events.trigger('notebook_loaded.Notebook');
2274 };
2289 };
2275
2290
2276 /**
2291 /**
2277 * Failure callback for loading a notebook from the server.
2292 * Failure callback for loading a notebook from the server.
2278 *
2293 *
2279 * @method load_notebook_error
2294 * @method load_notebook_error
2280 * @param {Error} error
2295 * @param {Error} error
2281 */
2296 */
2282 Notebook.prototype.load_notebook_error = function (error) {
2297 Notebook.prototype.load_notebook_error = function (error) {
2283 this.events.trigger('notebook_load_failed.Notebook', error);
2298 this.events.trigger('notebook_load_failed.Notebook', error);
2284 var msg;
2299 var msg;
2285 if (error.name === utils.XHR_ERROR && error.xhr.status === 500) {
2300 if (error.name === utils.XHR_ERROR && error.xhr.status === 500) {
2286 utils.log_ajax_error(error.xhr, error.xhr_status, error.xhr_error);
2301 utils.log_ajax_error(error.xhr, error.xhr_status, error.xhr_error);
2287 msg = "An unknown error occurred while loading this notebook. " +
2302 msg = "An unknown error occurred while loading this notebook. " +
2288 "This version can load notebook formats " +
2303 "This version can load notebook formats " +
2289 "v" + this.nbformat + " or earlier. See the server log for details.";
2304 "v" + this.nbformat + " or earlier. See the server log for details.";
2290 } else {
2305 } else {
2291 msg = error.message;
2306 msg = error.message;
2292 }
2307 }
2293 dialog.modal({
2308 dialog.modal({
2294 notebook: this,
2309 notebook: this,
2295 keyboard_manager: this.keyboard_manager,
2310 keyboard_manager: this.keyboard_manager,
2296 title: "Error loading notebook",
2311 title: "Error loading notebook",
2297 body : msg,
2312 body : msg,
2298 buttons : {
2313 buttons : {
2299 "OK": {}
2314 "OK": {}
2300 }
2315 }
2301 });
2316 });
2302 };
2317 };
2303
2318
2304 /********************* checkpoint-related *********************/
2319 /********************* checkpoint-related *********************/
2305
2320
2306 /**
2321 /**
2307 * Save the notebook then immediately create a checkpoint.
2322 * Save the notebook then immediately create a checkpoint.
2308 *
2323 *
2309 * @method save_checkpoint
2324 * @method save_checkpoint
2310 */
2325 */
2311 Notebook.prototype.save_checkpoint = function () {
2326 Notebook.prototype.save_checkpoint = function () {
2312 this._checkpoint_after_save = true;
2327 this._checkpoint_after_save = true;
2313 this.save_notebook();
2328 this.save_notebook();
2314 };
2329 };
2315
2330
2316 /**
2331 /**
2317 * Add a checkpoint for this notebook.
2332 * Add a checkpoint for this notebook.
2318 * for use as a callback from checkpoint creation.
2333 * for use as a callback from checkpoint creation.
2319 *
2334 *
2320 * @method add_checkpoint
2335 * @method add_checkpoint
2321 */
2336 */
2322 Notebook.prototype.add_checkpoint = function (checkpoint) {
2337 Notebook.prototype.add_checkpoint = function (checkpoint) {
2323 var found = false;
2338 var found = false;
2324 for (var i = 0; i < this.checkpoints.length; i++) {
2339 for (var i = 0; i < this.checkpoints.length; i++) {
2325 var existing = this.checkpoints[i];
2340 var existing = this.checkpoints[i];
2326 if (existing.id == checkpoint.id) {
2341 if (existing.id == checkpoint.id) {
2327 found = true;
2342 found = true;
2328 this.checkpoints[i] = checkpoint;
2343 this.checkpoints[i] = checkpoint;
2329 break;
2344 break;
2330 }
2345 }
2331 }
2346 }
2332 if (!found) {
2347 if (!found) {
2333 this.checkpoints.push(checkpoint);
2348 this.checkpoints.push(checkpoint);
2334 }
2349 }
2335 this.last_checkpoint = this.checkpoints[this.checkpoints.length - 1];
2350 this.last_checkpoint = this.checkpoints[this.checkpoints.length - 1];
2336 };
2351 };
2337
2352
2338 /**
2353 /**
2339 * List checkpoints for this notebook.
2354 * List checkpoints for this notebook.
2340 *
2355 *
2341 * @method list_checkpoints
2356 * @method list_checkpoints
2342 */
2357 */
2343 Notebook.prototype.list_checkpoints = function () {
2358 Notebook.prototype.list_checkpoints = function () {
2344 var that = this;
2359 var that = this;
2345 this.contents.list_checkpoints(this.notebook_path).then(
2360 this.contents.list_checkpoints(this.notebook_path).then(
2346 $.proxy(this.list_checkpoints_success, this),
2361 $.proxy(this.list_checkpoints_success, this),
2347 function(error) {
2362 function(error) {
2348 that.events.trigger('list_checkpoints_failed.Notebook', error);
2363 that.events.trigger('list_checkpoints_failed.Notebook', error);
2349 }
2364 }
2350 );
2365 );
2351 };
2366 };
2352
2367
2353 /**
2368 /**
2354 * Success callback for listing checkpoints.
2369 * Success callback for listing checkpoints.
2355 *
2370 *
2356 * @method list_checkpoint_success
2371 * @method list_checkpoint_success
2357 * @param {Object} data JSON representation of a checkpoint
2372 * @param {Object} data JSON representation of a checkpoint
2358 */
2373 */
2359 Notebook.prototype.list_checkpoints_success = function (data) {
2374 Notebook.prototype.list_checkpoints_success = function (data) {
2360 this.checkpoints = data;
2375 this.checkpoints = data;
2361 if (data.length) {
2376 if (data.length) {
2362 this.last_checkpoint = data[data.length - 1];
2377 this.last_checkpoint = data[data.length - 1];
2363 } else {
2378 } else {
2364 this.last_checkpoint = null;
2379 this.last_checkpoint = null;
2365 }
2380 }
2366 this.events.trigger('checkpoints_listed.Notebook', [data]);
2381 this.events.trigger('checkpoints_listed.Notebook', [data]);
2367 };
2382 };
2368
2383
2369 /**
2384 /**
2370 * Create a checkpoint of this notebook on the server from the most recent save.
2385 * Create a checkpoint of this notebook on the server from the most recent save.
2371 *
2386 *
2372 * @method create_checkpoint
2387 * @method create_checkpoint
2373 */
2388 */
2374 Notebook.prototype.create_checkpoint = function () {
2389 Notebook.prototype.create_checkpoint = function () {
2375 var that = this;
2390 var that = this;
2376 this.contents.create_checkpoint(this.notebook_path).then(
2391 this.contents.create_checkpoint(this.notebook_path).then(
2377 $.proxy(this.create_checkpoint_success, this),
2392 $.proxy(this.create_checkpoint_success, this),
2378 function (error) {
2393 function (error) {
2379 that.events.trigger('checkpoint_failed.Notebook', error);
2394 that.events.trigger('checkpoint_failed.Notebook', error);
2380 }
2395 }
2381 );
2396 );
2382 };
2397 };
2383
2398
2384 /**
2399 /**
2385 * Success callback for creating a checkpoint.
2400 * Success callback for creating a checkpoint.
2386 *
2401 *
2387 * @method create_checkpoint_success
2402 * @method create_checkpoint_success
2388 * @param {Object} data JSON representation of a checkpoint
2403 * @param {Object} data JSON representation of a checkpoint
2389 */
2404 */
2390 Notebook.prototype.create_checkpoint_success = function (data) {
2405 Notebook.prototype.create_checkpoint_success = function (data) {
2391 this.add_checkpoint(data);
2406 this.add_checkpoint(data);
2392 this.events.trigger('checkpoint_created.Notebook', data);
2407 this.events.trigger('checkpoint_created.Notebook', data);
2393 };
2408 };
2394
2409
2395 Notebook.prototype.restore_checkpoint_dialog = function (checkpoint) {
2410 Notebook.prototype.restore_checkpoint_dialog = function (checkpoint) {
2396 var that = this;
2411 var that = this;
2397 checkpoint = checkpoint || this.last_checkpoint;
2412 checkpoint = checkpoint || this.last_checkpoint;
2398 if ( ! checkpoint ) {
2413 if ( ! checkpoint ) {
2399 console.log("restore dialog, but no checkpoint to restore to!");
2414 console.log("restore dialog, but no checkpoint to restore to!");
2400 return;
2415 return;
2401 }
2416 }
2402 var body = $('<div/>').append(
2417 var body = $('<div/>').append(
2403 $('<p/>').addClass("p-space").text(
2418 $('<p/>').addClass("p-space").text(
2404 "Are you sure you want to revert the notebook to " +
2419 "Are you sure you want to revert the notebook to " +
2405 "the latest checkpoint?"
2420 "the latest checkpoint?"
2406 ).append(
2421 ).append(
2407 $("<strong/>").text(
2422 $("<strong/>").text(
2408 " This cannot be undone."
2423 " This cannot be undone."
2409 )
2424 )
2410 )
2425 )
2411 ).append(
2426 ).append(
2412 $('<p/>').addClass("p-space").text("The checkpoint was last updated at:")
2427 $('<p/>').addClass("p-space").text("The checkpoint was last updated at:")
2413 ).append(
2428 ).append(
2414 $('<p/>').addClass("p-space").text(
2429 $('<p/>').addClass("p-space").text(
2415 Date(checkpoint.last_modified)
2430 Date(checkpoint.last_modified)
2416 ).css("text-align", "center")
2431 ).css("text-align", "center")
2417 );
2432 );
2418
2433
2419 dialog.modal({
2434 dialog.modal({
2420 notebook: this,
2435 notebook: this,
2421 keyboard_manager: this.keyboard_manager,
2436 keyboard_manager: this.keyboard_manager,
2422 title : "Revert notebook to checkpoint",
2437 title : "Revert notebook to checkpoint",
2423 body : body,
2438 body : body,
2424 buttons : {
2439 buttons : {
2425 Revert : {
2440 Revert : {
2426 class : "btn-danger",
2441 class : "btn-danger",
2427 click : function () {
2442 click : function () {
2428 that.restore_checkpoint(checkpoint.id);
2443 that.restore_checkpoint(checkpoint.id);
2429 }
2444 }
2430 },
2445 },
2431 Cancel : {}
2446 Cancel : {}
2432 }
2447 }
2433 });
2448 });
2434 };
2449 };
2435
2450
2436 /**
2451 /**
2437 * Restore the notebook to a checkpoint state.
2452 * Restore the notebook to a checkpoint state.
2438 *
2453 *
2439 * @method restore_checkpoint
2454 * @method restore_checkpoint
2440 * @param {String} checkpoint ID
2455 * @param {String} checkpoint ID
2441 */
2456 */
2442 Notebook.prototype.restore_checkpoint = function (checkpoint) {
2457 Notebook.prototype.restore_checkpoint = function (checkpoint) {
2443 this.events.trigger('notebook_restoring.Notebook', checkpoint);
2458 this.events.trigger('notebook_restoring.Notebook', checkpoint);
2444 var that = this;
2459 var that = this;
2445 this.contents.restore_checkpoint(this.notebook_path, checkpoint).then(
2460 this.contents.restore_checkpoint(this.notebook_path, checkpoint).then(
2446 $.proxy(this.restore_checkpoint_success, this),
2461 $.proxy(this.restore_checkpoint_success, this),
2447 function (error) {
2462 function (error) {
2448 that.events.trigger('checkpoint_restore_failed.Notebook', error);
2463 that.events.trigger('checkpoint_restore_failed.Notebook', error);
2449 }
2464 }
2450 );
2465 );
2451 };
2466 };
2452
2467
2453 /**
2468 /**
2454 * Success callback for restoring a notebook to a checkpoint.
2469 * Success callback for restoring a notebook to a checkpoint.
2455 *
2470 *
2456 * @method restore_checkpoint_success
2471 * @method restore_checkpoint_success
2457 */
2472 */
2458 Notebook.prototype.restore_checkpoint_success = function () {
2473 Notebook.prototype.restore_checkpoint_success = function () {
2459 this.events.trigger('checkpoint_restored.Notebook');
2474 this.events.trigger('checkpoint_restored.Notebook');
2460 this.load_notebook(this.notebook_path);
2475 this.load_notebook(this.notebook_path);
2461 };
2476 };
2462
2477
2463 /**
2478 /**
2464 * Delete a notebook checkpoint.
2479 * Delete a notebook checkpoint.
2465 *
2480 *
2466 * @method delete_checkpoint
2481 * @method delete_checkpoint
2467 * @param {String} checkpoint ID
2482 * @param {String} checkpoint ID
2468 */
2483 */
2469 Notebook.prototype.delete_checkpoint = function (checkpoint) {
2484 Notebook.prototype.delete_checkpoint = function (checkpoint) {
2470 this.events.trigger('notebook_restoring.Notebook', checkpoint);
2485 this.events.trigger('notebook_restoring.Notebook', checkpoint);
2471 var that = this;
2486 var that = this;
2472 this.contents.delete_checkpoint(this.notebook_path, checkpoint).then(
2487 this.contents.delete_checkpoint(this.notebook_path, checkpoint).then(
2473 $.proxy(this.delete_checkpoint_success, this),
2488 $.proxy(this.delete_checkpoint_success, this),
2474 function (error) {
2489 function (error) {
2475 that.events.trigger('checkpoint_delete_failed.Notebook', error);
2490 that.events.trigger('checkpoint_delete_failed.Notebook', error);
2476 }
2491 }
2477 );
2492 );
2478 };
2493 };
2479
2494
2480 /**
2495 /**
2481 * Success callback for deleting a notebook checkpoint
2496 * Success callback for deleting a notebook checkpoint
2482 *
2497 *
2483 * @method delete_checkpoint_success
2498 * @method delete_checkpoint_success
2484 */
2499 */
2485 Notebook.prototype.delete_checkpoint_success = function () {
2500 Notebook.prototype.delete_checkpoint_success = function () {
2486 this.events.trigger('checkpoint_deleted.Notebook');
2501 this.events.trigger('checkpoint_deleted.Notebook');
2487 this.load_notebook(this.notebook_path);
2502 this.load_notebook(this.notebook_path);
2488 };
2503 };
2489
2504
2490
2505
2491 // For backwards compatability.
2506 // For backwards compatability.
2492 IPython.Notebook = Notebook;
2507 IPython.Notebook = Notebook;
2493
2508
2494 return {'Notebook': Notebook};
2509 return {'Notebook': Notebook};
2495 });
2510 });
@@ -1,939 +1,962 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 'jqueryui',
6 'jqueryui',
7 'base/js/utils',
7 'base/js/utils',
8 'base/js/security',
8 'base/js/security',
9 'base/js/keyboard',
9 'base/js/keyboard',
10 'notebook/js/mathjaxutils',
10 'notebook/js/mathjaxutils',
11 'components/marked/lib/marked',
11 'components/marked/lib/marked',
12 ], function(IPython, $, utils, security, keyboard, mathjaxutils, marked) {
12 ], function(IPython, $, utils, security, keyboard, mathjaxutils, marked) {
13 "use strict";
13 "use strict";
14
14
15 /**
15 /**
16 * @class OutputArea
16 * @class OutputArea
17 *
17 *
18 * @constructor
18 * @constructor
19 */
19 */
20
20
21 var OutputArea = function (options) {
21 var OutputArea = function (options) {
22 this.selector = options.selector;
22 this.selector = options.selector;
23 this.events = options.events;
23 this.events = options.events;
24 this.keyboard_manager = options.keyboard_manager;
24 this.keyboard_manager = options.keyboard_manager;
25 this.wrapper = $(options.selector);
25 this.wrapper = $(options.selector);
26 this.outputs = [];
26 this.outputs = [];
27 this.collapsed = false;
27 this.collapsed = false;
28 this.scrolled = false;
28 this.scrolled = false;
29 this.trusted = true;
29 this.trusted = true;
30 this.clear_queued = null;
30 this.clear_queued = null;
31 if (options.prompt_area === undefined) {
31 if (options.prompt_area === undefined) {
32 this.prompt_area = true;
32 this.prompt_area = true;
33 } else {
33 } else {
34 this.prompt_area = options.prompt_area;
34 this.prompt_area = options.prompt_area;
35 }
35 }
36 this.create_elements();
36 this.create_elements();
37 this.style();
37 this.style();
38 this.bind_events();
38 this.bind_events();
39 };
39 };
40
40
41
41
42 /**
42 /**
43 * Class prototypes
43 * Class prototypes
44 **/
44 **/
45
45
46 OutputArea.prototype.create_elements = function () {
46 OutputArea.prototype.create_elements = function () {
47 this.element = $("<div/>");
47 this.element = $("<div/>");
48 this.collapse_button = $("<div/>");
48 this.collapse_button = $("<div/>");
49 this.prompt_overlay = $("<div/>");
49 this.prompt_overlay = $("<div/>");
50 this.wrapper.append(this.prompt_overlay);
50 this.wrapper.append(this.prompt_overlay);
51 this.wrapper.append(this.element);
51 this.wrapper.append(this.element);
52 this.wrapper.append(this.collapse_button);
52 this.wrapper.append(this.collapse_button);
53 };
53 };
54
54
55
55
56 OutputArea.prototype.style = function () {
56 OutputArea.prototype.style = function () {
57 this.collapse_button.hide();
57 this.collapse_button.hide();
58 this.prompt_overlay.hide();
58 this.prompt_overlay.hide();
59
59
60 this.wrapper.addClass('output_wrapper');
60 this.wrapper.addClass('output_wrapper');
61 this.element.addClass('output');
61 this.element.addClass('output');
62
62
63 this.collapse_button.addClass("btn btn-default output_collapsed");
63 this.collapse_button.addClass("btn btn-default output_collapsed");
64 this.collapse_button.attr('title', 'click to expand output');
64 this.collapse_button.attr('title', 'click to expand output');
65 this.collapse_button.text('. . .');
65 this.collapse_button.text('. . .');
66
66
67 this.prompt_overlay.addClass('out_prompt_overlay prompt');
67 this.prompt_overlay.addClass('out_prompt_overlay prompt');
68 this.prompt_overlay.attr('title', 'click to expand output; double click to hide output');
68 this.prompt_overlay.attr('title', 'click to expand output; double click to hide output');
69
69
70 this.collapse();
70 this.collapse();
71 };
71 };
72
72
73 /**
73 /**
74 * Should the OutputArea scroll?
74 * Should the OutputArea scroll?
75 * Returns whether the height (in lines) exceeds a threshold.
75 * Returns whether the height (in lines) exceeds a threshold.
76 *
76 *
77 * @private
77 * @private
78 * @method _should_scroll
78 * @method _should_scroll
79 * @param [lines=100]{Integer}
79 * @param [lines=100]{Integer}
80 * @return {Bool}
80 * @return {Bool}
81 *
81 *
82 */
82 */
83 OutputArea.prototype._should_scroll = function (lines) {
83 OutputArea.prototype._should_scroll = function (lines) {
84 if (lines <=0 ){ return; }
84 if (lines <=0 ){ return; }
85 if (!lines) {
85 if (!lines) {
86 lines = 100;
86 lines = 100;
87 }
87 }
88 // line-height from http://stackoverflow.com/questions/1185151
88 // line-height from http://stackoverflow.com/questions/1185151
89 var fontSize = this.element.css('font-size');
89 var fontSize = this.element.css('font-size');
90 var lineHeight = Math.floor(parseInt(fontSize.replace('px','')) * 1.5);
90 var lineHeight = Math.floor(parseInt(fontSize.replace('px','')) * 1.5);
91
91
92 return (this.element.height() > lines * lineHeight);
92 return (this.element.height() > lines * lineHeight);
93 };
93 };
94
94
95
95
96 OutputArea.prototype.bind_events = function () {
96 OutputArea.prototype.bind_events = function () {
97 var that = this;
97 var that = this;
98 this.prompt_overlay.dblclick(function () { that.toggle_output(); });
98 this.prompt_overlay.dblclick(function () { that.toggle_output(); });
99 this.prompt_overlay.click(function () { that.toggle_scroll(); });
99 this.prompt_overlay.click(function () { that.toggle_scroll(); });
100
100
101 this.element.resize(function () {
101 this.element.resize(function () {
102 // FIXME: Firefox on Linux misbehaves, so automatic scrolling is disabled
102 // FIXME: Firefox on Linux misbehaves, so automatic scrolling is disabled
103 if ( utils.browser[0] === "Firefox" ) {
103 if ( utils.browser[0] === "Firefox" ) {
104 return;
104 return;
105 }
105 }
106 // maybe scroll output,
106 // maybe scroll output,
107 // if it's grown large enough and hasn't already been scrolled.
107 // if it's grown large enough and hasn't already been scrolled.
108 if ( !that.scrolled && that._should_scroll(OutputArea.auto_scroll_threshold)) {
108 if ( !that.scrolled && that._should_scroll(OutputArea.auto_scroll_threshold)) {
109 that.scroll_area();
109 that.scroll_area();
110 }
110 }
111 });
111 });
112 this.collapse_button.click(function () {
112 this.collapse_button.click(function () {
113 that.expand();
113 that.expand();
114 });
114 });
115 };
115 };
116
116
117
117
118 OutputArea.prototype.collapse = function () {
118 OutputArea.prototype.collapse = function () {
119 if (!this.collapsed) {
119 if (!this.collapsed) {
120 this.element.hide();
120 this.element.hide();
121 this.prompt_overlay.hide();
121 this.prompt_overlay.hide();
122 if (this.element.html()){
122 if (this.element.html()){
123 this.collapse_button.show();
123 this.collapse_button.show();
124 }
124 }
125 this.collapsed = true;
125 this.collapsed = true;
126 }
126 }
127 };
127 };
128
128
129
129
130 OutputArea.prototype.expand = function () {
130 OutputArea.prototype.expand = function () {
131 if (this.collapsed) {
131 if (this.collapsed) {
132 this.collapse_button.hide();
132 this.collapse_button.hide();
133 this.element.show();
133 this.element.show();
134 this.prompt_overlay.show();
134 this.prompt_overlay.show();
135 this.collapsed = false;
135 this.collapsed = false;
136 }
136 }
137 };
137 };
138
138
139
139
140 OutputArea.prototype.toggle_output = function () {
140 OutputArea.prototype.toggle_output = function () {
141 if (this.collapsed) {
141 if (this.collapsed) {
142 this.expand();
142 this.expand();
143 } else {
143 } else {
144 this.collapse();
144 this.collapse();
145 }
145 }
146 };
146 };
147
147
148
148
149 OutputArea.prototype.scroll_area = function () {
149 OutputArea.prototype.scroll_area = function () {
150 this.element.addClass('output_scroll');
150 this.element.addClass('output_scroll');
151 this.prompt_overlay.attr('title', 'click to unscroll output; double click to hide');
151 this.prompt_overlay.attr('title', 'click to unscroll output; double click to hide');
152 this.scrolled = true;
152 this.scrolled = true;
153 };
153 };
154
154
155
155
156 OutputArea.prototype.unscroll_area = function () {
156 OutputArea.prototype.unscroll_area = function () {
157 this.element.removeClass('output_scroll');
157 this.element.removeClass('output_scroll');
158 this.prompt_overlay.attr('title', 'click to scroll output; double click to hide');
158 this.prompt_overlay.attr('title', 'click to scroll output; double click to hide');
159 this.scrolled = false;
159 this.scrolled = false;
160 };
160 };
161
161
162 /**
162 /**
163 *
163 *
164 * Scroll OutputArea if height supperior than a threshold (in lines).
164 * Scroll OutputArea if height supperior than a threshold (in lines).
165 *
165 *
166 * Threshold is a maximum number of lines. If unspecified, defaults to
166 * Threshold is a maximum number of lines. If unspecified, defaults to
167 * OutputArea.minimum_scroll_threshold.
167 * OutputArea.minimum_scroll_threshold.
168 *
168 *
169 * Negative threshold will prevent the OutputArea from ever scrolling.
169 * Negative threshold will prevent the OutputArea from ever scrolling.
170 *
170 *
171 * @method scroll_if_long
171 * @method scroll_if_long
172 *
172 *
173 * @param [lines=20]{Number} Default to 20 if not set,
173 * @param [lines=20]{Number} Default to 20 if not set,
174 * behavior undefined for value of `0`.
174 * behavior undefined for value of `0`.
175 *
175 *
176 **/
176 **/
177 OutputArea.prototype.scroll_if_long = function (lines) {
177 OutputArea.prototype.scroll_if_long = function (lines) {
178 var n = lines | OutputArea.minimum_scroll_threshold;
178 var n = lines | OutputArea.minimum_scroll_threshold;
179 if(n <= 0){
179 if(n <= 0){
180 return;
180 return;
181 }
181 }
182
182
183 if (this._should_scroll(n)) {
183 if (this._should_scroll(n)) {
184 // only allow scrolling long-enough output
184 // only allow scrolling long-enough output
185 this.scroll_area();
185 this.scroll_area();
186 }
186 }
187 };
187 };
188
188
189
189
190 OutputArea.prototype.toggle_scroll = function () {
190 OutputArea.prototype.toggle_scroll = function () {
191 if (this.scrolled) {
191 if (this.scrolled) {
192 this.unscroll_area();
192 this.unscroll_area();
193 } else {
193 } else {
194 // only allow scrolling long-enough output
194 // only allow scrolling long-enough output
195 this.scroll_if_long();
195 this.scroll_if_long();
196 }
196 }
197 };
197 };
198
198
199
199
200 // typeset with MathJax if MathJax is available
200 // typeset with MathJax if MathJax is available
201 OutputArea.prototype.typeset = function () {
201 OutputArea.prototype.typeset = function () {
202 if (window.MathJax){
202 if (window.MathJax){
203 MathJax.Hub.Queue(["Typeset",MathJax.Hub]);
203 MathJax.Hub.Queue(["Typeset",MathJax.Hub]);
204 }
204 }
205 };
205 };
206
206
207
207
208 OutputArea.prototype.handle_output = function (msg) {
208 OutputArea.prototype.handle_output = function (msg) {
209 var json = {};
209 var json = {};
210 var msg_type = json.output_type = msg.header.msg_type;
210 var msg_type = json.output_type = msg.header.msg_type;
211 var content = msg.content;
211 var content = msg.content;
212 if (msg_type === "stream") {
212 if (msg_type === "stream") {
213 json.text = content.text;
213 json.text = content.text;
214 json.name = content.name;
214 json.name = content.name;
215 } else if (msg_type === "display_data") {
215 } else if (msg_type === "display_data") {
216 json.data = content.data;
216 json.data = content.data;
217 json.output_type = msg_type;
217 json.output_type = msg_type;
218 json.metadata = content.metadata;
218 json.metadata = content.metadata;
219 } else if (msg_type === "execute_result") {
219 } else if (msg_type === "execute_result") {
220 json.data = content.data;
220 json.data = content.data;
221 json.output_type = msg_type;
221 json.output_type = msg_type;
222 json.metadata = content.metadata;
222 json.metadata = content.metadata;
223 json.execution_count = content.execution_count;
223 json.execution_count = content.execution_count;
224 } else if (msg_type === "error") {
224 } else if (msg_type === "error") {
225 json.ename = content.ename;
225 json.ename = content.ename;
226 json.evalue = content.evalue;
226 json.evalue = content.evalue;
227 json.traceback = content.traceback;
227 json.traceback = content.traceback;
228 } else {
228 } else {
229 console.log("unhandled output message", msg);
229 console.log("unhandled output message", msg);
230 return;
230 return;
231 }
231 }
232 this.append_output(json);
232 this.append_output(json);
233 };
233 };
234
234
235
235
236 OutputArea.output_types = [
236 OutputArea.output_types = [
237 'application/javascript',
237 'application/javascript',
238 'text/html',
238 'text/html',
239 'text/markdown',
239 'text/markdown',
240 'text/latex',
240 'text/latex',
241 'image/svg+xml',
241 'image/svg+xml',
242 'image/png',
242 'image/png',
243 'image/jpeg',
243 'image/jpeg',
244 'application/pdf',
244 'application/pdf',
245 'text/plain'
245 'text/plain'
246 ];
246 ];
247
247
248 OutputArea.prototype.validate_output = function (json) {
248 OutputArea.prototype.validate_mimebundle = function (json) {
249 // scrub invalid outputs
249 // scrub invalid outputs
250 var data = json.data;
250 var data = json.data;
251 $.map(OutputArea.output_types, function(key){
251 $.map(OutputArea.output_types, function(key){
252 if (key !== 'application/json' &&
252 if (key !== 'application/json' &&
253 data[key] !== undefined &&
253 data[key] !== undefined &&
254 typeof data[key] !== 'string'
254 typeof data[key] !== 'string'
255 ) {
255 ) {
256 console.log("Invalid type for " + key, data[key]);
256 console.log("Invalid type for " + key, data[key]);
257 delete data[key];
257 delete data[key];
258 }
258 }
259 });
259 });
260 return json;
260 return json;
261 };
261 };
262
262
263 OutputArea.prototype.append_output = function (json) {
263 OutputArea.prototype.append_output = function (json) {
264 this.expand();
264 this.expand();
265
265
266 // validate output data types
267 if (json.data) {
268 json = this.validate_output(json);
269 }
270
271 // Clear the output if clear is queued.
266 // Clear the output if clear is queued.
272 var needs_height_reset = false;
267 var needs_height_reset = false;
273 if (this.clear_queued) {
268 if (this.clear_queued) {
274 this.clear_output(false);
269 this.clear_output(false);
275 needs_height_reset = true;
270 needs_height_reset = true;
276 }
271 }
277
272
278 var record_output = true;
273 var record_output = true;
279
274 switch(json.output_type) {
280 if (json.output_type === 'execute_result') {
275 case 'execute_result':
281 this.append_execute_result(json);
276 json = this.validate_mimebundle(json);
282 } else if (json.output_type === 'error') {
277 this.append_execute_result(json);
283 this.append_error(json);
278 break;
284 } else if (json.output_type === 'stream') {
279 case 'stream':
285 // append_stream might have merged the output with earlier stream output
280 // append_stream might have merged the output with earlier stream output
286 record_output = this.append_stream(json);
281 record_output = this.append_stream(json);
282 break;
283 case 'error':
284 this.append_error(json);
285 break;
286 case 'display_data':
287 // append handled below
288 json = this.validate_mimebundle(json);
289 break;
290 default:
291 console.log("unrecognized output type: " + json.output_type);
292 this.append_unrecognized(json);
287 }
293 }
288
294
289 // We must release the animation fixed height in a callback since Gecko
295 // We must release the animation fixed height in a callback since Gecko
290 // (FireFox) doesn't render the image immediately as the data is
296 // (FireFox) doesn't render the image immediately as the data is
291 // available.
297 // available.
292 var that = this;
298 var that = this;
293 var handle_appended = function ($el) {
299 var handle_appended = function ($el) {
294 // Only reset the height to automatic if the height is currently
300 // Only reset the height to automatic if the height is currently
295 // fixed (done by wait=True flag on clear_output).
301 // fixed (done by wait=True flag on clear_output).
296 if (needs_height_reset) {
302 if (needs_height_reset) {
297 that.element.height('');
303 that.element.height('');
298 }
304 }
299 that.element.trigger('resize');
305 that.element.trigger('resize');
300 };
306 };
301 if (json.output_type === 'display_data') {
307 if (json.output_type === 'display_data') {
302 this.append_display_data(json, handle_appended);
308 this.append_display_data(json, handle_appended);
303 } else {
309 } else {
304 handle_appended();
310 handle_appended();
305 }
311 }
306
312
307 if (record_output) {
313 if (record_output) {
308 this.outputs.push(json);
314 this.outputs.push(json);
309 }
315 }
310 };
316 };
311
317
312
318
313 OutputArea.prototype.create_output_area = function () {
319 OutputArea.prototype.create_output_area = function () {
314 var oa = $("<div/>").addClass("output_area");
320 var oa = $("<div/>").addClass("output_area");
315 if (this.prompt_area) {
321 if (this.prompt_area) {
316 oa.append($('<div/>').addClass('prompt'));
322 oa.append($('<div/>').addClass('prompt'));
317 }
323 }
318 return oa;
324 return oa;
319 };
325 };
320
326
321
327
322 function _get_metadata_key(metadata, key, mime) {
328 function _get_metadata_key(metadata, key, mime) {
323 var mime_md = metadata[mime];
329 var mime_md = metadata[mime];
324 // mime-specific higher priority
330 // mime-specific higher priority
325 if (mime_md && mime_md[key] !== undefined) {
331 if (mime_md && mime_md[key] !== undefined) {
326 return mime_md[key];
332 return mime_md[key];
327 }
333 }
328 // fallback on global
334 // fallback on global
329 return metadata[key];
335 return metadata[key];
330 }
336 }
331
337
332 OutputArea.prototype.create_output_subarea = function(md, classes, mime) {
338 OutputArea.prototype.create_output_subarea = function(md, classes, mime) {
333 var subarea = $('<div/>').addClass('output_subarea').addClass(classes);
339 var subarea = $('<div/>').addClass('output_subarea').addClass(classes);
334 if (_get_metadata_key(md, 'isolated', mime)) {
340 if (_get_metadata_key(md, 'isolated', mime)) {
335 // Create an iframe to isolate the subarea from the rest of the
341 // Create an iframe to isolate the subarea from the rest of the
336 // document
342 // document
337 var iframe = $('<iframe/>').addClass('box-flex1');
343 var iframe = $('<iframe/>').addClass('box-flex1');
338 iframe.css({'height':1, 'width':'100%', 'display':'block'});
344 iframe.css({'height':1, 'width':'100%', 'display':'block'});
339 iframe.attr('frameborder', 0);
345 iframe.attr('frameborder', 0);
340 iframe.attr('scrolling', 'auto');
346 iframe.attr('scrolling', 'auto');
341
347
342 // Once the iframe is loaded, the subarea is dynamically inserted
348 // Once the iframe is loaded, the subarea is dynamically inserted
343 iframe.on('load', function() {
349 iframe.on('load', function() {
344 // Workaround needed by Firefox, to properly render svg inside
350 // Workaround needed by Firefox, to properly render svg inside
345 // iframes, see http://stackoverflow.com/questions/10177190/
351 // iframes, see http://stackoverflow.com/questions/10177190/
346 // svg-dynamically-added-to-iframe-does-not-render-correctly
352 // svg-dynamically-added-to-iframe-does-not-render-correctly
347 this.contentDocument.open();
353 this.contentDocument.open();
348
354
349 // Insert the subarea into the iframe
355 // Insert the subarea into the iframe
350 // We must directly write the html. When using Jquery's append
356 // We must directly write the html. When using Jquery's append
351 // method, javascript is evaluated in the parent document and
357 // method, javascript is evaluated in the parent document and
352 // not in the iframe document. At this point, subarea doesn't
358 // not in the iframe document. At this point, subarea doesn't
353 // contain any user content.
359 // contain any user content.
354 this.contentDocument.write(subarea.html());
360 this.contentDocument.write(subarea.html());
355
361
356 this.contentDocument.close();
362 this.contentDocument.close();
357
363
358 var body = this.contentDocument.body;
364 var body = this.contentDocument.body;
359 // Adjust the iframe height automatically
365 // Adjust the iframe height automatically
360 iframe.height(body.scrollHeight + 'px');
366 iframe.height(body.scrollHeight + 'px');
361 });
367 });
362
368
363 // Elements should be appended to the inner subarea and not to the
369 // Elements should be appended to the inner subarea and not to the
364 // iframe
370 // iframe
365 iframe.append = function(that) {
371 iframe.append = function(that) {
366 subarea.append(that);
372 subarea.append(that);
367 };
373 };
368
374
369 return iframe;
375 return iframe;
370 } else {
376 } else {
371 return subarea;
377 return subarea;
372 }
378 }
373 };
379 };
374
380
375
381
376 OutputArea.prototype._append_javascript_error = function (err, element) {
382 OutputArea.prototype._append_javascript_error = function (err, element) {
377 // display a message when a javascript error occurs in display output
383 // display a message when a javascript error occurs in display output
378 var msg = "Javascript error adding output!";
384 var msg = "Javascript error adding output!";
379 if ( element === undefined ) return;
385 if ( element === undefined ) return;
380 element
386 element
381 .append($('<div/>').text(msg).addClass('js-error'))
387 .append($('<div/>').text(msg).addClass('js-error'))
382 .append($('<div/>').text(err.toString()).addClass('js-error'))
388 .append($('<div/>').text(err.toString()).addClass('js-error'))
383 .append($('<div/>').text('See your browser Javascript console for more details.').addClass('js-error'));
389 .append($('<div/>').text('See your browser Javascript console for more details.').addClass('js-error'));
384 };
390 };
385
391
386 OutputArea.prototype._safe_append = function (toinsert) {
392 OutputArea.prototype._safe_append = function (toinsert) {
387 // safely append an item to the document
393 // safely append an item to the document
388 // this is an object created by user code,
394 // this is an object created by user code,
389 // and may have errors, which should not be raised
395 // and may have errors, which should not be raised
390 // under any circumstances.
396 // under any circumstances.
391 try {
397 try {
392 this.element.append(toinsert);
398 this.element.append(toinsert);
393 } catch(err) {
399 } catch(err) {
394 console.log(err);
400 console.log(err);
395 // Create an actual output_area and output_subarea, which creates
401 // Create an actual output_area and output_subarea, which creates
396 // the prompt area and the proper indentation.
402 // the prompt area and the proper indentation.
397 var toinsert = this.create_output_area();
403 var toinsert = this.create_output_area();
398 var subarea = $('<div/>').addClass('output_subarea');
404 var subarea = $('<div/>').addClass('output_subarea');
399 toinsert.append(subarea);
405 toinsert.append(subarea);
400 this._append_javascript_error(err, subarea);
406 this._append_javascript_error(err, subarea);
401 this.element.append(toinsert);
407 this.element.append(toinsert);
402 }
408 }
403
409
404 // Notify others of changes.
410 // Notify others of changes.
405 this.element.trigger('changed');
411 this.element.trigger('changed');
406 };
412 };
407
413
408
414
409 OutputArea.prototype.append_execute_result = function (json) {
415 OutputArea.prototype.append_execute_result = function (json) {
410 var n = json.execution_count || ' ';
416 var n = json.execution_count || ' ';
411 var toinsert = this.create_output_area();
417 var toinsert = this.create_output_area();
412 if (this.prompt_area) {
418 if (this.prompt_area) {
413 toinsert.find('div.prompt').addClass('output_prompt').text('Out[' + n + ']:');
419 toinsert.find('div.prompt').addClass('output_prompt').text('Out[' + n + ']:');
414 }
420 }
415 var inserted = this.append_mime_type(json, toinsert);
421 var inserted = this.append_mime_type(json, toinsert);
416 if (inserted) {
422 if (inserted) {
417 inserted.addClass('output_result');
423 inserted.addClass('output_result');
418 }
424 }
419 this._safe_append(toinsert);
425 this._safe_append(toinsert);
420 // If we just output latex, typeset it.
426 // If we just output latex, typeset it.
421 if ((json.data['text/latex'] !== undefined) ||
427 if ((json.data['text/latex'] !== undefined) ||
422 (json.data['text/html'] !== undefined) ||
428 (json.data['text/html'] !== undefined) ||
423 (json.data['text/markdown'] !== undefined)) {
429 (json.data['text/markdown'] !== undefined)) {
424 this.typeset();
430 this.typeset();
425 }
431 }
426 };
432 };
427
433
428
434
429 OutputArea.prototype.append_error = function (json) {
435 OutputArea.prototype.append_error = function (json) {
430 var tb = json.traceback;
436 var tb = json.traceback;
431 if (tb !== undefined && tb.length > 0) {
437 if (tb !== undefined && tb.length > 0) {
432 var s = '';
438 var s = '';
433 var len = tb.length;
439 var len = tb.length;
434 for (var i=0; i<len; i++) {
440 for (var i=0; i<len; i++) {
435 s = s + tb[i] + '\n';
441 s = s + tb[i] + '\n';
436 }
442 }
437 s = s + '\n';
443 s = s + '\n';
438 var toinsert = this.create_output_area();
444 var toinsert = this.create_output_area();
439 var append_text = OutputArea.append_map['text/plain'];
445 var append_text = OutputArea.append_map['text/plain'];
440 if (append_text) {
446 if (append_text) {
441 append_text.apply(this, [s, {}, toinsert]).addClass('output_error');
447 append_text.apply(this, [s, {}, toinsert]).addClass('output_error');
442 }
448 }
443 this._safe_append(toinsert);
449 this._safe_append(toinsert);
444 }
450 }
445 };
451 };
446
452
447
453
448 OutputArea.prototype.append_stream = function (json) {
454 OutputArea.prototype.append_stream = function (json) {
449 var text = json.text;
455 var text = json.text;
450 var subclass = "output_"+json.name;
456 var subclass = "output_"+json.name;
451 if (this.outputs.length > 0){
457 if (this.outputs.length > 0){
452 // have at least one output to consider
458 // have at least one output to consider
453 var last = this.outputs[this.outputs.length-1];
459 var last = this.outputs[this.outputs.length-1];
454 if (last.output_type == 'stream' && json.name == last.name){
460 if (last.output_type == 'stream' && json.name == last.name){
455 // latest output was in the same stream,
461 // latest output was in the same stream,
456 // so append directly into its pre tag
462 // so append directly into its pre tag
457 // escape ANSI & HTML specials:
463 // escape ANSI & HTML specials:
458 last.text = utils.fixCarriageReturn(last.text + json.text);
464 last.text = utils.fixCarriageReturn(last.text + json.text);
459 var pre = this.element.find('div.'+subclass).last().find('pre');
465 var pre = this.element.find('div.'+subclass).last().find('pre');
460 var html = utils.fixConsole(last.text);
466 var html = utils.fixConsole(last.text);
461 // The only user content injected with this HTML call is
467 // The only user content injected with this HTML call is
462 // escaped by the fixConsole() method.
468 // escaped by the fixConsole() method.
463 pre.html(html);
469 pre.html(html);
464 // return false signals that we merged this output with the previous one,
470 // return false signals that we merged this output with the previous one,
465 // and the new output shouldn't be recorded.
471 // and the new output shouldn't be recorded.
466 return false;
472 return false;
467 }
473 }
468 }
474 }
469
475
470 if (!text.replace("\r", "")) {
476 if (!text.replace("\r", "")) {
471 // text is nothing (empty string, \r, etc.)
477 // text is nothing (empty string, \r, etc.)
472 // so don't append any elements, which might add undesirable space
478 // so don't append any elements, which might add undesirable space
473 // return true to indicate the output should be recorded.
479 // return true to indicate the output should be recorded.
474 return true;
480 return true;
475 }
481 }
476
482
477 // If we got here, attach a new div
483 // If we got here, attach a new div
478 var toinsert = this.create_output_area();
484 var toinsert = this.create_output_area();
479 var append_text = OutputArea.append_map['text/plain'];
485 var append_text = OutputArea.append_map['text/plain'];
480 if (append_text) {
486 if (append_text) {
481 append_text.apply(this, [text, {}, toinsert]).addClass("output_stream " + subclass);
487 append_text.apply(this, [text, {}, toinsert]).addClass("output_stream " + subclass);
482 }
488 }
483 this._safe_append(toinsert);
489 this._safe_append(toinsert);
484 return true;
490 return true;
485 };
491 };
486
492
487
493
494 OutputArea.prototype.append_unrecognized = function (json) {
495 var that = this;
496 var toinsert = this.create_output_area();
497 var subarea = $('<div/>').addClass('output_subarea output_unrecognized');
498 toinsert.append(subarea);
499 subarea.append(
500 $("<a>")
501 .attr("href", "#")
502 .text("Unrecognized output: " + json.output_type)
503 .click(function () {
504 that.events.trigger('unrecognized_output.OutputArea', {output: json})
505 })
506 );
507 this._safe_append(toinsert);
508 };
509
510
488 OutputArea.prototype.append_display_data = function (json, handle_inserted) {
511 OutputArea.prototype.append_display_data = function (json, handle_inserted) {
489 var toinsert = this.create_output_area();
512 var toinsert = this.create_output_area();
490 if (this.append_mime_type(json, toinsert, handle_inserted)) {
513 if (this.append_mime_type(json, toinsert, handle_inserted)) {
491 this._safe_append(toinsert);
514 this._safe_append(toinsert);
492 // If we just output latex, typeset it.
515 // If we just output latex, typeset it.
493 if ((json.data['text/latex'] !== undefined) ||
516 if ((json.data['text/latex'] !== undefined) ||
494 (json.data['text/html'] !== undefined) ||
517 (json.data['text/html'] !== undefined) ||
495 (json.data['text/markdown'] !== undefined)) {
518 (json.data['text/markdown'] !== undefined)) {
496 this.typeset();
519 this.typeset();
497 }
520 }
498 }
521 }
499 };
522 };
500
523
501
524
502 OutputArea.safe_outputs = {
525 OutputArea.safe_outputs = {
503 'text/plain' : true,
526 'text/plain' : true,
504 'text/latex' : true,
527 'text/latex' : true,
505 'image/png' : true,
528 'image/png' : true,
506 'image/jpeg' : true
529 'image/jpeg' : true
507 };
530 };
508
531
509 OutputArea.prototype.append_mime_type = function (json, element, handle_inserted) {
532 OutputArea.prototype.append_mime_type = function (json, element, handle_inserted) {
510 for (var i=0; i < OutputArea.display_order.length; i++) {
533 for (var i=0; i < OutputArea.display_order.length; i++) {
511 var type = OutputArea.display_order[i];
534 var type = OutputArea.display_order[i];
512 var append = OutputArea.append_map[type];
535 var append = OutputArea.append_map[type];
513 if ((json.data[type] !== undefined) && append) {
536 if ((json.data[type] !== undefined) && append) {
514 var value = json.data[type];
537 var value = json.data[type];
515 if (!this.trusted && !OutputArea.safe_outputs[type]) {
538 if (!this.trusted && !OutputArea.safe_outputs[type]) {
516 // not trusted, sanitize HTML
539 // not trusted, sanitize HTML
517 if (type==='text/html' || type==='text/svg') {
540 if (type==='text/html' || type==='text/svg') {
518 value = security.sanitize_html(value);
541 value = security.sanitize_html(value);
519 } else {
542 } else {
520 // don't display if we don't know how to sanitize it
543 // don't display if we don't know how to sanitize it
521 console.log("Ignoring untrusted " + type + " output.");
544 console.log("Ignoring untrusted " + type + " output.");
522 continue;
545 continue;
523 }
546 }
524 }
547 }
525 var md = json.metadata || {};
548 var md = json.metadata || {};
526 var toinsert = append.apply(this, [value, md, element, handle_inserted]);
549 var toinsert = append.apply(this, [value, md, element, handle_inserted]);
527 // Since only the png and jpeg mime types call the inserted
550 // Since only the png and jpeg mime types call the inserted
528 // callback, if the mime type is something other we must call the
551 // callback, if the mime type is something other we must call the
529 // inserted callback only when the element is actually inserted
552 // inserted callback only when the element is actually inserted
530 // into the DOM. Use a timeout of 0 to do this.
553 // into the DOM. Use a timeout of 0 to do this.
531 if (['image/png', 'image/jpeg'].indexOf(type) < 0 && handle_inserted !== undefined) {
554 if (['image/png', 'image/jpeg'].indexOf(type) < 0 && handle_inserted !== undefined) {
532 setTimeout(handle_inserted, 0);
555 setTimeout(handle_inserted, 0);
533 }
556 }
534 this.events.trigger('output_appended.OutputArea', [type, value, md, toinsert]);
557 this.events.trigger('output_appended.OutputArea', [type, value, md, toinsert]);
535 return toinsert;
558 return toinsert;
536 }
559 }
537 }
560 }
538 return null;
561 return null;
539 };
562 };
540
563
541
564
542 var append_html = function (html, md, element) {
565 var append_html = function (html, md, element) {
543 var type = 'text/html';
566 var type = 'text/html';
544 var toinsert = this.create_output_subarea(md, "output_html rendered_html", type);
567 var toinsert = this.create_output_subarea(md, "output_html rendered_html", type);
545 this.keyboard_manager.register_events(toinsert);
568 this.keyboard_manager.register_events(toinsert);
546 toinsert.append(html);
569 toinsert.append(html);
547 element.append(toinsert);
570 element.append(toinsert);
548 return toinsert;
571 return toinsert;
549 };
572 };
550
573
551
574
552 var append_markdown = function(markdown, md, element) {
575 var append_markdown = function(markdown, md, element) {
553 var type = 'text/markdown';
576 var type = 'text/markdown';
554 var toinsert = this.create_output_subarea(md, "output_markdown", type);
577 var toinsert = this.create_output_subarea(md, "output_markdown", type);
555 var text_and_math = mathjaxutils.remove_math(markdown);
578 var text_and_math = mathjaxutils.remove_math(markdown);
556 var text = text_and_math[0];
579 var text = text_and_math[0];
557 var math = text_and_math[1];
580 var math = text_and_math[1];
558 marked(text, function (err, html) {
581 marked(text, function (err, html) {
559 html = mathjaxutils.replace_math(html, math);
582 html = mathjaxutils.replace_math(html, math);
560 toinsert.append(html);
583 toinsert.append(html);
561 });
584 });
562 element.append(toinsert);
585 element.append(toinsert);
563 return toinsert;
586 return toinsert;
564 };
587 };
565
588
566
589
567 var append_javascript = function (js, md, element) {
590 var append_javascript = function (js, md, element) {
568 // We just eval the JS code, element appears in the local scope.
591 // We just eval the JS code, element appears in the local scope.
569 var type = 'application/javascript';
592 var type = 'application/javascript';
570 var toinsert = this.create_output_subarea(md, "output_javascript", type);
593 var toinsert = this.create_output_subarea(md, "output_javascript", type);
571 this.keyboard_manager.register_events(toinsert);
594 this.keyboard_manager.register_events(toinsert);
572 element.append(toinsert);
595 element.append(toinsert);
573
596
574 // Fix for ipython/issues/5293, make sure `element` is the area which
597 // Fix for ipython/issues/5293, make sure `element` is the area which
575 // output can be inserted into at the time of JS execution.
598 // output can be inserted into at the time of JS execution.
576 element = toinsert;
599 element = toinsert;
577 try {
600 try {
578 eval(js);
601 eval(js);
579 } catch(err) {
602 } catch(err) {
580 console.log(err);
603 console.log(err);
581 this._append_javascript_error(err, toinsert);
604 this._append_javascript_error(err, toinsert);
582 }
605 }
583 return toinsert;
606 return toinsert;
584 };
607 };
585
608
586
609
587 var append_text = function (data, md, element) {
610 var append_text = function (data, md, element) {
588 var type = 'text/plain';
611 var type = 'text/plain';
589 var toinsert = this.create_output_subarea(md, "output_text", type);
612 var toinsert = this.create_output_subarea(md, "output_text", type);
590 // escape ANSI & HTML specials in plaintext:
613 // escape ANSI & HTML specials in plaintext:
591 data = utils.fixConsole(data);
614 data = utils.fixConsole(data);
592 data = utils.fixCarriageReturn(data);
615 data = utils.fixCarriageReturn(data);
593 data = utils.autoLinkUrls(data);
616 data = utils.autoLinkUrls(data);
594 // The only user content injected with this HTML call is
617 // The only user content injected with this HTML call is
595 // escaped by the fixConsole() method.
618 // escaped by the fixConsole() method.
596 toinsert.append($("<pre/>").html(data));
619 toinsert.append($("<pre/>").html(data));
597 element.append(toinsert);
620 element.append(toinsert);
598 return toinsert;
621 return toinsert;
599 };
622 };
600
623
601
624
602 var append_svg = function (svg_html, md, element) {
625 var append_svg = function (svg_html, md, element) {
603 var type = 'image/svg+xml';
626 var type = 'image/svg+xml';
604 var toinsert = this.create_output_subarea(md, "output_svg", type);
627 var toinsert = this.create_output_subarea(md, "output_svg", type);
605
628
606 // Get the svg element from within the HTML.
629 // Get the svg element from within the HTML.
607 var svg = $('<div />').html(svg_html).find('svg');
630 var svg = $('<div />').html(svg_html).find('svg');
608 var svg_area = $('<div />');
631 var svg_area = $('<div />');
609 var width = svg.attr('width');
632 var width = svg.attr('width');
610 var height = svg.attr('height');
633 var height = svg.attr('height');
611 svg
634 svg
612 .width('100%')
635 .width('100%')
613 .height('100%');
636 .height('100%');
614 svg_area
637 svg_area
615 .width(width)
638 .width(width)
616 .height(height);
639 .height(height);
617
640
618 // The jQuery resize handlers don't seem to work on the svg element.
641 // The jQuery resize handlers don't seem to work on the svg element.
619 // When the svg renders completely, measure it's size and set the parent
642 // When the svg renders completely, measure it's size and set the parent
620 // div to that size. Then set the svg to 100% the size of the parent
643 // div to that size. Then set the svg to 100% the size of the parent
621 // div and make the parent div resizable.
644 // div and make the parent div resizable.
622 this._dblclick_to_reset_size(svg_area, true, false);
645 this._dblclick_to_reset_size(svg_area, true, false);
623
646
624 svg_area.append(svg);
647 svg_area.append(svg);
625 toinsert.append(svg_area);
648 toinsert.append(svg_area);
626 element.append(toinsert);
649 element.append(toinsert);
627
650
628 return toinsert;
651 return toinsert;
629 };
652 };
630
653
631 OutputArea.prototype._dblclick_to_reset_size = function (img, immediately, resize_parent) {
654 OutputArea.prototype._dblclick_to_reset_size = function (img, immediately, resize_parent) {
632 // Add a resize handler to an element
655 // Add a resize handler to an element
633 //
656 //
634 // img: jQuery element
657 // img: jQuery element
635 // immediately: bool=False
658 // immediately: bool=False
636 // Wait for the element to load before creating the handle.
659 // Wait for the element to load before creating the handle.
637 // resize_parent: bool=True
660 // resize_parent: bool=True
638 // Should the parent of the element be resized when the element is
661 // Should the parent of the element be resized when the element is
639 // reset (by double click).
662 // reset (by double click).
640 var callback = function (){
663 var callback = function (){
641 var h0 = img.height();
664 var h0 = img.height();
642 var w0 = img.width();
665 var w0 = img.width();
643 if (!(h0 && w0)) {
666 if (!(h0 && w0)) {
644 // zero size, don't make it resizable
667 // zero size, don't make it resizable
645 return;
668 return;
646 }
669 }
647 img.resizable({
670 img.resizable({
648 aspectRatio: true,
671 aspectRatio: true,
649 autoHide: true
672 autoHide: true
650 });
673 });
651 img.dblclick(function () {
674 img.dblclick(function () {
652 // resize wrapper & image together for some reason:
675 // resize wrapper & image together for some reason:
653 img.height(h0);
676 img.height(h0);
654 img.width(w0);
677 img.width(w0);
655 if (resize_parent === undefined || resize_parent) {
678 if (resize_parent === undefined || resize_parent) {
656 img.parent().height(h0);
679 img.parent().height(h0);
657 img.parent().width(w0);
680 img.parent().width(w0);
658 }
681 }
659 });
682 });
660 };
683 };
661
684
662 if (immediately) {
685 if (immediately) {
663 callback();
686 callback();
664 } else {
687 } else {
665 img.on("load", callback);
688 img.on("load", callback);
666 }
689 }
667 };
690 };
668
691
669 var set_width_height = function (img, md, mime) {
692 var set_width_height = function (img, md, mime) {
670 // set width and height of an img element from metadata
693 // set width and height of an img element from metadata
671 var height = _get_metadata_key(md, 'height', mime);
694 var height = _get_metadata_key(md, 'height', mime);
672 if (height !== undefined) img.attr('height', height);
695 if (height !== undefined) img.attr('height', height);
673 var width = _get_metadata_key(md, 'width', mime);
696 var width = _get_metadata_key(md, 'width', mime);
674 if (width !== undefined) img.attr('width', width);
697 if (width !== undefined) img.attr('width', width);
675 };
698 };
676
699
677 var append_png = function (png, md, element, handle_inserted) {
700 var append_png = function (png, md, element, handle_inserted) {
678 var type = 'image/png';
701 var type = 'image/png';
679 var toinsert = this.create_output_subarea(md, "output_png", type);
702 var toinsert = this.create_output_subarea(md, "output_png", type);
680 var img = $("<img/>");
703 var img = $("<img/>");
681 if (handle_inserted !== undefined) {
704 if (handle_inserted !== undefined) {
682 img.on('load', function(){
705 img.on('load', function(){
683 handle_inserted(img);
706 handle_inserted(img);
684 });
707 });
685 }
708 }
686 img[0].src = 'data:image/png;base64,'+ png;
709 img[0].src = 'data:image/png;base64,'+ png;
687 set_width_height(img, md, 'image/png');
710 set_width_height(img, md, 'image/png');
688 this._dblclick_to_reset_size(img);
711 this._dblclick_to_reset_size(img);
689 toinsert.append(img);
712 toinsert.append(img);
690 element.append(toinsert);
713 element.append(toinsert);
691 return toinsert;
714 return toinsert;
692 };
715 };
693
716
694
717
695 var append_jpeg = function (jpeg, md, element, handle_inserted) {
718 var append_jpeg = function (jpeg, md, element, handle_inserted) {
696 var type = 'image/jpeg';
719 var type = 'image/jpeg';
697 var toinsert = this.create_output_subarea(md, "output_jpeg", type);
720 var toinsert = this.create_output_subarea(md, "output_jpeg", type);
698 var img = $("<img/>");
721 var img = $("<img/>");
699 if (handle_inserted !== undefined) {
722 if (handle_inserted !== undefined) {
700 img.on('load', function(){
723 img.on('load', function(){
701 handle_inserted(img);
724 handle_inserted(img);
702 });
725 });
703 }
726 }
704 img[0].src = 'data:image/jpeg;base64,'+ jpeg;
727 img[0].src = 'data:image/jpeg;base64,'+ jpeg;
705 set_width_height(img, md, 'image/jpeg');
728 set_width_height(img, md, 'image/jpeg');
706 this._dblclick_to_reset_size(img);
729 this._dblclick_to_reset_size(img);
707 toinsert.append(img);
730 toinsert.append(img);
708 element.append(toinsert);
731 element.append(toinsert);
709 return toinsert;
732 return toinsert;
710 };
733 };
711
734
712
735
713 var append_pdf = function (pdf, md, element) {
736 var append_pdf = function (pdf, md, element) {
714 var type = 'application/pdf';
737 var type = 'application/pdf';
715 var toinsert = this.create_output_subarea(md, "output_pdf", type);
738 var toinsert = this.create_output_subarea(md, "output_pdf", type);
716 var a = $('<a/>').attr('href', 'data:application/pdf;base64,'+pdf);
739 var a = $('<a/>').attr('href', 'data:application/pdf;base64,'+pdf);
717 a.attr('target', '_blank');
740 a.attr('target', '_blank');
718 a.text('View PDF');
741 a.text('View PDF');
719 toinsert.append(a);
742 toinsert.append(a);
720 element.append(toinsert);
743 element.append(toinsert);
721 return toinsert;
744 return toinsert;
722 };
745 };
723
746
724 var append_latex = function (latex, md, element) {
747 var append_latex = function (latex, md, element) {
725 // This method cannot do the typesetting because the latex first has to
748 // This method cannot do the typesetting because the latex first has to
726 // be on the page.
749 // be on the page.
727 var type = 'text/latex';
750 var type = 'text/latex';
728 var toinsert = this.create_output_subarea(md, "output_latex", type);
751 var toinsert = this.create_output_subarea(md, "output_latex", type);
729 toinsert.append(latex);
752 toinsert.append(latex);
730 element.append(toinsert);
753 element.append(toinsert);
731 return toinsert;
754 return toinsert;
732 };
755 };
733
756
734
757
735 OutputArea.prototype.append_raw_input = function (msg) {
758 OutputArea.prototype.append_raw_input = function (msg) {
736 var that = this;
759 var that = this;
737 this.expand();
760 this.expand();
738 var content = msg.content;
761 var content = msg.content;
739 var area = this.create_output_area();
762 var area = this.create_output_area();
740
763
741 // disable any other raw_inputs, if they are left around
764 // disable any other raw_inputs, if they are left around
742 $("div.output_subarea.raw_input_container").remove();
765 $("div.output_subarea.raw_input_container").remove();
743
766
744 var input_type = content.password ? 'password' : 'text';
767 var input_type = content.password ? 'password' : 'text';
745
768
746 area.append(
769 area.append(
747 $("<div/>")
770 $("<div/>")
748 .addClass("box-flex1 output_subarea raw_input_container")
771 .addClass("box-flex1 output_subarea raw_input_container")
749 .append(
772 .append(
750 $("<span/>")
773 $("<span/>")
751 .addClass("raw_input_prompt")
774 .addClass("raw_input_prompt")
752 .text(content.prompt)
775 .text(content.prompt)
753 )
776 )
754 .append(
777 .append(
755 $("<input/>")
778 $("<input/>")
756 .addClass("raw_input")
779 .addClass("raw_input")
757 .attr('type', input_type)
780 .attr('type', input_type)
758 .attr("size", 47)
781 .attr("size", 47)
759 .keydown(function (event, ui) {
782 .keydown(function (event, ui) {
760 // make sure we submit on enter,
783 // make sure we submit on enter,
761 // and don't re-execute the *cell* on shift-enter
784 // and don't re-execute the *cell* on shift-enter
762 if (event.which === keyboard.keycodes.enter) {
785 if (event.which === keyboard.keycodes.enter) {
763 that._submit_raw_input();
786 that._submit_raw_input();
764 return false;
787 return false;
765 }
788 }
766 })
789 })
767 )
790 )
768 );
791 );
769
792
770 this.element.append(area);
793 this.element.append(area);
771 var raw_input = area.find('input.raw_input');
794 var raw_input = area.find('input.raw_input');
772 // Register events that enable/disable the keyboard manager while raw
795 // Register events that enable/disable the keyboard manager while raw
773 // input is focused.
796 // input is focused.
774 this.keyboard_manager.register_events(raw_input);
797 this.keyboard_manager.register_events(raw_input);
775 // Note, the following line used to read raw_input.focus().focus().
798 // Note, the following line used to read raw_input.focus().focus().
776 // This seemed to be needed otherwise only the cell would be focused.
799 // This seemed to be needed otherwise only the cell would be focused.
777 // But with the modal UI, this seems to work fine with one call to focus().
800 // But with the modal UI, this seems to work fine with one call to focus().
778 raw_input.focus();
801 raw_input.focus();
779 };
802 };
780
803
781 OutputArea.prototype._submit_raw_input = function (evt) {
804 OutputArea.prototype._submit_raw_input = function (evt) {
782 var container = this.element.find("div.raw_input_container");
805 var container = this.element.find("div.raw_input_container");
783 var theprompt = container.find("span.raw_input_prompt");
806 var theprompt = container.find("span.raw_input_prompt");
784 var theinput = container.find("input.raw_input");
807 var theinput = container.find("input.raw_input");
785 var value = theinput.val();
808 var value = theinput.val();
786 var echo = value;
809 var echo = value;
787 // don't echo if it's a password
810 // don't echo if it's a password
788 if (theinput.attr('type') == 'password') {
811 if (theinput.attr('type') == 'password') {
789 echo = 'Β·Β·Β·Β·Β·Β·Β·Β·';
812 echo = 'Β·Β·Β·Β·Β·Β·Β·Β·';
790 }
813 }
791 var content = {
814 var content = {
792 output_type : 'stream',
815 output_type : 'stream',
793 name : 'stdout',
816 name : 'stdout',
794 text : theprompt.text() + echo + '\n'
817 text : theprompt.text() + echo + '\n'
795 };
818 };
796 // remove form container
819 // remove form container
797 container.parent().remove();
820 container.parent().remove();
798 // replace with plaintext version in stdout
821 // replace with plaintext version in stdout
799 this.append_output(content, false);
822 this.append_output(content, false);
800 this.events.trigger('send_input_reply.Kernel', value);
823 this.events.trigger('send_input_reply.Kernel', value);
801 };
824 };
802
825
803
826
804 OutputArea.prototype.handle_clear_output = function (msg) {
827 OutputArea.prototype.handle_clear_output = function (msg) {
805 // msg spec v4 had stdout, stderr, display keys
828 // msg spec v4 had stdout, stderr, display keys
806 // v4.1 replaced these with just wait
829 // v4.1 replaced these with just wait
807 // The default behavior is the same (stdout=stderr=display=True, wait=False),
830 // The default behavior is the same (stdout=stderr=display=True, wait=False),
808 // so v4 messages will still be properly handled,
831 // so v4 messages will still be properly handled,
809 // except for the rarely used clearing less than all output.
832 // except for the rarely used clearing less than all output.
810 this.clear_output(msg.content.wait || false);
833 this.clear_output(msg.content.wait || false);
811 };
834 };
812
835
813
836
814 OutputArea.prototype.clear_output = function(wait) {
837 OutputArea.prototype.clear_output = function(wait) {
815 if (wait) {
838 if (wait) {
816
839
817 // If a clear is queued, clear before adding another to the queue.
840 // If a clear is queued, clear before adding another to the queue.
818 if (this.clear_queued) {
841 if (this.clear_queued) {
819 this.clear_output(false);
842 this.clear_output(false);
820 }
843 }
821
844
822 this.clear_queued = true;
845 this.clear_queued = true;
823 } else {
846 } else {
824
847
825 // Fix the output div's height if the clear_output is waiting for
848 // Fix the output div's height if the clear_output is waiting for
826 // new output (it is being used in an animation).
849 // new output (it is being used in an animation).
827 if (this.clear_queued) {
850 if (this.clear_queued) {
828 var height = this.element.height();
851 var height = this.element.height();
829 this.element.height(height);
852 this.element.height(height);
830 this.clear_queued = false;
853 this.clear_queued = false;
831 }
854 }
832
855
833 // Clear all
856 // Clear all
834 // Remove load event handlers from img tags because we don't want
857 // Remove load event handlers from img tags because we don't want
835 // them to fire if the image is never added to the page.
858 // them to fire if the image is never added to the page.
836 this.element.find('img').off('load');
859 this.element.find('img').off('load');
837 this.element.html("");
860 this.element.html("");
838
861
839 // Notify others of changes.
862 // Notify others of changes.
840 this.element.trigger('changed');
863 this.element.trigger('changed');
841
864
842 this.outputs = [];
865 this.outputs = [];
843 this.trusted = true;
866 this.trusted = true;
844 this.unscroll_area();
867 this.unscroll_area();
845 return;
868 return;
846 }
869 }
847 };
870 };
848
871
849
872
850 // JSON serialization
873 // JSON serialization
851
874
852 OutputArea.prototype.fromJSON = function (outputs, metadata) {
875 OutputArea.prototype.fromJSON = function (outputs, metadata) {
853 var len = outputs.length;
876 var len = outputs.length;
854 metadata = metadata || {};
877 metadata = metadata || {};
855
878
856 for (var i=0; i<len; i++) {
879 for (var i=0; i<len; i++) {
857 this.append_output(outputs[i]);
880 this.append_output(outputs[i]);
858 }
881 }
859
882
860 if (metadata.collapsed !== undefined) {
883 if (metadata.collapsed !== undefined) {
861 this.collapsed = metadata.collapsed;
884 this.collapsed = metadata.collapsed;
862 if (metadata.collapsed) {
885 if (metadata.collapsed) {
863 this.collapse_output();
886 this.collapse_output();
864 }
887 }
865 }
888 }
866 if (metadata.autoscroll !== undefined) {
889 if (metadata.autoscroll !== undefined) {
867 this.collapsed = metadata.collapsed;
890 this.collapsed = metadata.collapsed;
868 if (metadata.collapsed) {
891 if (metadata.collapsed) {
869 this.collapse_output();
892 this.collapse_output();
870 } else {
893 } else {
871 this.expand_output();
894 this.expand_output();
872 }
895 }
873 }
896 }
874 };
897 };
875
898
876
899
877 OutputArea.prototype.toJSON = function () {
900 OutputArea.prototype.toJSON = function () {
878 return this.outputs;
901 return this.outputs;
879 };
902 };
880
903
881 /**
904 /**
882 * Class properties
905 * Class properties
883 **/
906 **/
884
907
885 /**
908 /**
886 * Threshold to trigger autoscroll when the OutputArea is resized,
909 * Threshold to trigger autoscroll when the OutputArea is resized,
887 * typically when new outputs are added.
910 * typically when new outputs are added.
888 *
911 *
889 * Behavior is undefined if autoscroll is lower than minimum_scroll_threshold,
912 * Behavior is undefined if autoscroll is lower than minimum_scroll_threshold,
890 * unless it is < 0, in which case autoscroll will never be triggered
913 * unless it is < 0, in which case autoscroll will never be triggered
891 *
914 *
892 * @property auto_scroll_threshold
915 * @property auto_scroll_threshold
893 * @type Number
916 * @type Number
894 * @default 100
917 * @default 100
895 *
918 *
896 **/
919 **/
897 OutputArea.auto_scroll_threshold = 100;
920 OutputArea.auto_scroll_threshold = 100;
898
921
899 /**
922 /**
900 * Lower limit (in lines) for OutputArea to be made scrollable. OutputAreas
923 * Lower limit (in lines) for OutputArea to be made scrollable. OutputAreas
901 * shorter than this are never scrolled.
924 * shorter than this are never scrolled.
902 *
925 *
903 * @property minimum_scroll_threshold
926 * @property minimum_scroll_threshold
904 * @type Number
927 * @type Number
905 * @default 20
928 * @default 20
906 *
929 *
907 **/
930 **/
908 OutputArea.minimum_scroll_threshold = 20;
931 OutputArea.minimum_scroll_threshold = 20;
909
932
910
933
911 OutputArea.display_order = [
934 OutputArea.display_order = [
912 'application/javascript',
935 'application/javascript',
913 'text/html',
936 'text/html',
914 'text/markdown',
937 'text/markdown',
915 'text/latex',
938 'text/latex',
916 'image/svg+xml',
939 'image/svg+xml',
917 'image/png',
940 'image/png',
918 'image/jpeg',
941 'image/jpeg',
919 'application/pdf',
942 'application/pdf',
920 'text/plain'
943 'text/plain'
921 ];
944 ];
922
945
923 OutputArea.append_map = {
946 OutputArea.append_map = {
924 "text/plain" : append_text,
947 "text/plain" : append_text,
925 "text/html" : append_html,
948 "text/html" : append_html,
926 "text/markdown": append_markdown,
949 "text/markdown": append_markdown,
927 "image/svg+xml" : append_svg,
950 "image/svg+xml" : append_svg,
928 "image/png" : append_png,
951 "image/png" : append_png,
929 "image/jpeg" : append_jpeg,
952 "image/jpeg" : append_jpeg,
930 "text/latex" : append_latex,
953 "text/latex" : append_latex,
931 "application/javascript" : append_javascript,
954 "application/javascript" : append_javascript,
932 "application/pdf" : append_pdf
955 "application/pdf" : append_pdf
933 };
956 };
934
957
935 // For backwards compatability.
958 // For backwards compatability.
936 IPython.OutputArea = OutputArea;
959 IPython.OutputArea = OutputArea;
937
960
938 return {'OutputArea': OutputArea};
961 return {'OutputArea': OutputArea};
939 });
962 });
@@ -1,344 +1,344 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 'base/js/utils',
6 'base/js/utils',
7 'jquery',
7 'jquery',
8 'notebook/js/cell',
8 'notebook/js/cell',
9 'base/js/security',
9 'base/js/security',
10 'notebook/js/mathjaxutils',
10 'notebook/js/mathjaxutils',
11 'notebook/js/celltoolbar',
11 'notebook/js/celltoolbar',
12 'components/marked/lib/marked',
12 'components/marked/lib/marked',
13 'codemirror/lib/codemirror',
13 'codemirror/lib/codemirror',
14 'codemirror/mode/gfm/gfm',
14 'codemirror/mode/gfm/gfm',
15 'notebook/js/codemirror-ipythongfm'
15 'notebook/js/codemirror-ipythongfm'
16 ], function(IPython,utils , $, cell, security, mathjaxutils, celltoolbar, marked, CodeMirror, gfm, ipgfm) {
16 ], function(IPython,utils , $, cell, security, mathjaxutils, celltoolbar, marked, CodeMirror, gfm, ipgfm) {
17 "use strict";
17 "use strict";
18 var Cell = cell.Cell;
18 var Cell = cell.Cell;
19
19
20 var TextCell = function (options) {
20 var TextCell = function (options) {
21 // Constructor
21 // Constructor
22 //
22 //
23 // Construct a new TextCell, codemirror mode is by default 'htmlmixed',
23 // Construct a new TextCell, codemirror mode is by default 'htmlmixed',
24 // and cell type is 'text' cell start as not redered.
24 // and cell type is 'text' cell start as not redered.
25 //
25 //
26 // Parameters:
26 // Parameters:
27 // options: dictionary
27 // options: dictionary
28 // Dictionary of keyword arguments.
28 // Dictionary of keyword arguments.
29 // events: $(Events) instance
29 // events: $(Events) instance
30 // config: dictionary
30 // config: dictionary
31 // keyboard_manager: KeyboardManager instance
31 // keyboard_manager: KeyboardManager instance
32 // notebook: Notebook instance
32 // notebook: Notebook instance
33 options = options || {};
33 options = options || {};
34
34
35 // in all TextCell/Cell subclasses
35 // in all TextCell/Cell subclasses
36 // do not assign most of members here, just pass it down
36 // do not assign most of members here, just pass it down
37 // in the options dict potentially overwriting what you wish.
37 // in the options dict potentially overwriting what you wish.
38 // they will be assigned in the base class.
38 // they will be assigned in the base class.
39 this.notebook = options.notebook;
39 this.notebook = options.notebook;
40 this.events = options.events;
40 this.events = options.events;
41 this.config = options.config;
41 this.config = options.config;
42
42
43 // we cannot put this as a class key as it has handle to "this".
43 // we cannot put this as a class key as it has handle to "this".
44 var config = utils.mergeopt(TextCell, this.config);
44 var config = utils.mergeopt(TextCell, this.config);
45 Cell.apply(this, [{
45 Cell.apply(this, [{
46 config: config,
46 config: config,
47 keyboard_manager: options.keyboard_manager,
47 keyboard_manager: options.keyboard_manager,
48 events: this.events}]);
48 events: this.events}]);
49
49
50 this.cell_type = this.cell_type || 'text';
50 this.cell_type = this.cell_type || 'text';
51 mathjaxutils = mathjaxutils;
51 mathjaxutils = mathjaxutils;
52 this.rendered = false;
52 this.rendered = false;
53 };
53 };
54
54
55 TextCell.prototype = Object.create(Cell.prototype);
55 TextCell.prototype = Object.create(Cell.prototype);
56
56
57 TextCell.options_default = {
57 TextCell.options_default = {
58 cm_config : {
58 cm_config : {
59 extraKeys: {"Tab": "indentMore","Shift-Tab" : "indentLess"},
59 extraKeys: {"Tab": "indentMore","Shift-Tab" : "indentLess"},
60 mode: 'htmlmixed',
60 mode: 'htmlmixed',
61 lineWrapping : true,
61 lineWrapping : true,
62 }
62 }
63 };
63 };
64
64
65
65
66 /**
66 /**
67 * Create the DOM element of the TextCell
67 * Create the DOM element of the TextCell
68 * @method create_element
68 * @method create_element
69 * @private
69 * @private
70 */
70 */
71 TextCell.prototype.create_element = function () {
71 TextCell.prototype.create_element = function () {
72 Cell.prototype.create_element.apply(this, arguments);
72 Cell.prototype.create_element.apply(this, arguments);
73
73
74 var cell = $("<div>").addClass('cell text_cell');
74 var cell = $("<div>").addClass('cell text_cell');
75 cell.attr('tabindex','2');
75 cell.attr('tabindex','2');
76
76
77 var prompt = $('<div/>').addClass('prompt input_prompt');
77 var prompt = $('<div/>').addClass('prompt input_prompt');
78 cell.append(prompt);
78 cell.append(prompt);
79 var inner_cell = $('<div/>').addClass('inner_cell');
79 var inner_cell = $('<div/>').addClass('inner_cell');
80 this.celltoolbar = new celltoolbar.CellToolbar({
80 this.celltoolbar = new celltoolbar.CellToolbar({
81 cell: this,
81 cell: this,
82 notebook: this.notebook});
82 notebook: this.notebook});
83 inner_cell.append(this.celltoolbar.element);
83 inner_cell.append(this.celltoolbar.element);
84 var input_area = $('<div/>').addClass('input_area');
84 var input_area = $('<div/>').addClass('input_area');
85 this.code_mirror = new CodeMirror(input_area.get(0), this.cm_config);
85 this.code_mirror = new CodeMirror(input_area.get(0), this.cm_config);
86 this.code_mirror.on('keydown', $.proxy(this.handle_keyevent,this))
86 this.code_mirror.on('keydown', $.proxy(this.handle_keyevent,this))
87 // The tabindex=-1 makes this div focusable.
87 // The tabindex=-1 makes this div focusable.
88 var render_area = $('<div/>').addClass('text_cell_render rendered_html')
88 var render_area = $('<div/>').addClass('text_cell_render rendered_html')
89 .attr('tabindex','-1');
89 .attr('tabindex','-1');
90 inner_cell.append(input_area).append(render_area);
90 inner_cell.append(input_area).append(render_area);
91 cell.append(inner_cell);
91 cell.append(inner_cell);
92 this.element = cell;
92 this.element = cell;
93 };
93 };
94
94
95
95
96 // Cell level actions
96 // Cell level actions
97
97
98 TextCell.prototype.select = function () {
98 TextCell.prototype.select = function () {
99 var cont = Cell.prototype.select.apply(this);
99 var cont = Cell.prototype.select.apply(this);
100 if (cont) {
100 if (cont) {
101 if (this.mode === 'edit') {
101 if (this.mode === 'edit') {
102 this.code_mirror.refresh();
102 this.code_mirror.refresh();
103 }
103 }
104 }
104 }
105 return cont;
105 return cont;
106 };
106 };
107
107
108 TextCell.prototype.unrender = function () {
108 TextCell.prototype.unrender = function () {
109 if (this.read_only) return;
109 if (this.read_only) return;
110 var cont = Cell.prototype.unrender.apply(this);
110 var cont = Cell.prototype.unrender.apply(this);
111 if (cont) {
111 if (cont) {
112 var text_cell = this.element;
112 var text_cell = this.element;
113 var output = text_cell.find("div.text_cell_render");
113 var output = text_cell.find("div.text_cell_render");
114 if (this.get_text() === this.placeholder) {
114 if (this.get_text() === this.placeholder) {
115 this.set_text('');
115 this.set_text('');
116 }
116 }
117 this.refresh();
117 this.refresh();
118 }
118 }
119 return cont;
119 return cont;
120 };
120 };
121
121
122 TextCell.prototype.execute = function () {
122 TextCell.prototype.execute = function () {
123 this.render();
123 this.render();
124 };
124 };
125
125
126 /**
126 /**
127 * setter: {{#crossLink "TextCell/set_text"}}{{/crossLink}}
127 * setter: {{#crossLink "TextCell/set_text"}}{{/crossLink}}
128 * @method get_text
128 * @method get_text
129 * @retrun {string} CodeMirror current text value
129 * @retrun {string} CodeMirror current text value
130 */
130 */
131 TextCell.prototype.get_text = function() {
131 TextCell.prototype.get_text = function() {
132 return this.code_mirror.getValue();
132 return this.code_mirror.getValue();
133 };
133 };
134
134
135 /**
135 /**
136 * @param {string} text - Codemiror text value
136 * @param {string} text - Codemiror text value
137 * @see TextCell#get_text
137 * @see TextCell#get_text
138 * @method set_text
138 * @method set_text
139 * */
139 * */
140 TextCell.prototype.set_text = function(text) {
140 TextCell.prototype.set_text = function(text) {
141 this.code_mirror.setValue(text);
141 this.code_mirror.setValue(text);
142 this.unrender();
142 this.unrender();
143 this.code_mirror.refresh();
143 this.code_mirror.refresh();
144 };
144 };
145
145
146 /**
146 /**
147 * setter :{{#crossLink "TextCell/set_rendered"}}{{/crossLink}}
147 * setter :{{#crossLink "TextCell/set_rendered"}}{{/crossLink}}
148 * @method get_rendered
148 * @method get_rendered
149 * */
149 * */
150 TextCell.prototype.get_rendered = function() {
150 TextCell.prototype.get_rendered = function() {
151 return this.element.find('div.text_cell_render').html();
151 return this.element.find('div.text_cell_render').html();
152 };
152 };
153
153
154 /**
154 /**
155 * @method set_rendered
155 * @method set_rendered
156 */
156 */
157 TextCell.prototype.set_rendered = function(text) {
157 TextCell.prototype.set_rendered = function(text) {
158 this.element.find('div.text_cell_render').html(text);
158 this.element.find('div.text_cell_render').html(text);
159 };
159 };
160
160
161
161
162 /**
162 /**
163 * Create Text cell from JSON
163 * Create Text cell from JSON
164 * @param {json} data - JSON serialized text-cell
164 * @param {json} data - JSON serialized text-cell
165 * @method fromJSON
165 * @method fromJSON
166 */
166 */
167 TextCell.prototype.fromJSON = function (data) {
167 TextCell.prototype.fromJSON = function (data) {
168 Cell.prototype.fromJSON.apply(this, arguments);
168 Cell.prototype.fromJSON.apply(this, arguments);
169 if (data.cell_type === this.cell_type) {
169 if (data.cell_type === this.cell_type) {
170 if (data.source !== undefined) {
170 if (data.source !== undefined) {
171 this.set_text(data.source);
171 this.set_text(data.source);
172 // make this value the starting point, so that we can only undo
172 // make this value the starting point, so that we can only undo
173 // to this state, instead of a blank cell
173 // to this state, instead of a blank cell
174 this.code_mirror.clearHistory();
174 this.code_mirror.clearHistory();
175 // TODO: This HTML needs to be treated as potentially dangerous
175 // TODO: This HTML needs to be treated as potentially dangerous
176 // user input and should be handled before set_rendered.
176 // user input and should be handled before set_rendered.
177 this.set_rendered(data.rendered || '');
177 this.set_rendered(data.rendered || '');
178 this.rendered = false;
178 this.rendered = false;
179 this.render();
179 this.render();
180 }
180 }
181 }
181 }
182 };
182 };
183
183
184 /** Generate JSON from cell
184 /** Generate JSON from cell
185 * @return {object} cell data serialised to json
185 * @return {object} cell data serialised to json
186 */
186 */
187 TextCell.prototype.toJSON = function () {
187 TextCell.prototype.toJSON = function () {
188 var data = Cell.prototype.toJSON.apply(this);
188 var data = Cell.prototype.toJSON.apply(this);
189 data.source = this.get_text();
189 data.source = this.get_text();
190 if (data.source == this.placeholder) {
190 if (data.source == this.placeholder) {
191 data.source = "";
191 data.source = "";
192 }
192 }
193 return data;
193 return data;
194 };
194 };
195
195
196
196
197 var MarkdownCell = function (options) {
197 var MarkdownCell = function (options) {
198 // Constructor
198 // Constructor
199 //
199 //
200 // Parameters:
200 // Parameters:
201 // options: dictionary
201 // options: dictionary
202 // Dictionary of keyword arguments.
202 // Dictionary of keyword arguments.
203 // events: $(Events) instance
203 // events: $(Events) instance
204 // config: dictionary
204 // config: dictionary
205 // keyboard_manager: KeyboardManager instance
205 // keyboard_manager: KeyboardManager instance
206 // notebook: Notebook instance
206 // notebook: Notebook instance
207 options = options || {};
207 options = options || {};
208 var config = utils.mergeopt(MarkdownCell, options.config);
208 var config = utils.mergeopt(MarkdownCell, options.config);
209 TextCell.apply(this, [$.extend({}, options, {config: config})]);
209 TextCell.apply(this, [$.extend({}, options, {config: config})]);
210
210
211 this.cell_type = 'markdown';
211 this.cell_type = 'markdown';
212 };
212 };
213
213
214 MarkdownCell.options_default = {
214 MarkdownCell.options_default = {
215 cm_config: {
215 cm_config: {
216 mode: 'ipythongfm'
216 mode: 'ipythongfm'
217 },
217 },
218 placeholder: "Type *Markdown* and LaTeX: $\\alpha^2$"
218 placeholder: "Type *Markdown* and LaTeX: $\\alpha^2$"
219 };
219 };
220
220
221 MarkdownCell.prototype = Object.create(TextCell.prototype);
221 MarkdownCell.prototype = Object.create(TextCell.prototype);
222
222
223 MarkdownCell.prototype.set_heading_level = function (level) {
223 MarkdownCell.prototype.set_heading_level = function (level) {
224 // make a markdown cell a heading
224 // make a markdown cell a heading
225 level = level || 1;
225 level = level || 1;
226 var source = this.get_text();
226 var source = this.get_text();
227 source = source.replace(/^(#*)\s?/,
227 source = source.replace(/^(#*)\s?/,
228 new Array(level + 1).join('#') + ' ');
228 new Array(level + 1).join('#') + ' ');
229 this.set_text(source);
229 this.set_text(source);
230 this.refresh();
230 this.refresh();
231 if (this.rendered) {
231 if (this.rendered) {
232 this.render();
232 this.render();
233 }
233 }
234 };
234 };
235
235
236 /**
236 /**
237 * @method render
237 * @method render
238 */
238 */
239 MarkdownCell.prototype.render = function () {
239 MarkdownCell.prototype.render = function () {
240 var cont = TextCell.prototype.render.apply(this);
240 var cont = TextCell.prototype.render.apply(this);
241 if (cont) {
241 if (cont) {
242 var that = this;
242 var that = this;
243 var text = this.get_text();
243 var text = this.get_text();
244 var math = null;
244 var math = null;
245 if (text === "") { text = this.placeholder; }
245 if (text === "") { text = this.placeholder; }
246 var text_and_math = mathjaxutils.remove_math(text);
246 var text_and_math = mathjaxutils.remove_math(text);
247 text = text_and_math[0];
247 text = text_and_math[0];
248 math = text_and_math[1];
248 math = text_and_math[1];
249 marked(text, function (err, html) {
249 marked(text, function (err, html) {
250 html = mathjaxutils.replace_math(html, math);
250 html = mathjaxutils.replace_math(html, math);
251 html = security.sanitize_html(html);
251 html = security.sanitize_html(html);
252 html = $($.parseHTML(html));
252 html = $($.parseHTML(html));
253 // add anchors to headings
253 // add anchors to headings
254 html.find(":header").addBack(":header").each(function (i, h) {
254 html.find(":header").addBack(":header").each(function (i, h) {
255 h = $(h);
255 h = $(h);
256 var hash = h.text().replace(/ /g, '-');
256 var hash = h.text().replace(/ /g, '-');
257 h.attr('id', hash);
257 h.attr('id', hash);
258 h.append(
258 h.append(
259 $('<a/>')
259 $('<a/>')
260 .addClass('anchor-link')
260 .addClass('anchor-link')
261 .attr('href', '#' + hash)
261 .attr('href', '#' + hash)
262 .text('ΒΆ')
262 .text('ΒΆ')
263 );
263 );
264 });
264 });
265 // links in markdown cells should open in new tabs
265 // links in markdown cells should open in new tabs
266 html.find("a[href]").not('[href^="#"]').attr("target", "_blank");
266 html.find("a[href]").not('[href^="#"]').attr("target", "_blank");
267 that.set_rendered(html);
267 that.set_rendered(html);
268 that.typeset();
268 that.typeset();
269 that.events.trigger("rendered.MarkdownCell", {cell: that});
269 that.events.trigger("rendered.MarkdownCell", {cell: that});
270 });
270 });
271 }
271 }
272 return cont;
272 return cont;
273 };
273 };
274
274
275
275
276 var RawCell = function (options) {
276 var RawCell = function (options) {
277 // Constructor
277 // Constructor
278 //
278 //
279 // Parameters:
279 // Parameters:
280 // options: dictionary
280 // options: dictionary
281 // Dictionary of keyword arguments.
281 // Dictionary of keyword arguments.
282 // events: $(Events) instance
282 // events: $(Events) instance
283 // config: dictionary
283 // config: dictionary
284 // keyboard_manager: KeyboardManager instance
284 // keyboard_manager: KeyboardManager instance
285 // notebook: Notebook instance
285 // notebook: Notebook instance
286 options = options || {};
286 options = options || {};
287 var config = utils.mergeopt(RawCell, options.config);
287 var config = utils.mergeopt(RawCell, options.config);
288 TextCell.apply(this, [$.extend({}, options, {config: config})]);
288 TextCell.apply(this, [$.extend({}, options, {config: config})]);
289
289
290 this.cell_type = 'raw';
290 this.cell_type = 'raw';
291 };
291 };
292
292
293 RawCell.options_default = {
293 RawCell.options_default = {
294 placeholder : "Write raw LaTeX or other formats here, for use with nbconvert. " +
294 placeholder : "Write raw LaTeX or other formats here, for use with nbconvert. " +
295 "It will not be rendered in the notebook. " +
295 "It will not be rendered in the notebook. " +
296 "When passing through nbconvert, a Raw Cell's content is added to the output unmodified."
296 "When passing through nbconvert, a Raw Cell's content is added to the output unmodified."
297 };
297 };
298
298
299 RawCell.prototype = Object.create(TextCell.prototype);
299 RawCell.prototype = Object.create(TextCell.prototype);
300
300
301 /** @method bind_events **/
301 /** @method bind_events **/
302 RawCell.prototype.bind_events = function () {
302 RawCell.prototype.bind_events = function () {
303 TextCell.prototype.bind_events.apply(this);
303 TextCell.prototype.bind_events.apply(this);
304 var that = this;
304 var that = this;
305 this.element.focusout(function() {
305 this.element.focusout(function() {
306 that.auto_highlight();
306 that.auto_highlight();
307 that.render();
307 that.render();
308 });
308 });
309
309
310 this.code_mirror.on('focus', function() { that.unrender(); });
310 this.code_mirror.on('focus', function() { that.unrender(); });
311 };
311 };
312
312
313 /**
313 /**
314 * Trigger autodetection of highlight scheme for current cell
314 * Trigger autodetection of highlight scheme for current cell
315 * @method auto_highlight
315 * @method auto_highlight
316 */
316 */
317 RawCell.prototype.auto_highlight = function () {
317 RawCell.prototype.auto_highlight = function () {
318 this._auto_highlight(this.config.raw_cell_highlight);
318 this._auto_highlight(this.config.raw_cell_highlight);
319 };
319 };
320
320
321 /** @method render **/
321 /** @method render **/
322 RawCell.prototype.render = function () {
322 RawCell.prototype.render = function () {
323 var cont = TextCell.prototype.render.apply(this);
323 var cont = TextCell.prototype.render.apply(this);
324 if (cont){
324 if (cont){
325 var text = this.get_text();
325 var text = this.get_text();
326 if (text === "") { text = this.placeholder; }
326 if (text === "") { text = this.placeholder; }
327 this.set_text(text);
327 this.set_text(text);
328 this.element.removeClass('rendered');
328 this.element.removeClass('rendered');
329 }
329 }
330 return cont;
330 return cont;
331 };
331 };
332
332
333 // Backwards compatability.
333 // Backwards compatability.
334 IPython.TextCell = TextCell;
334 IPython.TextCell = TextCell;
335 IPython.MarkdownCell = MarkdownCell;
335 IPython.MarkdownCell = MarkdownCell;
336 IPython.RawCell = RawCell;
336 IPython.RawCell = RawCell;
337
337
338 var textcell = {
338 var textcell = {
339 TextCell: TextCell,
339 TextCell: TextCell,
340 MarkdownCell: MarkdownCell,
340 MarkdownCell: MarkdownCell,
341 RawCell: RawCell,
341 RawCell: RawCell
342 };
342 };
343 return textcell;
343 return textcell;
344 });
344 });
@@ -1,63 +1,94 b''
1 div.cell {
1 div.cell {
2 border: 1px solid transparent;
2 border: 1px solid transparent;
3 .vbox();
3 .vbox();
4 .corner-all();
4 .corner-all();
5 .border-box-sizing();
5 .border-box-sizing();
6 border-width: thin;
6 border-width: thin;
7 border-style: solid;
7 border-style: solid;
8
8
9 &.selected {
9 &.selected {
10 border-color: @border_color;
10 border-color: @border_color;
11 }
11 }
12
12
13 &.edit_mode {
13 &.edit_mode {
14 border-color: green;
14 border-color: green;
15 }
15 }
16
16
17 width: 100%;
17 width: 100%;
18 padding: 5px 5px 5px 0px;
18 padding: 5px 5px 5px 0px;
19 /* This acts as a spacer between cells, that is outside the border */
19 /* This acts as a spacer between cells, that is outside the border */
20 margin: 0px;
20 margin: 0px;
21 outline: none;
21 outline: none;
22 }
22 }
23
23
24 div.prompt {
24 div.prompt {
25 /* This needs to be wide enough for 3 digit prompt numbers: In[100]: */
25 /* This needs to be wide enough for 3 digit prompt numbers: In[100]: */
26 min-width: 15ex;
26 min-width: 15ex;
27 /* This padding is tuned to match the padding on the CodeMirror editor. */
27 /* This padding is tuned to match the padding on the CodeMirror editor. */
28 padding: @code_padding;
28 padding: @code_padding;
29 margin: 0px;
29 margin: 0px;
30 font-family: @font-family-monospace;
30 font-family: @font-family-monospace;
31 text-align: right;
31 text-align: right;
32 /* This has to match that of the the CodeMirror class line-height below */
32 /* This has to match that of the the CodeMirror class line-height below */
33 line-height: @code_line_height;
33 line-height: @code_line_height;
34 }
34 }
35
35
36 @media (max-width: 480px) {
36 @media (max-width: 480px) {
37 // prompts are in the main column on small screens,
37 // prompts are in the main column on small screens,
38 // so text should be left-aligned
38 // so text should be left-aligned
39 div.prompt {
39 div.prompt {
40 text-align: left;
40 text-align: left;
41 }
41 }
42 }
42 }
43
43
44 div.inner_cell {
44 div.inner_cell {
45 .vbox();
45 .vbox();
46 .box-flex1();
46 .box-flex1();
47 }
47 }
48
48
49 /* input_area and input_prompt must match in top border and margin for alignment */
49 /* input_area and input_prompt must match in top border and margin for alignment */
50 div.input_area {
50 div.input_area {
51 border: 1px solid @light_border_color;
51 border: 1px solid @light_border_color;
52 .corner-all;
52 .corner-all;
53 background: @cell_background;
53 background: @cell_background;
54 line-height: @code_line_height;
54 line-height: @code_line_height;
55 }
55 }
56
56
57 /* This is needed so that empty prompt areas can collapse to zero height when there
57 /* This is needed so that empty prompt areas can collapse to zero height when there
58 is no content in the output_subarea and the prompt. The main purpose of this is
58 is no content in the output_subarea and the prompt. The main purpose of this is
59 to make sure that empty JavaScript output_subareas have no height. */
59 to make sure that empty JavaScript output_subareas have no height. */
60 div.prompt:empty {
60 div.prompt:empty {
61 padding-top: 0;
61 padding-top: 0;
62 padding-bottom: 0;
62 padding-bottom: 0;
63 }
63 }
64
65 div.unrecognized_cell {
66 // from text_cell
67 padding: 5px 5px 5px 0px;
68 .hbox();
69
70 .inner_cell {
71 .border-radius(@border-radius-base);
72 padding: 5px;
73 font-weight: bold;
74 color: red;
75 border: 1px solid @light_border_color;
76 background: darken(@cell_background, 5%);
77 // remove decoration from link
78 a {
79 color: inherit;
80 text-decoration: none;
81
82 &:hover {
83 color: inherit;
84 text-decoration: none;
85 }
86 }
87 }
88 }
89 @media (max-width: 480px) {
90 // remove prompt indentation on small screens
91 div.unrecognized_cell > div.prompt {
92 display: none;
93 }
94 }
@@ -1,174 +1,190 b''
1 div.output_wrapper {
1 div.output_wrapper {
2 /* this position must be relative to enable descendents to be absolute within it */
2 /* this position must be relative to enable descendents to be absolute within it */
3 position: relative;
3 position: relative;
4 .vbox()
4 .vbox()
5 }
5 }
6
6
7 /* class for the output area when it should be height-limited */
7 /* class for the output area when it should be height-limited */
8 div.output_scroll {
8 div.output_scroll {
9 /* ideally, this would be max-height, but FF barfs all over that */
9 /* ideally, this would be max-height, but FF barfs all over that */
10 height: 24em;
10 height: 24em;
11 /* FF needs this *and the wrapper* to specify full width, or it will shrinkwrap */
11 /* FF needs this *and the wrapper* to specify full width, or it will shrinkwrap */
12 width: 100%;
12 width: 100%;
13
13
14 overflow: auto;
14 overflow: auto;
15 .corner-all;
15 .corner-all;
16 .box-shadow(inset 0 2px 8px rgba(0, 0, 0, .8));
16 .box-shadow(inset 0 2px 8px rgba(0, 0, 0, .8));
17 display: block;
17 display: block;
18 }
18 }
19
19
20 /* output div while it is collapsed */
20 /* output div while it is collapsed */
21 div.output_collapsed {
21 div.output_collapsed {
22 margin: 0px;
22 margin: 0px;
23 padding: 0px;
23 padding: 0px;
24 .vbox();
24 .vbox();
25 }
25 }
26
26
27 div.out_prompt_overlay {
27 div.out_prompt_overlay {
28 height: 100%;
28 height: 100%;
29 padding: 0px @code_padding;
29 padding: 0px @code_padding;
30 position: absolute;
30 position: absolute;
31 .corner-all;
31 .corner-all;
32 }
32 }
33
33
34 div.out_prompt_overlay:hover {
34 div.out_prompt_overlay:hover {
35 /* use inner shadow to get border that is computed the same on WebKit/FF */
35 /* use inner shadow to get border that is computed the same on WebKit/FF */
36 .box-shadow(inset 0 0 1px #000);
36 .box-shadow(inset 0 0 1px #000);
37 background: rgba(240, 240, 240, 0.5);
37 background: rgba(240, 240, 240, 0.5);
38 }
38 }
39
39
40 div.output_prompt {
40 div.output_prompt {
41 color: @output_prompt_color;
41 color: @output_prompt_color;
42 }
42 }
43
43
44 /* This class is the outer container of all output sections. */
44 /* This class is the outer container of all output sections. */
45 div.output_area {
45 div.output_area {
46 padding: 0px;
46 padding: 0px;
47 page-break-inside: avoid;
47 page-break-inside: avoid;
48 .hbox();
48 .hbox();
49
49
50 .MathJax_Display {
50 .MathJax_Display {
51 // Inside a CodeCell, elements are left justified
51 // Inside a CodeCell, elements are left justified
52 text-align: left !important;
52 text-align: left !important;
53 }
53 }
54
54
55 .rendered_html {
55 .rendered_html {
56 // Inside a CodeCell, elements are left justified
56 // Inside a CodeCell, elements are left justified
57 table {
57 table {
58 margin-left: 0;
58 margin-left: 0;
59 margin-right: 0;
59 margin-right: 0;
60 }
60 }
61
61
62 img {
62 img {
63 margin-left: 0;
63 margin-left: 0;
64 margin-right: 0;
64 margin-right: 0;
65 }
65 }
66 }
66 }
67 }
67 }
68
68
69 /* This is needed to protect the pre formating from global settings such
69 /* This is needed to protect the pre formating from global settings such
70 as that of bootstrap */
70 as that of bootstrap */
71 .output {
71 .output {
72 .vbox();
72 .vbox();
73 }
73 }
74
74
75 @media (max-width: 480px) {
75 @media (max-width: 480px) {
76 // move prompts above output on small screens
76 // move prompts above output on small screens
77 div.output_area {
77 div.output_area {
78 .vbox();
78 .vbox();
79 }
79 }
80 }
80 }
81
81
82 div.output_area pre {
82 div.output_area pre {
83 margin: 0;
83 margin: 0;
84 padding: 0;
84 padding: 0;
85 border: 0;
85 border: 0;
86 vertical-align: baseline;
86 vertical-align: baseline;
87 color: @output_pre_color;
87 color: @output_pre_color;
88 background-color: transparent;
88 background-color: transparent;
89 .border-radius(0);
89 .border-radius(0);
90 }
90 }
91
91
92 /* This class is for the output subarea inside the output_area and after
92 /* This class is for the output subarea inside the output_area and after
93 the prompt div. */
93 the prompt div. */
94 div.output_subarea {
94 div.output_subarea {
95 padding: @code_padding @code_padding 0.0em @code_padding;
95 padding: @code_padding @code_padding 0.0em @code_padding;
96 .box-flex1();
96 .box-flex1();
97 }
97 }
98
98
99 /* The rest of the output_* classes are for special styling of the different
99 /* The rest of the output_* classes are for special styling of the different
100 output types */
100 output types */
101
101
102 /* all text output has this class: */
102 /* all text output has this class: */
103 div.output_text {
103 div.output_text {
104 text-align: left;
104 text-align: left;
105 color: @text-color;
105 color: @text-color;
106 /* This has to match that of the the CodeMirror class line-height below */
106 /* This has to match that of the the CodeMirror class line-height below */
107 line-height: @code_line_height;
107 line-height: @code_line_height;
108 }
108 }
109
109
110 /* stdout/stderr are 'text' as well as 'stream', but execute_result/error are *not* streams */
110 /* stdout/stderr are 'text' as well as 'stream', but execute_result/error are *not* streams */
111 div.output_stream {
111 div.output_stream {
112 }
112 }
113
113
114 div.output_stdout {
114 div.output_stdout {
115 }
115 }
116
116
117 div.output_stderr {
117 div.output_stderr {
118 background: #fdd; /* very light red background for stderr */
118 background: #fdd; /* very light red background for stderr */
119 }
119 }
120
120
121 div.output_latex {
121 div.output_latex {
122 text-align: left;
122 text-align: left;
123 }
123 }
124
124
125 div.output_html {
125 div.output_html {
126 }
126 }
127
127
128 div.output_png {
128 div.output_png {
129 }
129 }
130
130
131 div.output_jpeg {
131 div.output_jpeg {
132 }
132 }
133
133
134 /* Empty output_javascript divs should have no height */
134 /* Empty output_javascript divs should have no height */
135 div.output_javascript:empty {
135 div.output_javascript:empty {
136 padding: 0;
136 padding: 0;
137 }
137 }
138
138
139 .js-error {
139 .js-error {
140 color: darkred;
140 color: darkred;
141 }
141 }
142
142
143 /* raw_input styles */
143 /* raw_input styles */
144
144
145 div.raw_input_container {
145 div.raw_input_container {
146 font-family: @font-family-monospace;
146 font-family: @font-family-monospace;
147 // for some reason, em padding doesn't compute the same for raw_input
147 // for some reason, em padding doesn't compute the same for raw_input
148 // that is not the first input, but px does
148 // that is not the first input, but px does
149 padding-top: 5px;
149 padding-top: 5px;
150 }
150 }
151
151
152 span.raw_input_prompt {
152 span.raw_input_prompt {
153 /* nothing needed here */
153 /* nothing needed here */
154 }
154 }
155
155
156 input.raw_input {
156 input.raw_input {
157 font-family: inherit;
157 font-family: inherit;
158 font-size: inherit;
158 font-size: inherit;
159 color: inherit;
159 color: inherit;
160 width: auto;
160 width: auto;
161 /* make sure input baseline aligns with prompt */
161 /* make sure input baseline aligns with prompt */
162 vertical-align: baseline;
162 vertical-align: baseline;
163 /* padding + margin = 0.5em between prompt and cursor */
163 /* padding + margin = 0.5em between prompt and cursor */
164 padding: 0em 0.25em;
164 padding: 0em 0.25em;
165 margin: 0em 0.25em;
165 margin: 0em 0.25em;
166 }
166 }
167
167
168 input.raw_input:focus {
168 input.raw_input:focus {
169 box-shadow: none;
169 box-shadow: none;
170 }
170 }
171
171
172 p.p-space {
172 p.p-space {
173 margin-bottom: 10px;
173 margin-bottom: 10px;
174 }
174 }
175
176 div.output_unrecognized {
177 padding: 5px;
178 font-weight: bold;
179 color: red;
180 // remove decoration from link
181 a {
182 color: inherit;
183 text-decoration: none;
184
185 &:hover {
186 color: inherit;
187 text-decoration: none;
188 }
189 }
190 } No newline at end of file
@@ -1,1536 +1,1587 b''
1 /*!
1 /*!
2 *
2 *
3 * IPython base
3 * IPython base
4 *
4 *
5 */
5 */
6 .modal.fade .modal-dialog {
6 .modal.fade .modal-dialog {
7 -webkit-transform: translate(0, 0);
7 -webkit-transform: translate(0, 0);
8 -ms-transform: translate(0, 0);
8 -ms-transform: translate(0, 0);
9 transform: translate(0, 0);
9 transform: translate(0, 0);
10 }
10 }
11 code {
11 code {
12 color: #000000;
12 color: #000000;
13 }
13 }
14 pre {
14 pre {
15 font-size: inherit;
15 font-size: inherit;
16 line-height: inherit;
16 line-height: inherit;
17 }
17 }
18 label {
18 label {
19 font-weight: normal;
19 font-weight: normal;
20 }
20 }
21 .border-box-sizing {
21 .border-box-sizing {
22 box-sizing: border-box;
22 box-sizing: border-box;
23 -moz-box-sizing: border-box;
23 -moz-box-sizing: border-box;
24 -webkit-box-sizing: border-box;
24 -webkit-box-sizing: border-box;
25 }
25 }
26 .corner-all {
26 .corner-all {
27 border-radius: 4px;
27 border-radius: 4px;
28 }
28 }
29 .no-padding {
29 .no-padding {
30 padding: 0px;
30 padding: 0px;
31 }
31 }
32 /* Flexible box model classes */
32 /* Flexible box model classes */
33 /* Taken from Alex Russell http://infrequently.org/2009/08/css-3-progress/ */
33 /* Taken from Alex Russell http://infrequently.org/2009/08/css-3-progress/ */
34 /* This file is a compatability layer. It allows the usage of flexible box
34 /* This file is a compatability layer. It allows the usage of flexible box
35 model layouts accross multiple browsers, including older browsers. The newest,
35 model layouts accross multiple browsers, including older browsers. The newest,
36 universal implementation of the flexible box model is used when available (see
36 universal implementation of the flexible box model is used when available (see
37 `Modern browsers` comments below). Browsers that are known to implement this
37 `Modern browsers` comments below). Browsers that are known to implement this
38 new spec completely include:
38 new spec completely include:
39
39
40 Firefox 28.0+
40 Firefox 28.0+
41 Chrome 29.0+
41 Chrome 29.0+
42 Internet Explorer 11+
42 Internet Explorer 11+
43 Opera 17.0+
43 Opera 17.0+
44
44
45 Browsers not listed, including Safari, are supported via the styling under the
45 Browsers not listed, including Safari, are supported via the styling under the
46 `Old browsers` comments below.
46 `Old browsers` comments below.
47 */
47 */
48 .hbox {
48 .hbox {
49 /* Old browsers */
49 /* Old browsers */
50 display: -webkit-box;
50 display: -webkit-box;
51 -webkit-box-orient: horizontal;
51 -webkit-box-orient: horizontal;
52 -webkit-box-align: stretch;
52 -webkit-box-align: stretch;
53 display: -moz-box;
53 display: -moz-box;
54 -moz-box-orient: horizontal;
54 -moz-box-orient: horizontal;
55 -moz-box-align: stretch;
55 -moz-box-align: stretch;
56 display: box;
56 display: box;
57 box-orient: horizontal;
57 box-orient: horizontal;
58 box-align: stretch;
58 box-align: stretch;
59 /* Modern browsers */
59 /* Modern browsers */
60 display: flex;
60 display: flex;
61 flex-direction: row;
61 flex-direction: row;
62 align-items: stretch;
62 align-items: stretch;
63 }
63 }
64 .hbox > * {
64 .hbox > * {
65 /* Old browsers */
65 /* Old browsers */
66 -webkit-box-flex: 0;
66 -webkit-box-flex: 0;
67 -moz-box-flex: 0;
67 -moz-box-flex: 0;
68 box-flex: 0;
68 box-flex: 0;
69 /* Modern browsers */
69 /* Modern browsers */
70 flex: none;
70 flex: none;
71 }
71 }
72 .vbox {
72 .vbox {
73 /* Old browsers */
73 /* Old browsers */
74 display: -webkit-box;
74 display: -webkit-box;
75 -webkit-box-orient: vertical;
75 -webkit-box-orient: vertical;
76 -webkit-box-align: stretch;
76 -webkit-box-align: stretch;
77 display: -moz-box;
77 display: -moz-box;
78 -moz-box-orient: vertical;
78 -moz-box-orient: vertical;
79 -moz-box-align: stretch;
79 -moz-box-align: stretch;
80 display: box;
80 display: box;
81 box-orient: vertical;
81 box-orient: vertical;
82 box-align: stretch;
82 box-align: stretch;
83 /* Modern browsers */
83 /* Modern browsers */
84 display: flex;
84 display: flex;
85 flex-direction: column;
85 flex-direction: column;
86 align-items: stretch;
86 align-items: stretch;
87 }
87 }
88 .vbox > * {
88 .vbox > * {
89 /* Old browsers */
89 /* Old browsers */
90 -webkit-box-flex: 0;
90 -webkit-box-flex: 0;
91 -moz-box-flex: 0;
91 -moz-box-flex: 0;
92 box-flex: 0;
92 box-flex: 0;
93 /* Modern browsers */
93 /* Modern browsers */
94 flex: none;
94 flex: none;
95 }
95 }
96 .hbox.reverse,
96 .hbox.reverse,
97 .vbox.reverse,
97 .vbox.reverse,
98 .reverse {
98 .reverse {
99 /* Old browsers */
99 /* Old browsers */
100 -webkit-box-direction: reverse;
100 -webkit-box-direction: reverse;
101 -moz-box-direction: reverse;
101 -moz-box-direction: reverse;
102 box-direction: reverse;
102 box-direction: reverse;
103 /* Modern browsers */
103 /* Modern browsers */
104 flex-direction: row-reverse;
104 flex-direction: row-reverse;
105 }
105 }
106 .hbox.box-flex0,
106 .hbox.box-flex0,
107 .vbox.box-flex0,
107 .vbox.box-flex0,
108 .box-flex0 {
108 .box-flex0 {
109 /* Old browsers */
109 /* Old browsers */
110 -webkit-box-flex: 0;
110 -webkit-box-flex: 0;
111 -moz-box-flex: 0;
111 -moz-box-flex: 0;
112 box-flex: 0;
112 box-flex: 0;
113 /* Modern browsers */
113 /* Modern browsers */
114 flex: none;
114 flex: none;
115 width: auto;
115 width: auto;
116 }
116 }
117 .hbox.box-flex1,
117 .hbox.box-flex1,
118 .vbox.box-flex1,
118 .vbox.box-flex1,
119 .box-flex1 {
119 .box-flex1 {
120 /* Old browsers */
120 /* Old browsers */
121 -webkit-box-flex: 1;
121 -webkit-box-flex: 1;
122 -moz-box-flex: 1;
122 -moz-box-flex: 1;
123 box-flex: 1;
123 box-flex: 1;
124 /* Modern browsers */
124 /* Modern browsers */
125 flex: 1;
125 flex: 1;
126 }
126 }
127 .hbox.box-flex,
127 .hbox.box-flex,
128 .vbox.box-flex,
128 .vbox.box-flex,
129 .box-flex {
129 .box-flex {
130 /* Old browsers */
130 /* Old browsers */
131 /* Old browsers */
131 /* Old browsers */
132 -webkit-box-flex: 1;
132 -webkit-box-flex: 1;
133 -moz-box-flex: 1;
133 -moz-box-flex: 1;
134 box-flex: 1;
134 box-flex: 1;
135 /* Modern browsers */
135 /* Modern browsers */
136 flex: 1;
136 flex: 1;
137 }
137 }
138 .hbox.box-flex2,
138 .hbox.box-flex2,
139 .vbox.box-flex2,
139 .vbox.box-flex2,
140 .box-flex2 {
140 .box-flex2 {
141 /* Old browsers */
141 /* Old browsers */
142 -webkit-box-flex: 2;
142 -webkit-box-flex: 2;
143 -moz-box-flex: 2;
143 -moz-box-flex: 2;
144 box-flex: 2;
144 box-flex: 2;
145 /* Modern browsers */
145 /* Modern browsers */
146 flex: 2;
146 flex: 2;
147 }
147 }
148 .box-group1 {
148 .box-group1 {
149 /* Deprecated */
149 /* Deprecated */
150 -webkit-box-flex-group: 1;
150 -webkit-box-flex-group: 1;
151 -moz-box-flex-group: 1;
151 -moz-box-flex-group: 1;
152 box-flex-group: 1;
152 box-flex-group: 1;
153 }
153 }
154 .box-group2 {
154 .box-group2 {
155 /* Deprecated */
155 /* Deprecated */
156 -webkit-box-flex-group: 2;
156 -webkit-box-flex-group: 2;
157 -moz-box-flex-group: 2;
157 -moz-box-flex-group: 2;
158 box-flex-group: 2;
158 box-flex-group: 2;
159 }
159 }
160 .hbox.start,
160 .hbox.start,
161 .vbox.start,
161 .vbox.start,
162 .start {
162 .start {
163 /* Old browsers */
163 /* Old browsers */
164 -webkit-box-pack: start;
164 -webkit-box-pack: start;
165 -moz-box-pack: start;
165 -moz-box-pack: start;
166 box-pack: start;
166 box-pack: start;
167 /* Modern browsers */
167 /* Modern browsers */
168 justify-content: flex-start;
168 justify-content: flex-start;
169 }
169 }
170 .hbox.end,
170 .hbox.end,
171 .vbox.end,
171 .vbox.end,
172 .end {
172 .end {
173 /* Old browsers */
173 /* Old browsers */
174 -webkit-box-pack: end;
174 -webkit-box-pack: end;
175 -moz-box-pack: end;
175 -moz-box-pack: end;
176 box-pack: end;
176 box-pack: end;
177 /* Modern browsers */
177 /* Modern browsers */
178 justify-content: flex-end;
178 justify-content: flex-end;
179 }
179 }
180 .hbox.center,
180 .hbox.center,
181 .vbox.center,
181 .vbox.center,
182 .center {
182 .center {
183 /* Old browsers */
183 /* Old browsers */
184 -webkit-box-pack: center;
184 -webkit-box-pack: center;
185 -moz-box-pack: center;
185 -moz-box-pack: center;
186 box-pack: center;
186 box-pack: center;
187 /* Modern browsers */
187 /* Modern browsers */
188 justify-content: center;
188 justify-content: center;
189 }
189 }
190 .hbox.baseline,
190 .hbox.baseline,
191 .vbox.baseline,
191 .vbox.baseline,
192 .baseline {
192 .baseline {
193 /* Old browsers */
193 /* Old browsers */
194 -webkit-box-pack: baseline;
194 -webkit-box-pack: baseline;
195 -moz-box-pack: baseline;
195 -moz-box-pack: baseline;
196 box-pack: baseline;
196 box-pack: baseline;
197 /* Modern browsers */
197 /* Modern browsers */
198 justify-content: baseline;
198 justify-content: baseline;
199 }
199 }
200 .hbox.stretch,
200 .hbox.stretch,
201 .vbox.stretch,
201 .vbox.stretch,
202 .stretch {
202 .stretch {
203 /* Old browsers */
203 /* Old browsers */
204 -webkit-box-pack: stretch;
204 -webkit-box-pack: stretch;
205 -moz-box-pack: stretch;
205 -moz-box-pack: stretch;
206 box-pack: stretch;
206 box-pack: stretch;
207 /* Modern browsers */
207 /* Modern browsers */
208 justify-content: stretch;
208 justify-content: stretch;
209 }
209 }
210 .hbox.align-start,
210 .hbox.align-start,
211 .vbox.align-start,
211 .vbox.align-start,
212 .align-start {
212 .align-start {
213 /* Old browsers */
213 /* Old browsers */
214 -webkit-box-align: start;
214 -webkit-box-align: start;
215 -moz-box-align: start;
215 -moz-box-align: start;
216 box-align: start;
216 box-align: start;
217 /* Modern browsers */
217 /* Modern browsers */
218 align-items: flex-start;
218 align-items: flex-start;
219 }
219 }
220 .hbox.align-end,
220 .hbox.align-end,
221 .vbox.align-end,
221 .vbox.align-end,
222 .align-end {
222 .align-end {
223 /* Old browsers */
223 /* Old browsers */
224 -webkit-box-align: end;
224 -webkit-box-align: end;
225 -moz-box-align: end;
225 -moz-box-align: end;
226 box-align: end;
226 box-align: end;
227 /* Modern browsers */
227 /* Modern browsers */
228 align-items: flex-end;
228 align-items: flex-end;
229 }
229 }
230 .hbox.align-center,
230 .hbox.align-center,
231 .vbox.align-center,
231 .vbox.align-center,
232 .align-center {
232 .align-center {
233 /* Old browsers */
233 /* Old browsers */
234 -webkit-box-align: center;
234 -webkit-box-align: center;
235 -moz-box-align: center;
235 -moz-box-align: center;
236 box-align: center;
236 box-align: center;
237 /* Modern browsers */
237 /* Modern browsers */
238 align-items: center;
238 align-items: center;
239 }
239 }
240 .hbox.align-baseline,
240 .hbox.align-baseline,
241 .vbox.align-baseline,
241 .vbox.align-baseline,
242 .align-baseline {
242 .align-baseline {
243 /* Old browsers */
243 /* Old browsers */
244 -webkit-box-align: baseline;
244 -webkit-box-align: baseline;
245 -moz-box-align: baseline;
245 -moz-box-align: baseline;
246 box-align: baseline;
246 box-align: baseline;
247 /* Modern browsers */
247 /* Modern browsers */
248 align-items: baseline;
248 align-items: baseline;
249 }
249 }
250 .hbox.align-stretch,
250 .hbox.align-stretch,
251 .vbox.align-stretch,
251 .vbox.align-stretch,
252 .align-stretch {
252 .align-stretch {
253 /* Old browsers */
253 /* Old browsers */
254 -webkit-box-align: stretch;
254 -webkit-box-align: stretch;
255 -moz-box-align: stretch;
255 -moz-box-align: stretch;
256 box-align: stretch;
256 box-align: stretch;
257 /* Modern browsers */
257 /* Modern browsers */
258 align-items: stretch;
258 align-items: stretch;
259 }
259 }
260 div.error {
260 div.error {
261 margin: 2em;
261 margin: 2em;
262 text-align: center;
262 text-align: center;
263 }
263 }
264 div.error > h1 {
264 div.error > h1 {
265 font-size: 500%;
265 font-size: 500%;
266 line-height: normal;
266 line-height: normal;
267 }
267 }
268 div.error > p {
268 div.error > p {
269 font-size: 200%;
269 font-size: 200%;
270 line-height: normal;
270 line-height: normal;
271 }
271 }
272 div.traceback-wrapper {
272 div.traceback-wrapper {
273 text-align: left;
273 text-align: left;
274 max-width: 800px;
274 max-width: 800px;
275 margin: auto;
275 margin: auto;
276 }
276 }
277 /*!
277 /*!
278 *
278 *
279 * IPython notebook
279 * IPython notebook
280 *
280 *
281 */
281 */
282 /* CSS font colors for translated ANSI colors. */
282 /* CSS font colors for translated ANSI colors. */
283 .ansibold {
283 .ansibold {
284 font-weight: bold;
284 font-weight: bold;
285 }
285 }
286 /* use dark versions for foreground, to improve visibility */
286 /* use dark versions for foreground, to improve visibility */
287 .ansiblack {
287 .ansiblack {
288 color: black;
288 color: black;
289 }
289 }
290 .ansired {
290 .ansired {
291 color: darkred;
291 color: darkred;
292 }
292 }
293 .ansigreen {
293 .ansigreen {
294 color: darkgreen;
294 color: darkgreen;
295 }
295 }
296 .ansiyellow {
296 .ansiyellow {
297 color: #c4a000;
297 color: #c4a000;
298 }
298 }
299 .ansiblue {
299 .ansiblue {
300 color: darkblue;
300 color: darkblue;
301 }
301 }
302 .ansipurple {
302 .ansipurple {
303 color: darkviolet;
303 color: darkviolet;
304 }
304 }
305 .ansicyan {
305 .ansicyan {
306 color: steelblue;
306 color: steelblue;
307 }
307 }
308 .ansigray {
308 .ansigray {
309 color: gray;
309 color: gray;
310 }
310 }
311 /* and light for background, for the same reason */
311 /* and light for background, for the same reason */
312 .ansibgblack {
312 .ansibgblack {
313 background-color: black;
313 background-color: black;
314 }
314 }
315 .ansibgred {
315 .ansibgred {
316 background-color: red;
316 background-color: red;
317 }
317 }
318 .ansibggreen {
318 .ansibggreen {
319 background-color: green;
319 background-color: green;
320 }
320 }
321 .ansibgyellow {
321 .ansibgyellow {
322 background-color: yellow;
322 background-color: yellow;
323 }
323 }
324 .ansibgblue {
324 .ansibgblue {
325 background-color: blue;
325 background-color: blue;
326 }
326 }
327 .ansibgpurple {
327 .ansibgpurple {
328 background-color: magenta;
328 background-color: magenta;
329 }
329 }
330 .ansibgcyan {
330 .ansibgcyan {
331 background-color: cyan;
331 background-color: cyan;
332 }
332 }
333 .ansibggray {
333 .ansibggray {
334 background-color: gray;
334 background-color: gray;
335 }
335 }
336 div.cell {
336 div.cell {
337 border: 1px solid transparent;
337 border: 1px solid transparent;
338 /* Old browsers */
338 /* Old browsers */
339 display: -webkit-box;
339 display: -webkit-box;
340 -webkit-box-orient: vertical;
340 -webkit-box-orient: vertical;
341 -webkit-box-align: stretch;
341 -webkit-box-align: stretch;
342 display: -moz-box;
342 display: -moz-box;
343 -moz-box-orient: vertical;
343 -moz-box-orient: vertical;
344 -moz-box-align: stretch;
344 -moz-box-align: stretch;
345 display: box;
345 display: box;
346 box-orient: vertical;
346 box-orient: vertical;
347 box-align: stretch;
347 box-align: stretch;
348 /* Modern browsers */
348 /* Modern browsers */
349 display: flex;
349 display: flex;
350 flex-direction: column;
350 flex-direction: column;
351 align-items: stretch;
351 align-items: stretch;
352 border-radius: 4px;
352 border-radius: 4px;
353 box-sizing: border-box;
353 box-sizing: border-box;
354 -moz-box-sizing: border-box;
354 -moz-box-sizing: border-box;
355 -webkit-box-sizing: border-box;
355 -webkit-box-sizing: border-box;
356 border-width: thin;
356 border-width: thin;
357 border-style: solid;
357 border-style: solid;
358 width: 100%;
358 width: 100%;
359 padding: 5px 5px 5px 0px;
359 padding: 5px 5px 5px 0px;
360 /* This acts as a spacer between cells, that is outside the border */
360 /* This acts as a spacer between cells, that is outside the border */
361 margin: 0px;
361 margin: 0px;
362 outline: none;
362 outline: none;
363 }
363 }
364 div.cell.selected {
364 div.cell.selected {
365 border-color: #ababab;
365 border-color: #ababab;
366 }
366 }
367 div.cell.edit_mode {
367 div.cell.edit_mode {
368 border-color: green;
368 border-color: green;
369 }
369 }
370 div.prompt {
370 div.prompt {
371 /* This needs to be wide enough for 3 digit prompt numbers: In[100]: */
371 /* This needs to be wide enough for 3 digit prompt numbers: In[100]: */
372 min-width: 15ex;
372 min-width: 15ex;
373 /* This padding is tuned to match the padding on the CodeMirror editor. */
373 /* This padding is tuned to match the padding on the CodeMirror editor. */
374 padding: 0.4em;
374 padding: 0.4em;
375 margin: 0px;
375 margin: 0px;
376 font-family: monospace;
376 font-family: monospace;
377 text-align: right;
377 text-align: right;
378 /* This has to match that of the the CodeMirror class line-height below */
378 /* This has to match that of the the CodeMirror class line-height below */
379 line-height: 1.21429em;
379 line-height: 1.21429em;
380 }
380 }
381 @media (max-width: 480px) {
381 @media (max-width: 480px) {
382 div.prompt {
382 div.prompt {
383 text-align: left;
383 text-align: left;
384 }
384 }
385 }
385 }
386 div.inner_cell {
386 div.inner_cell {
387 /* Old browsers */
387 /* Old browsers */
388 display: -webkit-box;
388 display: -webkit-box;
389 -webkit-box-orient: vertical;
389 -webkit-box-orient: vertical;
390 -webkit-box-align: stretch;
390 -webkit-box-align: stretch;
391 display: -moz-box;
391 display: -moz-box;
392 -moz-box-orient: vertical;
392 -moz-box-orient: vertical;
393 -moz-box-align: stretch;
393 -moz-box-align: stretch;
394 display: box;
394 display: box;
395 box-orient: vertical;
395 box-orient: vertical;
396 box-align: stretch;
396 box-align: stretch;
397 /* Modern browsers */
397 /* Modern browsers */
398 display: flex;
398 display: flex;
399 flex-direction: column;
399 flex-direction: column;
400 align-items: stretch;
400 align-items: stretch;
401 /* Old browsers */
401 /* Old browsers */
402 -webkit-box-flex: 1;
402 -webkit-box-flex: 1;
403 -moz-box-flex: 1;
403 -moz-box-flex: 1;
404 box-flex: 1;
404 box-flex: 1;
405 /* Modern browsers */
405 /* Modern browsers */
406 flex: 1;
406 flex: 1;
407 }
407 }
408 /* input_area and input_prompt must match in top border and margin for alignment */
408 /* input_area and input_prompt must match in top border and margin for alignment */
409 div.input_area {
409 div.input_area {
410 border: 1px solid #cfcfcf;
410 border: 1px solid #cfcfcf;
411 border-radius: 4px;
411 border-radius: 4px;
412 background: #f7f7f7;
412 background: #f7f7f7;
413 line-height: 1.21429em;
413 line-height: 1.21429em;
414 }
414 }
415 /* This is needed so that empty prompt areas can collapse to zero height when there
415 /* This is needed so that empty prompt areas can collapse to zero height when there
416 is no content in the output_subarea and the prompt. The main purpose of this is
416 is no content in the output_subarea and the prompt. The main purpose of this is
417 to make sure that empty JavaScript output_subareas have no height. */
417 to make sure that empty JavaScript output_subareas have no height. */
418 div.prompt:empty {
418 div.prompt:empty {
419 padding-top: 0;
419 padding-top: 0;
420 padding-bottom: 0;
420 padding-bottom: 0;
421 }
421 }
422 div.unrecognized_cell {
423 padding: 5px 5px 5px 0px;
424 /* Old browsers */
425 display: -webkit-box;
426 -webkit-box-orient: horizontal;
427 -webkit-box-align: stretch;
428 display: -moz-box;
429 -moz-box-orient: horizontal;
430 -moz-box-align: stretch;
431 display: box;
432 box-orient: horizontal;
433 box-align: stretch;
434 /* Modern browsers */
435 display: flex;
436 flex-direction: row;
437 align-items: stretch;
438 }
439 div.unrecognized_cell .inner_cell {
440 border-radius: 4px;
441 padding: 5px;
442 font-weight: bold;
443 color: red;
444 border: 1px solid #cfcfcf;
445 background: #eaeaea;
446 }
447 div.unrecognized_cell .inner_cell a {
448 color: inherit;
449 text-decoration: none;
450 }
451 div.unrecognized_cell .inner_cell a:hover {
452 color: inherit;
453 text-decoration: none;
454 }
455 @media (max-width: 480px) {
456 div.unrecognized_cell > div.prompt {
457 display: none;
458 }
459 }
422 /* any special styling for code cells that are currently running goes here */
460 /* any special styling for code cells that are currently running goes here */
423 div.input {
461 div.input {
424 page-break-inside: avoid;
462 page-break-inside: avoid;
425 /* Old browsers */
463 /* Old browsers */
426 display: -webkit-box;
464 display: -webkit-box;
427 -webkit-box-orient: horizontal;
465 -webkit-box-orient: horizontal;
428 -webkit-box-align: stretch;
466 -webkit-box-align: stretch;
429 display: -moz-box;
467 display: -moz-box;
430 -moz-box-orient: horizontal;
468 -moz-box-orient: horizontal;
431 -moz-box-align: stretch;
469 -moz-box-align: stretch;
432 display: box;
470 display: box;
433 box-orient: horizontal;
471 box-orient: horizontal;
434 box-align: stretch;
472 box-align: stretch;
435 /* Modern browsers */
473 /* Modern browsers */
436 display: flex;
474 display: flex;
437 flex-direction: row;
475 flex-direction: row;
438 align-items: stretch;
476 align-items: stretch;
439 }
477 }
440 @media (max-width: 480px) {
478 @media (max-width: 480px) {
441 div.input {
479 div.input {
442 /* Old browsers */
480 /* Old browsers */
443 display: -webkit-box;
481 display: -webkit-box;
444 -webkit-box-orient: vertical;
482 -webkit-box-orient: vertical;
445 -webkit-box-align: stretch;
483 -webkit-box-align: stretch;
446 display: -moz-box;
484 display: -moz-box;
447 -moz-box-orient: vertical;
485 -moz-box-orient: vertical;
448 -moz-box-align: stretch;
486 -moz-box-align: stretch;
449 display: box;
487 display: box;
450 box-orient: vertical;
488 box-orient: vertical;
451 box-align: stretch;
489 box-align: stretch;
452 /* Modern browsers */
490 /* Modern browsers */
453 display: flex;
491 display: flex;
454 flex-direction: column;
492 flex-direction: column;
455 align-items: stretch;
493 align-items: stretch;
456 }
494 }
457 }
495 }
458 /* input_area and input_prompt must match in top border and margin for alignment */
496 /* input_area and input_prompt must match in top border and margin for alignment */
459 div.input_prompt {
497 div.input_prompt {
460 color: #000080;
498 color: #000080;
461 border-top: 1px solid transparent;
499 border-top: 1px solid transparent;
462 }
500 }
463 div.input_area > div.highlight {
501 div.input_area > div.highlight {
464 margin: 0.4em;
502 margin: 0.4em;
465 border: none;
503 border: none;
466 padding: 0px;
504 padding: 0px;
467 background-color: transparent;
505 background-color: transparent;
468 }
506 }
469 div.input_area > div.highlight > pre {
507 div.input_area > div.highlight > pre {
470 margin: 0px;
508 margin: 0px;
471 border: none;
509 border: none;
472 padding: 0px;
510 padding: 0px;
473 background-color: transparent;
511 background-color: transparent;
474 }
512 }
475 /* The following gets added to the <head> if it is detected that the user has a
513 /* The following gets added to the <head> if it is detected that the user has a
476 * monospace font with inconsistent normal/bold/italic height. See
514 * monospace font with inconsistent normal/bold/italic height. See
477 * notebookmain.js. Such fonts will have keywords vertically offset with
515 * notebookmain.js. Such fonts will have keywords vertically offset with
478 * respect to the rest of the text. The user should select a better font.
516 * respect to the rest of the text. The user should select a better font.
479 * See: https://github.com/ipython/ipython/issues/1503
517 * See: https://github.com/ipython/ipython/issues/1503
480 *
518 *
481 * .CodeMirror span {
519 * .CodeMirror span {
482 * vertical-align: bottom;
520 * vertical-align: bottom;
483 * }
521 * }
484 */
522 */
485 .CodeMirror {
523 .CodeMirror {
486 line-height: 1.21429em;
524 line-height: 1.21429em;
487 /* Changed from 1em to our global default */
525 /* Changed from 1em to our global default */
488 height: auto;
526 height: auto;
489 /* Changed to auto to autogrow */
527 /* Changed to auto to autogrow */
490 background: none;
528 background: none;
491 /* Changed from white to allow our bg to show through */
529 /* Changed from white to allow our bg to show through */
492 }
530 }
493 .CodeMirror-scroll {
531 .CodeMirror-scroll {
494 /* The CodeMirror docs are a bit fuzzy on if overflow-y should be hidden or visible.*/
532 /* The CodeMirror docs are a bit fuzzy on if overflow-y should be hidden or visible.*/
495 /* We have found that if it is visible, vertical scrollbars appear with font size changes.*/
533 /* We have found that if it is visible, vertical scrollbars appear with font size changes.*/
496 overflow-y: hidden;
534 overflow-y: hidden;
497 overflow-x: auto;
535 overflow-x: auto;
498 }
536 }
499 .CodeMirror-lines {
537 .CodeMirror-lines {
500 /* In CM2, this used to be 0.4em, but in CM3 it went to 4px. We need the em value because */
538 /* In CM2, this used to be 0.4em, but in CM3 it went to 4px. We need the em value because */
501 /* we have set a different line-height and want this to scale with that. */
539 /* we have set a different line-height and want this to scale with that. */
502 padding: 0.4em;
540 padding: 0.4em;
503 }
541 }
504 .CodeMirror-linenumber {
542 .CodeMirror-linenumber {
505 padding: 0 8px 0 4px;
543 padding: 0 8px 0 4px;
506 }
544 }
507 .CodeMirror-gutters {
545 .CodeMirror-gutters {
508 border-bottom-left-radius: 4px;
546 border-bottom-left-radius: 4px;
509 border-top-left-radius: 4px;
547 border-top-left-radius: 4px;
510 }
548 }
511 .CodeMirror pre {
549 .CodeMirror pre {
512 /* In CM3 this went to 4px from 0 in CM2. We need the 0 value because of how we size */
550 /* In CM3 this went to 4px from 0 in CM2. We need the 0 value because of how we size */
513 /* .CodeMirror-lines */
551 /* .CodeMirror-lines */
514 padding: 0;
552 padding: 0;
515 border: 0;
553 border: 0;
516 border-radius: 0;
554 border-radius: 0;
517 }
555 }
518 .CodeMirror-vscrollbar,
556 .CodeMirror-vscrollbar,
519 .CodeMirror-hscrollbar {
557 .CodeMirror-hscrollbar {
520 display: none !important;
558 display: none !important;
521 }
559 }
522 /*
560 /*
523
561
524 Original style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>
562 Original style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>
525 Adapted from GitHub theme
563 Adapted from GitHub theme
526
564
527 */
565 */
528 pre code {
566 pre code {
529 display: block;
567 display: block;
530 padding: 0.5em;
568 padding: 0.5em;
531 }
569 }
532 .highlight-base,
570 .highlight-base,
533 pre code,
571 pre code,
534 pre .subst,
572 pre .subst,
535 pre .tag .title,
573 pre .tag .title,
536 pre .lisp .title,
574 pre .lisp .title,
537 pre .clojure .built_in,
575 pre .clojure .built_in,
538 pre .nginx .title {
576 pre .nginx .title {
539 color: black;
577 color: black;
540 }
578 }
541 .highlight-string,
579 .highlight-string,
542 pre .string,
580 pre .string,
543 pre .constant,
581 pre .constant,
544 pre .parent,
582 pre .parent,
545 pre .tag .value,
583 pre .tag .value,
546 pre .rules .value,
584 pre .rules .value,
547 pre .rules .value .number,
585 pre .rules .value .number,
548 pre .preprocessor,
586 pre .preprocessor,
549 pre .ruby .symbol,
587 pre .ruby .symbol,
550 pre .ruby .symbol .string,
588 pre .ruby .symbol .string,
551 pre .aggregate,
589 pre .aggregate,
552 pre .template_tag,
590 pre .template_tag,
553 pre .django .variable,
591 pre .django .variable,
554 pre .smalltalk .class,
592 pre .smalltalk .class,
555 pre .addition,
593 pre .addition,
556 pre .flow,
594 pre .flow,
557 pre .stream,
595 pre .stream,
558 pre .bash .variable,
596 pre .bash .variable,
559 pre .apache .tag,
597 pre .apache .tag,
560 pre .apache .cbracket,
598 pre .apache .cbracket,
561 pre .tex .command,
599 pre .tex .command,
562 pre .tex .special,
600 pre .tex .special,
563 pre .erlang_repl .function_or_atom,
601 pre .erlang_repl .function_or_atom,
564 pre .markdown .header {
602 pre .markdown .header {
565 color: #BA2121;
603 color: #BA2121;
566 }
604 }
567 .highlight-comment,
605 .highlight-comment,
568 pre .comment,
606 pre .comment,
569 pre .annotation,
607 pre .annotation,
570 pre .template_comment,
608 pre .template_comment,
571 pre .diff .header,
609 pre .diff .header,
572 pre .chunk,
610 pre .chunk,
573 pre .markdown .blockquote {
611 pre .markdown .blockquote {
574 color: #408080;
612 color: #408080;
575 font-style: italic;
613 font-style: italic;
576 }
614 }
577 .highlight-number,
615 .highlight-number,
578 pre .number,
616 pre .number,
579 pre .date,
617 pre .date,
580 pre .regexp,
618 pre .regexp,
581 pre .literal,
619 pre .literal,
582 pre .smalltalk .symbol,
620 pre .smalltalk .symbol,
583 pre .smalltalk .char,
621 pre .smalltalk .char,
584 pre .go .constant,
622 pre .go .constant,
585 pre .change,
623 pre .change,
586 pre .markdown .bullet,
624 pre .markdown .bullet,
587 pre .markdown .link_url {
625 pre .markdown .link_url {
588 color: #080;
626 color: #080;
589 }
627 }
590 pre .label,
628 pre .label,
591 pre .javadoc,
629 pre .javadoc,
592 pre .ruby .string,
630 pre .ruby .string,
593 pre .decorator,
631 pre .decorator,
594 pre .filter .argument,
632 pre .filter .argument,
595 pre .localvars,
633 pre .localvars,
596 pre .array,
634 pre .array,
597 pre .attr_selector,
635 pre .attr_selector,
598 pre .important,
636 pre .important,
599 pre .pseudo,
637 pre .pseudo,
600 pre .pi,
638 pre .pi,
601 pre .doctype,
639 pre .doctype,
602 pre .deletion,
640 pre .deletion,
603 pre .envvar,
641 pre .envvar,
604 pre .shebang,
642 pre .shebang,
605 pre .apache .sqbracket,
643 pre .apache .sqbracket,
606 pre .nginx .built_in,
644 pre .nginx .built_in,
607 pre .tex .formula,
645 pre .tex .formula,
608 pre .erlang_repl .reserved,
646 pre .erlang_repl .reserved,
609 pre .prompt,
647 pre .prompt,
610 pre .markdown .link_label,
648 pre .markdown .link_label,
611 pre .vhdl .attribute,
649 pre .vhdl .attribute,
612 pre .clojure .attribute,
650 pre .clojure .attribute,
613 pre .coffeescript .property {
651 pre .coffeescript .property {
614 color: #8888ff;
652 color: #8888ff;
615 }
653 }
616 .highlight-keyword,
654 .highlight-keyword,
617 pre .keyword,
655 pre .keyword,
618 pre .id,
656 pre .id,
619 pre .phpdoc,
657 pre .phpdoc,
620 pre .aggregate,
658 pre .aggregate,
621 pre .css .tag,
659 pre .css .tag,
622 pre .javadoctag,
660 pre .javadoctag,
623 pre .phpdoc,
661 pre .phpdoc,
624 pre .yardoctag,
662 pre .yardoctag,
625 pre .smalltalk .class,
663 pre .smalltalk .class,
626 pre .winutils,
664 pre .winutils,
627 pre .bash .variable,
665 pre .bash .variable,
628 pre .apache .tag,
666 pre .apache .tag,
629 pre .go .typename,
667 pre .go .typename,
630 pre .tex .command,
668 pre .tex .command,
631 pre .markdown .strong,
669 pre .markdown .strong,
632 pre .request,
670 pre .request,
633 pre .status {
671 pre .status {
634 color: #008000;
672 color: #008000;
635 font-weight: bold;
673 font-weight: bold;
636 }
674 }
637 .highlight-builtin,
675 .highlight-builtin,
638 pre .built_in {
676 pre .built_in {
639 color: #008000;
677 color: #008000;
640 }
678 }
641 pre .markdown .emphasis {
679 pre .markdown .emphasis {
642 font-style: italic;
680 font-style: italic;
643 }
681 }
644 pre .nginx .built_in {
682 pre .nginx .built_in {
645 font-weight: normal;
683 font-weight: normal;
646 }
684 }
647 pre .coffeescript .javascript,
685 pre .coffeescript .javascript,
648 pre .javascript .xml,
686 pre .javascript .xml,
649 pre .tex .formula,
687 pre .tex .formula,
650 pre .xml .javascript,
688 pre .xml .javascript,
651 pre .xml .vbscript,
689 pre .xml .vbscript,
652 pre .xml .css,
690 pre .xml .css,
653 pre .xml .cdata {
691 pre .xml .cdata {
654 opacity: 0.5;
692 opacity: 0.5;
655 }
693 }
656 /* apply the same style to codemirror */
694 /* apply the same style to codemirror */
657 .cm-s-ipython span.cm-variable {
695 .cm-s-ipython span.cm-variable {
658 color: black;
696 color: black;
659 }
697 }
660 .cm-s-ipython span.cm-keyword {
698 .cm-s-ipython span.cm-keyword {
661 color: #008000;
699 color: #008000;
662 font-weight: bold;
700 font-weight: bold;
663 }
701 }
664 .cm-s-ipython span.cm-number {
702 .cm-s-ipython span.cm-number {
665 color: #080;
703 color: #080;
666 }
704 }
667 .cm-s-ipython span.cm-comment {
705 .cm-s-ipython span.cm-comment {
668 color: #408080;
706 color: #408080;
669 font-style: italic;
707 font-style: italic;
670 }
708 }
671 .cm-s-ipython span.cm-string {
709 .cm-s-ipython span.cm-string {
672 color: #BA2121;
710 color: #BA2121;
673 }
711 }
674 .cm-s-ipython span.cm-builtin {
712 .cm-s-ipython span.cm-builtin {
675 color: #008000;
713 color: #008000;
676 }
714 }
677 .cm-s-ipython span.cm-error {
715 .cm-s-ipython span.cm-error {
678 color: #f00;
716 color: #f00;
679 }
717 }
680 .cm-s-ipython span.cm-operator {
718 .cm-s-ipython span.cm-operator {
681 color: #AA22FF;
719 color: #AA22FF;
682 font-weight: bold;
720 font-weight: bold;
683 }
721 }
684 .cm-s-ipython span.cm-meta {
722 .cm-s-ipython span.cm-meta {
685 color: #AA22FF;
723 color: #AA22FF;
686 }
724 }
687 .cm-s-ipython span.cm-tab {
725 .cm-s-ipython span.cm-tab {
688 background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);
726 background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);
689 background-position: right;
727 background-position: right;
690 background-repeat: no-repeat;
728 background-repeat: no-repeat;
691 }
729 }
692 div.output_wrapper {
730 div.output_wrapper {
693 /* this position must be relative to enable descendents to be absolute within it */
731 /* this position must be relative to enable descendents to be absolute within it */
694 position: relative;
732 position: relative;
695 /* Old browsers */
733 /* Old browsers */
696 display: -webkit-box;
734 display: -webkit-box;
697 -webkit-box-orient: vertical;
735 -webkit-box-orient: vertical;
698 -webkit-box-align: stretch;
736 -webkit-box-align: stretch;
699 display: -moz-box;
737 display: -moz-box;
700 -moz-box-orient: vertical;
738 -moz-box-orient: vertical;
701 -moz-box-align: stretch;
739 -moz-box-align: stretch;
702 display: box;
740 display: box;
703 box-orient: vertical;
741 box-orient: vertical;
704 box-align: stretch;
742 box-align: stretch;
705 /* Modern browsers */
743 /* Modern browsers */
706 display: flex;
744 display: flex;
707 flex-direction: column;
745 flex-direction: column;
708 align-items: stretch;
746 align-items: stretch;
709 }
747 }
710 /* class for the output area when it should be height-limited */
748 /* class for the output area when it should be height-limited */
711 div.output_scroll {
749 div.output_scroll {
712 /* ideally, this would be max-height, but FF barfs all over that */
750 /* ideally, this would be max-height, but FF barfs all over that */
713 height: 24em;
751 height: 24em;
714 /* FF needs this *and the wrapper* to specify full width, or it will shrinkwrap */
752 /* FF needs this *and the wrapper* to specify full width, or it will shrinkwrap */
715 width: 100%;
753 width: 100%;
716 overflow: auto;
754 overflow: auto;
717 border-radius: 4px;
755 border-radius: 4px;
718 -webkit-box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
756 -webkit-box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
719 box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
757 box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
720 display: block;
758 display: block;
721 }
759 }
722 /* output div while it is collapsed */
760 /* output div while it is collapsed */
723 div.output_collapsed {
761 div.output_collapsed {
724 margin: 0px;
762 margin: 0px;
725 padding: 0px;
763 padding: 0px;
726 /* Old browsers */
764 /* Old browsers */
727 display: -webkit-box;
765 display: -webkit-box;
728 -webkit-box-orient: vertical;
766 -webkit-box-orient: vertical;
729 -webkit-box-align: stretch;
767 -webkit-box-align: stretch;
730 display: -moz-box;
768 display: -moz-box;
731 -moz-box-orient: vertical;
769 -moz-box-orient: vertical;
732 -moz-box-align: stretch;
770 -moz-box-align: stretch;
733 display: box;
771 display: box;
734 box-orient: vertical;
772 box-orient: vertical;
735 box-align: stretch;
773 box-align: stretch;
736 /* Modern browsers */
774 /* Modern browsers */
737 display: flex;
775 display: flex;
738 flex-direction: column;
776 flex-direction: column;
739 align-items: stretch;
777 align-items: stretch;
740 }
778 }
741 div.out_prompt_overlay {
779 div.out_prompt_overlay {
742 height: 100%;
780 height: 100%;
743 padding: 0px 0.4em;
781 padding: 0px 0.4em;
744 position: absolute;
782 position: absolute;
745 border-radius: 4px;
783 border-radius: 4px;
746 }
784 }
747 div.out_prompt_overlay:hover {
785 div.out_prompt_overlay:hover {
748 /* use inner shadow to get border that is computed the same on WebKit/FF */
786 /* use inner shadow to get border that is computed the same on WebKit/FF */
749 -webkit-box-shadow: inset 0 0 1px #000000;
787 -webkit-box-shadow: inset 0 0 1px #000000;
750 box-shadow: inset 0 0 1px #000000;
788 box-shadow: inset 0 0 1px #000000;
751 background: rgba(240, 240, 240, 0.5);
789 background: rgba(240, 240, 240, 0.5);
752 }
790 }
753 div.output_prompt {
791 div.output_prompt {
754 color: #8b0000;
792 color: #8b0000;
755 }
793 }
756 /* This class is the outer container of all output sections. */
794 /* This class is the outer container of all output sections. */
757 div.output_area {
795 div.output_area {
758 padding: 0px;
796 padding: 0px;
759 page-break-inside: avoid;
797 page-break-inside: avoid;
760 /* Old browsers */
798 /* Old browsers */
761 display: -webkit-box;
799 display: -webkit-box;
762 -webkit-box-orient: horizontal;
800 -webkit-box-orient: horizontal;
763 -webkit-box-align: stretch;
801 -webkit-box-align: stretch;
764 display: -moz-box;
802 display: -moz-box;
765 -moz-box-orient: horizontal;
803 -moz-box-orient: horizontal;
766 -moz-box-align: stretch;
804 -moz-box-align: stretch;
767 display: box;
805 display: box;
768 box-orient: horizontal;
806 box-orient: horizontal;
769 box-align: stretch;
807 box-align: stretch;
770 /* Modern browsers */
808 /* Modern browsers */
771 display: flex;
809 display: flex;
772 flex-direction: row;
810 flex-direction: row;
773 align-items: stretch;
811 align-items: stretch;
774 }
812 }
775 div.output_area .MathJax_Display {
813 div.output_area .MathJax_Display {
776 text-align: left !important;
814 text-align: left !important;
777 }
815 }
778 div.output_area .rendered_html table {
816 div.output_area .rendered_html table {
779 margin-left: 0;
817 margin-left: 0;
780 margin-right: 0;
818 margin-right: 0;
781 }
819 }
782 div.output_area .rendered_html img {
820 div.output_area .rendered_html img {
783 margin-left: 0;
821 margin-left: 0;
784 margin-right: 0;
822 margin-right: 0;
785 }
823 }
786 /* This is needed to protect the pre formating from global settings such
824 /* This is needed to protect the pre formating from global settings such
787 as that of bootstrap */
825 as that of bootstrap */
788 .output {
826 .output {
789 /* Old browsers */
827 /* Old browsers */
790 display: -webkit-box;
828 display: -webkit-box;
791 -webkit-box-orient: vertical;
829 -webkit-box-orient: vertical;
792 -webkit-box-align: stretch;
830 -webkit-box-align: stretch;
793 display: -moz-box;
831 display: -moz-box;
794 -moz-box-orient: vertical;
832 -moz-box-orient: vertical;
795 -moz-box-align: stretch;
833 -moz-box-align: stretch;
796 display: box;
834 display: box;
797 box-orient: vertical;
835 box-orient: vertical;
798 box-align: stretch;
836 box-align: stretch;
799 /* Modern browsers */
837 /* Modern browsers */
800 display: flex;
838 display: flex;
801 flex-direction: column;
839 flex-direction: column;
802 align-items: stretch;
840 align-items: stretch;
803 }
841 }
804 @media (max-width: 480px) {
842 @media (max-width: 480px) {
805 div.output_area {
843 div.output_area {
806 /* Old browsers */
844 /* Old browsers */
807 display: -webkit-box;
845 display: -webkit-box;
808 -webkit-box-orient: vertical;
846 -webkit-box-orient: vertical;
809 -webkit-box-align: stretch;
847 -webkit-box-align: stretch;
810 display: -moz-box;
848 display: -moz-box;
811 -moz-box-orient: vertical;
849 -moz-box-orient: vertical;
812 -moz-box-align: stretch;
850 -moz-box-align: stretch;
813 display: box;
851 display: box;
814 box-orient: vertical;
852 box-orient: vertical;
815 box-align: stretch;
853 box-align: stretch;
816 /* Modern browsers */
854 /* Modern browsers */
817 display: flex;
855 display: flex;
818 flex-direction: column;
856 flex-direction: column;
819 align-items: stretch;
857 align-items: stretch;
820 }
858 }
821 }
859 }
822 div.output_area pre {
860 div.output_area pre {
823 margin: 0;
861 margin: 0;
824 padding: 0;
862 padding: 0;
825 border: 0;
863 border: 0;
826 vertical-align: baseline;
864 vertical-align: baseline;
827 color: #000000;
865 color: #000000;
828 background-color: transparent;
866 background-color: transparent;
829 border-radius: 0;
867 border-radius: 0;
830 }
868 }
831 /* This class is for the output subarea inside the output_area and after
869 /* This class is for the output subarea inside the output_area and after
832 the prompt div. */
870 the prompt div. */
833 div.output_subarea {
871 div.output_subarea {
834 padding: 0.4em 0.4em 0em 0.4em;
872 padding: 0.4em 0.4em 0em 0.4em;
835 /* Old browsers */
873 /* Old browsers */
836 -webkit-box-flex: 1;
874 -webkit-box-flex: 1;
837 -moz-box-flex: 1;
875 -moz-box-flex: 1;
838 box-flex: 1;
876 box-flex: 1;
839 /* Modern browsers */
877 /* Modern browsers */
840 flex: 1;
878 flex: 1;
841 }
879 }
842 /* The rest of the output_* classes are for special styling of the different
880 /* The rest of the output_* classes are for special styling of the different
843 output types */
881 output types */
844 /* all text output has this class: */
882 /* all text output has this class: */
845 div.output_text {
883 div.output_text {
846 text-align: left;
884 text-align: left;
847 color: #000000;
885 color: #000000;
848 /* This has to match that of the the CodeMirror class line-height below */
886 /* This has to match that of the the CodeMirror class line-height below */
849 line-height: 1.21429em;
887 line-height: 1.21429em;
850 }
888 }
851 /* stdout/stderr are 'text' as well as 'stream', but execute_result/error are *not* streams */
889 /* stdout/stderr are 'text' as well as 'stream', but execute_result/error are *not* streams */
852 div.output_stderr {
890 div.output_stderr {
853 background: #fdd;
891 background: #fdd;
854 /* very light red background for stderr */
892 /* very light red background for stderr */
855 }
893 }
856 div.output_latex {
894 div.output_latex {
857 text-align: left;
895 text-align: left;
858 }
896 }
859 /* Empty output_javascript divs should have no height */
897 /* Empty output_javascript divs should have no height */
860 div.output_javascript:empty {
898 div.output_javascript:empty {
861 padding: 0;
899 padding: 0;
862 }
900 }
863 .js-error {
901 .js-error {
864 color: darkred;
902 color: darkred;
865 }
903 }
866 /* raw_input styles */
904 /* raw_input styles */
867 div.raw_input_container {
905 div.raw_input_container {
868 font-family: monospace;
906 font-family: monospace;
869 padding-top: 5px;
907 padding-top: 5px;
870 }
908 }
871 span.raw_input_prompt {
909 span.raw_input_prompt {
872 /* nothing needed here */
910 /* nothing needed here */
873 }
911 }
874 input.raw_input {
912 input.raw_input {
875 font-family: inherit;
913 font-family: inherit;
876 font-size: inherit;
914 font-size: inherit;
877 color: inherit;
915 color: inherit;
878 width: auto;
916 width: auto;
879 /* make sure input baseline aligns with prompt */
917 /* make sure input baseline aligns with prompt */
880 vertical-align: baseline;
918 vertical-align: baseline;
881 /* padding + margin = 0.5em between prompt and cursor */
919 /* padding + margin = 0.5em between prompt and cursor */
882 padding: 0em 0.25em;
920 padding: 0em 0.25em;
883 margin: 0em 0.25em;
921 margin: 0em 0.25em;
884 }
922 }
885 input.raw_input:focus {
923 input.raw_input:focus {
886 box-shadow: none;
924 box-shadow: none;
887 }
925 }
888 p.p-space {
926 p.p-space {
889 margin-bottom: 10px;
927 margin-bottom: 10px;
890 }
928 }
929 div.output_unrecognized {
930 padding: 5px;
931 font-weight: bold;
932 color: red;
933 }
934 div.output_unrecognized a {
935 color: inherit;
936 text-decoration: none;
937 }
938 div.output_unrecognized a:hover {
939 color: inherit;
940 text-decoration: none;
941 }
891 .rendered_html {
942 .rendered_html {
892 color: #000000;
943 color: #000000;
893 /* any extras will just be numbers: */
944 /* any extras will just be numbers: */
894 }
945 }
895 .rendered_html em {
946 .rendered_html em {
896 font-style: italic;
947 font-style: italic;
897 }
948 }
898 .rendered_html strong {
949 .rendered_html strong {
899 font-weight: bold;
950 font-weight: bold;
900 }
951 }
901 .rendered_html u {
952 .rendered_html u {
902 text-decoration: underline;
953 text-decoration: underline;
903 }
954 }
904 .rendered_html :link {
955 .rendered_html :link {
905 text-decoration: underline;
956 text-decoration: underline;
906 }
957 }
907 .rendered_html :visited {
958 .rendered_html :visited {
908 text-decoration: underline;
959 text-decoration: underline;
909 }
960 }
910 .rendered_html h1 {
961 .rendered_html h1 {
911 font-size: 185.7%;
962 font-size: 185.7%;
912 margin: 1.08em 0 0 0;
963 margin: 1.08em 0 0 0;
913 font-weight: bold;
964 font-weight: bold;
914 line-height: 1.0;
965 line-height: 1.0;
915 }
966 }
916 .rendered_html h2 {
967 .rendered_html h2 {
917 font-size: 157.1%;
968 font-size: 157.1%;
918 margin: 1.27em 0 0 0;
969 margin: 1.27em 0 0 0;
919 font-weight: bold;
970 font-weight: bold;
920 line-height: 1.0;
971 line-height: 1.0;
921 }
972 }
922 .rendered_html h3 {
973 .rendered_html h3 {
923 font-size: 128.6%;
974 font-size: 128.6%;
924 margin: 1.55em 0 0 0;
975 margin: 1.55em 0 0 0;
925 font-weight: bold;
976 font-weight: bold;
926 line-height: 1.0;
977 line-height: 1.0;
927 }
978 }
928 .rendered_html h4 {
979 .rendered_html h4 {
929 font-size: 100%;
980 font-size: 100%;
930 margin: 2em 0 0 0;
981 margin: 2em 0 0 0;
931 font-weight: bold;
982 font-weight: bold;
932 line-height: 1.0;
983 line-height: 1.0;
933 }
984 }
934 .rendered_html h5 {
985 .rendered_html h5 {
935 font-size: 100%;
986 font-size: 100%;
936 margin: 2em 0 0 0;
987 margin: 2em 0 0 0;
937 font-weight: bold;
988 font-weight: bold;
938 line-height: 1.0;
989 line-height: 1.0;
939 font-style: italic;
990 font-style: italic;
940 }
991 }
941 .rendered_html h6 {
992 .rendered_html h6 {
942 font-size: 100%;
993 font-size: 100%;
943 margin: 2em 0 0 0;
994 margin: 2em 0 0 0;
944 font-weight: bold;
995 font-weight: bold;
945 line-height: 1.0;
996 line-height: 1.0;
946 font-style: italic;
997 font-style: italic;
947 }
998 }
948 .rendered_html h1:first-child {
999 .rendered_html h1:first-child {
949 margin-top: 0.538em;
1000 margin-top: 0.538em;
950 }
1001 }
951 .rendered_html h2:first-child {
1002 .rendered_html h2:first-child {
952 margin-top: 0.636em;
1003 margin-top: 0.636em;
953 }
1004 }
954 .rendered_html h3:first-child {
1005 .rendered_html h3:first-child {
955 margin-top: 0.777em;
1006 margin-top: 0.777em;
956 }
1007 }
957 .rendered_html h4:first-child {
1008 .rendered_html h4:first-child {
958 margin-top: 1em;
1009 margin-top: 1em;
959 }
1010 }
960 .rendered_html h5:first-child {
1011 .rendered_html h5:first-child {
961 margin-top: 1em;
1012 margin-top: 1em;
962 }
1013 }
963 .rendered_html h6:first-child {
1014 .rendered_html h6:first-child {
964 margin-top: 1em;
1015 margin-top: 1em;
965 }
1016 }
966 .rendered_html ul {
1017 .rendered_html ul {
967 list-style: disc;
1018 list-style: disc;
968 margin: 0em 2em;
1019 margin: 0em 2em;
969 padding-left: 0px;
1020 padding-left: 0px;
970 }
1021 }
971 .rendered_html ul ul {
1022 .rendered_html ul ul {
972 list-style: square;
1023 list-style: square;
973 margin: 0em 2em;
1024 margin: 0em 2em;
974 }
1025 }
975 .rendered_html ul ul ul {
1026 .rendered_html ul ul ul {
976 list-style: circle;
1027 list-style: circle;
977 margin: 0em 2em;
1028 margin: 0em 2em;
978 }
1029 }
979 .rendered_html ol {
1030 .rendered_html ol {
980 list-style: decimal;
1031 list-style: decimal;
981 margin: 0em 2em;
1032 margin: 0em 2em;
982 padding-left: 0px;
1033 padding-left: 0px;
983 }
1034 }
984 .rendered_html ol ol {
1035 .rendered_html ol ol {
985 list-style: upper-alpha;
1036 list-style: upper-alpha;
986 margin: 0em 2em;
1037 margin: 0em 2em;
987 }
1038 }
988 .rendered_html ol ol ol {
1039 .rendered_html ol ol ol {
989 list-style: lower-alpha;
1040 list-style: lower-alpha;
990 margin: 0em 2em;
1041 margin: 0em 2em;
991 }
1042 }
992 .rendered_html ol ol ol ol {
1043 .rendered_html ol ol ol ol {
993 list-style: lower-roman;
1044 list-style: lower-roman;
994 margin: 0em 2em;
1045 margin: 0em 2em;
995 }
1046 }
996 .rendered_html ol ol ol ol ol {
1047 .rendered_html ol ol ol ol ol {
997 list-style: decimal;
1048 list-style: decimal;
998 margin: 0em 2em;
1049 margin: 0em 2em;
999 }
1050 }
1000 .rendered_html * + ul {
1051 .rendered_html * + ul {
1001 margin-top: 1em;
1052 margin-top: 1em;
1002 }
1053 }
1003 .rendered_html * + ol {
1054 .rendered_html * + ol {
1004 margin-top: 1em;
1055 margin-top: 1em;
1005 }
1056 }
1006 .rendered_html hr {
1057 .rendered_html hr {
1007 color: #000000;
1058 color: #000000;
1008 background-color: #000000;
1059 background-color: #000000;
1009 }
1060 }
1010 .rendered_html pre {
1061 .rendered_html pre {
1011 margin: 1em 2em;
1062 margin: 1em 2em;
1012 }
1063 }
1013 .rendered_html pre,
1064 .rendered_html pre,
1014 .rendered_html code {
1065 .rendered_html code {
1015 border: 0;
1066 border: 0;
1016 background-color: #ffffff;
1067 background-color: #ffffff;
1017 color: #000000;
1068 color: #000000;
1018 font-size: 100%;
1069 font-size: 100%;
1019 padding: 0px;
1070 padding: 0px;
1020 }
1071 }
1021 .rendered_html blockquote {
1072 .rendered_html blockquote {
1022 margin: 1em 2em;
1073 margin: 1em 2em;
1023 }
1074 }
1024 .rendered_html table {
1075 .rendered_html table {
1025 margin-left: auto;
1076 margin-left: auto;
1026 margin-right: auto;
1077 margin-right: auto;
1027 border: 1px solid #000000;
1078 border: 1px solid #000000;
1028 border-collapse: collapse;
1079 border-collapse: collapse;
1029 }
1080 }
1030 .rendered_html tr,
1081 .rendered_html tr,
1031 .rendered_html th,
1082 .rendered_html th,
1032 .rendered_html td {
1083 .rendered_html td {
1033 border: 1px solid #000000;
1084 border: 1px solid #000000;
1034 border-collapse: collapse;
1085 border-collapse: collapse;
1035 margin: 1em 2em;
1086 margin: 1em 2em;
1036 }
1087 }
1037 .rendered_html td,
1088 .rendered_html td,
1038 .rendered_html th {
1089 .rendered_html th {
1039 text-align: left;
1090 text-align: left;
1040 vertical-align: middle;
1091 vertical-align: middle;
1041 padding: 4px;
1092 padding: 4px;
1042 }
1093 }
1043 .rendered_html th {
1094 .rendered_html th {
1044 font-weight: bold;
1095 font-weight: bold;
1045 }
1096 }
1046 .rendered_html * + table {
1097 .rendered_html * + table {
1047 margin-top: 1em;
1098 margin-top: 1em;
1048 }
1099 }
1049 .rendered_html p {
1100 .rendered_html p {
1050 text-align: justify;
1101 text-align: justify;
1051 }
1102 }
1052 .rendered_html * + p {
1103 .rendered_html * + p {
1053 margin-top: 1em;
1104 margin-top: 1em;
1054 }
1105 }
1055 .rendered_html img {
1106 .rendered_html img {
1056 display: block;
1107 display: block;
1057 margin-left: auto;
1108 margin-left: auto;
1058 margin-right: auto;
1109 margin-right: auto;
1059 }
1110 }
1060 .rendered_html * + img {
1111 .rendered_html * + img {
1061 margin-top: 1em;
1112 margin-top: 1em;
1062 }
1113 }
1063 div.text_cell {
1114 div.text_cell {
1064 padding: 5px 5px 5px 0px;
1115 padding: 5px 5px 5px 0px;
1065 /* Old browsers */
1116 /* Old browsers */
1066 display: -webkit-box;
1117 display: -webkit-box;
1067 -webkit-box-orient: horizontal;
1118 -webkit-box-orient: horizontal;
1068 -webkit-box-align: stretch;
1119 -webkit-box-align: stretch;
1069 display: -moz-box;
1120 display: -moz-box;
1070 -moz-box-orient: horizontal;
1121 -moz-box-orient: horizontal;
1071 -moz-box-align: stretch;
1122 -moz-box-align: stretch;
1072 display: box;
1123 display: box;
1073 box-orient: horizontal;
1124 box-orient: horizontal;
1074 box-align: stretch;
1125 box-align: stretch;
1075 /* Modern browsers */
1126 /* Modern browsers */
1076 display: flex;
1127 display: flex;
1077 flex-direction: row;
1128 flex-direction: row;
1078 align-items: stretch;
1129 align-items: stretch;
1079 }
1130 }
1080 @media (max-width: 480px) {
1131 @media (max-width: 480px) {
1081 div.text_cell > div.prompt {
1132 div.text_cell > div.prompt {
1082 display: none;
1133 display: none;
1083 }
1134 }
1084 }
1135 }
1085 div.text_cell_render {
1136 div.text_cell_render {
1086 /*font-family: "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;*/
1137 /*font-family: "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;*/
1087 outline: none;
1138 outline: none;
1088 resize: none;
1139 resize: none;
1089 width: inherit;
1140 width: inherit;
1090 border-style: none;
1141 border-style: none;
1091 padding: 0.5em 0.5em 0.5em 0.4em;
1142 padding: 0.5em 0.5em 0.5em 0.4em;
1092 color: #000000;
1143 color: #000000;
1093 box-sizing: border-box;
1144 box-sizing: border-box;
1094 -moz-box-sizing: border-box;
1145 -moz-box-sizing: border-box;
1095 -webkit-box-sizing: border-box;
1146 -webkit-box-sizing: border-box;
1096 }
1147 }
1097 a.anchor-link:link {
1148 a.anchor-link:link {
1098 text-decoration: none;
1149 text-decoration: none;
1099 padding: 0px 20px;
1150 padding: 0px 20px;
1100 visibility: hidden;
1151 visibility: hidden;
1101 }
1152 }
1102 h1:hover .anchor-link,
1153 h1:hover .anchor-link,
1103 h2:hover .anchor-link,
1154 h2:hover .anchor-link,
1104 h3:hover .anchor-link,
1155 h3:hover .anchor-link,
1105 h4:hover .anchor-link,
1156 h4:hover .anchor-link,
1106 h5:hover .anchor-link,
1157 h5:hover .anchor-link,
1107 h6:hover .anchor-link {
1158 h6:hover .anchor-link {
1108 visibility: visible;
1159 visibility: visible;
1109 }
1160 }
1110 div.cell.text_cell.rendered {
1161 div.cell.text_cell.rendered {
1111 padding: 0px;
1162 padding: 0px;
1112 }
1163 }
1113 .text_cell.rendered .input_area {
1164 .text_cell.rendered .input_area {
1114 display: none;
1165 display: none;
1115 }
1166 }
1116 .text_cell.unrendered .text_cell_render {
1167 .text_cell.unrendered .text_cell_render {
1117 display: none;
1168 display: none;
1118 }
1169 }
1119 .cm-header-1,
1170 .cm-header-1,
1120 .cm-header-2,
1171 .cm-header-2,
1121 .cm-header-3,
1172 .cm-header-3,
1122 .cm-header-4,
1173 .cm-header-4,
1123 .cm-header-5,
1174 .cm-header-5,
1124 .cm-header-6 {
1175 .cm-header-6 {
1125 font-weight: bold;
1176 font-weight: bold;
1126 font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
1177 font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
1127 }
1178 }
1128 .cm-header-1 {
1179 .cm-header-1 {
1129 font-size: 185.7%;
1180 font-size: 185.7%;
1130 }
1181 }
1131 .cm-header-2 {
1182 .cm-header-2 {
1132 font-size: 157.1%;
1183 font-size: 157.1%;
1133 }
1184 }
1134 .cm-header-3 {
1185 .cm-header-3 {
1135 font-size: 128.6%;
1186 font-size: 128.6%;
1136 }
1187 }
1137 .cm-header-4 {
1188 .cm-header-4 {
1138 font-size: 110%;
1189 font-size: 110%;
1139 }
1190 }
1140 .cm-header-5 {
1191 .cm-header-5 {
1141 font-size: 100%;
1192 font-size: 100%;
1142 font-style: italic;
1193 font-style: italic;
1143 }
1194 }
1144 .cm-header-6 {
1195 .cm-header-6 {
1145 font-size: 100%;
1196 font-size: 100%;
1146 font-style: italic;
1197 font-style: italic;
1147 }
1198 }
1148 .widget-area {
1199 .widget-area {
1149 /*
1200 /*
1150 LESS file that styles IPython notebook widgets and the area they sit in.
1201 LESS file that styles IPython notebook widgets and the area they sit in.
1151
1202
1152 The widget area typically looks something like this:
1203 The widget area typically looks something like this:
1153 +------------------------------------------+
1204 +------------------------------------------+
1154 | widget-area |
1205 | widget-area |
1155 | +--------+---------------------------+ |
1206 | +--------+---------------------------+ |
1156 | | prompt | widget-subarea | |
1207 | | prompt | widget-subarea | |
1157 | | | +--------+ +--------+ | |
1208 | | | +--------+ +--------+ | |
1158 | | | | widget | | widget | | |
1209 | | | | widget | | widget | | |
1159 | | | +--------+ +--------+ | |
1210 | | | +--------+ +--------+ | |
1160 | +--------+---------------------------+ |
1211 | +--------+---------------------------+ |
1161 +------------------------------------------+
1212 +------------------------------------------+
1162 */
1213 */
1163 page-break-inside: avoid;
1214 page-break-inside: avoid;
1164 /* Old browsers */
1215 /* Old browsers */
1165 display: -webkit-box;
1216 display: -webkit-box;
1166 -webkit-box-orient: horizontal;
1217 -webkit-box-orient: horizontal;
1167 -webkit-box-align: stretch;
1218 -webkit-box-align: stretch;
1168 display: -moz-box;
1219 display: -moz-box;
1169 -moz-box-orient: horizontal;
1220 -moz-box-orient: horizontal;
1170 -moz-box-align: stretch;
1221 -moz-box-align: stretch;
1171 display: box;
1222 display: box;
1172 box-orient: horizontal;
1223 box-orient: horizontal;
1173 box-align: stretch;
1224 box-align: stretch;
1174 /* Modern browsers */
1225 /* Modern browsers */
1175 display: flex;
1226 display: flex;
1176 flex-direction: row;
1227 flex-direction: row;
1177 align-items: stretch;
1228 align-items: stretch;
1178 }
1229 }
1179 .widget-area .widget-subarea {
1230 .widget-area .widget-subarea {
1180 padding: 0.44em 0.4em 0.4em 1px;
1231 padding: 0.44em 0.4em 0.4em 1px;
1181 margin-left: 6px;
1232 margin-left: 6px;
1182 box-sizing: border-box;
1233 box-sizing: border-box;
1183 -moz-box-sizing: border-box;
1234 -moz-box-sizing: border-box;
1184 -webkit-box-sizing: border-box;
1235 -webkit-box-sizing: border-box;
1185 /* Old browsers */
1236 /* Old browsers */
1186 display: -webkit-box;
1237 display: -webkit-box;
1187 -webkit-box-orient: vertical;
1238 -webkit-box-orient: vertical;
1188 -webkit-box-align: stretch;
1239 -webkit-box-align: stretch;
1189 display: -moz-box;
1240 display: -moz-box;
1190 -moz-box-orient: vertical;
1241 -moz-box-orient: vertical;
1191 -moz-box-align: stretch;
1242 -moz-box-align: stretch;
1192 display: box;
1243 display: box;
1193 box-orient: vertical;
1244 box-orient: vertical;
1194 box-align: stretch;
1245 box-align: stretch;
1195 /* Modern browsers */
1246 /* Modern browsers */
1196 display: flex;
1247 display: flex;
1197 flex-direction: column;
1248 flex-direction: column;
1198 align-items: stretch;
1249 align-items: stretch;
1199 /* Old browsers */
1250 /* Old browsers */
1200 -webkit-box-flex: 2;
1251 -webkit-box-flex: 2;
1201 -moz-box-flex: 2;
1252 -moz-box-flex: 2;
1202 box-flex: 2;
1253 box-flex: 2;
1203 /* Modern browsers */
1254 /* Modern browsers */
1204 flex: 2;
1255 flex: 2;
1205 /* Old browsers */
1256 /* Old browsers */
1206 -webkit-box-align: start;
1257 -webkit-box-align: start;
1207 -moz-box-align: start;
1258 -moz-box-align: start;
1208 box-align: start;
1259 box-align: start;
1209 /* Modern browsers */
1260 /* Modern browsers */
1210 align-items: flex-start;
1261 align-items: flex-start;
1211 }
1262 }
1212 /* THE CLASSES BELOW CAN APPEAR ANYWHERE IN THE DOM (POSSIBLEY OUTSIDE OF
1263 /* THE CLASSES BELOW CAN APPEAR ANYWHERE IN THE DOM (POSSIBLEY OUTSIDE OF
1213 THE WIDGET AREA). */
1264 THE WIDGET AREA). */
1214 .slide-track {
1265 .slide-track {
1215 /* Slider Track */
1266 /* Slider Track */
1216 border: 1px solid #CCCCCC;
1267 border: 1px solid #CCCCCC;
1217 background: #FFFFFF;
1268 background: #FFFFFF;
1218 border-radius: 4px;
1269 border-radius: 4px;
1219 /* Round the corners of the slide track */
1270 /* Round the corners of the slide track */
1220 }
1271 }
1221 .widget-hslider {
1272 .widget-hslider {
1222 /* Horizontal jQuery Slider
1273 /* Horizontal jQuery Slider
1223
1274
1224 Both the horizontal and vertical versions of the slider are characterized
1275 Both the horizontal and vertical versions of the slider are characterized
1225 by a styled div that contains an invisible jQuery slide div which
1276 by a styled div that contains an invisible jQuery slide div which
1226 contains a visible slider handle div. This is requred so we can control
1277 contains a visible slider handle div. This is requred so we can control
1227 how the slider is drawn and 'fix' the issue where the slide handle
1278 how the slider is drawn and 'fix' the issue where the slide handle
1228 doesn't stop at the end of the slide.
1279 doesn't stop at the end of the slide.
1229
1280
1230 Both horizontal and vertical sliders have this div nesting:
1281 Both horizontal and vertical sliders have this div nesting:
1231 +------------------------------------------+
1282 +------------------------------------------+
1232 | widget-(h/v)slider |
1283 | widget-(h/v)slider |
1233 | +--------+---------------------------+ |
1284 | +--------+---------------------------+ |
1234 | | ui-slider | |
1285 | | ui-slider | |
1235 | | +------------------+ | |
1286 | | +------------------+ | |
1236 | | | ui-slider-handle | | |
1287 | | | ui-slider-handle | | |
1237 | | +------------------+ | |
1288 | | +------------------+ | |
1238 | +--------+---------------------------+ |
1289 | +--------+---------------------------+ |
1239 +------------------------------------------+
1290 +------------------------------------------+
1240 */
1291 */
1241 /* Fix the padding of the slide track so the ui-slider is sized
1292 /* Fix the padding of the slide track so the ui-slider is sized
1242 correctly. */
1293 correctly. */
1243 padding-left: 8px;
1294 padding-left: 8px;
1244 padding-right: 5px;
1295 padding-right: 5px;
1245 overflow: visible;
1296 overflow: visible;
1246 /* Default size of the slider */
1297 /* Default size of the slider */
1247 width: 350px;
1298 width: 350px;
1248 height: 5px;
1299 height: 5px;
1249 max-height: 5px;
1300 max-height: 5px;
1250 margin-top: 13px;
1301 margin-top: 13px;
1251 margin-bottom: 10px;
1302 margin-bottom: 10px;
1252 /* Style the slider track */
1303 /* Style the slider track */
1253 /* Slider Track */
1304 /* Slider Track */
1254 border: 1px solid #CCCCCC;
1305 border: 1px solid #CCCCCC;
1255 background: #FFFFFF;
1306 background: #FFFFFF;
1256 border-radius: 4px;
1307 border-radius: 4px;
1257 /* Round the corners of the slide track */
1308 /* Round the corners of the slide track */
1258 /* Make the div a flex box (makes FF behave correctly). */
1309 /* Make the div a flex box (makes FF behave correctly). */
1259 /* Old browsers */
1310 /* Old browsers */
1260 display: -webkit-box;
1311 display: -webkit-box;
1261 -webkit-box-orient: horizontal;
1312 -webkit-box-orient: horizontal;
1262 -webkit-box-align: stretch;
1313 -webkit-box-align: stretch;
1263 display: -moz-box;
1314 display: -moz-box;
1264 -moz-box-orient: horizontal;
1315 -moz-box-orient: horizontal;
1265 -moz-box-align: stretch;
1316 -moz-box-align: stretch;
1266 display: box;
1317 display: box;
1267 box-orient: horizontal;
1318 box-orient: horizontal;
1268 box-align: stretch;
1319 box-align: stretch;
1269 /* Modern browsers */
1320 /* Modern browsers */
1270 display: flex;
1321 display: flex;
1271 flex-direction: row;
1322 flex-direction: row;
1272 align-items: stretch;
1323 align-items: stretch;
1273 }
1324 }
1274 .widget-hslider .ui-slider {
1325 .widget-hslider .ui-slider {
1275 /* Inner, invisible slide div */
1326 /* Inner, invisible slide div */
1276 border: 0px !important;
1327 border: 0px !important;
1277 background: none !important;
1328 background: none !important;
1278 /* Old browsers */
1329 /* Old browsers */
1279 display: -webkit-box;
1330 display: -webkit-box;
1280 -webkit-box-orient: horizontal;
1331 -webkit-box-orient: horizontal;
1281 -webkit-box-align: stretch;
1332 -webkit-box-align: stretch;
1282 display: -moz-box;
1333 display: -moz-box;
1283 -moz-box-orient: horizontal;
1334 -moz-box-orient: horizontal;
1284 -moz-box-align: stretch;
1335 -moz-box-align: stretch;
1285 display: box;
1336 display: box;
1286 box-orient: horizontal;
1337 box-orient: horizontal;
1287 box-align: stretch;
1338 box-align: stretch;
1288 /* Modern browsers */
1339 /* Modern browsers */
1289 display: flex;
1340 display: flex;
1290 flex-direction: row;
1341 flex-direction: row;
1291 align-items: stretch;
1342 align-items: stretch;
1292 /* Old browsers */
1343 /* Old browsers */
1293 -webkit-box-flex: 1;
1344 -webkit-box-flex: 1;
1294 -moz-box-flex: 1;
1345 -moz-box-flex: 1;
1295 box-flex: 1;
1346 box-flex: 1;
1296 /* Modern browsers */
1347 /* Modern browsers */
1297 flex: 1;
1348 flex: 1;
1298 }
1349 }
1299 .widget-hslider .ui-slider .ui-slider-handle {
1350 .widget-hslider .ui-slider .ui-slider-handle {
1300 width: 14px !important;
1351 width: 14px !important;
1301 height: 28px !important;
1352 height: 28px !important;
1302 margin-top: -8px !important;
1353 margin-top: -8px !important;
1303 }
1354 }
1304 .widget-hslider .ui-slider .ui-slider-range {
1355 .widget-hslider .ui-slider .ui-slider-range {
1305 height: 12px !important;
1356 height: 12px !important;
1306 margin-top: -4px !important;
1357 margin-top: -4px !important;
1307 }
1358 }
1308 .widget-vslider {
1359 .widget-vslider {
1309 /* Vertical jQuery Slider */
1360 /* Vertical jQuery Slider */
1310 /* Fix the padding of the slide track so the ui-slider is sized
1361 /* Fix the padding of the slide track so the ui-slider is sized
1311 correctly. */
1362 correctly. */
1312 padding-bottom: 8px;
1363 padding-bottom: 8px;
1313 overflow: visible;
1364 overflow: visible;
1314 /* Default size of the slider */
1365 /* Default size of the slider */
1315 width: 5px;
1366 width: 5px;
1316 max-width: 5px;
1367 max-width: 5px;
1317 height: 250px;
1368 height: 250px;
1318 margin-left: 12px;
1369 margin-left: 12px;
1319 /* Style the slider track */
1370 /* Style the slider track */
1320 /* Slider Track */
1371 /* Slider Track */
1321 border: 1px solid #CCCCCC;
1372 border: 1px solid #CCCCCC;
1322 background: #FFFFFF;
1373 background: #FFFFFF;
1323 border-radius: 4px;
1374 border-radius: 4px;
1324 /* Round the corners of the slide track */
1375 /* Round the corners of the slide track */
1325 /* Make the div a flex box (makes FF behave correctly). */
1376 /* Make the div a flex box (makes FF behave correctly). */
1326 /* Old browsers */
1377 /* Old browsers */
1327 display: -webkit-box;
1378 display: -webkit-box;
1328 -webkit-box-orient: vertical;
1379 -webkit-box-orient: vertical;
1329 -webkit-box-align: stretch;
1380 -webkit-box-align: stretch;
1330 display: -moz-box;
1381 display: -moz-box;
1331 -moz-box-orient: vertical;
1382 -moz-box-orient: vertical;
1332 -moz-box-align: stretch;
1383 -moz-box-align: stretch;
1333 display: box;
1384 display: box;
1334 box-orient: vertical;
1385 box-orient: vertical;
1335 box-align: stretch;
1386 box-align: stretch;
1336 /* Modern browsers */
1387 /* Modern browsers */
1337 display: flex;
1388 display: flex;
1338 flex-direction: column;
1389 flex-direction: column;
1339 align-items: stretch;
1390 align-items: stretch;
1340 }
1391 }
1341 .widget-vslider .ui-slider {
1392 .widget-vslider .ui-slider {
1342 /* Inner, invisible slide div */
1393 /* Inner, invisible slide div */
1343 border: 0px !important;
1394 border: 0px !important;
1344 background: none !important;
1395 background: none !important;
1345 margin-left: -4px;
1396 margin-left: -4px;
1346 margin-top: 5px;
1397 margin-top: 5px;
1347 /* Old browsers */
1398 /* Old browsers */
1348 display: -webkit-box;
1399 display: -webkit-box;
1349 -webkit-box-orient: vertical;
1400 -webkit-box-orient: vertical;
1350 -webkit-box-align: stretch;
1401 -webkit-box-align: stretch;
1351 display: -moz-box;
1402 display: -moz-box;
1352 -moz-box-orient: vertical;
1403 -moz-box-orient: vertical;
1353 -moz-box-align: stretch;
1404 -moz-box-align: stretch;
1354 display: box;
1405 display: box;
1355 box-orient: vertical;
1406 box-orient: vertical;
1356 box-align: stretch;
1407 box-align: stretch;
1357 /* Modern browsers */
1408 /* Modern browsers */
1358 display: flex;
1409 display: flex;
1359 flex-direction: column;
1410 flex-direction: column;
1360 align-items: stretch;
1411 align-items: stretch;
1361 /* Old browsers */
1412 /* Old browsers */
1362 -webkit-box-flex: 1;
1413 -webkit-box-flex: 1;
1363 -moz-box-flex: 1;
1414 -moz-box-flex: 1;
1364 box-flex: 1;
1415 box-flex: 1;
1365 /* Modern browsers */
1416 /* Modern browsers */
1366 flex: 1;
1417 flex: 1;
1367 }
1418 }
1368 .widget-vslider .ui-slider .ui-slider-handle {
1419 .widget-vslider .ui-slider .ui-slider-handle {
1369 width: 28px !important;
1420 width: 28px !important;
1370 height: 14px !important;
1421 height: 14px !important;
1371 margin-left: -9px;
1422 margin-left: -9px;
1372 }
1423 }
1373 .widget-vslider .ui-slider .ui-slider-range {
1424 .widget-vslider .ui-slider .ui-slider-range {
1374 width: 12px !important;
1425 width: 12px !important;
1375 margin-left: -1px !important;
1426 margin-left: -1px !important;
1376 }
1427 }
1377 .widget-text {
1428 .widget-text {
1378 /* String Textbox - used for TextBoxView and TextAreaView */
1429 /* String Textbox - used for TextBoxView and TextAreaView */
1379 width: 350px;
1430 width: 350px;
1380 margin: 0px !important;
1431 margin: 0px !important;
1381 }
1432 }
1382 .widget-listbox {
1433 .widget-listbox {
1383 /* Listbox */
1434 /* Listbox */
1384 width: 350px;
1435 width: 350px;
1385 margin-bottom: 0px;
1436 margin-bottom: 0px;
1386 }
1437 }
1387 .widget-numeric-text {
1438 .widget-numeric-text {
1388 /* Single Line Textbox - used for IntTextView and FloatTextView */
1439 /* Single Line Textbox - used for IntTextView and FloatTextView */
1389 width: 150px;
1440 width: 150px;
1390 margin: 0px !important;
1441 margin: 0px !important;
1391 }
1442 }
1392 .widget-progress {
1443 .widget-progress {
1393 /* Progress Bar */
1444 /* Progress Bar */
1394 margin-top: 6px;
1445 margin-top: 6px;
1395 width: 350px;
1446 width: 350px;
1396 }
1447 }
1397 .widget-progress .progress-bar {
1448 .widget-progress .progress-bar {
1398 /* Disable progress bar animation */
1449 /* Disable progress bar animation */
1399 -webkit-transition: none;
1450 -webkit-transition: none;
1400 -moz-transition: none;
1451 -moz-transition: none;
1401 -ms-transition: none;
1452 -ms-transition: none;
1402 -o-transition: none;
1453 -o-transition: none;
1403 transition: none;
1454 transition: none;
1404 }
1455 }
1405 .widget-combo-btn {
1456 .widget-combo-btn {
1406 /* ComboBox Main Button */
1457 /* ComboBox Main Button */
1407 min-width: 125px;
1458 min-width: 125px;
1408 }
1459 }
1409 .widget_item .dropdown-menu li a {
1460 .widget_item .dropdown-menu li a {
1410 color: inherit;
1461 color: inherit;
1411 }
1462 }
1412 .widget-hbox {
1463 .widget-hbox {
1413 /* Horizontal widgets */
1464 /* Horizontal widgets */
1414 /* Old browsers */
1465 /* Old browsers */
1415 display: -webkit-box;
1466 display: -webkit-box;
1416 -webkit-box-orient: horizontal;
1467 -webkit-box-orient: horizontal;
1417 -webkit-box-align: stretch;
1468 -webkit-box-align: stretch;
1418 display: -moz-box;
1469 display: -moz-box;
1419 -moz-box-orient: horizontal;
1470 -moz-box-orient: horizontal;
1420 -moz-box-align: stretch;
1471 -moz-box-align: stretch;
1421 display: box;
1472 display: box;
1422 box-orient: horizontal;
1473 box-orient: horizontal;
1423 box-align: stretch;
1474 box-align: stretch;
1424 /* Modern browsers */
1475 /* Modern browsers */
1425 display: flex;
1476 display: flex;
1426 flex-direction: row;
1477 flex-direction: row;
1427 align-items: stretch;
1478 align-items: stretch;
1428 margin-top: 0px !important;
1479 margin-top: 0px !important;
1429 margin-bottom: 0px !important;
1480 margin-bottom: 0px !important;
1430 margin-right: 5px;
1481 margin-right: 5px;
1431 margin-left: 5px;
1482 margin-left: 5px;
1432 }
1483 }
1433 .widget-hbox input[type="checkbox"] {
1484 .widget-hbox input[type="checkbox"] {
1434 margin-top: 9px;
1485 margin-top: 9px;
1435 margin-bottom: 10px;
1486 margin-bottom: 10px;
1436 }
1487 }
1437 .widget-hbox .widget-label {
1488 .widget-hbox .widget-label {
1438 /* Horizontal Label */
1489 /* Horizontal Label */
1439 min-width: 10ex;
1490 min-width: 10ex;
1440 padding-right: 8px;
1491 padding-right: 8px;
1441 padding-top: 5px;
1492 padding-top: 5px;
1442 text-align: right;
1493 text-align: right;
1443 vertical-align: text-top;
1494 vertical-align: text-top;
1444 }
1495 }
1445 .widget-hbox .widget-readout {
1496 .widget-hbox .widget-readout {
1446 padding-left: 8px;
1497 padding-left: 8px;
1447 padding-top: 5px;
1498 padding-top: 5px;
1448 text-align: left;
1499 text-align: left;
1449 vertical-align: text-top;
1500 vertical-align: text-top;
1450 }
1501 }
1451 .widget-vbox {
1502 .widget-vbox {
1452 /* Vertical widgets */
1503 /* Vertical widgets */
1453 /* Old browsers */
1504 /* Old browsers */
1454 display: -webkit-box;
1505 display: -webkit-box;
1455 -webkit-box-orient: vertical;
1506 -webkit-box-orient: vertical;
1456 -webkit-box-align: stretch;
1507 -webkit-box-align: stretch;
1457 display: -moz-box;
1508 display: -moz-box;
1458 -moz-box-orient: vertical;
1509 -moz-box-orient: vertical;
1459 -moz-box-align: stretch;
1510 -moz-box-align: stretch;
1460 display: box;
1511 display: box;
1461 box-orient: vertical;
1512 box-orient: vertical;
1462 box-align: stretch;
1513 box-align: stretch;
1463 /* Modern browsers */
1514 /* Modern browsers */
1464 display: flex;
1515 display: flex;
1465 flex-direction: column;
1516 flex-direction: column;
1466 align-items: stretch;
1517 align-items: stretch;
1467 }
1518 }
1468 .widget-vbox .widget-label {
1519 .widget-vbox .widget-label {
1469 /* Vertical Label */
1520 /* Vertical Label */
1470 padding-bottom: 5px;
1521 padding-bottom: 5px;
1471 text-align: center;
1522 text-align: center;
1472 vertical-align: text-bottom;
1523 vertical-align: text-bottom;
1473 }
1524 }
1474 .widget-vbox .widget-readout {
1525 .widget-vbox .widget-readout {
1475 /* Vertical Label */
1526 /* Vertical Label */
1476 padding-top: 5px;
1527 padding-top: 5px;
1477 text-align: center;
1528 text-align: center;
1478 vertical-align: text-top;
1529 vertical-align: text-top;
1479 }
1530 }
1480 .widget-modal {
1531 .widget-modal {
1481 /* Box - ModalView */
1532 /* Box - ModalView */
1482 overflow: hidden;
1533 overflow: hidden;
1483 position: absolute !important;
1534 position: absolute !important;
1484 top: 0px;
1535 top: 0px;
1485 left: 0px;
1536 left: 0px;
1486 margin-left: 0px !important;
1537 margin-left: 0px !important;
1487 }
1538 }
1488 .widget-modal-body {
1539 .widget-modal-body {
1489 /* Box - ModalView Body */
1540 /* Box - ModalView Body */
1490 max-height: none !important;
1541 max-height: none !important;
1491 }
1542 }
1492 .widget-box {
1543 .widget-box {
1493 /* Box */
1544 /* Box */
1494 box-sizing: border-box;
1545 box-sizing: border-box;
1495 -moz-box-sizing: border-box;
1546 -moz-box-sizing: border-box;
1496 -webkit-box-sizing: border-box;
1547 -webkit-box-sizing: border-box;
1497 /* Old browsers */
1548 /* Old browsers */
1498 -webkit-box-align: start;
1549 -webkit-box-align: start;
1499 -moz-box-align: start;
1550 -moz-box-align: start;
1500 box-align: start;
1551 box-align: start;
1501 /* Modern browsers */
1552 /* Modern browsers */
1502 align-items: flex-start;
1553 align-items: flex-start;
1503 }
1554 }
1504 .widget-radio-box {
1555 .widget-radio-box {
1505 /* Contains RadioButtonsWidget */
1556 /* Contains RadioButtonsWidget */
1506 /* Old browsers */
1557 /* Old browsers */
1507 display: -webkit-box;
1558 display: -webkit-box;
1508 -webkit-box-orient: vertical;
1559 -webkit-box-orient: vertical;
1509 -webkit-box-align: stretch;
1560 -webkit-box-align: stretch;
1510 display: -moz-box;
1561 display: -moz-box;
1511 -moz-box-orient: vertical;
1562 -moz-box-orient: vertical;
1512 -moz-box-align: stretch;
1563 -moz-box-align: stretch;
1513 display: box;
1564 display: box;
1514 box-orient: vertical;
1565 box-orient: vertical;
1515 box-align: stretch;
1566 box-align: stretch;
1516 /* Modern browsers */
1567 /* Modern browsers */
1517 display: flex;
1568 display: flex;
1518 flex-direction: column;
1569 flex-direction: column;
1519 align-items: stretch;
1570 align-items: stretch;
1520 box-sizing: border-box;
1571 box-sizing: border-box;
1521 -moz-box-sizing: border-box;
1572 -moz-box-sizing: border-box;
1522 -webkit-box-sizing: border-box;
1573 -webkit-box-sizing: border-box;
1523 padding-top: 4px;
1574 padding-top: 4px;
1524 }
1575 }
1525 .widget-radio-box label {
1576 .widget-radio-box label {
1526 margin-top: 0px;
1577 margin-top: 0px;
1527 }
1578 }
1528 .docked-widget-modal {
1579 .docked-widget-modal {
1529 /* Horizontal Label */
1580 /* Horizontal Label */
1530 overflow: hidden;
1581 overflow: hidden;
1531 position: relative !important;
1582 position: relative !important;
1532 top: 0px !important;
1583 top: 0px !important;
1533 left: 0px !important;
1584 left: 0px !important;
1534 margin-left: 0px !important;
1585 margin-left: 0px !important;
1535 }
1586 }
1536 /*# sourceMappingURL=../style/ipython.min.css.map */ No newline at end of file
1587 /*# sourceMappingURL=../style/ipython.min.css.map */
@@ -1,10505 +1,10556 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: 36px;
3639 min-height: 36px;
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: 9px 15px;
3736 padding: 9px 15px;
3737 font-size: 17px;
3737 font-size: 17px;
3738 line-height: 18px;
3738 line-height: 18px;
3739 height: 36px;
3739 height: 36px;
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: 1px;
3756 margin-top: 1px;
3757 margin-bottom: 1px;
3757 margin-bottom: 1px;
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: 4.5px -15px;
3781 margin: 4.5px -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: 9px;
3819 padding-top: 9px;
3820 padding-bottom: 9px;
3820 padding-bottom: 9px;
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: 2px;
3844 margin-top: 2px;
3845 margin-bottom: 2px;
3845 margin-bottom: 2px;
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: 2px;
3912 margin-top: 2px;
3913 margin-bottom: 2px;
3913 margin-bottom: 2px;
3914 }
3914 }
3915 .navbar-btn.btn-sm {
3915 .navbar-btn.btn-sm {
3916 margin-top: 3px;
3916 margin-top: 3px;
3917 margin-bottom: 3px;
3917 margin-bottom: 3px;
3918 }
3918 }
3919 .navbar-btn.btn-xs {
3919 .navbar-btn.btn-xs {
3920 margin-top: 7px;
3920 margin-top: 7px;
3921 margin-bottom: 7px;
3921 margin-bottom: 7px;
3922 }
3922 }
3923 .navbar-text {
3923 .navbar-text {
3924 margin-top: 9px;
3924 margin-top: 9px;
3925 margin-bottom: 9px;
3925 margin-bottom: 9px;
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 margin-bottom: 0px;
7754 margin-bottom: 0px;
7755 padding-left: 30px;
7755 padding-left: 30px;
7756 padding-bottom: 5px;
7756 padding-bottom: 5px;
7757 border-bottom: 1px solid #e7e7e7;
7757 border-bottom: 1px solid #e7e7e7;
7758 box-sizing: border-box;
7758 box-sizing: border-box;
7759 -moz-box-sizing: border-box;
7759 -moz-box-sizing: border-box;
7760 -webkit-box-sizing: border-box;
7760 -webkit-box-sizing: border-box;
7761 }
7761 }
7762 #ipython_notebook {
7762 #ipython_notebook {
7763 padding-left: 0px;
7763 padding-left: 0px;
7764 }
7764 }
7765 #noscript {
7765 #noscript {
7766 width: auto;
7766 width: auto;
7767 padding-top: 16px;
7767 padding-top: 16px;
7768 padding-bottom: 16px;
7768 padding-bottom: 16px;
7769 text-align: center;
7769 text-align: center;
7770 font-size: 22px;
7770 font-size: 22px;
7771 color: red;
7771 color: red;
7772 font-weight: bold;
7772 font-weight: bold;
7773 }
7773 }
7774 #ipython_notebook img {
7774 #ipython_notebook img {
7775 font-family: Verdana, "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;
7775 font-family: Verdana, "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;
7776 height: 24px;
7776 height: 24px;
7777 text-decoration: none;
7777 text-decoration: none;
7778 color: black;
7778 color: black;
7779 }
7779 }
7780 #site {
7780 #site {
7781 width: 100%;
7781 width: 100%;
7782 display: none;
7782 display: none;
7783 box-sizing: border-box;
7783 box-sizing: border-box;
7784 -moz-box-sizing: border-box;
7784 -moz-box-sizing: border-box;
7785 -webkit-box-sizing: border-box;
7785 -webkit-box-sizing: border-box;
7786 }
7786 }
7787 /* Smaller buttons */
7787 /* Smaller buttons */
7788 .ui-button .ui-button-text {
7788 .ui-button .ui-button-text {
7789 padding: 0.2em 0.8em;
7789 padding: 0.2em 0.8em;
7790 font-size: 77%;
7790 font-size: 77%;
7791 }
7791 }
7792 input.ui-button {
7792 input.ui-button {
7793 padding: 0.3em 0.9em;
7793 padding: 0.3em 0.9em;
7794 }
7794 }
7795 .navbar span {
7795 .navbar span {
7796 margin-top: 3px;
7796 margin-top: 3px;
7797 }
7797 }
7798 span#login_widget {
7798 span#login_widget {
7799 float: right;
7799 float: right;
7800 }
7800 }
7801 span#login_widget > .button,
7801 span#login_widget > .button,
7802 #logout {
7802 #logout {
7803 display: inline-block;
7803 display: inline-block;
7804 margin-bottom: 0;
7804 margin-bottom: 0;
7805 font-weight: normal;
7805 font-weight: normal;
7806 text-align: center;
7806 text-align: center;
7807 vertical-align: middle;
7807 vertical-align: middle;
7808 cursor: pointer;
7808 cursor: pointer;
7809 background-image: none;
7809 background-image: none;
7810 border: 1px solid transparent;
7810 border: 1px solid transparent;
7811 white-space: nowrap;
7811 white-space: nowrap;
7812 padding: 6px 12px;
7812 padding: 6px 12px;
7813 font-size: 13px;
7813 font-size: 13px;
7814 line-height: 1.42857143;
7814 line-height: 1.42857143;
7815 border-radius: 4px;
7815 border-radius: 4px;
7816 -webkit-user-select: none;
7816 -webkit-user-select: none;
7817 -moz-user-select: none;
7817 -moz-user-select: none;
7818 -ms-user-select: none;
7818 -ms-user-select: none;
7819 user-select: none;
7819 user-select: none;
7820 color: #333333;
7820 color: #333333;
7821 background-color: #ffffff;
7821 background-color: #ffffff;
7822 border-color: #cccccc;
7822 border-color: #cccccc;
7823 padding: 5px 10px;
7823 padding: 5px 10px;
7824 font-size: 12px;
7824 font-size: 12px;
7825 line-height: 1.5;
7825 line-height: 1.5;
7826 border-radius: 3px;
7826 border-radius: 3px;
7827 }
7827 }
7828 span#login_widget > .button:focus,
7828 span#login_widget > .button:focus,
7829 #logout:focus,
7829 #logout:focus,
7830 span#login_widget > .button:active:focus,
7830 span#login_widget > .button:active:focus,
7831 #logout:active:focus,
7831 #logout:active:focus,
7832 span#login_widget > .button.active:focus,
7832 span#login_widget > .button.active:focus,
7833 #logout.active:focus {
7833 #logout.active:focus {
7834 outline: thin dotted;
7834 outline: thin dotted;
7835 outline: 5px auto -webkit-focus-ring-color;
7835 outline: 5px auto -webkit-focus-ring-color;
7836 outline-offset: -2px;
7836 outline-offset: -2px;
7837 }
7837 }
7838 span#login_widget > .button:hover,
7838 span#login_widget > .button:hover,
7839 #logout:hover,
7839 #logout:hover,
7840 span#login_widget > .button:focus,
7840 span#login_widget > .button:focus,
7841 #logout:focus {
7841 #logout:focus {
7842 color: #333333;
7842 color: #333333;
7843 text-decoration: none;
7843 text-decoration: none;
7844 }
7844 }
7845 span#login_widget > .button:active,
7845 span#login_widget > .button:active,
7846 #logout:active,
7846 #logout:active,
7847 span#login_widget > .button.active,
7847 span#login_widget > .button.active,
7848 #logout.active {
7848 #logout.active {
7849 outline: 0;
7849 outline: 0;
7850 background-image: none;
7850 background-image: none;
7851 -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
7851 -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
7852 box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
7852 box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
7853 }
7853 }
7854 span#login_widget > .button.disabled,
7854 span#login_widget > .button.disabled,
7855 #logout.disabled,
7855 #logout.disabled,
7856 span#login_widget > .button[disabled],
7856 span#login_widget > .button[disabled],
7857 #logout[disabled],
7857 #logout[disabled],
7858 fieldset[disabled] span#login_widget > .button,
7858 fieldset[disabled] span#login_widget > .button,
7859 fieldset[disabled] #logout {
7859 fieldset[disabled] #logout {
7860 cursor: not-allowed;
7860 cursor: not-allowed;
7861 pointer-events: none;
7861 pointer-events: none;
7862 opacity: 0.65;
7862 opacity: 0.65;
7863 filter: alpha(opacity=65);
7863 filter: alpha(opacity=65);
7864 -webkit-box-shadow: none;
7864 -webkit-box-shadow: none;
7865 box-shadow: none;
7865 box-shadow: none;
7866 }
7866 }
7867 span#login_widget > .button:hover,
7867 span#login_widget > .button:hover,
7868 #logout:hover,
7868 #logout:hover,
7869 span#login_widget > .button:focus,
7869 span#login_widget > .button:focus,
7870 #logout:focus,
7870 #logout:focus,
7871 span#login_widget > .button:active,
7871 span#login_widget > .button:active,
7872 #logout:active,
7872 #logout:active,
7873 span#login_widget > .button.active,
7873 span#login_widget > .button.active,
7874 #logout.active,
7874 #logout.active,
7875 .open .dropdown-togglespan#login_widget > .button,
7875 .open .dropdown-togglespan#login_widget > .button,
7876 .open .dropdown-toggle#logout {
7876 .open .dropdown-toggle#logout {
7877 color: #333333;
7877 color: #333333;
7878 background-color: #ebebeb;
7878 background-color: #ebebeb;
7879 border-color: #adadad;
7879 border-color: #adadad;
7880 }
7880 }
7881 span#login_widget > .button:active,
7881 span#login_widget > .button:active,
7882 #logout:active,
7882 #logout:active,
7883 span#login_widget > .button.active,
7883 span#login_widget > .button.active,
7884 #logout.active,
7884 #logout.active,
7885 .open .dropdown-togglespan#login_widget > .button,
7885 .open .dropdown-togglespan#login_widget > .button,
7886 .open .dropdown-toggle#logout {
7886 .open .dropdown-toggle#logout {
7887 background-image: none;
7887 background-image: none;
7888 }
7888 }
7889 span#login_widget > .button.disabled,
7889 span#login_widget > .button.disabled,
7890 #logout.disabled,
7890 #logout.disabled,
7891 span#login_widget > .button[disabled],
7891 span#login_widget > .button[disabled],
7892 #logout[disabled],
7892 #logout[disabled],
7893 fieldset[disabled] span#login_widget > .button,
7893 fieldset[disabled] span#login_widget > .button,
7894 fieldset[disabled] #logout,
7894 fieldset[disabled] #logout,
7895 span#login_widget > .button.disabled:hover,
7895 span#login_widget > .button.disabled:hover,
7896 #logout.disabled:hover,
7896 #logout.disabled:hover,
7897 span#login_widget > .button[disabled]:hover,
7897 span#login_widget > .button[disabled]:hover,
7898 #logout[disabled]:hover,
7898 #logout[disabled]:hover,
7899 fieldset[disabled] span#login_widget > .button:hover,
7899 fieldset[disabled] span#login_widget > .button:hover,
7900 fieldset[disabled] #logout:hover,
7900 fieldset[disabled] #logout:hover,
7901 span#login_widget > .button.disabled:focus,
7901 span#login_widget > .button.disabled:focus,
7902 #logout.disabled:focus,
7902 #logout.disabled:focus,
7903 span#login_widget > .button[disabled]:focus,
7903 span#login_widget > .button[disabled]:focus,
7904 #logout[disabled]:focus,
7904 #logout[disabled]:focus,
7905 fieldset[disabled] span#login_widget > .button:focus,
7905 fieldset[disabled] span#login_widget > .button:focus,
7906 fieldset[disabled] #logout:focus,
7906 fieldset[disabled] #logout:focus,
7907 span#login_widget > .button.disabled:active,
7907 span#login_widget > .button.disabled:active,
7908 #logout.disabled:active,
7908 #logout.disabled:active,
7909 span#login_widget > .button[disabled]:active,
7909 span#login_widget > .button[disabled]:active,
7910 #logout[disabled]:active,
7910 #logout[disabled]:active,
7911 fieldset[disabled] span#login_widget > .button:active,
7911 fieldset[disabled] span#login_widget > .button:active,
7912 fieldset[disabled] #logout:active,
7912 fieldset[disabled] #logout:active,
7913 span#login_widget > .button.disabled.active,
7913 span#login_widget > .button.disabled.active,
7914 #logout.disabled.active,
7914 #logout.disabled.active,
7915 span#login_widget > .button[disabled].active,
7915 span#login_widget > .button[disabled].active,
7916 #logout[disabled].active,
7916 #logout[disabled].active,
7917 fieldset[disabled] span#login_widget > .button.active,
7917 fieldset[disabled] span#login_widget > .button.active,
7918 fieldset[disabled] #logout.active {
7918 fieldset[disabled] #logout.active {
7919 background-color: #ffffff;
7919 background-color: #ffffff;
7920 border-color: #cccccc;
7920 border-color: #cccccc;
7921 }
7921 }
7922 span#login_widget > .button .badge,
7922 span#login_widget > .button .badge,
7923 #logout .badge {
7923 #logout .badge {
7924 color: #ffffff;
7924 color: #ffffff;
7925 background-color: #333333;
7925 background-color: #333333;
7926 }
7926 }
7927 .nav-header {
7927 .nav-header {
7928 text-transform: none;
7928 text-transform: none;
7929 }
7929 }
7930 #header > span {
7930 #header > span {
7931 margin-top: 10px;
7931 margin-top: 10px;
7932 }
7932 }
7933 .modal_stretch .modal-dialog {
7933 .modal_stretch .modal-dialog {
7934 /* Old browsers */
7934 /* Old browsers */
7935 display: -webkit-box;
7935 display: -webkit-box;
7936 -webkit-box-orient: vertical;
7936 -webkit-box-orient: vertical;
7937 -webkit-box-align: stretch;
7937 -webkit-box-align: stretch;
7938 display: -moz-box;
7938 display: -moz-box;
7939 -moz-box-orient: vertical;
7939 -moz-box-orient: vertical;
7940 -moz-box-align: stretch;
7940 -moz-box-align: stretch;
7941 display: box;
7941 display: box;
7942 box-orient: vertical;
7942 box-orient: vertical;
7943 box-align: stretch;
7943 box-align: stretch;
7944 /* Modern browsers */
7944 /* Modern browsers */
7945 display: flex;
7945 display: flex;
7946 flex-direction: column;
7946 flex-direction: column;
7947 align-items: stretch;
7947 align-items: stretch;
7948 min-height: 80%;
7948 min-height: 80%;
7949 }
7949 }
7950 .modal_stretch .modal-dialog .modal-body {
7950 .modal_stretch .modal-dialog .modal-body {
7951 max-height: none;
7951 max-height: none;
7952 flex: 1;
7952 flex: 1;
7953 }
7953 }
7954 @media (min-width: 768px) {
7954 @media (min-width: 768px) {
7955 .modal .modal-dialog {
7955 .modal .modal-dialog {
7956 width: 700px;
7956 width: 700px;
7957 }
7957 }
7958 }
7958 }
7959 /*!
7959 /*!
7960 *
7960 *
7961 * IPython auth
7961 * IPython auth
7962 *
7962 *
7963 */
7963 */
7964 .center-nav {
7964 .center-nav {
7965 display: inline-block;
7965 display: inline-block;
7966 margin-bottom: -4px;
7966 margin-bottom: -4px;
7967 }
7967 }
7968 /*!
7968 /*!
7969 *
7969 *
7970 * IPython tree view
7970 * IPython tree view
7971 *
7971 *
7972 */
7972 */
7973 /* We need an invisible input field on top of the sentense*/
7973 /* We need an invisible input field on top of the sentense*/
7974 /* "Drag file onto the list ..." */
7974 /* "Drag file onto the list ..." */
7975 .alternate_upload {
7975 .alternate_upload {
7976 background-color: none;
7976 background-color: none;
7977 display: inline;
7977 display: inline;
7978 }
7978 }
7979 .alternate_upload.form {
7979 .alternate_upload.form {
7980 padding: 0;
7980 padding: 0;
7981 margin: 0;
7981 margin: 0;
7982 }
7982 }
7983 .alternate_upload input.fileinput {
7983 .alternate_upload input.fileinput {
7984 background-color: red;
7984 background-color: red;
7985 position: relative;
7985 position: relative;
7986 opacity: 0;
7986 opacity: 0;
7987 z-index: 2;
7987 z-index: 2;
7988 width: 295px;
7988 width: 295px;
7989 margin-left: 163px;
7989 margin-left: 163px;
7990 cursor: pointer;
7990 cursor: pointer;
7991 height: 26px;
7991 height: 26px;
7992 }
7992 }
7993 /**
7993 /**
7994 * Primary styles
7994 * Primary styles
7995 *
7995 *
7996 * Author: IPython Development Team
7996 * Author: IPython Development Team
7997 */
7997 */
7998 ul#tabs {
7998 ul#tabs {
7999 margin-bottom: 4px;
7999 margin-bottom: 4px;
8000 }
8000 }
8001 ul#tabs a {
8001 ul#tabs a {
8002 padding-top: 6px;
8002 padding-top: 6px;
8003 padding-bottom: 4px;
8003 padding-bottom: 4px;
8004 }
8004 }
8005 ul.breadcrumb a:focus,
8005 ul.breadcrumb a:focus,
8006 ul.breadcrumb a:hover {
8006 ul.breadcrumb a:hover {
8007 text-decoration: none;
8007 text-decoration: none;
8008 }
8008 }
8009 ul.breadcrumb i.icon-home {
8009 ul.breadcrumb i.icon-home {
8010 font-size: 16px;
8010 font-size: 16px;
8011 margin-right: 4px;
8011 margin-right: 4px;
8012 }
8012 }
8013 ul.breadcrumb span {
8013 ul.breadcrumb span {
8014 color: #5e5e5e;
8014 color: #5e5e5e;
8015 }
8015 }
8016 .list_toolbar {
8016 .list_toolbar {
8017 padding: 4px 0 4px 0;
8017 padding: 4px 0 4px 0;
8018 vertical-align: middle;
8018 vertical-align: middle;
8019 }
8019 }
8020 .list_toolbar .tree-buttons {
8020 .list_toolbar .tree-buttons {
8021 padding-top: 2px;
8021 padding-top: 2px;
8022 }
8022 }
8023 .list_toolbar [class*="span"] {
8023 .list_toolbar [class*="span"] {
8024 min-height: 24px;
8024 min-height: 24px;
8025 }
8025 }
8026 .list_header {
8026 .list_header {
8027 font-weight: bold;
8027 font-weight: bold;
8028 }
8028 }
8029 .list_container {
8029 .list_container {
8030 margin-top: 4px;
8030 margin-top: 4px;
8031 margin-bottom: 20px;
8031 margin-bottom: 20px;
8032 border: 1px solid #ababab;
8032 border: 1px solid #ababab;
8033 border-radius: 4px;
8033 border-radius: 4px;
8034 }
8034 }
8035 .list_container > div {
8035 .list_container > div {
8036 border-bottom: 1px solid #ababab;
8036 border-bottom: 1px solid #ababab;
8037 }
8037 }
8038 .list_container > div:hover .list-item {
8038 .list_container > div:hover .list-item {
8039 background-color: red;
8039 background-color: red;
8040 }
8040 }
8041 .list_container > div:last-child {
8041 .list_container > div:last-child {
8042 border: none;
8042 border: none;
8043 }
8043 }
8044 .list_item:hover .list_item {
8044 .list_item:hover .list_item {
8045 background-color: #ddd;
8045 background-color: #ddd;
8046 }
8046 }
8047 .list_item a {
8047 .list_item a {
8048 text-decoration: none;
8048 text-decoration: none;
8049 }
8049 }
8050 .action_col {
8050 .action_col {
8051 text-align: right;
8051 text-align: right;
8052 }
8052 }
8053 .list_header > div,
8053 .list_header > div,
8054 .list_item > div {
8054 .list_item > div {
8055 padding-top: 4px;
8055 padding-top: 4px;
8056 padding-bottom: 4px;
8056 padding-bottom: 4px;
8057 padding-left: 7px;
8057 padding-left: 7px;
8058 padding-right: 7px;
8058 padding-right: 7px;
8059 line-height: 22px;
8059 line-height: 22px;
8060 }
8060 }
8061 .item_name {
8061 .item_name {
8062 line-height: 22px;
8062 line-height: 22px;
8063 height: 24px;
8063 height: 24px;
8064 }
8064 }
8065 .item_icon {
8065 .item_icon {
8066 font-size: 14px;
8066 font-size: 14px;
8067 color: #5e5e5e;
8067 color: #5e5e5e;
8068 margin-right: 7px;
8068 margin-right: 7px;
8069 }
8069 }
8070 .item_buttons {
8070 .item_buttons {
8071 line-height: 1em;
8071 line-height: 1em;
8072 }
8072 }
8073 .item_buttons .btn {
8073 .item_buttons .btn {
8074 min-width: 13ex;
8074 min-width: 13ex;
8075 }
8075 }
8076 .toolbar_info {
8076 .toolbar_info {
8077 height: 24px;
8077 height: 24px;
8078 line-height: 24px;
8078 line-height: 24px;
8079 }
8079 }
8080 input.nbname_input,
8080 input.nbname_input,
8081 input.engine_num_input {
8081 input.engine_num_input {
8082 padding-top: 3px;
8082 padding-top: 3px;
8083 padding-bottom: 3px;
8083 padding-bottom: 3px;
8084 height: 22px;
8084 height: 22px;
8085 line-height: 14px;
8085 line-height: 14px;
8086 margin: 0px;
8086 margin: 0px;
8087 }
8087 }
8088 input.engine_num_input {
8088 input.engine_num_input {
8089 width: 60px;
8089 width: 60px;
8090 }
8090 }
8091 .highlight_text {
8091 .highlight_text {
8092 color: blue;
8092 color: blue;
8093 }
8093 }
8094 #project_name > .breadcrumb {
8094 #project_name > .breadcrumb {
8095 padding: 0px;
8095 padding: 0px;
8096 margin-bottom: 0px;
8096 margin-bottom: 0px;
8097 background-color: transparent;
8097 background-color: transparent;
8098 font-weight: bold;
8098 font-weight: bold;
8099 }
8099 }
8100 .tab-content .row {
8100 .tab-content .row {
8101 margin-left: 0px;
8101 margin-left: 0px;
8102 margin-right: 0px;
8102 margin-right: 0px;
8103 }
8103 }
8104 .folder_icon:before {
8104 .folder_icon:before {
8105 display: inline-block;
8105 display: inline-block;
8106 font: normal normal normal 14px/1 FontAwesome;
8106 font: normal normal normal 14px/1 FontAwesome;
8107 font-size: inherit;
8107 font-size: inherit;
8108 text-rendering: auto;
8108 text-rendering: auto;
8109 -webkit-font-smoothing: antialiased;
8109 -webkit-font-smoothing: antialiased;
8110 -moz-osx-font-smoothing: grayscale;
8110 -moz-osx-font-smoothing: grayscale;
8111 content: "\f114";
8111 content: "\f114";
8112 }
8112 }
8113 .folder_icon:before.pull-left {
8113 .folder_icon:before.pull-left {
8114 margin-right: .3em;
8114 margin-right: .3em;
8115 }
8115 }
8116 .folder_icon:before.pull-right {
8116 .folder_icon:before.pull-right {
8117 margin-left: .3em;
8117 margin-left: .3em;
8118 }
8118 }
8119 .notebook_icon:before {
8119 .notebook_icon:before {
8120 display: inline-block;
8120 display: inline-block;
8121 font: normal normal normal 14px/1 FontAwesome;
8121 font: normal normal normal 14px/1 FontAwesome;
8122 font-size: inherit;
8122 font-size: inherit;
8123 text-rendering: auto;
8123 text-rendering: auto;
8124 -webkit-font-smoothing: antialiased;
8124 -webkit-font-smoothing: antialiased;
8125 -moz-osx-font-smoothing: grayscale;
8125 -moz-osx-font-smoothing: grayscale;
8126 content: "\f02d";
8126 content: "\f02d";
8127 }
8127 }
8128 .notebook_icon:before.pull-left {
8128 .notebook_icon:before.pull-left {
8129 margin-right: .3em;
8129 margin-right: .3em;
8130 }
8130 }
8131 .notebook_icon:before.pull-right {
8131 .notebook_icon:before.pull-right {
8132 margin-left: .3em;
8132 margin-left: .3em;
8133 }
8133 }
8134 .file_icon:before {
8134 .file_icon:before {
8135 display: inline-block;
8135 display: inline-block;
8136 font: normal normal normal 14px/1 FontAwesome;
8136 font: normal normal normal 14px/1 FontAwesome;
8137 font-size: inherit;
8137 font-size: inherit;
8138 text-rendering: auto;
8138 text-rendering: auto;
8139 -webkit-font-smoothing: antialiased;
8139 -webkit-font-smoothing: antialiased;
8140 -moz-osx-font-smoothing: grayscale;
8140 -moz-osx-font-smoothing: grayscale;
8141 content: "\f016";
8141 content: "\f016";
8142 }
8142 }
8143 .file_icon:before.pull-left {
8143 .file_icon:before.pull-left {
8144 margin-right: .3em;
8144 margin-right: .3em;
8145 }
8145 }
8146 .file_icon:before.pull-right {
8146 .file_icon:before.pull-right {
8147 margin-left: .3em;
8147 margin-left: .3em;
8148 }
8148 }
8149 /*!
8149 /*!
8150 *
8150 *
8151 * IPython notebook
8151 * IPython notebook
8152 *
8152 *
8153 */
8153 */
8154 /* CSS font colors for translated ANSI colors. */
8154 /* CSS font colors for translated ANSI colors. */
8155 .ansibold {
8155 .ansibold {
8156 font-weight: bold;
8156 font-weight: bold;
8157 }
8157 }
8158 /* use dark versions for foreground, to improve visibility */
8158 /* use dark versions for foreground, to improve visibility */
8159 .ansiblack {
8159 .ansiblack {
8160 color: black;
8160 color: black;
8161 }
8161 }
8162 .ansired {
8162 .ansired {
8163 color: darkred;
8163 color: darkred;
8164 }
8164 }
8165 .ansigreen {
8165 .ansigreen {
8166 color: darkgreen;
8166 color: darkgreen;
8167 }
8167 }
8168 .ansiyellow {
8168 .ansiyellow {
8169 color: #c4a000;
8169 color: #c4a000;
8170 }
8170 }
8171 .ansiblue {
8171 .ansiblue {
8172 color: darkblue;
8172 color: darkblue;
8173 }
8173 }
8174 .ansipurple {
8174 .ansipurple {
8175 color: darkviolet;
8175 color: darkviolet;
8176 }
8176 }
8177 .ansicyan {
8177 .ansicyan {
8178 color: steelblue;
8178 color: steelblue;
8179 }
8179 }
8180 .ansigray {
8180 .ansigray {
8181 color: gray;
8181 color: gray;
8182 }
8182 }
8183 /* and light for background, for the same reason */
8183 /* and light for background, for the same reason */
8184 .ansibgblack {
8184 .ansibgblack {
8185 background-color: black;
8185 background-color: black;
8186 }
8186 }
8187 .ansibgred {
8187 .ansibgred {
8188 background-color: red;
8188 background-color: red;
8189 }
8189 }
8190 .ansibggreen {
8190 .ansibggreen {
8191 background-color: green;
8191 background-color: green;
8192 }
8192 }
8193 .ansibgyellow {
8193 .ansibgyellow {
8194 background-color: yellow;
8194 background-color: yellow;
8195 }
8195 }
8196 .ansibgblue {
8196 .ansibgblue {
8197 background-color: blue;
8197 background-color: blue;
8198 }
8198 }
8199 .ansibgpurple {
8199 .ansibgpurple {
8200 background-color: magenta;
8200 background-color: magenta;
8201 }
8201 }
8202 .ansibgcyan {
8202 .ansibgcyan {
8203 background-color: cyan;
8203 background-color: cyan;
8204 }
8204 }
8205 .ansibggray {
8205 .ansibggray {
8206 background-color: gray;
8206 background-color: gray;
8207 }
8207 }
8208 div.cell {
8208 div.cell {
8209 border: 1px solid transparent;
8209 border: 1px solid transparent;
8210 /* Old browsers */
8210 /* Old browsers */
8211 display: -webkit-box;
8211 display: -webkit-box;
8212 -webkit-box-orient: vertical;
8212 -webkit-box-orient: vertical;
8213 -webkit-box-align: stretch;
8213 -webkit-box-align: stretch;
8214 display: -moz-box;
8214 display: -moz-box;
8215 -moz-box-orient: vertical;
8215 -moz-box-orient: vertical;
8216 -moz-box-align: stretch;
8216 -moz-box-align: stretch;
8217 display: box;
8217 display: box;
8218 box-orient: vertical;
8218 box-orient: vertical;
8219 box-align: stretch;
8219 box-align: stretch;
8220 /* Modern browsers */
8220 /* Modern browsers */
8221 display: flex;
8221 display: flex;
8222 flex-direction: column;
8222 flex-direction: column;
8223 align-items: stretch;
8223 align-items: stretch;
8224 border-radius: 4px;
8224 border-radius: 4px;
8225 box-sizing: border-box;
8225 box-sizing: border-box;
8226 -moz-box-sizing: border-box;
8226 -moz-box-sizing: border-box;
8227 -webkit-box-sizing: border-box;
8227 -webkit-box-sizing: border-box;
8228 border-width: thin;
8228 border-width: thin;
8229 border-style: solid;
8229 border-style: solid;
8230 width: 100%;
8230 width: 100%;
8231 padding: 5px 5px 5px 0px;
8231 padding: 5px 5px 5px 0px;
8232 /* This acts as a spacer between cells, that is outside the border */
8232 /* This acts as a spacer between cells, that is outside the border */
8233 margin: 0px;
8233 margin: 0px;
8234 outline: none;
8234 outline: none;
8235 }
8235 }
8236 div.cell.selected {
8236 div.cell.selected {
8237 border-color: #ababab;
8237 border-color: #ababab;
8238 }
8238 }
8239 div.cell.edit_mode {
8239 div.cell.edit_mode {
8240 border-color: green;
8240 border-color: green;
8241 }
8241 }
8242 div.prompt {
8242 div.prompt {
8243 /* This needs to be wide enough for 3 digit prompt numbers: In[100]: */
8243 /* This needs to be wide enough for 3 digit prompt numbers: In[100]: */
8244 min-width: 15ex;
8244 min-width: 15ex;
8245 /* This padding is tuned to match the padding on the CodeMirror editor. */
8245 /* This padding is tuned to match the padding on the CodeMirror editor. */
8246 padding: 0.4em;
8246 padding: 0.4em;
8247 margin: 0px;
8247 margin: 0px;
8248 font-family: monospace;
8248 font-family: monospace;
8249 text-align: right;
8249 text-align: right;
8250 /* This has to match that of the the CodeMirror class line-height below */
8250 /* This has to match that of the the CodeMirror class line-height below */
8251 line-height: 1.21429em;
8251 line-height: 1.21429em;
8252 }
8252 }
8253 @media (max-width: 480px) {
8253 @media (max-width: 480px) {
8254 div.prompt {
8254 div.prompt {
8255 text-align: left;
8255 text-align: left;
8256 }
8256 }
8257 }
8257 }
8258 div.inner_cell {
8258 div.inner_cell {
8259 /* Old browsers */
8259 /* Old browsers */
8260 display: -webkit-box;
8260 display: -webkit-box;
8261 -webkit-box-orient: vertical;
8261 -webkit-box-orient: vertical;
8262 -webkit-box-align: stretch;
8262 -webkit-box-align: stretch;
8263 display: -moz-box;
8263 display: -moz-box;
8264 -moz-box-orient: vertical;
8264 -moz-box-orient: vertical;
8265 -moz-box-align: stretch;
8265 -moz-box-align: stretch;
8266 display: box;
8266 display: box;
8267 box-orient: vertical;
8267 box-orient: vertical;
8268 box-align: stretch;
8268 box-align: stretch;
8269 /* Modern browsers */
8269 /* Modern browsers */
8270 display: flex;
8270 display: flex;
8271 flex-direction: column;
8271 flex-direction: column;
8272 align-items: stretch;
8272 align-items: stretch;
8273 /* Old browsers */
8273 /* Old browsers */
8274 -webkit-box-flex: 1;
8274 -webkit-box-flex: 1;
8275 -moz-box-flex: 1;
8275 -moz-box-flex: 1;
8276 box-flex: 1;
8276 box-flex: 1;
8277 /* Modern browsers */
8277 /* Modern browsers */
8278 flex: 1;
8278 flex: 1;
8279 }
8279 }
8280 /* input_area and input_prompt must match in top border and margin for alignment */
8280 /* input_area and input_prompt must match in top border and margin for alignment */
8281 div.input_area {
8281 div.input_area {
8282 border: 1px solid #cfcfcf;
8282 border: 1px solid #cfcfcf;
8283 border-radius: 4px;
8283 border-radius: 4px;
8284 background: #f7f7f7;
8284 background: #f7f7f7;
8285 line-height: 1.21429em;
8285 line-height: 1.21429em;
8286 }
8286 }
8287 /* This is needed so that empty prompt areas can collapse to zero height when there
8287 /* This is needed so that empty prompt areas can collapse to zero height when there
8288 is no content in the output_subarea and the prompt. The main purpose of this is
8288 is no content in the output_subarea and the prompt. The main purpose of this is
8289 to make sure that empty JavaScript output_subareas have no height. */
8289 to make sure that empty JavaScript output_subareas have no height. */
8290 div.prompt:empty {
8290 div.prompt:empty {
8291 padding-top: 0;
8291 padding-top: 0;
8292 padding-bottom: 0;
8292 padding-bottom: 0;
8293 }
8293 }
8294 div.unrecognized_cell {
8295 padding: 5px 5px 5px 0px;
8296 /* Old browsers */
8297 display: -webkit-box;
8298 -webkit-box-orient: horizontal;
8299 -webkit-box-align: stretch;
8300 display: -moz-box;
8301 -moz-box-orient: horizontal;
8302 -moz-box-align: stretch;
8303 display: box;
8304 box-orient: horizontal;
8305 box-align: stretch;
8306 /* Modern browsers */
8307 display: flex;
8308 flex-direction: row;
8309 align-items: stretch;
8310 }
8311 div.unrecognized_cell .inner_cell {
8312 border-radius: 4px;
8313 padding: 5px;
8314 font-weight: bold;
8315 color: red;
8316 border: 1px solid #cfcfcf;
8317 background: #eaeaea;
8318 }
8319 div.unrecognized_cell .inner_cell a {
8320 color: inherit;
8321 text-decoration: none;
8322 }
8323 div.unrecognized_cell .inner_cell a:hover {
8324 color: inherit;
8325 text-decoration: none;
8326 }
8327 @media (max-width: 480px) {
8328 div.unrecognized_cell > div.prompt {
8329 display: none;
8330 }
8331 }
8294 /* any special styling for code cells that are currently running goes here */
8332 /* any special styling for code cells that are currently running goes here */
8295 div.input {
8333 div.input {
8296 page-break-inside: avoid;
8334 page-break-inside: avoid;
8297 /* Old browsers */
8335 /* Old browsers */
8298 display: -webkit-box;
8336 display: -webkit-box;
8299 -webkit-box-orient: horizontal;
8337 -webkit-box-orient: horizontal;
8300 -webkit-box-align: stretch;
8338 -webkit-box-align: stretch;
8301 display: -moz-box;
8339 display: -moz-box;
8302 -moz-box-orient: horizontal;
8340 -moz-box-orient: horizontal;
8303 -moz-box-align: stretch;
8341 -moz-box-align: stretch;
8304 display: box;
8342 display: box;
8305 box-orient: horizontal;
8343 box-orient: horizontal;
8306 box-align: stretch;
8344 box-align: stretch;
8307 /* Modern browsers */
8345 /* Modern browsers */
8308 display: flex;
8346 display: flex;
8309 flex-direction: row;
8347 flex-direction: row;
8310 align-items: stretch;
8348 align-items: stretch;
8311 }
8349 }
8312 @media (max-width: 480px) {
8350 @media (max-width: 480px) {
8313 div.input {
8351 div.input {
8314 /* Old browsers */
8352 /* Old browsers */
8315 display: -webkit-box;
8353 display: -webkit-box;
8316 -webkit-box-orient: vertical;
8354 -webkit-box-orient: vertical;
8317 -webkit-box-align: stretch;
8355 -webkit-box-align: stretch;
8318 display: -moz-box;
8356 display: -moz-box;
8319 -moz-box-orient: vertical;
8357 -moz-box-orient: vertical;
8320 -moz-box-align: stretch;
8358 -moz-box-align: stretch;
8321 display: box;
8359 display: box;
8322 box-orient: vertical;
8360 box-orient: vertical;
8323 box-align: stretch;
8361 box-align: stretch;
8324 /* Modern browsers */
8362 /* Modern browsers */
8325 display: flex;
8363 display: flex;
8326 flex-direction: column;
8364 flex-direction: column;
8327 align-items: stretch;
8365 align-items: stretch;
8328 }
8366 }
8329 }
8367 }
8330 /* input_area and input_prompt must match in top border and margin for alignment */
8368 /* input_area and input_prompt must match in top border and margin for alignment */
8331 div.input_prompt {
8369 div.input_prompt {
8332 color: #000080;
8370 color: #000080;
8333 border-top: 1px solid transparent;
8371 border-top: 1px solid transparent;
8334 }
8372 }
8335 div.input_area > div.highlight {
8373 div.input_area > div.highlight {
8336 margin: 0.4em;
8374 margin: 0.4em;
8337 border: none;
8375 border: none;
8338 padding: 0px;
8376 padding: 0px;
8339 background-color: transparent;
8377 background-color: transparent;
8340 }
8378 }
8341 div.input_area > div.highlight > pre {
8379 div.input_area > div.highlight > pre {
8342 margin: 0px;
8380 margin: 0px;
8343 border: none;
8381 border: none;
8344 padding: 0px;
8382 padding: 0px;
8345 background-color: transparent;
8383 background-color: transparent;
8346 }
8384 }
8347 /* The following gets added to the <head> if it is detected that the user has a
8385 /* The following gets added to the <head> if it is detected that the user has a
8348 * monospace font with inconsistent normal/bold/italic height. See
8386 * monospace font with inconsistent normal/bold/italic height. See
8349 * notebookmain.js. Such fonts will have keywords vertically offset with
8387 * notebookmain.js. Such fonts will have keywords vertically offset with
8350 * respect to the rest of the text. The user should select a better font.
8388 * respect to the rest of the text. The user should select a better font.
8351 * See: https://github.com/ipython/ipython/issues/1503
8389 * See: https://github.com/ipython/ipython/issues/1503
8352 *
8390 *
8353 * .CodeMirror span {
8391 * .CodeMirror span {
8354 * vertical-align: bottom;
8392 * vertical-align: bottom;
8355 * }
8393 * }
8356 */
8394 */
8357 .CodeMirror {
8395 .CodeMirror {
8358 line-height: 1.21429em;
8396 line-height: 1.21429em;
8359 /* Changed from 1em to our global default */
8397 /* Changed from 1em to our global default */
8360 height: auto;
8398 height: auto;
8361 /* Changed to auto to autogrow */
8399 /* Changed to auto to autogrow */
8362 background: none;
8400 background: none;
8363 /* Changed from white to allow our bg to show through */
8401 /* Changed from white to allow our bg to show through */
8364 }
8402 }
8365 .CodeMirror-scroll {
8403 .CodeMirror-scroll {
8366 /* The CodeMirror docs are a bit fuzzy on if overflow-y should be hidden or visible.*/
8404 /* The CodeMirror docs are a bit fuzzy on if overflow-y should be hidden or visible.*/
8367 /* We have found that if it is visible, vertical scrollbars appear with font size changes.*/
8405 /* We have found that if it is visible, vertical scrollbars appear with font size changes.*/
8368 overflow-y: hidden;
8406 overflow-y: hidden;
8369 overflow-x: auto;
8407 overflow-x: auto;
8370 }
8408 }
8371 .CodeMirror-lines {
8409 .CodeMirror-lines {
8372 /* In CM2, this used to be 0.4em, but in CM3 it went to 4px. We need the em value because */
8410 /* In CM2, this used to be 0.4em, but in CM3 it went to 4px. We need the em value because */
8373 /* we have set a different line-height and want this to scale with that. */
8411 /* we have set a different line-height and want this to scale with that. */
8374 padding: 0.4em;
8412 padding: 0.4em;
8375 }
8413 }
8376 .CodeMirror-linenumber {
8414 .CodeMirror-linenumber {
8377 padding: 0 8px 0 4px;
8415 padding: 0 8px 0 4px;
8378 }
8416 }
8379 .CodeMirror-gutters {
8417 .CodeMirror-gutters {
8380 border-bottom-left-radius: 4px;
8418 border-bottom-left-radius: 4px;
8381 border-top-left-radius: 4px;
8419 border-top-left-radius: 4px;
8382 }
8420 }
8383 .CodeMirror pre {
8421 .CodeMirror pre {
8384 /* In CM3 this went to 4px from 0 in CM2. We need the 0 value because of how we size */
8422 /* In CM3 this went to 4px from 0 in CM2. We need the 0 value because of how we size */
8385 /* .CodeMirror-lines */
8423 /* .CodeMirror-lines */
8386 padding: 0;
8424 padding: 0;
8387 border: 0;
8425 border: 0;
8388 border-radius: 0;
8426 border-radius: 0;
8389 }
8427 }
8390 .CodeMirror-vscrollbar,
8428 .CodeMirror-vscrollbar,
8391 .CodeMirror-hscrollbar {
8429 .CodeMirror-hscrollbar {
8392 display: none !important;
8430 display: none !important;
8393 }
8431 }
8394 /*
8432 /*
8395
8433
8396 Original style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>
8434 Original style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>
8397 Adapted from GitHub theme
8435 Adapted from GitHub theme
8398
8436
8399 */
8437 */
8400 pre code {
8438 pre code {
8401 display: block;
8439 display: block;
8402 padding: 0.5em;
8440 padding: 0.5em;
8403 }
8441 }
8404 .highlight-base,
8442 .highlight-base,
8405 pre code,
8443 pre code,
8406 pre .subst,
8444 pre .subst,
8407 pre .tag .title,
8445 pre .tag .title,
8408 pre .lisp .title,
8446 pre .lisp .title,
8409 pre .clojure .built_in,
8447 pre .clojure .built_in,
8410 pre .nginx .title {
8448 pre .nginx .title {
8411 color: black;
8449 color: black;
8412 }
8450 }
8413 .highlight-string,
8451 .highlight-string,
8414 pre .string,
8452 pre .string,
8415 pre .constant,
8453 pre .constant,
8416 pre .parent,
8454 pre .parent,
8417 pre .tag .value,
8455 pre .tag .value,
8418 pre .rules .value,
8456 pre .rules .value,
8419 pre .rules .value .number,
8457 pre .rules .value .number,
8420 pre .preprocessor,
8458 pre .preprocessor,
8421 pre .ruby .symbol,
8459 pre .ruby .symbol,
8422 pre .ruby .symbol .string,
8460 pre .ruby .symbol .string,
8423 pre .aggregate,
8461 pre .aggregate,
8424 pre .template_tag,
8462 pre .template_tag,
8425 pre .django .variable,
8463 pre .django .variable,
8426 pre .smalltalk .class,
8464 pre .smalltalk .class,
8427 pre .addition,
8465 pre .addition,
8428 pre .flow,
8466 pre .flow,
8429 pre .stream,
8467 pre .stream,
8430 pre .bash .variable,
8468 pre .bash .variable,
8431 pre .apache .tag,
8469 pre .apache .tag,
8432 pre .apache .cbracket,
8470 pre .apache .cbracket,
8433 pre .tex .command,
8471 pre .tex .command,
8434 pre .tex .special,
8472 pre .tex .special,
8435 pre .erlang_repl .function_or_atom,
8473 pre .erlang_repl .function_or_atom,
8436 pre .markdown .header {
8474 pre .markdown .header {
8437 color: #BA2121;
8475 color: #BA2121;
8438 }
8476 }
8439 .highlight-comment,
8477 .highlight-comment,
8440 pre .comment,
8478 pre .comment,
8441 pre .annotation,
8479 pre .annotation,
8442 pre .template_comment,
8480 pre .template_comment,
8443 pre .diff .header,
8481 pre .diff .header,
8444 pre .chunk,
8482 pre .chunk,
8445 pre .markdown .blockquote {
8483 pre .markdown .blockquote {
8446 color: #408080;
8484 color: #408080;
8447 font-style: italic;
8485 font-style: italic;
8448 }
8486 }
8449 .highlight-number,
8487 .highlight-number,
8450 pre .number,
8488 pre .number,
8451 pre .date,
8489 pre .date,
8452 pre .regexp,
8490 pre .regexp,
8453 pre .literal,
8491 pre .literal,
8454 pre .smalltalk .symbol,
8492 pre .smalltalk .symbol,
8455 pre .smalltalk .char,
8493 pre .smalltalk .char,
8456 pre .go .constant,
8494 pre .go .constant,
8457 pre .change,
8495 pre .change,
8458 pre .markdown .bullet,
8496 pre .markdown .bullet,
8459 pre .markdown .link_url {
8497 pre .markdown .link_url {
8460 color: #080;
8498 color: #080;
8461 }
8499 }
8462 pre .label,
8500 pre .label,
8463 pre .javadoc,
8501 pre .javadoc,
8464 pre .ruby .string,
8502 pre .ruby .string,
8465 pre .decorator,
8503 pre .decorator,
8466 pre .filter .argument,
8504 pre .filter .argument,
8467 pre .localvars,
8505 pre .localvars,
8468 pre .array,
8506 pre .array,
8469 pre .attr_selector,
8507 pre .attr_selector,
8470 pre .important,
8508 pre .important,
8471 pre .pseudo,
8509 pre .pseudo,
8472 pre .pi,
8510 pre .pi,
8473 pre .doctype,
8511 pre .doctype,
8474 pre .deletion,
8512 pre .deletion,
8475 pre .envvar,
8513 pre .envvar,
8476 pre .shebang,
8514 pre .shebang,
8477 pre .apache .sqbracket,
8515 pre .apache .sqbracket,
8478 pre .nginx .built_in,
8516 pre .nginx .built_in,
8479 pre .tex .formula,
8517 pre .tex .formula,
8480 pre .erlang_repl .reserved,
8518 pre .erlang_repl .reserved,
8481 pre .prompt,
8519 pre .prompt,
8482 pre .markdown .link_label,
8520 pre .markdown .link_label,
8483 pre .vhdl .attribute,
8521 pre .vhdl .attribute,
8484 pre .clojure .attribute,
8522 pre .clojure .attribute,
8485 pre .coffeescript .property {
8523 pre .coffeescript .property {
8486 color: #8888ff;
8524 color: #8888ff;
8487 }
8525 }
8488 .highlight-keyword,
8526 .highlight-keyword,
8489 pre .keyword,
8527 pre .keyword,
8490 pre .id,
8528 pre .id,
8491 pre .phpdoc,
8529 pre .phpdoc,
8492 pre .aggregate,
8530 pre .aggregate,
8493 pre .css .tag,
8531 pre .css .tag,
8494 pre .javadoctag,
8532 pre .javadoctag,
8495 pre .phpdoc,
8533 pre .phpdoc,
8496 pre .yardoctag,
8534 pre .yardoctag,
8497 pre .smalltalk .class,
8535 pre .smalltalk .class,
8498 pre .winutils,
8536 pre .winutils,
8499 pre .bash .variable,
8537 pre .bash .variable,
8500 pre .apache .tag,
8538 pre .apache .tag,
8501 pre .go .typename,
8539 pre .go .typename,
8502 pre .tex .command,
8540 pre .tex .command,
8503 pre .markdown .strong,
8541 pre .markdown .strong,
8504 pre .request,
8542 pre .request,
8505 pre .status {
8543 pre .status {
8506 color: #008000;
8544 color: #008000;
8507 font-weight: bold;
8545 font-weight: bold;
8508 }
8546 }
8509 .highlight-builtin,
8547 .highlight-builtin,
8510 pre .built_in {
8548 pre .built_in {
8511 color: #008000;
8549 color: #008000;
8512 }
8550 }
8513 pre .markdown .emphasis {
8551 pre .markdown .emphasis {
8514 font-style: italic;
8552 font-style: italic;
8515 }
8553 }
8516 pre .nginx .built_in {
8554 pre .nginx .built_in {
8517 font-weight: normal;
8555 font-weight: normal;
8518 }
8556 }
8519 pre .coffeescript .javascript,
8557 pre .coffeescript .javascript,
8520 pre .javascript .xml,
8558 pre .javascript .xml,
8521 pre .tex .formula,
8559 pre .tex .formula,
8522 pre .xml .javascript,
8560 pre .xml .javascript,
8523 pre .xml .vbscript,
8561 pre .xml .vbscript,
8524 pre .xml .css,
8562 pre .xml .css,
8525 pre .xml .cdata {
8563 pre .xml .cdata {
8526 opacity: 0.5;
8564 opacity: 0.5;
8527 }
8565 }
8528 /* apply the same style to codemirror */
8566 /* apply the same style to codemirror */
8529 .cm-s-ipython span.cm-variable {
8567 .cm-s-ipython span.cm-variable {
8530 color: black;
8568 color: black;
8531 }
8569 }
8532 .cm-s-ipython span.cm-keyword {
8570 .cm-s-ipython span.cm-keyword {
8533 color: #008000;
8571 color: #008000;
8534 font-weight: bold;
8572 font-weight: bold;
8535 }
8573 }
8536 .cm-s-ipython span.cm-number {
8574 .cm-s-ipython span.cm-number {
8537 color: #080;
8575 color: #080;
8538 }
8576 }
8539 .cm-s-ipython span.cm-comment {
8577 .cm-s-ipython span.cm-comment {
8540 color: #408080;
8578 color: #408080;
8541 font-style: italic;
8579 font-style: italic;
8542 }
8580 }
8543 .cm-s-ipython span.cm-string {
8581 .cm-s-ipython span.cm-string {
8544 color: #BA2121;
8582 color: #BA2121;
8545 }
8583 }
8546 .cm-s-ipython span.cm-builtin {
8584 .cm-s-ipython span.cm-builtin {
8547 color: #008000;
8585 color: #008000;
8548 }
8586 }
8549 .cm-s-ipython span.cm-error {
8587 .cm-s-ipython span.cm-error {
8550 color: #f00;
8588 color: #f00;
8551 }
8589 }
8552 .cm-s-ipython span.cm-operator {
8590 .cm-s-ipython span.cm-operator {
8553 color: #AA22FF;
8591 color: #AA22FF;
8554 font-weight: bold;
8592 font-weight: bold;
8555 }
8593 }
8556 .cm-s-ipython span.cm-meta {
8594 .cm-s-ipython span.cm-meta {
8557 color: #AA22FF;
8595 color: #AA22FF;
8558 }
8596 }
8559 .cm-s-ipython span.cm-tab {
8597 .cm-s-ipython span.cm-tab {
8560 background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);
8598 background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);
8561 background-position: right;
8599 background-position: right;
8562 background-repeat: no-repeat;
8600 background-repeat: no-repeat;
8563 }
8601 }
8564 div.output_wrapper {
8602 div.output_wrapper {
8565 /* this position must be relative to enable descendents to be absolute within it */
8603 /* this position must be relative to enable descendents to be absolute within it */
8566 position: relative;
8604 position: relative;
8567 /* Old browsers */
8605 /* Old browsers */
8568 display: -webkit-box;
8606 display: -webkit-box;
8569 -webkit-box-orient: vertical;
8607 -webkit-box-orient: vertical;
8570 -webkit-box-align: stretch;
8608 -webkit-box-align: stretch;
8571 display: -moz-box;
8609 display: -moz-box;
8572 -moz-box-orient: vertical;
8610 -moz-box-orient: vertical;
8573 -moz-box-align: stretch;
8611 -moz-box-align: stretch;
8574 display: box;
8612 display: box;
8575 box-orient: vertical;
8613 box-orient: vertical;
8576 box-align: stretch;
8614 box-align: stretch;
8577 /* Modern browsers */
8615 /* Modern browsers */
8578 display: flex;
8616 display: flex;
8579 flex-direction: column;
8617 flex-direction: column;
8580 align-items: stretch;
8618 align-items: stretch;
8581 }
8619 }
8582 /* class for the output area when it should be height-limited */
8620 /* class for the output area when it should be height-limited */
8583 div.output_scroll {
8621 div.output_scroll {
8584 /* ideally, this would be max-height, but FF barfs all over that */
8622 /* ideally, this would be max-height, but FF barfs all over that */
8585 height: 24em;
8623 height: 24em;
8586 /* FF needs this *and the wrapper* to specify full width, or it will shrinkwrap */
8624 /* FF needs this *and the wrapper* to specify full width, or it will shrinkwrap */
8587 width: 100%;
8625 width: 100%;
8588 overflow: auto;
8626 overflow: auto;
8589 border-radius: 4px;
8627 border-radius: 4px;
8590 -webkit-box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
8628 -webkit-box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
8591 box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
8629 box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
8592 display: block;
8630 display: block;
8593 }
8631 }
8594 /* output div while it is collapsed */
8632 /* output div while it is collapsed */
8595 div.output_collapsed {
8633 div.output_collapsed {
8596 margin: 0px;
8634 margin: 0px;
8597 padding: 0px;
8635 padding: 0px;
8598 /* Old browsers */
8636 /* Old browsers */
8599 display: -webkit-box;
8637 display: -webkit-box;
8600 -webkit-box-orient: vertical;
8638 -webkit-box-orient: vertical;
8601 -webkit-box-align: stretch;
8639 -webkit-box-align: stretch;
8602 display: -moz-box;
8640 display: -moz-box;
8603 -moz-box-orient: vertical;
8641 -moz-box-orient: vertical;
8604 -moz-box-align: stretch;
8642 -moz-box-align: stretch;
8605 display: box;
8643 display: box;
8606 box-orient: vertical;
8644 box-orient: vertical;
8607 box-align: stretch;
8645 box-align: stretch;
8608 /* Modern browsers */
8646 /* Modern browsers */
8609 display: flex;
8647 display: flex;
8610 flex-direction: column;
8648 flex-direction: column;
8611 align-items: stretch;
8649 align-items: stretch;
8612 }
8650 }
8613 div.out_prompt_overlay {
8651 div.out_prompt_overlay {
8614 height: 100%;
8652 height: 100%;
8615 padding: 0px 0.4em;
8653 padding: 0px 0.4em;
8616 position: absolute;
8654 position: absolute;
8617 border-radius: 4px;
8655 border-radius: 4px;
8618 }
8656 }
8619 div.out_prompt_overlay:hover {
8657 div.out_prompt_overlay:hover {
8620 /* use inner shadow to get border that is computed the same on WebKit/FF */
8658 /* use inner shadow to get border that is computed the same on WebKit/FF */
8621 -webkit-box-shadow: inset 0 0 1px #000000;
8659 -webkit-box-shadow: inset 0 0 1px #000000;
8622 box-shadow: inset 0 0 1px #000000;
8660 box-shadow: inset 0 0 1px #000000;
8623 background: rgba(240, 240, 240, 0.5);
8661 background: rgba(240, 240, 240, 0.5);
8624 }
8662 }
8625 div.output_prompt {
8663 div.output_prompt {
8626 color: #8b0000;
8664 color: #8b0000;
8627 }
8665 }
8628 /* This class is the outer container of all output sections. */
8666 /* This class is the outer container of all output sections. */
8629 div.output_area {
8667 div.output_area {
8630 padding: 0px;
8668 padding: 0px;
8631 page-break-inside: avoid;
8669 page-break-inside: avoid;
8632 /* Old browsers */
8670 /* Old browsers */
8633 display: -webkit-box;
8671 display: -webkit-box;
8634 -webkit-box-orient: horizontal;
8672 -webkit-box-orient: horizontal;
8635 -webkit-box-align: stretch;
8673 -webkit-box-align: stretch;
8636 display: -moz-box;
8674 display: -moz-box;
8637 -moz-box-orient: horizontal;
8675 -moz-box-orient: horizontal;
8638 -moz-box-align: stretch;
8676 -moz-box-align: stretch;
8639 display: box;
8677 display: box;
8640 box-orient: horizontal;
8678 box-orient: horizontal;
8641 box-align: stretch;
8679 box-align: stretch;
8642 /* Modern browsers */
8680 /* Modern browsers */
8643 display: flex;
8681 display: flex;
8644 flex-direction: row;
8682 flex-direction: row;
8645 align-items: stretch;
8683 align-items: stretch;
8646 }
8684 }
8647 div.output_area .MathJax_Display {
8685 div.output_area .MathJax_Display {
8648 text-align: left !important;
8686 text-align: left !important;
8649 }
8687 }
8650 div.output_area .rendered_html table {
8688 div.output_area .rendered_html table {
8651 margin-left: 0;
8689 margin-left: 0;
8652 margin-right: 0;
8690 margin-right: 0;
8653 }
8691 }
8654 div.output_area .rendered_html img {
8692 div.output_area .rendered_html img {
8655 margin-left: 0;
8693 margin-left: 0;
8656 margin-right: 0;
8694 margin-right: 0;
8657 }
8695 }
8658 /* This is needed to protect the pre formating from global settings such
8696 /* This is needed to protect the pre formating from global settings such
8659 as that of bootstrap */
8697 as that of bootstrap */
8660 .output {
8698 .output {
8661 /* Old browsers */
8699 /* Old browsers */
8662 display: -webkit-box;
8700 display: -webkit-box;
8663 -webkit-box-orient: vertical;
8701 -webkit-box-orient: vertical;
8664 -webkit-box-align: stretch;
8702 -webkit-box-align: stretch;
8665 display: -moz-box;
8703 display: -moz-box;
8666 -moz-box-orient: vertical;
8704 -moz-box-orient: vertical;
8667 -moz-box-align: stretch;
8705 -moz-box-align: stretch;
8668 display: box;
8706 display: box;
8669 box-orient: vertical;
8707 box-orient: vertical;
8670 box-align: stretch;
8708 box-align: stretch;
8671 /* Modern browsers */
8709 /* Modern browsers */
8672 display: flex;
8710 display: flex;
8673 flex-direction: column;
8711 flex-direction: column;
8674 align-items: stretch;
8712 align-items: stretch;
8675 }
8713 }
8676 @media (max-width: 480px) {
8714 @media (max-width: 480px) {
8677 div.output_area {
8715 div.output_area {
8678 /* Old browsers */
8716 /* Old browsers */
8679 display: -webkit-box;
8717 display: -webkit-box;
8680 -webkit-box-orient: vertical;
8718 -webkit-box-orient: vertical;
8681 -webkit-box-align: stretch;
8719 -webkit-box-align: stretch;
8682 display: -moz-box;
8720 display: -moz-box;
8683 -moz-box-orient: vertical;
8721 -moz-box-orient: vertical;
8684 -moz-box-align: stretch;
8722 -moz-box-align: stretch;
8685 display: box;
8723 display: box;
8686 box-orient: vertical;
8724 box-orient: vertical;
8687 box-align: stretch;
8725 box-align: stretch;
8688 /* Modern browsers */
8726 /* Modern browsers */
8689 display: flex;
8727 display: flex;
8690 flex-direction: column;
8728 flex-direction: column;
8691 align-items: stretch;
8729 align-items: stretch;
8692 }
8730 }
8693 }
8731 }
8694 div.output_area pre {
8732 div.output_area pre {
8695 margin: 0;
8733 margin: 0;
8696 padding: 0;
8734 padding: 0;
8697 border: 0;
8735 border: 0;
8698 vertical-align: baseline;
8736 vertical-align: baseline;
8699 color: #000000;
8737 color: #000000;
8700 background-color: transparent;
8738 background-color: transparent;
8701 border-radius: 0;
8739 border-radius: 0;
8702 }
8740 }
8703 /* This class is for the output subarea inside the output_area and after
8741 /* This class is for the output subarea inside the output_area and after
8704 the prompt div. */
8742 the prompt div. */
8705 div.output_subarea {
8743 div.output_subarea {
8706 padding: 0.4em 0.4em 0em 0.4em;
8744 padding: 0.4em 0.4em 0em 0.4em;
8707 /* Old browsers */
8745 /* Old browsers */
8708 -webkit-box-flex: 1;
8746 -webkit-box-flex: 1;
8709 -moz-box-flex: 1;
8747 -moz-box-flex: 1;
8710 box-flex: 1;
8748 box-flex: 1;
8711 /* Modern browsers */
8749 /* Modern browsers */
8712 flex: 1;
8750 flex: 1;
8713 }
8751 }
8714 /* The rest of the output_* classes are for special styling of the different
8752 /* The rest of the output_* classes are for special styling of the different
8715 output types */
8753 output types */
8716 /* all text output has this class: */
8754 /* all text output has this class: */
8717 div.output_text {
8755 div.output_text {
8718 text-align: left;
8756 text-align: left;
8719 color: #000000;
8757 color: #000000;
8720 /* This has to match that of the the CodeMirror class line-height below */
8758 /* This has to match that of the the CodeMirror class line-height below */
8721 line-height: 1.21429em;
8759 line-height: 1.21429em;
8722 }
8760 }
8723 /* stdout/stderr are 'text' as well as 'stream', but execute_result/error are *not* streams */
8761 /* stdout/stderr are 'text' as well as 'stream', but execute_result/error are *not* streams */
8724 div.output_stderr {
8762 div.output_stderr {
8725 background: #fdd;
8763 background: #fdd;
8726 /* very light red background for stderr */
8764 /* very light red background for stderr */
8727 }
8765 }
8728 div.output_latex {
8766 div.output_latex {
8729 text-align: left;
8767 text-align: left;
8730 }
8768 }
8731 /* Empty output_javascript divs should have no height */
8769 /* Empty output_javascript divs should have no height */
8732 div.output_javascript:empty {
8770 div.output_javascript:empty {
8733 padding: 0;
8771 padding: 0;
8734 }
8772 }
8735 .js-error {
8773 .js-error {
8736 color: darkred;
8774 color: darkred;
8737 }
8775 }
8738 /* raw_input styles */
8776 /* raw_input styles */
8739 div.raw_input_container {
8777 div.raw_input_container {
8740 font-family: monospace;
8778 font-family: monospace;
8741 padding-top: 5px;
8779 padding-top: 5px;
8742 }
8780 }
8743 span.raw_input_prompt {
8781 span.raw_input_prompt {
8744 /* nothing needed here */
8782 /* nothing needed here */
8745 }
8783 }
8746 input.raw_input {
8784 input.raw_input {
8747 font-family: inherit;
8785 font-family: inherit;
8748 font-size: inherit;
8786 font-size: inherit;
8749 color: inherit;
8787 color: inherit;
8750 width: auto;
8788 width: auto;
8751 /* make sure input baseline aligns with prompt */
8789 /* make sure input baseline aligns with prompt */
8752 vertical-align: baseline;
8790 vertical-align: baseline;
8753 /* padding + margin = 0.5em between prompt and cursor */
8791 /* padding + margin = 0.5em between prompt and cursor */
8754 padding: 0em 0.25em;
8792 padding: 0em 0.25em;
8755 margin: 0em 0.25em;
8793 margin: 0em 0.25em;
8756 }
8794 }
8757 input.raw_input:focus {
8795 input.raw_input:focus {
8758 box-shadow: none;
8796 box-shadow: none;
8759 }
8797 }
8760 p.p-space {
8798 p.p-space {
8761 margin-bottom: 10px;
8799 margin-bottom: 10px;
8762 }
8800 }
8801 div.output_unrecognized {
8802 padding: 5px;
8803 font-weight: bold;
8804 color: red;
8805 }
8806 div.output_unrecognized a {
8807 color: inherit;
8808 text-decoration: none;
8809 }
8810 div.output_unrecognized a:hover {
8811 color: inherit;
8812 text-decoration: none;
8813 }
8763 .rendered_html {
8814 .rendered_html {
8764 color: #000000;
8815 color: #000000;
8765 /* any extras will just be numbers: */
8816 /* any extras will just be numbers: */
8766 }
8817 }
8767 .rendered_html em {
8818 .rendered_html em {
8768 font-style: italic;
8819 font-style: italic;
8769 }
8820 }
8770 .rendered_html strong {
8821 .rendered_html strong {
8771 font-weight: bold;
8822 font-weight: bold;
8772 }
8823 }
8773 .rendered_html u {
8824 .rendered_html u {
8774 text-decoration: underline;
8825 text-decoration: underline;
8775 }
8826 }
8776 .rendered_html :link {
8827 .rendered_html :link {
8777 text-decoration: underline;
8828 text-decoration: underline;
8778 }
8829 }
8779 .rendered_html :visited {
8830 .rendered_html :visited {
8780 text-decoration: underline;
8831 text-decoration: underline;
8781 }
8832 }
8782 .rendered_html h1 {
8833 .rendered_html h1 {
8783 font-size: 185.7%;
8834 font-size: 185.7%;
8784 margin: 1.08em 0 0 0;
8835 margin: 1.08em 0 0 0;
8785 font-weight: bold;
8836 font-weight: bold;
8786 line-height: 1.0;
8837 line-height: 1.0;
8787 }
8838 }
8788 .rendered_html h2 {
8839 .rendered_html h2 {
8789 font-size: 157.1%;
8840 font-size: 157.1%;
8790 margin: 1.27em 0 0 0;
8841 margin: 1.27em 0 0 0;
8791 font-weight: bold;
8842 font-weight: bold;
8792 line-height: 1.0;
8843 line-height: 1.0;
8793 }
8844 }
8794 .rendered_html h3 {
8845 .rendered_html h3 {
8795 font-size: 128.6%;
8846 font-size: 128.6%;
8796 margin: 1.55em 0 0 0;
8847 margin: 1.55em 0 0 0;
8797 font-weight: bold;
8848 font-weight: bold;
8798 line-height: 1.0;
8849 line-height: 1.0;
8799 }
8850 }
8800 .rendered_html h4 {
8851 .rendered_html h4 {
8801 font-size: 100%;
8852 font-size: 100%;
8802 margin: 2em 0 0 0;
8853 margin: 2em 0 0 0;
8803 font-weight: bold;
8854 font-weight: bold;
8804 line-height: 1.0;
8855 line-height: 1.0;
8805 }
8856 }
8806 .rendered_html h5 {
8857 .rendered_html h5 {
8807 font-size: 100%;
8858 font-size: 100%;
8808 margin: 2em 0 0 0;
8859 margin: 2em 0 0 0;
8809 font-weight: bold;
8860 font-weight: bold;
8810 line-height: 1.0;
8861 line-height: 1.0;
8811 font-style: italic;
8862 font-style: italic;
8812 }
8863 }
8813 .rendered_html h6 {
8864 .rendered_html h6 {
8814 font-size: 100%;
8865 font-size: 100%;
8815 margin: 2em 0 0 0;
8866 margin: 2em 0 0 0;
8816 font-weight: bold;
8867 font-weight: bold;
8817 line-height: 1.0;
8868 line-height: 1.0;
8818 font-style: italic;
8869 font-style: italic;
8819 }
8870 }
8820 .rendered_html h1:first-child {
8871 .rendered_html h1:first-child {
8821 margin-top: 0.538em;
8872 margin-top: 0.538em;
8822 }
8873 }
8823 .rendered_html h2:first-child {
8874 .rendered_html h2:first-child {
8824 margin-top: 0.636em;
8875 margin-top: 0.636em;
8825 }
8876 }
8826 .rendered_html h3:first-child {
8877 .rendered_html h3:first-child {
8827 margin-top: 0.777em;
8878 margin-top: 0.777em;
8828 }
8879 }
8829 .rendered_html h4:first-child {
8880 .rendered_html h4:first-child {
8830 margin-top: 1em;
8881 margin-top: 1em;
8831 }
8882 }
8832 .rendered_html h5:first-child {
8883 .rendered_html h5:first-child {
8833 margin-top: 1em;
8884 margin-top: 1em;
8834 }
8885 }
8835 .rendered_html h6:first-child {
8886 .rendered_html h6:first-child {
8836 margin-top: 1em;
8887 margin-top: 1em;
8837 }
8888 }
8838 .rendered_html ul {
8889 .rendered_html ul {
8839 list-style: disc;
8890 list-style: disc;
8840 margin: 0em 2em;
8891 margin: 0em 2em;
8841 padding-left: 0px;
8892 padding-left: 0px;
8842 }
8893 }
8843 .rendered_html ul ul {
8894 .rendered_html ul ul {
8844 list-style: square;
8895 list-style: square;
8845 margin: 0em 2em;
8896 margin: 0em 2em;
8846 }
8897 }
8847 .rendered_html ul ul ul {
8898 .rendered_html ul ul ul {
8848 list-style: circle;
8899 list-style: circle;
8849 margin: 0em 2em;
8900 margin: 0em 2em;
8850 }
8901 }
8851 .rendered_html ol {
8902 .rendered_html ol {
8852 list-style: decimal;
8903 list-style: decimal;
8853 margin: 0em 2em;
8904 margin: 0em 2em;
8854 padding-left: 0px;
8905 padding-left: 0px;
8855 }
8906 }
8856 .rendered_html ol ol {
8907 .rendered_html ol ol {
8857 list-style: upper-alpha;
8908 list-style: upper-alpha;
8858 margin: 0em 2em;
8909 margin: 0em 2em;
8859 }
8910 }
8860 .rendered_html ol ol ol {
8911 .rendered_html ol ol ol {
8861 list-style: lower-alpha;
8912 list-style: lower-alpha;
8862 margin: 0em 2em;
8913 margin: 0em 2em;
8863 }
8914 }
8864 .rendered_html ol ol ol ol {
8915 .rendered_html ol ol ol ol {
8865 list-style: lower-roman;
8916 list-style: lower-roman;
8866 margin: 0em 2em;
8917 margin: 0em 2em;
8867 }
8918 }
8868 .rendered_html ol ol ol ol ol {
8919 .rendered_html ol ol ol ol ol {
8869 list-style: decimal;
8920 list-style: decimal;
8870 margin: 0em 2em;
8921 margin: 0em 2em;
8871 }
8922 }
8872 .rendered_html * + ul {
8923 .rendered_html * + ul {
8873 margin-top: 1em;
8924 margin-top: 1em;
8874 }
8925 }
8875 .rendered_html * + ol {
8926 .rendered_html * + ol {
8876 margin-top: 1em;
8927 margin-top: 1em;
8877 }
8928 }
8878 .rendered_html hr {
8929 .rendered_html hr {
8879 color: #000000;
8930 color: #000000;
8880 background-color: #000000;
8931 background-color: #000000;
8881 }
8932 }
8882 .rendered_html pre {
8933 .rendered_html pre {
8883 margin: 1em 2em;
8934 margin: 1em 2em;
8884 }
8935 }
8885 .rendered_html pre,
8936 .rendered_html pre,
8886 .rendered_html code {
8937 .rendered_html code {
8887 border: 0;
8938 border: 0;
8888 background-color: #ffffff;
8939 background-color: #ffffff;
8889 color: #000000;
8940 color: #000000;
8890 font-size: 100%;
8941 font-size: 100%;
8891 padding: 0px;
8942 padding: 0px;
8892 }
8943 }
8893 .rendered_html blockquote {
8944 .rendered_html blockquote {
8894 margin: 1em 2em;
8945 margin: 1em 2em;
8895 }
8946 }
8896 .rendered_html table {
8947 .rendered_html table {
8897 margin-left: auto;
8948 margin-left: auto;
8898 margin-right: auto;
8949 margin-right: auto;
8899 border: 1px solid #000000;
8950 border: 1px solid #000000;
8900 border-collapse: collapse;
8951 border-collapse: collapse;
8901 }
8952 }
8902 .rendered_html tr,
8953 .rendered_html tr,
8903 .rendered_html th,
8954 .rendered_html th,
8904 .rendered_html td {
8955 .rendered_html td {
8905 border: 1px solid #000000;
8956 border: 1px solid #000000;
8906 border-collapse: collapse;
8957 border-collapse: collapse;
8907 margin: 1em 2em;
8958 margin: 1em 2em;
8908 }
8959 }
8909 .rendered_html td,
8960 .rendered_html td,
8910 .rendered_html th {
8961 .rendered_html th {
8911 text-align: left;
8962 text-align: left;
8912 vertical-align: middle;
8963 vertical-align: middle;
8913 padding: 4px;
8964 padding: 4px;
8914 }
8965 }
8915 .rendered_html th {
8966 .rendered_html th {
8916 font-weight: bold;
8967 font-weight: bold;
8917 }
8968 }
8918 .rendered_html * + table {
8969 .rendered_html * + table {
8919 margin-top: 1em;
8970 margin-top: 1em;
8920 }
8971 }
8921 .rendered_html p {
8972 .rendered_html p {
8922 text-align: justify;
8973 text-align: justify;
8923 }
8974 }
8924 .rendered_html * + p {
8975 .rendered_html * + p {
8925 margin-top: 1em;
8976 margin-top: 1em;
8926 }
8977 }
8927 .rendered_html img {
8978 .rendered_html img {
8928 display: block;
8979 display: block;
8929 margin-left: auto;
8980 margin-left: auto;
8930 margin-right: auto;
8981 margin-right: auto;
8931 }
8982 }
8932 .rendered_html * + img {
8983 .rendered_html * + img {
8933 margin-top: 1em;
8984 margin-top: 1em;
8934 }
8985 }
8935 div.text_cell {
8986 div.text_cell {
8936 padding: 5px 5px 5px 0px;
8987 padding: 5px 5px 5px 0px;
8937 /* Old browsers */
8988 /* Old browsers */
8938 display: -webkit-box;
8989 display: -webkit-box;
8939 -webkit-box-orient: horizontal;
8990 -webkit-box-orient: horizontal;
8940 -webkit-box-align: stretch;
8991 -webkit-box-align: stretch;
8941 display: -moz-box;
8992 display: -moz-box;
8942 -moz-box-orient: horizontal;
8993 -moz-box-orient: horizontal;
8943 -moz-box-align: stretch;
8994 -moz-box-align: stretch;
8944 display: box;
8995 display: box;
8945 box-orient: horizontal;
8996 box-orient: horizontal;
8946 box-align: stretch;
8997 box-align: stretch;
8947 /* Modern browsers */
8998 /* Modern browsers */
8948 display: flex;
8999 display: flex;
8949 flex-direction: row;
9000 flex-direction: row;
8950 align-items: stretch;
9001 align-items: stretch;
8951 }
9002 }
8952 @media (max-width: 480px) {
9003 @media (max-width: 480px) {
8953 div.text_cell > div.prompt {
9004 div.text_cell > div.prompt {
8954 display: none;
9005 display: none;
8955 }
9006 }
8956 }
9007 }
8957 div.text_cell_render {
9008 div.text_cell_render {
8958 /*font-family: "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;*/
9009 /*font-family: "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;*/
8959 outline: none;
9010 outline: none;
8960 resize: none;
9011 resize: none;
8961 width: inherit;
9012 width: inherit;
8962 border-style: none;
9013 border-style: none;
8963 padding: 0.5em 0.5em 0.5em 0.4em;
9014 padding: 0.5em 0.5em 0.5em 0.4em;
8964 color: #000000;
9015 color: #000000;
8965 box-sizing: border-box;
9016 box-sizing: border-box;
8966 -moz-box-sizing: border-box;
9017 -moz-box-sizing: border-box;
8967 -webkit-box-sizing: border-box;
9018 -webkit-box-sizing: border-box;
8968 }
9019 }
8969 a.anchor-link:link {
9020 a.anchor-link:link {
8970 text-decoration: none;
9021 text-decoration: none;
8971 padding: 0px 20px;
9022 padding: 0px 20px;
8972 visibility: hidden;
9023 visibility: hidden;
8973 }
9024 }
8974 h1:hover .anchor-link,
9025 h1:hover .anchor-link,
8975 h2:hover .anchor-link,
9026 h2:hover .anchor-link,
8976 h3:hover .anchor-link,
9027 h3:hover .anchor-link,
8977 h4:hover .anchor-link,
9028 h4:hover .anchor-link,
8978 h5:hover .anchor-link,
9029 h5:hover .anchor-link,
8979 h6:hover .anchor-link {
9030 h6:hover .anchor-link {
8980 visibility: visible;
9031 visibility: visible;
8981 }
9032 }
8982 div.cell.text_cell.rendered {
9033 div.cell.text_cell.rendered {
8983 padding: 0px;
9034 padding: 0px;
8984 }
9035 }
8985 .text_cell.rendered .input_area {
9036 .text_cell.rendered .input_area {
8986 display: none;
9037 display: none;
8987 }
9038 }
8988 .text_cell.unrendered .text_cell_render {
9039 .text_cell.unrendered .text_cell_render {
8989 display: none;
9040 display: none;
8990 }
9041 }
8991 .cm-header-1,
9042 .cm-header-1,
8992 .cm-header-2,
9043 .cm-header-2,
8993 .cm-header-3,
9044 .cm-header-3,
8994 .cm-header-4,
9045 .cm-header-4,
8995 .cm-header-5,
9046 .cm-header-5,
8996 .cm-header-6 {
9047 .cm-header-6 {
8997 font-weight: bold;
9048 font-weight: bold;
8998 font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
9049 font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
8999 }
9050 }
9000 .cm-header-1 {
9051 .cm-header-1 {
9001 font-size: 185.7%;
9052 font-size: 185.7%;
9002 }
9053 }
9003 .cm-header-2 {
9054 .cm-header-2 {
9004 font-size: 157.1%;
9055 font-size: 157.1%;
9005 }
9056 }
9006 .cm-header-3 {
9057 .cm-header-3 {
9007 font-size: 128.6%;
9058 font-size: 128.6%;
9008 }
9059 }
9009 .cm-header-4 {
9060 .cm-header-4 {
9010 font-size: 110%;
9061 font-size: 110%;
9011 }
9062 }
9012 .cm-header-5 {
9063 .cm-header-5 {
9013 font-size: 100%;
9064 font-size: 100%;
9014 font-style: italic;
9065 font-style: italic;
9015 }
9066 }
9016 .cm-header-6 {
9067 .cm-header-6 {
9017 font-size: 100%;
9068 font-size: 100%;
9018 font-style: italic;
9069 font-style: italic;
9019 }
9070 }
9020 .widget-area {
9071 .widget-area {
9021 /*
9072 /*
9022 LESS file that styles IPython notebook widgets and the area they sit in.
9073 LESS file that styles IPython notebook widgets and the area they sit in.
9023
9074
9024 The widget area typically looks something like this:
9075 The widget area typically looks something like this:
9025 +------------------------------------------+
9076 +------------------------------------------+
9026 | widget-area |
9077 | widget-area |
9027 | +--------+---------------------------+ |
9078 | +--------+---------------------------+ |
9028 | | prompt | widget-subarea | |
9079 | | prompt | widget-subarea | |
9029 | | | +--------+ +--------+ | |
9080 | | | +--------+ +--------+ | |
9030 | | | | widget | | widget | | |
9081 | | | | widget | | widget | | |
9031 | | | +--------+ +--------+ | |
9082 | | | +--------+ +--------+ | |
9032 | +--------+---------------------------+ |
9083 | +--------+---------------------------+ |
9033 +------------------------------------------+
9084 +------------------------------------------+
9034 */
9085 */
9035 page-break-inside: avoid;
9086 page-break-inside: avoid;
9036 /* Old browsers */
9087 /* Old browsers */
9037 display: -webkit-box;
9088 display: -webkit-box;
9038 -webkit-box-orient: horizontal;
9089 -webkit-box-orient: horizontal;
9039 -webkit-box-align: stretch;
9090 -webkit-box-align: stretch;
9040 display: -moz-box;
9091 display: -moz-box;
9041 -moz-box-orient: horizontal;
9092 -moz-box-orient: horizontal;
9042 -moz-box-align: stretch;
9093 -moz-box-align: stretch;
9043 display: box;
9094 display: box;
9044 box-orient: horizontal;
9095 box-orient: horizontal;
9045 box-align: stretch;
9096 box-align: stretch;
9046 /* Modern browsers */
9097 /* Modern browsers */
9047 display: flex;
9098 display: flex;
9048 flex-direction: row;
9099 flex-direction: row;
9049 align-items: stretch;
9100 align-items: stretch;
9050 }
9101 }
9051 .widget-area .widget-subarea {
9102 .widget-area .widget-subarea {
9052 padding: 0.44em 0.4em 0.4em 1px;
9103 padding: 0.44em 0.4em 0.4em 1px;
9053 margin-left: 6px;
9104 margin-left: 6px;
9054 box-sizing: border-box;
9105 box-sizing: border-box;
9055 -moz-box-sizing: border-box;
9106 -moz-box-sizing: border-box;
9056 -webkit-box-sizing: border-box;
9107 -webkit-box-sizing: border-box;
9057 /* Old browsers */
9108 /* Old browsers */
9058 display: -webkit-box;
9109 display: -webkit-box;
9059 -webkit-box-orient: vertical;
9110 -webkit-box-orient: vertical;
9060 -webkit-box-align: stretch;
9111 -webkit-box-align: stretch;
9061 display: -moz-box;
9112 display: -moz-box;
9062 -moz-box-orient: vertical;
9113 -moz-box-orient: vertical;
9063 -moz-box-align: stretch;
9114 -moz-box-align: stretch;
9064 display: box;
9115 display: box;
9065 box-orient: vertical;
9116 box-orient: vertical;
9066 box-align: stretch;
9117 box-align: stretch;
9067 /* Modern browsers */
9118 /* Modern browsers */
9068 display: flex;
9119 display: flex;
9069 flex-direction: column;
9120 flex-direction: column;
9070 align-items: stretch;
9121 align-items: stretch;
9071 /* Old browsers */
9122 /* Old browsers */
9072 -webkit-box-flex: 2;
9123 -webkit-box-flex: 2;
9073 -moz-box-flex: 2;
9124 -moz-box-flex: 2;
9074 box-flex: 2;
9125 box-flex: 2;
9075 /* Modern browsers */
9126 /* Modern browsers */
9076 flex: 2;
9127 flex: 2;
9077 /* Old browsers */
9128 /* Old browsers */
9078 -webkit-box-align: start;
9129 -webkit-box-align: start;
9079 -moz-box-align: start;
9130 -moz-box-align: start;
9080 box-align: start;
9131 box-align: start;
9081 /* Modern browsers */
9132 /* Modern browsers */
9082 align-items: flex-start;
9133 align-items: flex-start;
9083 }
9134 }
9084 /* THE CLASSES BELOW CAN APPEAR ANYWHERE IN THE DOM (POSSIBLEY OUTSIDE OF
9135 /* THE CLASSES BELOW CAN APPEAR ANYWHERE IN THE DOM (POSSIBLEY OUTSIDE OF
9085 THE WIDGET AREA). */
9136 THE WIDGET AREA). */
9086 .slide-track {
9137 .slide-track {
9087 /* Slider Track */
9138 /* Slider Track */
9088 border: 1px solid #CCCCCC;
9139 border: 1px solid #CCCCCC;
9089 background: #FFFFFF;
9140 background: #FFFFFF;
9090 border-radius: 4px;
9141 border-radius: 4px;
9091 /* Round the corners of the slide track */
9142 /* Round the corners of the slide track */
9092 }
9143 }
9093 .widget-hslider {
9144 .widget-hslider {
9094 /* Horizontal jQuery Slider
9145 /* Horizontal jQuery Slider
9095
9146
9096 Both the horizontal and vertical versions of the slider are characterized
9147 Both the horizontal and vertical versions of the slider are characterized
9097 by a styled div that contains an invisible jQuery slide div which
9148 by a styled div that contains an invisible jQuery slide div which
9098 contains a visible slider handle div. This is requred so we can control
9149 contains a visible slider handle div. This is requred so we can control
9099 how the slider is drawn and 'fix' the issue where the slide handle
9150 how the slider is drawn and 'fix' the issue where the slide handle
9100 doesn't stop at the end of the slide.
9151 doesn't stop at the end of the slide.
9101
9152
9102 Both horizontal and vertical sliders have this div nesting:
9153 Both horizontal and vertical sliders have this div nesting:
9103 +------------------------------------------+
9154 +------------------------------------------+
9104 | widget-(h/v)slider |
9155 | widget-(h/v)slider |
9105 | +--------+---------------------------+ |
9156 | +--------+---------------------------+ |
9106 | | ui-slider | |
9157 | | ui-slider | |
9107 | | +------------------+ | |
9158 | | +------------------+ | |
9108 | | | ui-slider-handle | | |
9159 | | | ui-slider-handle | | |
9109 | | +------------------+ | |
9160 | | +------------------+ | |
9110 | +--------+---------------------------+ |
9161 | +--------+---------------------------+ |
9111 +------------------------------------------+
9162 +------------------------------------------+
9112 */
9163 */
9113 /* Fix the padding of the slide track so the ui-slider is sized
9164 /* Fix the padding of the slide track so the ui-slider is sized
9114 correctly. */
9165 correctly. */
9115 padding-left: 8px;
9166 padding-left: 8px;
9116 padding-right: 5px;
9167 padding-right: 5px;
9117 overflow: visible;
9168 overflow: visible;
9118 /* Default size of the slider */
9169 /* Default size of the slider */
9119 width: 350px;
9170 width: 350px;
9120 height: 5px;
9171 height: 5px;
9121 max-height: 5px;
9172 max-height: 5px;
9122 margin-top: 13px;
9173 margin-top: 13px;
9123 margin-bottom: 10px;
9174 margin-bottom: 10px;
9124 /* Style the slider track */
9175 /* Style the slider track */
9125 /* Slider Track */
9176 /* Slider Track */
9126 border: 1px solid #CCCCCC;
9177 border: 1px solid #CCCCCC;
9127 background: #FFFFFF;
9178 background: #FFFFFF;
9128 border-radius: 4px;
9179 border-radius: 4px;
9129 /* Round the corners of the slide track */
9180 /* Round the corners of the slide track */
9130 /* Make the div a flex box (makes FF behave correctly). */
9181 /* Make the div a flex box (makes FF behave correctly). */
9131 /* Old browsers */
9182 /* Old browsers */
9132 display: -webkit-box;
9183 display: -webkit-box;
9133 -webkit-box-orient: horizontal;
9184 -webkit-box-orient: horizontal;
9134 -webkit-box-align: stretch;
9185 -webkit-box-align: stretch;
9135 display: -moz-box;
9186 display: -moz-box;
9136 -moz-box-orient: horizontal;
9187 -moz-box-orient: horizontal;
9137 -moz-box-align: stretch;
9188 -moz-box-align: stretch;
9138 display: box;
9189 display: box;
9139 box-orient: horizontal;
9190 box-orient: horizontal;
9140 box-align: stretch;
9191 box-align: stretch;
9141 /* Modern browsers */
9192 /* Modern browsers */
9142 display: flex;
9193 display: flex;
9143 flex-direction: row;
9194 flex-direction: row;
9144 align-items: stretch;
9195 align-items: stretch;
9145 }
9196 }
9146 .widget-hslider .ui-slider {
9197 .widget-hslider .ui-slider {
9147 /* Inner, invisible slide div */
9198 /* Inner, invisible slide div */
9148 border: 0px !important;
9199 border: 0px !important;
9149 background: none !important;
9200 background: none !important;
9150 /* Old browsers */
9201 /* Old browsers */
9151 display: -webkit-box;
9202 display: -webkit-box;
9152 -webkit-box-orient: horizontal;
9203 -webkit-box-orient: horizontal;
9153 -webkit-box-align: stretch;
9204 -webkit-box-align: stretch;
9154 display: -moz-box;
9205 display: -moz-box;
9155 -moz-box-orient: horizontal;
9206 -moz-box-orient: horizontal;
9156 -moz-box-align: stretch;
9207 -moz-box-align: stretch;
9157 display: box;
9208 display: box;
9158 box-orient: horizontal;
9209 box-orient: horizontal;
9159 box-align: stretch;
9210 box-align: stretch;
9160 /* Modern browsers */
9211 /* Modern browsers */
9161 display: flex;
9212 display: flex;
9162 flex-direction: row;
9213 flex-direction: row;
9163 align-items: stretch;
9214 align-items: stretch;
9164 /* Old browsers */
9215 /* Old browsers */
9165 -webkit-box-flex: 1;
9216 -webkit-box-flex: 1;
9166 -moz-box-flex: 1;
9217 -moz-box-flex: 1;
9167 box-flex: 1;
9218 box-flex: 1;
9168 /* Modern browsers */
9219 /* Modern browsers */
9169 flex: 1;
9220 flex: 1;
9170 }
9221 }
9171 .widget-hslider .ui-slider .ui-slider-handle {
9222 .widget-hslider .ui-slider .ui-slider-handle {
9172 width: 14px !important;
9223 width: 14px !important;
9173 height: 28px !important;
9224 height: 28px !important;
9174 margin-top: -8px !important;
9225 margin-top: -8px !important;
9175 }
9226 }
9176 .widget-hslider .ui-slider .ui-slider-range {
9227 .widget-hslider .ui-slider .ui-slider-range {
9177 height: 12px !important;
9228 height: 12px !important;
9178 margin-top: -4px !important;
9229 margin-top: -4px !important;
9179 }
9230 }
9180 .widget-vslider {
9231 .widget-vslider {
9181 /* Vertical jQuery Slider */
9232 /* Vertical jQuery Slider */
9182 /* Fix the padding of the slide track so the ui-slider is sized
9233 /* Fix the padding of the slide track so the ui-slider is sized
9183 correctly. */
9234 correctly. */
9184 padding-bottom: 8px;
9235 padding-bottom: 8px;
9185 overflow: visible;
9236 overflow: visible;
9186 /* Default size of the slider */
9237 /* Default size of the slider */
9187 width: 5px;
9238 width: 5px;
9188 max-width: 5px;
9239 max-width: 5px;
9189 height: 250px;
9240 height: 250px;
9190 margin-left: 12px;
9241 margin-left: 12px;
9191 /* Style the slider track */
9242 /* Style the slider track */
9192 /* Slider Track */
9243 /* Slider Track */
9193 border: 1px solid #CCCCCC;
9244 border: 1px solid #CCCCCC;
9194 background: #FFFFFF;
9245 background: #FFFFFF;
9195 border-radius: 4px;
9246 border-radius: 4px;
9196 /* Round the corners of the slide track */
9247 /* Round the corners of the slide track */
9197 /* Make the div a flex box (makes FF behave correctly). */
9248 /* Make the div a flex box (makes FF behave correctly). */
9198 /* Old browsers */
9249 /* Old browsers */
9199 display: -webkit-box;
9250 display: -webkit-box;
9200 -webkit-box-orient: vertical;
9251 -webkit-box-orient: vertical;
9201 -webkit-box-align: stretch;
9252 -webkit-box-align: stretch;
9202 display: -moz-box;
9253 display: -moz-box;
9203 -moz-box-orient: vertical;
9254 -moz-box-orient: vertical;
9204 -moz-box-align: stretch;
9255 -moz-box-align: stretch;
9205 display: box;
9256 display: box;
9206 box-orient: vertical;
9257 box-orient: vertical;
9207 box-align: stretch;
9258 box-align: stretch;
9208 /* Modern browsers */
9259 /* Modern browsers */
9209 display: flex;
9260 display: flex;
9210 flex-direction: column;
9261 flex-direction: column;
9211 align-items: stretch;
9262 align-items: stretch;
9212 }
9263 }
9213 .widget-vslider .ui-slider {
9264 .widget-vslider .ui-slider {
9214 /* Inner, invisible slide div */
9265 /* Inner, invisible slide div */
9215 border: 0px !important;
9266 border: 0px !important;
9216 background: none !important;
9267 background: none !important;
9217 margin-left: -4px;
9268 margin-left: -4px;
9218 margin-top: 5px;
9269 margin-top: 5px;
9219 /* Old browsers */
9270 /* Old browsers */
9220 display: -webkit-box;
9271 display: -webkit-box;
9221 -webkit-box-orient: vertical;
9272 -webkit-box-orient: vertical;
9222 -webkit-box-align: stretch;
9273 -webkit-box-align: stretch;
9223 display: -moz-box;
9274 display: -moz-box;
9224 -moz-box-orient: vertical;
9275 -moz-box-orient: vertical;
9225 -moz-box-align: stretch;
9276 -moz-box-align: stretch;
9226 display: box;
9277 display: box;
9227 box-orient: vertical;
9278 box-orient: vertical;
9228 box-align: stretch;
9279 box-align: stretch;
9229 /* Modern browsers */
9280 /* Modern browsers */
9230 display: flex;
9281 display: flex;
9231 flex-direction: column;
9282 flex-direction: column;
9232 align-items: stretch;
9283 align-items: stretch;
9233 /* Old browsers */
9284 /* Old browsers */
9234 -webkit-box-flex: 1;
9285 -webkit-box-flex: 1;
9235 -moz-box-flex: 1;
9286 -moz-box-flex: 1;
9236 box-flex: 1;
9287 box-flex: 1;
9237 /* Modern browsers */
9288 /* Modern browsers */
9238 flex: 1;
9289 flex: 1;
9239 }
9290 }
9240 .widget-vslider .ui-slider .ui-slider-handle {
9291 .widget-vslider .ui-slider .ui-slider-handle {
9241 width: 28px !important;
9292 width: 28px !important;
9242 height: 14px !important;
9293 height: 14px !important;
9243 margin-left: -9px;
9294 margin-left: -9px;
9244 }
9295 }
9245 .widget-vslider .ui-slider .ui-slider-range {
9296 .widget-vslider .ui-slider .ui-slider-range {
9246 width: 12px !important;
9297 width: 12px !important;
9247 margin-left: -1px !important;
9298 margin-left: -1px !important;
9248 }
9299 }
9249 .widget-text {
9300 .widget-text {
9250 /* String Textbox - used for TextBoxView and TextAreaView */
9301 /* String Textbox - used for TextBoxView and TextAreaView */
9251 width: 350px;
9302 width: 350px;
9252 margin: 0px !important;
9303 margin: 0px !important;
9253 }
9304 }
9254 .widget-listbox {
9305 .widget-listbox {
9255 /* Listbox */
9306 /* Listbox */
9256 width: 350px;
9307 width: 350px;
9257 margin-bottom: 0px;
9308 margin-bottom: 0px;
9258 }
9309 }
9259 .widget-numeric-text {
9310 .widget-numeric-text {
9260 /* Single Line Textbox - used for IntTextView and FloatTextView */
9311 /* Single Line Textbox - used for IntTextView and FloatTextView */
9261 width: 150px;
9312 width: 150px;
9262 margin: 0px !important;
9313 margin: 0px !important;
9263 }
9314 }
9264 .widget-progress {
9315 .widget-progress {
9265 /* Progress Bar */
9316 /* Progress Bar */
9266 margin-top: 6px;
9317 margin-top: 6px;
9267 width: 350px;
9318 width: 350px;
9268 }
9319 }
9269 .widget-progress .progress-bar {
9320 .widget-progress .progress-bar {
9270 /* Disable progress bar animation */
9321 /* Disable progress bar animation */
9271 -webkit-transition: none;
9322 -webkit-transition: none;
9272 -moz-transition: none;
9323 -moz-transition: none;
9273 -ms-transition: none;
9324 -ms-transition: none;
9274 -o-transition: none;
9325 -o-transition: none;
9275 transition: none;
9326 transition: none;
9276 }
9327 }
9277 .widget-combo-btn {
9328 .widget-combo-btn {
9278 /* ComboBox Main Button */
9329 /* ComboBox Main Button */
9279 min-width: 125px;
9330 min-width: 125px;
9280 }
9331 }
9281 .widget_item .dropdown-menu li a {
9332 .widget_item .dropdown-menu li a {
9282 color: inherit;
9333 color: inherit;
9283 }
9334 }
9284 .widget-hbox {
9335 .widget-hbox {
9285 /* Horizontal widgets */
9336 /* Horizontal widgets */
9286 /* Old browsers */
9337 /* Old browsers */
9287 display: -webkit-box;
9338 display: -webkit-box;
9288 -webkit-box-orient: horizontal;
9339 -webkit-box-orient: horizontal;
9289 -webkit-box-align: stretch;
9340 -webkit-box-align: stretch;
9290 display: -moz-box;
9341 display: -moz-box;
9291 -moz-box-orient: horizontal;
9342 -moz-box-orient: horizontal;
9292 -moz-box-align: stretch;
9343 -moz-box-align: stretch;
9293 display: box;
9344 display: box;
9294 box-orient: horizontal;
9345 box-orient: horizontal;
9295 box-align: stretch;
9346 box-align: stretch;
9296 /* Modern browsers */
9347 /* Modern browsers */
9297 display: flex;
9348 display: flex;
9298 flex-direction: row;
9349 flex-direction: row;
9299 align-items: stretch;
9350 align-items: stretch;
9300 margin-top: 0px !important;
9351 margin-top: 0px !important;
9301 margin-bottom: 0px !important;
9352 margin-bottom: 0px !important;
9302 margin-right: 5px;
9353 margin-right: 5px;
9303 margin-left: 5px;
9354 margin-left: 5px;
9304 }
9355 }
9305 .widget-hbox input[type="checkbox"] {
9356 .widget-hbox input[type="checkbox"] {
9306 margin-top: 9px;
9357 margin-top: 9px;
9307 margin-bottom: 10px;
9358 margin-bottom: 10px;
9308 }
9359 }
9309 .widget-hbox .widget-label {
9360 .widget-hbox .widget-label {
9310 /* Horizontal Label */
9361 /* Horizontal Label */
9311 min-width: 10ex;
9362 min-width: 10ex;
9312 padding-right: 8px;
9363 padding-right: 8px;
9313 padding-top: 5px;
9364 padding-top: 5px;
9314 text-align: right;
9365 text-align: right;
9315 vertical-align: text-top;
9366 vertical-align: text-top;
9316 }
9367 }
9317 .widget-hbox .widget-readout {
9368 .widget-hbox .widget-readout {
9318 padding-left: 8px;
9369 padding-left: 8px;
9319 padding-top: 5px;
9370 padding-top: 5px;
9320 text-align: left;
9371 text-align: left;
9321 vertical-align: text-top;
9372 vertical-align: text-top;
9322 }
9373 }
9323 .widget-vbox {
9374 .widget-vbox {
9324 /* Vertical widgets */
9375 /* Vertical widgets */
9325 /* Old browsers */
9376 /* Old browsers */
9326 display: -webkit-box;
9377 display: -webkit-box;
9327 -webkit-box-orient: vertical;
9378 -webkit-box-orient: vertical;
9328 -webkit-box-align: stretch;
9379 -webkit-box-align: stretch;
9329 display: -moz-box;
9380 display: -moz-box;
9330 -moz-box-orient: vertical;
9381 -moz-box-orient: vertical;
9331 -moz-box-align: stretch;
9382 -moz-box-align: stretch;
9332 display: box;
9383 display: box;
9333 box-orient: vertical;
9384 box-orient: vertical;
9334 box-align: stretch;
9385 box-align: stretch;
9335 /* Modern browsers */
9386 /* Modern browsers */
9336 display: flex;
9387 display: flex;
9337 flex-direction: column;
9388 flex-direction: column;
9338 align-items: stretch;
9389 align-items: stretch;
9339 }
9390 }
9340 .widget-vbox .widget-label {
9391 .widget-vbox .widget-label {
9341 /* Vertical Label */
9392 /* Vertical Label */
9342 padding-bottom: 5px;
9393 padding-bottom: 5px;
9343 text-align: center;
9394 text-align: center;
9344 vertical-align: text-bottom;
9395 vertical-align: text-bottom;
9345 }
9396 }
9346 .widget-vbox .widget-readout {
9397 .widget-vbox .widget-readout {
9347 /* Vertical Label */
9398 /* Vertical Label */
9348 padding-top: 5px;
9399 padding-top: 5px;
9349 text-align: center;
9400 text-align: center;
9350 vertical-align: text-top;
9401 vertical-align: text-top;
9351 }
9402 }
9352 .widget-modal {
9403 .widget-modal {
9353 /* Box - ModalView */
9404 /* Box - ModalView */
9354 overflow: hidden;
9405 overflow: hidden;
9355 position: absolute !important;
9406 position: absolute !important;
9356 top: 0px;
9407 top: 0px;
9357 left: 0px;
9408 left: 0px;
9358 margin-left: 0px !important;
9409 margin-left: 0px !important;
9359 }
9410 }
9360 .widget-modal-body {
9411 .widget-modal-body {
9361 /* Box - ModalView Body */
9412 /* Box - ModalView Body */
9362 max-height: none !important;
9413 max-height: none !important;
9363 }
9414 }
9364 .widget-box {
9415 .widget-box {
9365 /* Box */
9416 /* Box */
9366 box-sizing: border-box;
9417 box-sizing: border-box;
9367 -moz-box-sizing: border-box;
9418 -moz-box-sizing: border-box;
9368 -webkit-box-sizing: border-box;
9419 -webkit-box-sizing: border-box;
9369 /* Old browsers */
9420 /* Old browsers */
9370 -webkit-box-align: start;
9421 -webkit-box-align: start;
9371 -moz-box-align: start;
9422 -moz-box-align: start;
9372 box-align: start;
9423 box-align: start;
9373 /* Modern browsers */
9424 /* Modern browsers */
9374 align-items: flex-start;
9425 align-items: flex-start;
9375 }
9426 }
9376 .widget-radio-box {
9427 .widget-radio-box {
9377 /* Contains RadioButtonsWidget */
9428 /* Contains RadioButtonsWidget */
9378 /* Old browsers */
9429 /* Old browsers */
9379 display: -webkit-box;
9430 display: -webkit-box;
9380 -webkit-box-orient: vertical;
9431 -webkit-box-orient: vertical;
9381 -webkit-box-align: stretch;
9432 -webkit-box-align: stretch;
9382 display: -moz-box;
9433 display: -moz-box;
9383 -moz-box-orient: vertical;
9434 -moz-box-orient: vertical;
9384 -moz-box-align: stretch;
9435 -moz-box-align: stretch;
9385 display: box;
9436 display: box;
9386 box-orient: vertical;
9437 box-orient: vertical;
9387 box-align: stretch;
9438 box-align: stretch;
9388 /* Modern browsers */
9439 /* Modern browsers */
9389 display: flex;
9440 display: flex;
9390 flex-direction: column;
9441 flex-direction: column;
9391 align-items: stretch;
9442 align-items: stretch;
9392 box-sizing: border-box;
9443 box-sizing: border-box;
9393 -moz-box-sizing: border-box;
9444 -moz-box-sizing: border-box;
9394 -webkit-box-sizing: border-box;
9445 -webkit-box-sizing: border-box;
9395 padding-top: 4px;
9446 padding-top: 4px;
9396 }
9447 }
9397 .widget-radio-box label {
9448 .widget-radio-box label {
9398 margin-top: 0px;
9449 margin-top: 0px;
9399 }
9450 }
9400 .docked-widget-modal {
9451 .docked-widget-modal {
9401 /* Horizontal Label */
9452 /* Horizontal Label */
9402 overflow: hidden;
9453 overflow: hidden;
9403 position: relative !important;
9454 position: relative !important;
9404 top: 0px !important;
9455 top: 0px !important;
9405 left: 0px !important;
9456 left: 0px !important;
9406 margin-left: 0px !important;
9457 margin-left: 0px !important;
9407 }
9458 }
9408 /*!
9459 /*!
9409 *
9460 *
9410 * IPython notebook webapp
9461 * IPython notebook webapp
9411 *
9462 *
9412 */
9463 */
9413 body {
9464 body {
9414 background-color: #ffffff;
9465 background-color: #ffffff;
9415 }
9466 }
9416 body.notebook_app {
9467 body.notebook_app {
9417 overflow: hidden;
9468 overflow: hidden;
9418 }
9469 }
9419 @media (max-width: 767px) {
9470 @media (max-width: 767px) {
9420 body.notebook_app {
9471 body.notebook_app {
9421 padding-left: 0px;
9472 padding-left: 0px;
9422 padding-right: 0px;
9473 padding-right: 0px;
9423 }
9474 }
9424 }
9475 }
9425 #ipython-main-app {
9476 #ipython-main-app {
9426 box-sizing: border-box;
9477 box-sizing: border-box;
9427 -moz-box-sizing: border-box;
9478 -moz-box-sizing: border-box;
9428 -webkit-box-sizing: border-box;
9479 -webkit-box-sizing: border-box;
9429 }
9480 }
9430 span#notebook_name {
9481 span#notebook_name {
9431 height: 1em;
9482 height: 1em;
9432 line-height: 1em;
9483 line-height: 1em;
9433 padding: 3px;
9484 padding: 3px;
9434 border: none;
9485 border: none;
9435 font-size: 146.5%;
9486 font-size: 146.5%;
9436 border-radius: 4px;
9487 border-radius: 4px;
9437 }
9488 }
9438 span#notebook_name:hover {
9489 span#notebook_name:hover {
9439 background-color: #e6e6e6;
9490 background-color: #e6e6e6;
9440 }
9491 }
9441 div#notebook_panel {
9492 div#notebook_panel {
9442 margin: 0px 0px 0px 0px;
9493 margin: 0px 0px 0px 0px;
9443 padding: 0px;
9494 padding: 0px;
9444 -webkit-box-shadow: inset 1px 4px 9px -6px rgba(0, 0, 0, 0.25);
9495 -webkit-box-shadow: inset 1px 4px 9px -6px rgba(0, 0, 0, 0.25);
9445 box-shadow: inset 1px 4px 9px -6px rgba(0, 0, 0, 0.25);
9496 box-shadow: inset 1px 4px 9px -6px rgba(0, 0, 0, 0.25);
9446 box-sizing: border-box;
9497 box-sizing: border-box;
9447 -moz-box-sizing: border-box;
9498 -moz-box-sizing: border-box;
9448 -webkit-box-sizing: border-box;
9499 -webkit-box-sizing: border-box;
9449 }
9500 }
9450 div#notebook {
9501 div#notebook {
9451 font-size: 14px;
9502 font-size: 14px;
9452 line-height: 20px;
9503 line-height: 20px;
9453 overflow-y: scroll;
9504 overflow-y: scroll;
9454 overflow-x: auto;
9505 overflow-x: auto;
9455 width: 100%;
9506 width: 100%;
9456 /* This spaces the cell away from the edge of the notebook area */
9507 /* This spaces the cell away from the edge of the notebook area */
9457 padding: 1em 0 1em 0;
9508 padding: 1em 0 1em 0;
9458 margin: 0px;
9509 margin: 0px;
9459 border-top: 1px solid #e7e7e7;
9510 border-top: 1px solid #e7e7e7;
9460 outline: none;
9511 outline: none;
9461 box-sizing: border-box;
9512 box-sizing: border-box;
9462 -moz-box-sizing: border-box;
9513 -moz-box-sizing: border-box;
9463 -webkit-box-sizing: border-box;
9514 -webkit-box-sizing: border-box;
9464 }
9515 }
9465 div.ui-widget-content {
9516 div.ui-widget-content {
9466 border: 1px solid #ababab;
9517 border: 1px solid #ababab;
9467 outline: none;
9518 outline: none;
9468 }
9519 }
9469 pre.dialog {
9520 pre.dialog {
9470 background-color: #f7f7f7;
9521 background-color: #f7f7f7;
9471 border: 1px solid #ddd;
9522 border: 1px solid #ddd;
9472 border-radius: 4px;
9523 border-radius: 4px;
9473 padding: 0.4em;
9524 padding: 0.4em;
9474 padding-left: 2em;
9525 padding-left: 2em;
9475 }
9526 }
9476 p.dialog {
9527 p.dialog {
9477 padding: 0.2em;
9528 padding: 0.2em;
9478 }
9529 }
9479 /* Word-wrap output correctly. This is the CSS3 spelling, though Firefox seems
9530 /* Word-wrap output correctly. This is the CSS3 spelling, though Firefox seems
9480 to not honor it correctly. Webkit browsers (Chrome, rekonq, Safari) do.
9531 to not honor it correctly. Webkit browsers (Chrome, rekonq, Safari) do.
9481 */
9532 */
9482 pre,
9533 pre,
9483 code,
9534 code,
9484 kbd,
9535 kbd,
9485 samp {
9536 samp {
9486 white-space: pre-wrap;
9537 white-space: pre-wrap;
9487 }
9538 }
9488 #fonttest {
9539 #fonttest {
9489 font-family: monospace;
9540 font-family: monospace;
9490 }
9541 }
9491 p {
9542 p {
9492 margin-bottom: 0;
9543 margin-bottom: 0;
9493 }
9544 }
9494 .end_space {
9545 .end_space {
9495 height: 200px;
9546 height: 200px;
9496 }
9547 }
9497 /* CSS for the cell toolbar */
9548 /* CSS for the cell toolbar */
9498 .celltoolbar {
9549 .celltoolbar {
9499 border: thin solid #CFCFCF;
9550 border: thin solid #CFCFCF;
9500 border-bottom: none;
9551 border-bottom: none;
9501 background: #EEE;
9552 background: #EEE;
9502 border-radius: 3px 3px 0px 0px;
9553 border-radius: 3px 3px 0px 0px;
9503 width: 100%;
9554 width: 100%;
9504 height: 29px;
9555 height: 29px;
9505 padding-right: 4px;
9556 padding-right: 4px;
9506 /* Old browsers */
9557 /* Old browsers */
9507 display: -webkit-box;
9558 display: -webkit-box;
9508 -webkit-box-orient: horizontal;
9559 -webkit-box-orient: horizontal;
9509 -webkit-box-align: stretch;
9560 -webkit-box-align: stretch;
9510 display: -moz-box;
9561 display: -moz-box;
9511 -moz-box-orient: horizontal;
9562 -moz-box-orient: horizontal;
9512 -moz-box-align: stretch;
9563 -moz-box-align: stretch;
9513 display: box;
9564 display: box;
9514 box-orient: horizontal;
9565 box-orient: horizontal;
9515 box-align: stretch;
9566 box-align: stretch;
9516 /* Modern browsers */
9567 /* Modern browsers */
9517 display: flex;
9568 display: flex;
9518 flex-direction: row;
9569 flex-direction: row;
9519 align-items: stretch;
9570 align-items: stretch;
9520 /* Old browsers */
9571 /* Old browsers */
9521 -webkit-box-pack: end;
9572 -webkit-box-pack: end;
9522 -moz-box-pack: end;
9573 -moz-box-pack: end;
9523 box-pack: end;
9574 box-pack: end;
9524 /* Modern browsers */
9575 /* Modern browsers */
9525 justify-content: flex-end;
9576 justify-content: flex-end;
9526 }
9577 }
9527 .ctb_hideshow {
9578 .ctb_hideshow {
9528 display: none;
9579 display: none;
9529 vertical-align: bottom;
9580 vertical-align: bottom;
9530 }
9581 }
9531 /* ctb_show is added to the ctb_hideshow div to show the cell toolbar.
9582 /* ctb_show is added to the ctb_hideshow div to show the cell toolbar.
9532 Cell toolbars are only shown when the ctb_global_show class is also set.
9583 Cell toolbars are only shown when the ctb_global_show class is also set.
9533 */
9584 */
9534 .ctb_global_show .ctb_show.ctb_hideshow {
9585 .ctb_global_show .ctb_show.ctb_hideshow {
9535 display: block;
9586 display: block;
9536 }
9587 }
9537 .ctb_global_show .ctb_show + .input_area,
9588 .ctb_global_show .ctb_show + .input_area,
9538 .ctb_global_show .ctb_show + div.text_cell_input {
9589 .ctb_global_show .ctb_show + div.text_cell_input {
9539 border-top-right-radius: 0px;
9590 border-top-right-radius: 0px;
9540 border-top-left-radius: 0px;
9591 border-top-left-radius: 0px;
9541 }
9592 }
9542 .celltoolbar {
9593 .celltoolbar {
9543 font-size: 87%;
9594 font-size: 87%;
9544 padding-top: 3px;
9595 padding-top: 3px;
9545 }
9596 }
9546 .celltoolbar select {
9597 .celltoolbar select {
9547 display: block;
9598 display: block;
9548 width: 100%;
9599 width: 100%;
9549 height: 32px;
9600 height: 32px;
9550 padding: 6px 12px;
9601 padding: 6px 12px;
9551 font-size: 13px;
9602 font-size: 13px;
9552 line-height: 1.42857143;
9603 line-height: 1.42857143;
9553 color: #555555;
9604 color: #555555;
9554 background-color: #ffffff;
9605 background-color: #ffffff;
9555 background-image: none;
9606 background-image: none;
9556 border: 1px solid #cccccc;
9607 border: 1px solid #cccccc;
9557 border-radius: 4px;
9608 border-radius: 4px;
9558 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
9609 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
9559 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
9610 box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
9560 -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
9611 -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
9561 transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
9612 transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
9562 height: 30px;
9613 height: 30px;
9563 padding: 5px 10px;
9614 padding: 5px 10px;
9564 font-size: 12px;
9615 font-size: 12px;
9565 line-height: 1.5;
9616 line-height: 1.5;
9566 border-radius: 3px;
9617 border-radius: 3px;
9567 width: inherit;
9618 width: inherit;
9568 font-size: 87%;
9619 font-size: 87%;
9569 height: 22px;
9620 height: 22px;
9570 display: inline-block;
9621 display: inline-block;
9571 }
9622 }
9572 .celltoolbar select:focus {
9623 .celltoolbar select:focus {
9573 border-color: #66afe9;
9624 border-color: #66afe9;
9574 outline: 0;
9625 outline: 0;
9575 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
9626 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
9576 box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
9627 box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
9577 }
9628 }
9578 .celltoolbar select::-moz-placeholder {
9629 .celltoolbar select::-moz-placeholder {
9579 color: #999999;
9630 color: #999999;
9580 opacity: 1;
9631 opacity: 1;
9581 }
9632 }
9582 .celltoolbar select:-ms-input-placeholder {
9633 .celltoolbar select:-ms-input-placeholder {
9583 color: #999999;
9634 color: #999999;
9584 }
9635 }
9585 .celltoolbar select::-webkit-input-placeholder {
9636 .celltoolbar select::-webkit-input-placeholder {
9586 color: #999999;
9637 color: #999999;
9587 }
9638 }
9588 .celltoolbar select[disabled],
9639 .celltoolbar select[disabled],
9589 .celltoolbar select[readonly],
9640 .celltoolbar select[readonly],
9590 fieldset[disabled] .celltoolbar select {
9641 fieldset[disabled] .celltoolbar select {
9591 cursor: not-allowed;
9642 cursor: not-allowed;
9592 background-color: #eeeeee;
9643 background-color: #eeeeee;
9593 opacity: 1;
9644 opacity: 1;
9594 }
9645 }
9595 textarea.celltoolbar select {
9646 textarea.celltoolbar select {
9596 height: auto;
9647 height: auto;
9597 }
9648 }
9598 select.celltoolbar select {
9649 select.celltoolbar select {
9599 height: 30px;
9650 height: 30px;
9600 line-height: 30px;
9651 line-height: 30px;
9601 }
9652 }
9602 textarea.celltoolbar select,
9653 textarea.celltoolbar select,
9603 select[multiple].celltoolbar select {
9654 select[multiple].celltoolbar select {
9604 height: auto;
9655 height: auto;
9605 }
9656 }
9606 .celltoolbar label {
9657 .celltoolbar label {
9607 margin-left: 5px;
9658 margin-left: 5px;
9608 margin-right: 5px;
9659 margin-right: 5px;
9609 }
9660 }
9610 .completions {
9661 .completions {
9611 position: absolute;
9662 position: absolute;
9612 z-index: 10;
9663 z-index: 10;
9613 overflow: hidden;
9664 overflow: hidden;
9614 border: 1px solid #ababab;
9665 border: 1px solid #ababab;
9615 border-radius: 4px;
9666 border-radius: 4px;
9616 -webkit-box-shadow: 0px 6px 10px -1px #adadad;
9667 -webkit-box-shadow: 0px 6px 10px -1px #adadad;
9617 box-shadow: 0px 6px 10px -1px #adadad;
9668 box-shadow: 0px 6px 10px -1px #adadad;
9618 }
9669 }
9619 .completions select {
9670 .completions select {
9620 background: white;
9671 background: white;
9621 outline: none;
9672 outline: none;
9622 border: none;
9673 border: none;
9623 padding: 0px;
9674 padding: 0px;
9624 margin: 0px;
9675 margin: 0px;
9625 overflow: auto;
9676 overflow: auto;
9626 font-family: monospace;
9677 font-family: monospace;
9627 font-size: 110%;
9678 font-size: 110%;
9628 color: #000000;
9679 color: #000000;
9629 width: auto;
9680 width: auto;
9630 }
9681 }
9631 .completions select option.context {
9682 .completions select option.context {
9632 color: #3071a9;
9683 color: #3071a9;
9633 }
9684 }
9634 #kernel_selector_widget {
9685 #kernel_selector_widget {
9635 margin-right: 1em;
9686 margin-right: 1em;
9636 float: right;
9687 float: right;
9637 }
9688 }
9638 #kernel_selector_widget > button {
9689 #kernel_selector_widget > button {
9639 display: inline-block;
9690 display: inline-block;
9640 margin-bottom: 0;
9691 margin-bottom: 0;
9641 font-weight: normal;
9692 font-weight: normal;
9642 text-align: center;
9693 text-align: center;
9643 vertical-align: middle;
9694 vertical-align: middle;
9644 cursor: pointer;
9695 cursor: pointer;
9645 background-image: none;
9696 background-image: none;
9646 border: 1px solid transparent;
9697 border: 1px solid transparent;
9647 white-space: nowrap;
9698 white-space: nowrap;
9648 padding: 6px 12px;
9699 padding: 6px 12px;
9649 font-size: 13px;
9700 font-size: 13px;
9650 line-height: 1.42857143;
9701 line-height: 1.42857143;
9651 border-radius: 4px;
9702 border-radius: 4px;
9652 -webkit-user-select: none;
9703 -webkit-user-select: none;
9653 -moz-user-select: none;
9704 -moz-user-select: none;
9654 -ms-user-select: none;
9705 -ms-user-select: none;
9655 user-select: none;
9706 user-select: none;
9656 color: #333333;
9707 color: #333333;
9657 background-color: #ffffff;
9708 background-color: #ffffff;
9658 border-color: #cccccc;
9709 border-color: #cccccc;
9659 padding: 5px 10px;
9710 padding: 5px 10px;
9660 font-size: 12px;
9711 font-size: 12px;
9661 line-height: 1.5;
9712 line-height: 1.5;
9662 border-radius: 3px;
9713 border-radius: 3px;
9663 }
9714 }
9664 #kernel_selector_widget > button:focus,
9715 #kernel_selector_widget > button:focus,
9665 #kernel_selector_widget > button:active:focus,
9716 #kernel_selector_widget > button:active:focus,
9666 #kernel_selector_widget > button.active:focus {
9717 #kernel_selector_widget > button.active:focus {
9667 outline: thin dotted;
9718 outline: thin dotted;
9668 outline: 5px auto -webkit-focus-ring-color;
9719 outline: 5px auto -webkit-focus-ring-color;
9669 outline-offset: -2px;
9720 outline-offset: -2px;
9670 }
9721 }
9671 #kernel_selector_widget > button:hover,
9722 #kernel_selector_widget > button:hover,
9672 #kernel_selector_widget > button:focus {
9723 #kernel_selector_widget > button:focus {
9673 color: #333333;
9724 color: #333333;
9674 text-decoration: none;
9725 text-decoration: none;
9675 }
9726 }
9676 #kernel_selector_widget > button:active,
9727 #kernel_selector_widget > button:active,
9677 #kernel_selector_widget > button.active {
9728 #kernel_selector_widget > button.active {
9678 outline: 0;
9729 outline: 0;
9679 background-image: none;
9730 background-image: none;
9680 -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
9731 -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
9681 box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
9732 box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
9682 }
9733 }
9683 #kernel_selector_widget > button.disabled,
9734 #kernel_selector_widget > button.disabled,
9684 #kernel_selector_widget > button[disabled],
9735 #kernel_selector_widget > button[disabled],
9685 fieldset[disabled] #kernel_selector_widget > button {
9736 fieldset[disabled] #kernel_selector_widget > button {
9686 cursor: not-allowed;
9737 cursor: not-allowed;
9687 pointer-events: none;
9738 pointer-events: none;
9688 opacity: 0.65;
9739 opacity: 0.65;
9689 filter: alpha(opacity=65);
9740 filter: alpha(opacity=65);
9690 -webkit-box-shadow: none;
9741 -webkit-box-shadow: none;
9691 box-shadow: none;
9742 box-shadow: none;
9692 }
9743 }
9693 #kernel_selector_widget > button:hover,
9744 #kernel_selector_widget > button:hover,
9694 #kernel_selector_widget > button:focus,
9745 #kernel_selector_widget > button:focus,
9695 #kernel_selector_widget > button:active,
9746 #kernel_selector_widget > button:active,
9696 #kernel_selector_widget > button.active,
9747 #kernel_selector_widget > button.active,
9697 .open .dropdown-toggle#kernel_selector_widget > button {
9748 .open .dropdown-toggle#kernel_selector_widget > button {
9698 color: #333333;
9749 color: #333333;
9699 background-color: #ebebeb;
9750 background-color: #ebebeb;
9700 border-color: #adadad;
9751 border-color: #adadad;
9701 }
9752 }
9702 #kernel_selector_widget > button:active,
9753 #kernel_selector_widget > button:active,
9703 #kernel_selector_widget > button.active,
9754 #kernel_selector_widget > button.active,
9704 .open .dropdown-toggle#kernel_selector_widget > button {
9755 .open .dropdown-toggle#kernel_selector_widget > button {
9705 background-image: none;
9756 background-image: none;
9706 }
9757 }
9707 #kernel_selector_widget > button.disabled,
9758 #kernel_selector_widget > button.disabled,
9708 #kernel_selector_widget > button[disabled],
9759 #kernel_selector_widget > button[disabled],
9709 fieldset[disabled] #kernel_selector_widget > button,
9760 fieldset[disabled] #kernel_selector_widget > button,
9710 #kernel_selector_widget > button.disabled:hover,
9761 #kernel_selector_widget > button.disabled:hover,
9711 #kernel_selector_widget > button[disabled]:hover,
9762 #kernel_selector_widget > button[disabled]:hover,
9712 fieldset[disabled] #kernel_selector_widget > button:hover,
9763 fieldset[disabled] #kernel_selector_widget > button:hover,
9713 #kernel_selector_widget > button.disabled:focus,
9764 #kernel_selector_widget > button.disabled:focus,
9714 #kernel_selector_widget > button[disabled]:focus,
9765 #kernel_selector_widget > button[disabled]:focus,
9715 fieldset[disabled] #kernel_selector_widget > button:focus,
9766 fieldset[disabled] #kernel_selector_widget > button:focus,
9716 #kernel_selector_widget > button.disabled:active,
9767 #kernel_selector_widget > button.disabled:active,
9717 #kernel_selector_widget > button[disabled]:active,
9768 #kernel_selector_widget > button[disabled]:active,
9718 fieldset[disabled] #kernel_selector_widget > button:active,
9769 fieldset[disabled] #kernel_selector_widget > button:active,
9719 #kernel_selector_widget > button.disabled.active,
9770 #kernel_selector_widget > button.disabled.active,
9720 #kernel_selector_widget > button[disabled].active,
9771 #kernel_selector_widget > button[disabled].active,
9721 fieldset[disabled] #kernel_selector_widget > button.active {
9772 fieldset[disabled] #kernel_selector_widget > button.active {
9722 background-color: #ffffff;
9773 background-color: #ffffff;
9723 border-color: #cccccc;
9774 border-color: #cccccc;
9724 }
9775 }
9725 #kernel_selector_widget > button .badge {
9776 #kernel_selector_widget > button .badge {
9726 color: #ffffff;
9777 color: #ffffff;
9727 background-color: #333333;
9778 background-color: #333333;
9728 }
9779 }
9729 #kernel_selector_widget > button > span.caret {
9780 #kernel_selector_widget > button > span.caret {
9730 margin-top: 0px;
9781 margin-top: 0px;
9731 }
9782 }
9732 #menubar {
9783 #menubar {
9733 margin-top: 0px;
9784 margin-top: 0px;
9734 margin-bottom: -19px;
9785 margin-bottom: -19px;
9735 position: relative;
9786 position: relative;
9736 box-sizing: border-box;
9787 box-sizing: border-box;
9737 -moz-box-sizing: border-box;
9788 -moz-box-sizing: border-box;
9738 -webkit-box-sizing: border-box;
9789 -webkit-box-sizing: border-box;
9739 }
9790 }
9740 #menubar .navbar {
9791 #menubar .navbar {
9741 border-top: 1px;
9792 border-top: 1px;
9742 border-radius: 0px 0px 4px 4px;
9793 border-radius: 0px 0px 4px 4px;
9743 }
9794 }
9744 #menubar .navbar-toggle {
9795 #menubar .navbar-toggle {
9745 float: left;
9796 float: left;
9746 }
9797 }
9747 #menubar .navbar-collapse {
9798 #menubar .navbar-collapse {
9748 clear: left;
9799 clear: left;
9749 }
9800 }
9750 #menubar li.dropdown {
9801 #menubar li.dropdown {
9751 line-height: 12px;
9802 line-height: 12px;
9752 }
9803 }
9753 #menubar li.dropdown a {
9804 #menubar li.dropdown a {
9754 padding-top: 6px;
9805 padding-top: 6px;
9755 padding-bottom: 5px;
9806 padding-bottom: 5px;
9756 }
9807 }
9757 #menubar ul.navbar-right {
9808 #menubar ul.navbar-right {
9758 padding-top: 2px;
9809 padding-top: 2px;
9759 margin-bottom: 0px;
9810 margin-bottom: 0px;
9760 }
9811 }
9761 .nav-wrapper {
9812 .nav-wrapper {
9762 border-bottom: 1px solid #e7e7e7;
9813 border-bottom: 1px solid #e7e7e7;
9763 }
9814 }
9764 i.menu-icon {
9815 i.menu-icon {
9765 padding-top: 4px;
9816 padding-top: 4px;
9766 }
9817 }
9767 ul#help_menu li a {
9818 ul#help_menu li a {
9768 overflow: hidden;
9819 overflow: hidden;
9769 padding-right: 2.2em;
9820 padding-right: 2.2em;
9770 }
9821 }
9771 ul#help_menu li a i {
9822 ul#help_menu li a i {
9772 margin-right: -1.2em;
9823 margin-right: -1.2em;
9773 }
9824 }
9774 #menus {
9825 #menus {
9775 min-height: 30px;
9826 min-height: 30px;
9776 }
9827 }
9777 .dropdown-submenu {
9828 .dropdown-submenu {
9778 position: relative;
9829 position: relative;
9779 }
9830 }
9780 .dropdown-submenu > .dropdown-menu {
9831 .dropdown-submenu > .dropdown-menu {
9781 top: 0;
9832 top: 0;
9782 left: 100%;
9833 left: 100%;
9783 margin-top: -6px;
9834 margin-top: -6px;
9784 margin-left: -1px;
9835 margin-left: -1px;
9785 -webkit-border-radius: 0 6px 6px 6px;
9836 -webkit-border-radius: 0 6px 6px 6px;
9786 -moz-border-radius: 0 6px 6px 6px;
9837 -moz-border-radius: 0 6px 6px 6px;
9787 border-radius: 0 6px 6px 6px;
9838 border-radius: 0 6px 6px 6px;
9788 }
9839 }
9789 .dropdown-submenu:hover > .dropdown-menu {
9840 .dropdown-submenu:hover > .dropdown-menu {
9790 display: block;
9841 display: block;
9791 }
9842 }
9792 .dropdown-submenu > a:after {
9843 .dropdown-submenu > a:after {
9793 display: block;
9844 display: block;
9794 content: " ";
9845 content: " ";
9795 float: right;
9846 float: right;
9796 width: 0;
9847 width: 0;
9797 height: 0;
9848 height: 0;
9798 border-color: transparent;
9849 border-color: transparent;
9799 border-style: solid;
9850 border-style: solid;
9800 border-width: 5px 0 5px 5px;
9851 border-width: 5px 0 5px 5px;
9801 border-left-color: #cccccc;
9852 border-left-color: #cccccc;
9802 margin-top: 5px;
9853 margin-top: 5px;
9803 margin-right: -10px;
9854 margin-right: -10px;
9804 }
9855 }
9805 .dropdown-submenu:hover > a:after {
9856 .dropdown-submenu:hover > a:after {
9806 border-left-color: #ffffff;
9857 border-left-color: #ffffff;
9807 }
9858 }
9808 .dropdown-submenu.pull-left {
9859 .dropdown-submenu.pull-left {
9809 float: none;
9860 float: none;
9810 }
9861 }
9811 .dropdown-submenu.pull-left > .dropdown-menu {
9862 .dropdown-submenu.pull-left > .dropdown-menu {
9812 left: -100%;
9863 left: -100%;
9813 margin-left: 10px;
9864 margin-left: 10px;
9814 -webkit-border-radius: 6px 0 6px 6px;
9865 -webkit-border-radius: 6px 0 6px 6px;
9815 -moz-border-radius: 6px 0 6px 6px;
9866 -moz-border-radius: 6px 0 6px 6px;
9816 border-radius: 6px 0 6px 6px;
9867 border-radius: 6px 0 6px 6px;
9817 }
9868 }
9818 #notification_area {
9869 #notification_area {
9819 float: right !important;
9870 float: right !important;
9820 float: right;
9871 float: right;
9821 z-index: 10;
9872 z-index: 10;
9822 }
9873 }
9823 .indicator_area {
9874 .indicator_area {
9824 color: #777777;
9875 color: #777777;
9825 padding: 4px 3px;
9876 padding: 4px 3px;
9826 margin: 0px;
9877 margin: 0px;
9827 width: 11px;
9878 width: 11px;
9828 z-index: 10;
9879 z-index: 10;
9829 text-align: center;
9880 text-align: center;
9830 }
9881 }
9831 #kernel_indicator {
9882 #kernel_indicator {
9832 float: right !important;
9883 float: right !important;
9833 float: right;
9884 float: right;
9834 color: #777777;
9885 color: #777777;
9835 padding: 4px 3px;
9886 padding: 4px 3px;
9836 margin: 0px;
9887 margin: 0px;
9837 width: 11px;
9888 width: 11px;
9838 z-index: 10;
9889 z-index: 10;
9839 text-align: center;
9890 text-align: center;
9840 margin-right: 12px;
9891 margin-right: 12px;
9841 }
9892 }
9842 #modal_indicator {
9893 #modal_indicator {
9843 float: right !important;
9894 float: right !important;
9844 float: right;
9895 float: right;
9845 color: #777777;
9896 color: #777777;
9846 padding: 4px 3px;
9897 padding: 4px 3px;
9847 margin: 0px;
9898 margin: 0px;
9848 width: 11px;
9899 width: 11px;
9849 z-index: 10;
9900 z-index: 10;
9850 text-align: center;
9901 text-align: center;
9851 margin-right: 5px;
9902 margin-right: 5px;
9852 }
9903 }
9853 .edit_mode_icon:before {
9904 .edit_mode_icon:before {
9854 display: inline-block;
9905 display: inline-block;
9855 font: normal normal normal 14px/1 FontAwesome;
9906 font: normal normal normal 14px/1 FontAwesome;
9856 font-size: inherit;
9907 font-size: inherit;
9857 text-rendering: auto;
9908 text-rendering: auto;
9858 -webkit-font-smoothing: antialiased;
9909 -webkit-font-smoothing: antialiased;
9859 -moz-osx-font-smoothing: grayscale;
9910 -moz-osx-font-smoothing: grayscale;
9860 content: "\f040";
9911 content: "\f040";
9861 }
9912 }
9862 .edit_mode_icon:before.pull-left {
9913 .edit_mode_icon:before.pull-left {
9863 margin-right: .3em;
9914 margin-right: .3em;
9864 }
9915 }
9865 .edit_mode_icon:before.pull-right {
9916 .edit_mode_icon:before.pull-right {
9866 margin-left: .3em;
9917 margin-left: .3em;
9867 }
9918 }
9868 .command_mode_icon:before {
9919 .command_mode_icon:before {
9869 display: inline-block;
9920 display: inline-block;
9870 font: normal normal normal 14px/1 FontAwesome;
9921 font: normal normal normal 14px/1 FontAwesome;
9871 font-size: inherit;
9922 font-size: inherit;
9872 text-rendering: auto;
9923 text-rendering: auto;
9873 -webkit-font-smoothing: antialiased;
9924 -webkit-font-smoothing: antialiased;
9874 -moz-osx-font-smoothing: grayscale;
9925 -moz-osx-font-smoothing: grayscale;
9875 content: ' ';
9926 content: ' ';
9876 }
9927 }
9877 .command_mode_icon:before.pull-left {
9928 .command_mode_icon:before.pull-left {
9878 margin-right: .3em;
9929 margin-right: .3em;
9879 }
9930 }
9880 .command_mode_icon:before.pull-right {
9931 .command_mode_icon:before.pull-right {
9881 margin-left: .3em;
9932 margin-left: .3em;
9882 }
9933 }
9883 .kernel_idle_icon:before {
9934 .kernel_idle_icon:before {
9884 display: inline-block;
9935 display: inline-block;
9885 font: normal normal normal 14px/1 FontAwesome;
9936 font: normal normal normal 14px/1 FontAwesome;
9886 font-size: inherit;
9937 font-size: inherit;
9887 text-rendering: auto;
9938 text-rendering: auto;
9888 -webkit-font-smoothing: antialiased;
9939 -webkit-font-smoothing: antialiased;
9889 -moz-osx-font-smoothing: grayscale;
9940 -moz-osx-font-smoothing: grayscale;
9890 content: "\f10c";
9941 content: "\f10c";
9891 }
9942 }
9892 .kernel_idle_icon:before.pull-left {
9943 .kernel_idle_icon:before.pull-left {
9893 margin-right: .3em;
9944 margin-right: .3em;
9894 }
9945 }
9895 .kernel_idle_icon:before.pull-right {
9946 .kernel_idle_icon:before.pull-right {
9896 margin-left: .3em;
9947 margin-left: .3em;
9897 }
9948 }
9898 .kernel_busy_icon:before {
9949 .kernel_busy_icon:before {
9899 display: inline-block;
9950 display: inline-block;
9900 font: normal normal normal 14px/1 FontAwesome;
9951 font: normal normal normal 14px/1 FontAwesome;
9901 font-size: inherit;
9952 font-size: inherit;
9902 text-rendering: auto;
9953 text-rendering: auto;
9903 -webkit-font-smoothing: antialiased;
9954 -webkit-font-smoothing: antialiased;
9904 -moz-osx-font-smoothing: grayscale;
9955 -moz-osx-font-smoothing: grayscale;
9905 content: "\f111";
9956 content: "\f111";
9906 }
9957 }
9907 .kernel_busy_icon:before.pull-left {
9958 .kernel_busy_icon:before.pull-left {
9908 margin-right: .3em;
9959 margin-right: .3em;
9909 }
9960 }
9910 .kernel_busy_icon:before.pull-right {
9961 .kernel_busy_icon:before.pull-right {
9911 margin-left: .3em;
9962 margin-left: .3em;
9912 }
9963 }
9913 .kernel_dead_icon:before {
9964 .kernel_dead_icon:before {
9914 display: inline-block;
9965 display: inline-block;
9915 font: normal normal normal 14px/1 FontAwesome;
9966 font: normal normal normal 14px/1 FontAwesome;
9916 font-size: inherit;
9967 font-size: inherit;
9917 text-rendering: auto;
9968 text-rendering: auto;
9918 -webkit-font-smoothing: antialiased;
9969 -webkit-font-smoothing: antialiased;
9919 -moz-osx-font-smoothing: grayscale;
9970 -moz-osx-font-smoothing: grayscale;
9920 content: "\f1e2";
9971 content: "\f1e2";
9921 }
9972 }
9922 .kernel_dead_icon:before.pull-left {
9973 .kernel_dead_icon:before.pull-left {
9923 margin-right: .3em;
9974 margin-right: .3em;
9924 }
9975 }
9925 .kernel_dead_icon:before.pull-right {
9976 .kernel_dead_icon:before.pull-right {
9926 margin-left: .3em;
9977 margin-left: .3em;
9927 }
9978 }
9928 .kernel_disconnected_icon:before {
9979 .kernel_disconnected_icon:before {
9929 display: inline-block;
9980 display: inline-block;
9930 font: normal normal normal 14px/1 FontAwesome;
9981 font: normal normal normal 14px/1 FontAwesome;
9931 font-size: inherit;
9982 font-size: inherit;
9932 text-rendering: auto;
9983 text-rendering: auto;
9933 -webkit-font-smoothing: antialiased;
9984 -webkit-font-smoothing: antialiased;
9934 -moz-osx-font-smoothing: grayscale;
9985 -moz-osx-font-smoothing: grayscale;
9935 content: "\f127";
9986 content: "\f127";
9936 }
9987 }
9937 .kernel_disconnected_icon:before.pull-left {
9988 .kernel_disconnected_icon:before.pull-left {
9938 margin-right: .3em;
9989 margin-right: .3em;
9939 }
9990 }
9940 .kernel_disconnected_icon:before.pull-right {
9991 .kernel_disconnected_icon:before.pull-right {
9941 margin-left: .3em;
9992 margin-left: .3em;
9942 }
9993 }
9943 .notification_widget {
9994 .notification_widget {
9944 color: #777777;
9995 color: #777777;
9945 padding: 1px 12px;
9996 padding: 1px 12px;
9946 margin: 2px 4px;
9997 margin: 2px 4px;
9947 z-index: 10;
9998 z-index: 10;
9948 background: rgba(240, 240, 240, 0.5);
9999 background: rgba(240, 240, 240, 0.5);
9949 float: right !important;
10000 float: right !important;
9950 float: right;
10001 float: right;
9951 box-sizing: border-box;
10002 box-sizing: border-box;
9952 -moz-box-sizing: border-box;
10003 -moz-box-sizing: border-box;
9953 -webkit-box-sizing: border-box;
10004 -webkit-box-sizing: border-box;
9954 display: inline-block;
10005 display: inline-block;
9955 margin-bottom: 0;
10006 margin-bottom: 0;
9956 font-weight: normal;
10007 font-weight: normal;
9957 text-align: center;
10008 text-align: center;
9958 vertical-align: middle;
10009 vertical-align: middle;
9959 cursor: pointer;
10010 cursor: pointer;
9960 background-image: none;
10011 background-image: none;
9961 border: 1px solid transparent;
10012 border: 1px solid transparent;
9962 white-space: nowrap;
10013 white-space: nowrap;
9963 padding: 6px 12px;
10014 padding: 6px 12px;
9964 font-size: 13px;
10015 font-size: 13px;
9965 line-height: 1.42857143;
10016 line-height: 1.42857143;
9966 border-radius: 4px;
10017 border-radius: 4px;
9967 -webkit-user-select: none;
10018 -webkit-user-select: none;
9968 -moz-user-select: none;
10019 -moz-user-select: none;
9969 -ms-user-select: none;
10020 -ms-user-select: none;
9970 user-select: none;
10021 user-select: none;
9971 color: #333333;
10022 color: #333333;
9972 background-color: #ffffff;
10023 background-color: #ffffff;
9973 border-color: #cccccc;
10024 border-color: #cccccc;
9974 padding: 1px 5px;
10025 padding: 1px 5px;
9975 font-size: 12px;
10026 font-size: 12px;
9976 line-height: 1.5;
10027 line-height: 1.5;
9977 border-radius: 3px;
10028 border-radius: 3px;
9978 }
10029 }
9979 .notification_widget:focus,
10030 .notification_widget:focus,
9980 .notification_widget:active:focus,
10031 .notification_widget:active:focus,
9981 .notification_widget.active:focus {
10032 .notification_widget.active:focus {
9982 outline: thin dotted;
10033 outline: thin dotted;
9983 outline: 5px auto -webkit-focus-ring-color;
10034 outline: 5px auto -webkit-focus-ring-color;
9984 outline-offset: -2px;
10035 outline-offset: -2px;
9985 }
10036 }
9986 .notification_widget:hover,
10037 .notification_widget:hover,
9987 .notification_widget:focus {
10038 .notification_widget:focus {
9988 color: #333333;
10039 color: #333333;
9989 text-decoration: none;
10040 text-decoration: none;
9990 }
10041 }
9991 .notification_widget:active,
10042 .notification_widget:active,
9992 .notification_widget.active {
10043 .notification_widget.active {
9993 outline: 0;
10044 outline: 0;
9994 background-image: none;
10045 background-image: none;
9995 -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
10046 -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
9996 box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
10047 box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
9997 }
10048 }
9998 .notification_widget.disabled,
10049 .notification_widget.disabled,
9999 .notification_widget[disabled],
10050 .notification_widget[disabled],
10000 fieldset[disabled] .notification_widget {
10051 fieldset[disabled] .notification_widget {
10001 cursor: not-allowed;
10052 cursor: not-allowed;
10002 pointer-events: none;
10053 pointer-events: none;
10003 opacity: 0.65;
10054 opacity: 0.65;
10004 filter: alpha(opacity=65);
10055 filter: alpha(opacity=65);
10005 -webkit-box-shadow: none;
10056 -webkit-box-shadow: none;
10006 box-shadow: none;
10057 box-shadow: none;
10007 }
10058 }
10008 .notification_widget:hover,
10059 .notification_widget:hover,
10009 .notification_widget:focus,
10060 .notification_widget:focus,
10010 .notification_widget:active,
10061 .notification_widget:active,
10011 .notification_widget.active,
10062 .notification_widget.active,
10012 .open .dropdown-toggle.notification_widget {
10063 .open .dropdown-toggle.notification_widget {
10013 color: #333333;
10064 color: #333333;
10014 background-color: #ebebeb;
10065 background-color: #ebebeb;
10015 border-color: #adadad;
10066 border-color: #adadad;
10016 }
10067 }
10017 .notification_widget:active,
10068 .notification_widget:active,
10018 .notification_widget.active,
10069 .notification_widget.active,
10019 .open .dropdown-toggle.notification_widget {
10070 .open .dropdown-toggle.notification_widget {
10020 background-image: none;
10071 background-image: none;
10021 }
10072 }
10022 .notification_widget.disabled,
10073 .notification_widget.disabled,
10023 .notification_widget[disabled],
10074 .notification_widget[disabled],
10024 fieldset[disabled] .notification_widget,
10075 fieldset[disabled] .notification_widget,
10025 .notification_widget.disabled:hover,
10076 .notification_widget.disabled:hover,
10026 .notification_widget[disabled]:hover,
10077 .notification_widget[disabled]:hover,
10027 fieldset[disabled] .notification_widget:hover,
10078 fieldset[disabled] .notification_widget:hover,
10028 .notification_widget.disabled:focus,
10079 .notification_widget.disabled:focus,
10029 .notification_widget[disabled]:focus,
10080 .notification_widget[disabled]:focus,
10030 fieldset[disabled] .notification_widget:focus,
10081 fieldset[disabled] .notification_widget:focus,
10031 .notification_widget.disabled:active,
10082 .notification_widget.disabled:active,
10032 .notification_widget[disabled]:active,
10083 .notification_widget[disabled]:active,
10033 fieldset[disabled] .notification_widget:active,
10084 fieldset[disabled] .notification_widget:active,
10034 .notification_widget.disabled.active,
10085 .notification_widget.disabled.active,
10035 .notification_widget[disabled].active,
10086 .notification_widget[disabled].active,
10036 fieldset[disabled] .notification_widget.active {
10087 fieldset[disabled] .notification_widget.active {
10037 background-color: #ffffff;
10088 background-color: #ffffff;
10038 border-color: #cccccc;
10089 border-color: #cccccc;
10039 }
10090 }
10040 .notification_widget .badge {
10091 .notification_widget .badge {
10041 color: #ffffff;
10092 color: #ffffff;
10042 background-color: #333333;
10093 background-color: #333333;
10043 }
10094 }
10044 .notification_widget.span {
10095 .notification_widget.span {
10045 padding-right: 2px;
10096 padding-right: 2px;
10046 }
10097 }
10047 .notification_widget.warning {
10098 .notification_widget.warning {
10048 color: #ffffff;
10099 color: #ffffff;
10049 background-color: #f0ad4e;
10100 background-color: #f0ad4e;
10050 border-color: #eea236;
10101 border-color: #eea236;
10051 }
10102 }
10052 .notification_widget.warning:hover,
10103 .notification_widget.warning:hover,
10053 .notification_widget.warning:focus,
10104 .notification_widget.warning:focus,
10054 .notification_widget.warning:active,
10105 .notification_widget.warning:active,
10055 .notification_widget.warning.active,
10106 .notification_widget.warning.active,
10056 .open .dropdown-toggle.notification_widget.warning {
10107 .open .dropdown-toggle.notification_widget.warning {
10057 color: #ffffff;
10108 color: #ffffff;
10058 background-color: #ed9c28;
10109 background-color: #ed9c28;
10059 border-color: #d58512;
10110 border-color: #d58512;
10060 }
10111 }
10061 .notification_widget.warning:active,
10112 .notification_widget.warning:active,
10062 .notification_widget.warning.active,
10113 .notification_widget.warning.active,
10063 .open .dropdown-toggle.notification_widget.warning {
10114 .open .dropdown-toggle.notification_widget.warning {
10064 background-image: none;
10115 background-image: none;
10065 }
10116 }
10066 .notification_widget.warning.disabled,
10117 .notification_widget.warning.disabled,
10067 .notification_widget.warning[disabled],
10118 .notification_widget.warning[disabled],
10068 fieldset[disabled] .notification_widget.warning,
10119 fieldset[disabled] .notification_widget.warning,
10069 .notification_widget.warning.disabled:hover,
10120 .notification_widget.warning.disabled:hover,
10070 .notification_widget.warning[disabled]:hover,
10121 .notification_widget.warning[disabled]:hover,
10071 fieldset[disabled] .notification_widget.warning:hover,
10122 fieldset[disabled] .notification_widget.warning:hover,
10072 .notification_widget.warning.disabled:focus,
10123 .notification_widget.warning.disabled:focus,
10073 .notification_widget.warning[disabled]:focus,
10124 .notification_widget.warning[disabled]:focus,
10074 fieldset[disabled] .notification_widget.warning:focus,
10125 fieldset[disabled] .notification_widget.warning:focus,
10075 .notification_widget.warning.disabled:active,
10126 .notification_widget.warning.disabled:active,
10076 .notification_widget.warning[disabled]:active,
10127 .notification_widget.warning[disabled]:active,
10077 fieldset[disabled] .notification_widget.warning:active,
10128 fieldset[disabled] .notification_widget.warning:active,
10078 .notification_widget.warning.disabled.active,
10129 .notification_widget.warning.disabled.active,
10079 .notification_widget.warning[disabled].active,
10130 .notification_widget.warning[disabled].active,
10080 fieldset[disabled] .notification_widget.warning.active {
10131 fieldset[disabled] .notification_widget.warning.active {
10081 background-color: #f0ad4e;
10132 background-color: #f0ad4e;
10082 border-color: #eea236;
10133 border-color: #eea236;
10083 }
10134 }
10084 .notification_widget.warning .badge {
10135 .notification_widget.warning .badge {
10085 color: #f0ad4e;
10136 color: #f0ad4e;
10086 background-color: #ffffff;
10137 background-color: #ffffff;
10087 }
10138 }
10088 .notification_widget.success {
10139 .notification_widget.success {
10089 color: #ffffff;
10140 color: #ffffff;
10090 background-color: #5cb85c;
10141 background-color: #5cb85c;
10091 border-color: #4cae4c;
10142 border-color: #4cae4c;
10092 }
10143 }
10093 .notification_widget.success:hover,
10144 .notification_widget.success:hover,
10094 .notification_widget.success:focus,
10145 .notification_widget.success:focus,
10095 .notification_widget.success:active,
10146 .notification_widget.success:active,
10096 .notification_widget.success.active,
10147 .notification_widget.success.active,
10097 .open .dropdown-toggle.notification_widget.success {
10148 .open .dropdown-toggle.notification_widget.success {
10098 color: #ffffff;
10149 color: #ffffff;
10099 background-color: #47a447;
10150 background-color: #47a447;
10100 border-color: #398439;
10151 border-color: #398439;
10101 }
10152 }
10102 .notification_widget.success:active,
10153 .notification_widget.success:active,
10103 .notification_widget.success.active,
10154 .notification_widget.success.active,
10104 .open .dropdown-toggle.notification_widget.success {
10155 .open .dropdown-toggle.notification_widget.success {
10105 background-image: none;
10156 background-image: none;
10106 }
10157 }
10107 .notification_widget.success.disabled,
10158 .notification_widget.success.disabled,
10108 .notification_widget.success[disabled],
10159 .notification_widget.success[disabled],
10109 fieldset[disabled] .notification_widget.success,
10160 fieldset[disabled] .notification_widget.success,
10110 .notification_widget.success.disabled:hover,
10161 .notification_widget.success.disabled:hover,
10111 .notification_widget.success[disabled]:hover,
10162 .notification_widget.success[disabled]:hover,
10112 fieldset[disabled] .notification_widget.success:hover,
10163 fieldset[disabled] .notification_widget.success:hover,
10113 .notification_widget.success.disabled:focus,
10164 .notification_widget.success.disabled:focus,
10114 .notification_widget.success[disabled]:focus,
10165 .notification_widget.success[disabled]:focus,
10115 fieldset[disabled] .notification_widget.success:focus,
10166 fieldset[disabled] .notification_widget.success:focus,
10116 .notification_widget.success.disabled:active,
10167 .notification_widget.success.disabled:active,
10117 .notification_widget.success[disabled]:active,
10168 .notification_widget.success[disabled]:active,
10118 fieldset[disabled] .notification_widget.success:active,
10169 fieldset[disabled] .notification_widget.success:active,
10119 .notification_widget.success.disabled.active,
10170 .notification_widget.success.disabled.active,
10120 .notification_widget.success[disabled].active,
10171 .notification_widget.success[disabled].active,
10121 fieldset[disabled] .notification_widget.success.active {
10172 fieldset[disabled] .notification_widget.success.active {
10122 background-color: #5cb85c;
10173 background-color: #5cb85c;
10123 border-color: #4cae4c;
10174 border-color: #4cae4c;
10124 }
10175 }
10125 .notification_widget.success .badge {
10176 .notification_widget.success .badge {
10126 color: #5cb85c;
10177 color: #5cb85c;
10127 background-color: #ffffff;
10178 background-color: #ffffff;
10128 }
10179 }
10129 .notification_widget.info {
10180 .notification_widget.info {
10130 color: #ffffff;
10181 color: #ffffff;
10131 background-color: #5bc0de;
10182 background-color: #5bc0de;
10132 border-color: #46b8da;
10183 border-color: #46b8da;
10133 }
10184 }
10134 .notification_widget.info:hover,
10185 .notification_widget.info:hover,
10135 .notification_widget.info:focus,
10186 .notification_widget.info:focus,
10136 .notification_widget.info:active,
10187 .notification_widget.info:active,
10137 .notification_widget.info.active,
10188 .notification_widget.info.active,
10138 .open .dropdown-toggle.notification_widget.info {
10189 .open .dropdown-toggle.notification_widget.info {
10139 color: #ffffff;
10190 color: #ffffff;
10140 background-color: #39b3d7;
10191 background-color: #39b3d7;
10141 border-color: #269abc;
10192 border-color: #269abc;
10142 }
10193 }
10143 .notification_widget.info:active,
10194 .notification_widget.info:active,
10144 .notification_widget.info.active,
10195 .notification_widget.info.active,
10145 .open .dropdown-toggle.notification_widget.info {
10196 .open .dropdown-toggle.notification_widget.info {
10146 background-image: none;
10197 background-image: none;
10147 }
10198 }
10148 .notification_widget.info.disabled,
10199 .notification_widget.info.disabled,
10149 .notification_widget.info[disabled],
10200 .notification_widget.info[disabled],
10150 fieldset[disabled] .notification_widget.info,
10201 fieldset[disabled] .notification_widget.info,
10151 .notification_widget.info.disabled:hover,
10202 .notification_widget.info.disabled:hover,
10152 .notification_widget.info[disabled]:hover,
10203 .notification_widget.info[disabled]:hover,
10153 fieldset[disabled] .notification_widget.info:hover,
10204 fieldset[disabled] .notification_widget.info:hover,
10154 .notification_widget.info.disabled:focus,
10205 .notification_widget.info.disabled:focus,
10155 .notification_widget.info[disabled]:focus,
10206 .notification_widget.info[disabled]:focus,
10156 fieldset[disabled] .notification_widget.info:focus,
10207 fieldset[disabled] .notification_widget.info:focus,
10157 .notification_widget.info.disabled:active,
10208 .notification_widget.info.disabled:active,
10158 .notification_widget.info[disabled]:active,
10209 .notification_widget.info[disabled]:active,
10159 fieldset[disabled] .notification_widget.info:active,
10210 fieldset[disabled] .notification_widget.info:active,
10160 .notification_widget.info.disabled.active,
10211 .notification_widget.info.disabled.active,
10161 .notification_widget.info[disabled].active,
10212 .notification_widget.info[disabled].active,
10162 fieldset[disabled] .notification_widget.info.active {
10213 fieldset[disabled] .notification_widget.info.active {
10163 background-color: #5bc0de;
10214 background-color: #5bc0de;
10164 border-color: #46b8da;
10215 border-color: #46b8da;
10165 }
10216 }
10166 .notification_widget.info .badge {
10217 .notification_widget.info .badge {
10167 color: #5bc0de;
10218 color: #5bc0de;
10168 background-color: #ffffff;
10219 background-color: #ffffff;
10169 }
10220 }
10170 .notification_widget.danger {
10221 .notification_widget.danger {
10171 color: #ffffff;
10222 color: #ffffff;
10172 background-color: #d9534f;
10223 background-color: #d9534f;
10173 border-color: #d43f3a;
10224 border-color: #d43f3a;
10174 }
10225 }
10175 .notification_widget.danger:hover,
10226 .notification_widget.danger:hover,
10176 .notification_widget.danger:focus,
10227 .notification_widget.danger:focus,
10177 .notification_widget.danger:active,
10228 .notification_widget.danger:active,
10178 .notification_widget.danger.active,
10229 .notification_widget.danger.active,
10179 .open .dropdown-toggle.notification_widget.danger {
10230 .open .dropdown-toggle.notification_widget.danger {
10180 color: #ffffff;
10231 color: #ffffff;
10181 background-color: #d2322d;
10232 background-color: #d2322d;
10182 border-color: #ac2925;
10233 border-color: #ac2925;
10183 }
10234 }
10184 .notification_widget.danger:active,
10235 .notification_widget.danger:active,
10185 .notification_widget.danger.active,
10236 .notification_widget.danger.active,
10186 .open .dropdown-toggle.notification_widget.danger {
10237 .open .dropdown-toggle.notification_widget.danger {
10187 background-image: none;
10238 background-image: none;
10188 }
10239 }
10189 .notification_widget.danger.disabled,
10240 .notification_widget.danger.disabled,
10190 .notification_widget.danger[disabled],
10241 .notification_widget.danger[disabled],
10191 fieldset[disabled] .notification_widget.danger,
10242 fieldset[disabled] .notification_widget.danger,
10192 .notification_widget.danger.disabled:hover,
10243 .notification_widget.danger.disabled:hover,
10193 .notification_widget.danger[disabled]:hover,
10244 .notification_widget.danger[disabled]:hover,
10194 fieldset[disabled] .notification_widget.danger:hover,
10245 fieldset[disabled] .notification_widget.danger:hover,
10195 .notification_widget.danger.disabled:focus,
10246 .notification_widget.danger.disabled:focus,
10196 .notification_widget.danger[disabled]:focus,
10247 .notification_widget.danger[disabled]:focus,
10197 fieldset[disabled] .notification_widget.danger:focus,
10248 fieldset[disabled] .notification_widget.danger:focus,
10198 .notification_widget.danger.disabled:active,
10249 .notification_widget.danger.disabled:active,
10199 .notification_widget.danger[disabled]:active,
10250 .notification_widget.danger[disabled]:active,
10200 fieldset[disabled] .notification_widget.danger:active,
10251 fieldset[disabled] .notification_widget.danger:active,
10201 .notification_widget.danger.disabled.active,
10252 .notification_widget.danger.disabled.active,
10202 .notification_widget.danger[disabled].active,
10253 .notification_widget.danger[disabled].active,
10203 fieldset[disabled] .notification_widget.danger.active {
10254 fieldset[disabled] .notification_widget.danger.active {
10204 background-color: #d9534f;
10255 background-color: #d9534f;
10205 border-color: #d43f3a;
10256 border-color: #d43f3a;
10206 }
10257 }
10207 .notification_widget.danger .badge {
10258 .notification_widget.danger .badge {
10208 color: #d9534f;
10259 color: #d9534f;
10209 background-color: #ffffff;
10260 background-color: #ffffff;
10210 }
10261 }
10211 div#pager_splitter {
10262 div#pager_splitter {
10212 height: 8px;
10263 height: 8px;
10213 box-sizing: border-box;
10264 box-sizing: border-box;
10214 -moz-box-sizing: border-box;
10265 -moz-box-sizing: border-box;
10215 -webkit-box-sizing: border-box;
10266 -webkit-box-sizing: border-box;
10216 }
10267 }
10217 #pager-container {
10268 #pager-container {
10218 position: relative;
10269 position: relative;
10219 padding: 15px 0px;
10270 padding: 15px 0px;
10220 box-sizing: border-box;
10271 box-sizing: border-box;
10221 -moz-box-sizing: border-box;
10272 -moz-box-sizing: border-box;
10222 -webkit-box-sizing: border-box;
10273 -webkit-box-sizing: border-box;
10223 }
10274 }
10224 div#pager {
10275 div#pager {
10225 font-size: 14px;
10276 font-size: 14px;
10226 line-height: 20px;
10277 line-height: 20px;
10227 overflow: auto;
10278 overflow: auto;
10228 display: none;
10279 display: none;
10229 box-sizing: border-box;
10280 box-sizing: border-box;
10230 -moz-box-sizing: border-box;
10281 -moz-box-sizing: border-box;
10231 -webkit-box-sizing: border-box;
10282 -webkit-box-sizing: border-box;
10232 }
10283 }
10233 div#pager pre {
10284 div#pager pre {
10234 line-height: 1.21429em;
10285 line-height: 1.21429em;
10235 color: #000000;
10286 color: #000000;
10236 background-color: #f7f7f7;
10287 background-color: #f7f7f7;
10237 padding: 0.4em;
10288 padding: 0.4em;
10238 }
10289 }
10239 .quickhelp {
10290 .quickhelp {
10240 /* Old browsers */
10291 /* Old browsers */
10241 display: -webkit-box;
10292 display: -webkit-box;
10242 -webkit-box-orient: horizontal;
10293 -webkit-box-orient: horizontal;
10243 -webkit-box-align: stretch;
10294 -webkit-box-align: stretch;
10244 display: -moz-box;
10295 display: -moz-box;
10245 -moz-box-orient: horizontal;
10296 -moz-box-orient: horizontal;
10246 -moz-box-align: stretch;
10297 -moz-box-align: stretch;
10247 display: box;
10298 display: box;
10248 box-orient: horizontal;
10299 box-orient: horizontal;
10249 box-align: stretch;
10300 box-align: stretch;
10250 /* Modern browsers */
10301 /* Modern browsers */
10251 display: flex;
10302 display: flex;
10252 flex-direction: row;
10303 flex-direction: row;
10253 align-items: stretch;
10304 align-items: stretch;
10254 }
10305 }
10255 .shortcut_key {
10306 .shortcut_key {
10256 display: inline-block;
10307 display: inline-block;
10257 width: 20ex;
10308 width: 20ex;
10258 text-align: right;
10309 text-align: right;
10259 font-family: monospace;
10310 font-family: monospace;
10260 }
10311 }
10261 .shortcut_descr {
10312 .shortcut_descr {
10262 display: inline-block;
10313 display: inline-block;
10263 /* Old browsers */
10314 /* Old browsers */
10264 -webkit-box-flex: 1;
10315 -webkit-box-flex: 1;
10265 -moz-box-flex: 1;
10316 -moz-box-flex: 1;
10266 box-flex: 1;
10317 box-flex: 1;
10267 /* Modern browsers */
10318 /* Modern browsers */
10268 flex: 1;
10319 flex: 1;
10269 }
10320 }
10270 span#save_widget {
10321 span#save_widget {
10271 padding: 0px 5px;
10322 padding: 0px 5px;
10272 margin-top: 12px;
10323 margin-top: 12px;
10273 }
10324 }
10274 span#checkpoint_status,
10325 span#checkpoint_status,
10275 span#autosave_status {
10326 span#autosave_status {
10276 font-size: small;
10327 font-size: small;
10277 }
10328 }
10278 @media (max-width: 767px) {
10329 @media (max-width: 767px) {
10279 span#save_widget {
10330 span#save_widget {
10280 font-size: small;
10331 font-size: small;
10281 }
10332 }
10282 span#checkpoint_status,
10333 span#checkpoint_status,
10283 span#autosave_status {
10334 span#autosave_status {
10284 font-size: x-small;
10335 font-size: x-small;
10285 }
10336 }
10286 }
10337 }
10287 @media (max-width: 767px) {
10338 @media (max-width: 767px) {
10288 span#checkpoint_status,
10339 span#checkpoint_status,
10289 span#autosave_status {
10340 span#autosave_status {
10290 display: none;
10341 display: none;
10291 }
10342 }
10292 }
10343 }
10293 @media (min-width: 768px) and (max-width: 979px) {
10344 @media (min-width: 768px) and (max-width: 979px) {
10294 span#checkpoint_status {
10345 span#checkpoint_status {
10295 display: none;
10346 display: none;
10296 }
10347 }
10297 span#autosave_status {
10348 span#autosave_status {
10298 font-size: x-small;
10349 font-size: x-small;
10299 }
10350 }
10300 }
10351 }
10301 .toolbar {
10352 .toolbar {
10302 padding: 0px;
10353 padding: 0px;
10303 margin-left: -5px;
10354 margin-left: -5px;
10304 margin-top: -5px;
10355 margin-top: -5px;
10305 box-sizing: border-box;
10356 box-sizing: border-box;
10306 -moz-box-sizing: border-box;
10357 -moz-box-sizing: border-box;
10307 -webkit-box-sizing: border-box;
10358 -webkit-box-sizing: border-box;
10308 }
10359 }
10309 .toolbar select,
10360 .toolbar select,
10310 .toolbar label {
10361 .toolbar label {
10311 width: auto;
10362 width: auto;
10312 vertical-align: middle;
10363 vertical-align: middle;
10313 margin-right: 2px;
10364 margin-right: 2px;
10314 margin-bottom: 0px;
10365 margin-bottom: 0px;
10315 display: inline;
10366 display: inline;
10316 font-size: 92%;
10367 font-size: 92%;
10317 margin-left: 0.3em;
10368 margin-left: 0.3em;
10318 margin-right: 0.3em;
10369 margin-right: 0.3em;
10319 padding: 0px;
10370 padding: 0px;
10320 padding-top: 3px;
10371 padding-top: 3px;
10321 }
10372 }
10322 .toolbar .btn {
10373 .toolbar .btn {
10323 padding: 2px 8px;
10374 padding: 2px 8px;
10324 }
10375 }
10325 .toolbar .btn-group {
10376 .toolbar .btn-group {
10326 margin-top: 0px;
10377 margin-top: 0px;
10327 margin-left: 5px;
10378 margin-left: 5px;
10328 }
10379 }
10329 #maintoolbar {
10380 #maintoolbar {
10330 margin-bottom: -3px;
10381 margin-bottom: -3px;
10331 margin-top: -8px;
10382 margin-top: -8px;
10332 border: 0px;
10383 border: 0px;
10333 min-height: 27px;
10384 min-height: 27px;
10334 margin-left: 32px;
10385 margin-left: 32px;
10335 padding-top: 6px;
10386 padding-top: 6px;
10336 padding-bottom: 8px;
10387 padding-bottom: 8px;
10337 }
10388 }
10338 #maintoolbar .navbar-text {
10389 #maintoolbar .navbar-text {
10339 float: none;
10390 float: none;
10340 vertical-align: middle;
10391 vertical-align: middle;
10341 text-align: right;
10392 text-align: right;
10342 margin-left: 5px;
10393 margin-left: 5px;
10343 margin-right: 0px;
10394 margin-right: 0px;
10344 margin-top: 0px;
10395 margin-top: 0px;
10345 }
10396 }
10346 #maintoolbar .toolbar {
10397 #maintoolbar .toolbar {
10347 margin-top: 0px;
10398 margin-top: 0px;
10348 }
10399 }
10349 .select-xs {
10400 .select-xs {
10350 height: 24px;
10401 height: 24px;
10351 }
10402 }
10352 /**
10403 /**
10353 * Primary styles
10404 * Primary styles
10354 *
10405 *
10355 * Author: IPython Development Team
10406 * Author: IPython Development Team
10356 */
10407 */
10357 /** WARNING IF YOU ARE EDITTING THIS FILE, if this is a .css file, It has a lot
10408 /** WARNING IF YOU ARE EDITTING THIS FILE, if this is a .css file, It has a lot
10358 * of chance of beeing generated from the ../less/[samename].less file, you can
10409 * of chance of beeing generated from the ../less/[samename].less file, you can
10359 * try to get back the less file by reverting somme commit in history
10410 * try to get back the less file by reverting somme commit in history
10360 **/
10411 **/
10361 /*
10412 /*
10362 * We'll try to get something pretty, so we
10413 * We'll try to get something pretty, so we
10363 * have some strange css to have the scroll bar on
10414 * have some strange css to have the scroll bar on
10364 * the left with fix button on the top right of the tooltip
10415 * the left with fix button on the top right of the tooltip
10365 */
10416 */
10366 @-moz-keyframes fadeOut {
10417 @-moz-keyframes fadeOut {
10367 from {
10418 from {
10368 opacity: 1;
10419 opacity: 1;
10369 }
10420 }
10370 to {
10421 to {
10371 opacity: 0;
10422 opacity: 0;
10372 }
10423 }
10373 }
10424 }
10374 @-webkit-keyframes fadeOut {
10425 @-webkit-keyframes fadeOut {
10375 from {
10426 from {
10376 opacity: 1;
10427 opacity: 1;
10377 }
10428 }
10378 to {
10429 to {
10379 opacity: 0;
10430 opacity: 0;
10380 }
10431 }
10381 }
10432 }
10382 @-moz-keyframes fadeIn {
10433 @-moz-keyframes fadeIn {
10383 from {
10434 from {
10384 opacity: 0;
10435 opacity: 0;
10385 }
10436 }
10386 to {
10437 to {
10387 opacity: 1;
10438 opacity: 1;
10388 }
10439 }
10389 }
10440 }
10390 @-webkit-keyframes fadeIn {
10441 @-webkit-keyframes fadeIn {
10391 from {
10442 from {
10392 opacity: 0;
10443 opacity: 0;
10393 }
10444 }
10394 to {
10445 to {
10395 opacity: 1;
10446 opacity: 1;
10396 }
10447 }
10397 }
10448 }
10398 /*properties of tooltip after "expand"*/
10449 /*properties of tooltip after "expand"*/
10399 .bigtooltip {
10450 .bigtooltip {
10400 overflow: auto;
10451 overflow: auto;
10401 height: 200px;
10452 height: 200px;
10402 -webkit-transition-property: height;
10453 -webkit-transition-property: height;
10403 -webkit-transition-duration: 500ms;
10454 -webkit-transition-duration: 500ms;
10404 -moz-transition-property: height;
10455 -moz-transition-property: height;
10405 -moz-transition-duration: 500ms;
10456 -moz-transition-duration: 500ms;
10406 transition-property: height;
10457 transition-property: height;
10407 transition-duration: 500ms;
10458 transition-duration: 500ms;
10408 }
10459 }
10409 /*properties of tooltip before "expand"*/
10460 /*properties of tooltip before "expand"*/
10410 .smalltooltip {
10461 .smalltooltip {
10411 -webkit-transition-property: height;
10462 -webkit-transition-property: height;
10412 -webkit-transition-duration: 500ms;
10463 -webkit-transition-duration: 500ms;
10413 -moz-transition-property: height;
10464 -moz-transition-property: height;
10414 -moz-transition-duration: 500ms;
10465 -moz-transition-duration: 500ms;
10415 transition-property: height;
10466 transition-property: height;
10416 transition-duration: 500ms;
10467 transition-duration: 500ms;
10417 text-overflow: ellipsis;
10468 text-overflow: ellipsis;
10418 overflow: hidden;
10469 overflow: hidden;
10419 height: 80px;
10470 height: 80px;
10420 }
10471 }
10421 .tooltipbuttons {
10472 .tooltipbuttons {
10422 position: absolute;
10473 position: absolute;
10423 padding-right: 15px;
10474 padding-right: 15px;
10424 top: 0px;
10475 top: 0px;
10425 right: 0px;
10476 right: 0px;
10426 }
10477 }
10427 .tooltiptext {
10478 .tooltiptext {
10428 /*avoid the button to overlap on some docstring*/
10479 /*avoid the button to overlap on some docstring*/
10429 padding-right: 30px;
10480 padding-right: 30px;
10430 }
10481 }
10431 .ipython_tooltip {
10482 .ipython_tooltip {
10432 max-width: 700px;
10483 max-width: 700px;
10433 /*fade-in animation when inserted*/
10484 /*fade-in animation when inserted*/
10434 -webkit-animation: fadeOut 400ms;
10485 -webkit-animation: fadeOut 400ms;
10435 -moz-animation: fadeOut 400ms;
10486 -moz-animation: fadeOut 400ms;
10436 animation: fadeOut 400ms;
10487 animation: fadeOut 400ms;
10437 -webkit-animation: fadeIn 400ms;
10488 -webkit-animation: fadeIn 400ms;
10438 -moz-animation: fadeIn 400ms;
10489 -moz-animation: fadeIn 400ms;
10439 animation: fadeIn 400ms;
10490 animation: fadeIn 400ms;
10440 vertical-align: middle;
10491 vertical-align: middle;
10441 background-color: #f7f7f7;
10492 background-color: #f7f7f7;
10442 overflow: visible;
10493 overflow: visible;
10443 border: #ababab 1px solid;
10494 border: #ababab 1px solid;
10444 outline: none;
10495 outline: none;
10445 padding: 3px;
10496 padding: 3px;
10446 margin: 0px;
10497 margin: 0px;
10447 padding-left: 7px;
10498 padding-left: 7px;
10448 font-family: monospace;
10499 font-family: monospace;
10449 min-height: 50px;
10500 min-height: 50px;
10450 -moz-box-shadow: 0px 6px 10px -1px #adadad;
10501 -moz-box-shadow: 0px 6px 10px -1px #adadad;
10451 -webkit-box-shadow: 0px 6px 10px -1px #adadad;
10502 -webkit-box-shadow: 0px 6px 10px -1px #adadad;
10452 box-shadow: 0px 6px 10px -1px #adadad;
10503 box-shadow: 0px 6px 10px -1px #adadad;
10453 border-radius: 4px;
10504 border-radius: 4px;
10454 position: absolute;
10505 position: absolute;
10455 z-index: 1000;
10506 z-index: 1000;
10456 }
10507 }
10457 .ipython_tooltip a {
10508 .ipython_tooltip a {
10458 float: right;
10509 float: right;
10459 }
10510 }
10460 .ipython_tooltip .tooltiptext pre {
10511 .ipython_tooltip .tooltiptext pre {
10461 border: 0;
10512 border: 0;
10462 border-radius: 0;
10513 border-radius: 0;
10463 font-size: 100%;
10514 font-size: 100%;
10464 background-color: #f7f7f7;
10515 background-color: #f7f7f7;
10465 }
10516 }
10466 .pretooltiparrow {
10517 .pretooltiparrow {
10467 left: 0px;
10518 left: 0px;
10468 margin: 0px;
10519 margin: 0px;
10469 top: -16px;
10520 top: -16px;
10470 width: 40px;
10521 width: 40px;
10471 height: 16px;
10522 height: 16px;
10472 overflow: hidden;
10523 overflow: hidden;
10473 position: absolute;
10524 position: absolute;
10474 }
10525 }
10475 .pretooltiparrow:before {
10526 .pretooltiparrow:before {
10476 background-color: #f7f7f7;
10527 background-color: #f7f7f7;
10477 border: 1px #ababab solid;
10528 border: 1px #ababab solid;
10478 z-index: 11;
10529 z-index: 11;
10479 content: "";
10530 content: "";
10480 position: absolute;
10531 position: absolute;
10481 left: 15px;
10532 left: 15px;
10482 top: 10px;
10533 top: 10px;
10483 width: 25px;
10534 width: 25px;
10484 height: 25px;
10535 height: 25px;
10485 -webkit-transform: rotate(45deg);
10536 -webkit-transform: rotate(45deg);
10486 -moz-transform: rotate(45deg);
10537 -moz-transform: rotate(45deg);
10487 -ms-transform: rotate(45deg);
10538 -ms-transform: rotate(45deg);
10488 -o-transform: rotate(45deg);
10539 -o-transform: rotate(45deg);
10489 }
10540 }
10490 .terminal {
10541 .terminal {
10491 float: left;
10542 float: left;
10492 border: black solid 5px;
10543 border: black solid 5px;
10493 font-family: "DejaVu Sans Mono", "Liberation Mono", monospace;
10544 font-family: "DejaVu Sans Mono", "Liberation Mono", monospace;
10494 font-size: 11px;
10545 font-size: 11px;
10495 color: white;
10546 color: white;
10496 background: black;
10547 background: black;
10497 }
10548 }
10498 .terminal-cursor {
10549 .terminal-cursor {
10499 color: black;
10550 color: black;
10500 background: white;
10551 background: white;
10501 }
10552 }
10502 #terminado-container {
10553 #terminado-container {
10503 margin: 8px;
10554 margin: 8px;
10504 }
10555 }
10505 /*# sourceMappingURL=../style/style.min.css.map */ No newline at end of file
10556 /*# sourceMappingURL=../style/style.min.css.map */
@@ -1,314 +1,349 b''
1 {
1 {
2 "extra": "future",
2 "extra": "future",
3 "cells": [
3 "cells": [
4 {
4 {
5 "cell_type": "markdown",
5 "cell_type": "markdown",
6 "extra": 5,
6 "extra": 5,
7 "metadata": {},
7 "metadata": {},
8 "source": [
8 "source": [
9 "# nbconvert latex test"
9 "# nbconvert latex test"
10 ]
10 ]
11 },
11 },
12 {
12 {
13 "cell_type": "markdown",
13 "cell_type": "markdown",
14 "metadata": {},
14 "metadata": {},
15 "source": [
15 "source": [
16 "**Lorem ipsum** dolor sit amet, consectetur adipiscing elit. Nunc luctus bibendum felis dictum sodales. Ut suscipit, orci ut interdum imperdiet, purus ligula mollis *justo*, non malesuada nisl augue eget lorem. Donec bibendum, erat sit amet porttitor aliquam, urna lorem ornare libero, in vehicula diam diam ut ante. Nam non urna rhoncus, accumsan elit sit amet, mollis tellus. Vestibulum nec tellus metus. Vestibulum tempor, ligula et vehicula rhoncus, sapien turpis faucibus lorem, id dapibus turpis mauris ac orci. Sed volutpat vestibulum venenatis."
16 "**Lorem ipsum** dolor sit amet, consectetur adipiscing elit. Nunc luctus bibendum felis dictum sodales. Ut suscipit, orci ut interdum imperdiet, purus ligula mollis *justo*, non malesuada nisl augue eget lorem. Donec bibendum, erat sit amet porttitor aliquam, urna lorem ornare libero, in vehicula diam diam ut ante. Nam non urna rhoncus, accumsan elit sit amet, mollis tellus. Vestibulum nec tellus metus. Vestibulum tempor, ligula et vehicula rhoncus, sapien turpis faucibus lorem, id dapibus turpis mauris ac orci. Sed volutpat vestibulum venenatis."
17 ]
17 ]
18 },
18 },
19 {
19 {
20 "cell_type": "markdown",
20 "cell_type": "markdown",
21 "metadata": {},
21 "metadata": {},
22 "source": [
22 "source": [
23 "## Printed Using Python"
23 "## Printed Using Python"
24 ]
24 ]
25 },
25 },
26 {
26 {
27 "cell_type": "code",
27 "cell_type": "code",
28 "execution_count": 1,
28 "execution_count": 1,
29 "future": "yes",
29 "future": "yes",
30 "metadata": {
30 "metadata": {
31 "collapsed": false
31 "collapsed": false
32 },
32 },
33 "outputs": [
33 "outputs": [
34 {
34 {
35 "name": "stdout",
35 "name": "stdout",
36 "extra": "future",
36 "extra": "future",
37 "output_type": "stream",
37 "output_type": "stream",
38 "text": [
38 "text": [
39 "hello\n"
39 "hello\n"
40 ]
40 ]
41 }
41 }
42 ],
42 ],
43 "source": [
43 "source": [
44 "print(\"hello\")"
44 "print(\"hello\")"
45 ]
45 ]
46 },
46 },
47 {
47 {
48 "cell_type": "markdown",
48 "cell_type": "markdown",
49 "metadata": {},
49 "metadata": {},
50 "source": [
50 "source": [
51 "## Pyout"
51 "## Pyout"
52 ]
52 ]
53 },
53 },
54 {
54 {
55 "cell_type": "code",
55 "cell_type": "code",
56 "execution_count": 3,
56 "execution_count": 3,
57 "metadata": {
57 "metadata": {
58 "collapsed": false
58 "collapsed": false
59 },
59 },
60 "outputs": [
60 "outputs": [
61 {
61 {
62 "data": {
62 "data": {
63 "text/html": [
63 "text/html": [
64 "\n",
64 "\n",
65 "<script>\n",
65 "<script>\n",
66 "console.log(\"hello\");\n",
66 "console.log(\"hello\");\n",
67 "</script>\n",
67 "</script>\n",
68 "<b>HTML</b>\n"
68 "<b>HTML</b>\n"
69 ],
69 ],
70 "text/plain": [
70 "text/plain": [
71 "<IPython.core.display.HTML at 0x1112757d0>"
71 "<IPython.core.display.HTML at 0x1112757d0>"
72 ]
72 ]
73 },
73 },
74 "execution_count": 3,
74 "execution_count": 3,
75 "metadata": {},
75 "metadata": {},
76 "output_type": "execute_result"
76 "output_type": "execute_result"
77 }
77 }
78 ],
78 ],
79 "source": [
79 "source": [
80 "from IPython.display import HTML\n",
80 "from IPython.display import HTML\n",
81 "HTML(\"\"\"\n",
81 "HTML(\"\"\"\n",
82 "<script>\n",
82 "<script>\n",
83 "console.log(\"hello\");\n",
83 "console.log(\"hello\");\n",
84 "</script>\n",
84 "</script>\n",
85 "<b>HTML</b>\n",
85 "<b>HTML</b>\n",
86 "\"\"\")"
86 "\"\"\")"
87 ]
87 ]
88 },
88 },
89 {
89 {
90 "cell_type": "code",
90 "cell_type": "code",
91 "execution_count": 7,
91 "execution_count": 7,
92 "metadata": {
92 "metadata": {
93 "collapsed": false
93 "collapsed": false
94 },
94 },
95 "outputs": [
95 "outputs": [
96 {
96 {
97 "data": {
97 "data": {
98 "application/javascript": [
98 "application/javascript": [
99 "console.log(\"hi\");"
99 "console.log(\"hi\");"
100 ],
100 ],
101 "text/plain": [
101 "text/plain": [
102 "<IPython.core.display.Javascript at 0x1112b4b50>"
102 "<IPython.core.display.Javascript at 0x1112b4b50>"
103 ]
103 ]
104 },
104 },
105 "metadata": {},
105 "metadata": {},
106 "output_type": "display_data"
106 "output_type": "display_data"
107 }
107 }
108 ],
108 ],
109 "source": [
109 "source": [
110 "%%javascript\n",
110 "%%javascript\n",
111 "console.log(\"hi\");"
111 "console.log(\"hi\");"
112 ]
112 ]
113 },
113 },
114 {
114 {
115 "cell_type": "markdown",
115 "cell_type": "markdown",
116 "metadata": {},
116 "metadata": {},
117 "source": [
117 "source": [
118 "### Image"
118 "### Image"
119 ]
119 ]
120 },
120 },
121 {
121 {
122 "cell_type": "code",
122 "cell_type": "code",
123 "execution_count": 6,
123 "execution_count": 6,
124 "metadata": {
124 "metadata": {
125 "collapsed": false
125 "collapsed": false
126 },
126 },
127 "outputs": [
127 "outputs": [
128 {
128 {
129 "data": {
129 "data": {
130 "image/png": [
130 "image/png": [
131 "iVBORw0KGgoAAAANSUhEUgAAAggAAABDCAYAAAD5/P3lAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\n",
131 "iVBORw0KGgoAAAANSUhEUgAAAggAAABDCAYAAAD5/P3lAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\n",
132 "AAAH3AAAB9wBYvxo6AAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAACAASURB\n",
132 "AAAH3AAAB9wBYvxo6AAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAACAASURB\n",
133 "VHic7Z15uBxF1bjfugkJhCWBsCSAJGACNg4QCI3RT1lEAVE+UEBNOmwCDcjHT1wQgU+WD3dFxA1o\n",
133 "VHic7Z15uBxF1bjfugkJhCWBsCSAJGACNg4QCI3RT1lEAVE+UEBNOmwCDcjHT1wQgU+WD3dFxA1o\n",
134 "CAikAZFFVlnCjizpsCUjHQjBIAkQlpCFJGS79fvjdGf69vTsc2fuza33eeaZmeqq6jM9vZw6dc4p\n",
134 "CAikAZFFVlnCjizpsCUjHQjBIAkQlpCFJGS79fvjdGf69vTsc2fuza33eeaZmeqq6jM9vZw6dc4p\n",
135 "BUwC+tE+fqW1fqmRDpRSHjCggS40sBxYDCxKvL8KzNBaL21EPoPB0DPIWVY/4NlE0ffzYfhgu+Qx\n",
135 "BUwC+tE+fqW1fqmRDpRSHjCggS40sBxYDCxKvL8KzNBaL21EPoPB0DPIWVY/4NlE0ffzYfhgu+Qx\n",
136 "GHoy/YFjaK+CcB3QkIIAHAWs3wRZsuhUSs0CXgQeBm7UWi/spn0Z+jA5yxpEfYruqnwYllRic5a1\n",
136 "GHoy/YFjaK+CcB3QkIIAHAWs3wRZsuhUSs0CXgQeBm7UWi/spn0Z+jA5yxpEfYruqnwYllRic5a1\n",
137 "MaWv8U5gaT4M19Sx396IAnZLfB/SLkEMhp5O/3YL0AvoAHaKXl8HLlZK3QZcpbWe0lbJDOsaHuDU\n",
137 "MaWv8U5gaT4M19Sx396IAnZLfB/SLkEMhp5O/3YL0AvoAHaKXl8HLlZK3QZcpbWe0lbJDOsaHuDU\n",
138 "0e4u4JAy2wPk/C1JzrKWArOQ0fUtwH35MOysQxaDwbCO0NFuAXoh6wPjgQeUUvcqpUa0WyCDoQls\n",
138 "0e4u4JAy2wPk/C1JzrKWArOQ0fUtwH35MOysQxaDwbCO0NFuAXoh6wPjgQeUUvcqpUa0WyCDoQls\n",
139 "CIwBjgfuAV7KWdY+7RWpmJxlXZezrEdylvXxdstiMKzrGAtCYxwI/EspdZbW+g/tFsbQ67kQuBHY\n",
139 "CIwBjgfuAV7KWdY+7RWpmJxlXZezrEdylvXxdstiMKzrGAtCYxwI/EspdZbW+g/tFsbQ67kQuBHY\n",
140 "FNgseh9FV6vCbUAeWBC9PgBeq2EfS6J2MQOBrRDTe5KdgAdzlvW1fBjeUUP/3UbOsoYBE6OvG7VT\n",
140 "FNgseh9FV6vCbUAeWBC9PgBeq2EfS6J2MQOBrRDTe5KdgAdzlvW1fBjeUUP/3UbOsoYBE6OvG7VT\n",
141 "FoOhL9Af+BUwFLkZpV+DaY6V4UPkRpb1+ncT+m8nGwK/V0oN01qf025hDL2XfBi+DLycLMtZVo6u\n",
141 "FoOhL9Af+BUwFLkZpV+DaY6V4UPkRpb1+ncT+m8nGwK/V0oN01qf025hDL2XfBi+DLycLMtZVo6u\n",
142 "CsKfGnSq8/NheEpqHwOBEcDBwJnAsGhTP2ByzrJG5cPwnQb22Sy+0G4BDIa+RH+t9dmlNiqlFKIk\n",
142 "CsKfGnSq8/NheEpqHwOBEcDBwJnAsGhTP2ByzrJG5cPwnQb22Sy+0G4BDIa+RH+t9dmlNiqlFKIk\n",
143 "JJWGi+jq5JPmq8BbJJQArfXqpkncczlbKbVQa/3rdgtiMNRCPgxXAK8Ar+Qs63LgXmDvaPPGwPeA\n",
143 "JJWGi+jq5JPmq8BbJJQArfXqpkncczlbKbVQa/3rdgtiMNRCPgxXAK8Ar+Qs63LgXmDvaPPGwPeA\n",
144 "H7VJvCRfbLcABkNfouwUg9ZaAwuj178BlFLvVejzgR4WFviM1npcuQpKqf6IyXIjxLS7GzAWuUnu\n",
144 "H7VJvCRfbLcABkNfouwUg9ZaAwuj178BlFLvVejzgR4WFviM1npcuQpKqf6IyXIjxLS7GzAWuUnu\n",
145 "XsO+fqWUellr3ZBJdq/jr9+BDn1uve07O9Rz0y6f8PtGZGgWe53oT6SBkZ/q1/nHZy47aloTRTKU\n",
145 "XsO+fqWUellr3ZBJdq/jr9+BDn1uve07O9Rz0y6f8PtGZGgWe53oT6SBkZ/q1/nHZy47aloTRTKU\n",
146 "IR+Gy3OWNR6Zxtg0Kv4KRkEwGPocxgcBiCwcsSI0F5iOhF+ilPok8C3gVGS+thK/VErdrbWuO2ys\n",
146 "IR+Gy3OWNR6Zxtg0Kv4KRkEwGPocxgcBiCwcsSI0F5iOhF+ilPok8C3gVGS+thK/VErdrbWuO2ys\n",
147 "s/+aLZTuOKbe9krrIUCPUBB0B+PQ1P1bdKe6EzAKQgvJh+GbOct6gkJkxM45y+qXDIWMHBhjBWJe\n",
147 "s/+aLZTuOKbe9krrIUCPUBB0B+PQ1P1bdKe6EzAKQgvJh+GbOct6gkJkxM45y+qXDIWMHBhjBWJe\n",
148 "PgyDWvaRs6zPIVObAG/nw/DpEvUGAp8E9gGGJzbtl7Os7cvs4skqp0V0Yl8jgcOBjyMDhbmIZeWl\n",
148 "PgyDWvaRs6zPIVObAG/nw/DpEvUGAp8E9gGGJzbtl7Os7cvs4skqp0V0Yl8jgcOBjyMDhbmIZeWl\n",
149 "fBg+UUVfReQsayhwELAnsAXi6/E28BxwTz4MP6iyn92RaSCA+/NhuCwqXx9R4MYhU0MfRTK/AjyW\n",
149 "fBg+UUVfReQsayhwELAnsAXi6/E28BxwTz4MP6iyn92RaSCA+/NhuCwqXx9R4MYhU0MfRTK/AjyW\n",
150 "D8MFGd0ZDFVhFIQKaK3/BXxfKXUlklTq0xWafAI4Driyu2UzGLqRlygoCArYHJif2H4gcFb0+Z2c\n",
150 "D8MFGd0ZDFVhFIQKaK3/BXxfKXUlklTq0xWafAI4Driyu2UzGLqRlygoCArYHJif2H4gcFb0+Z2c\n",
151 "ZW2bD8NV1XScs6yNgH8g/jsAPwCeTmzfFPgjYsnbiez71MUVdnMQcF8V4nyUs6whwB8QX4+0s2Ys\n",
151 "ZW2bD8NV1XScs6yNgH8g/jsAPwCeTmzfFPgjYsnbiez71MUVdnMQcF8V4nyUs6whwB8QX4+0s2Ys\n",
152 "0yPAt/NhGFbRZ/wbzgO+DaxXotqqnGX9GbigCkXhf5CBCsDngYdzljURGQhsWqLN+znL+iFwdT4M\n",
152 "0yPAt/NhGFbRZ/wbzgO+DaxXotqqnGX9GbigCkXhf5CBCsDngYdzljURGQhsWqLN+znL+iFwdT4M\n",
153 "dYk6BkNJTJhjlWitQ2Bf4P4qqv848t8wGHor6Yd9+ruHJFkC2BI4rIa+D6egHKwmstYlGAxMQCwH\n",
153 "dYk6BkNJTJhjlWitQ2Bf4P4qqv848t8wGHor6Yd9+ruHJFkC2BI4rIa+D6egHKwmstYlGAxMQCwH\n",
154 "rRjEPI5ER5S7ZvcFXsxZ1phKneUsawSi8HyH0soB0bbvAM9Ebaplt5xlnYkct1LKAYiFZhJwSQ19\n",
154 "rRjEPI5ER5S7ZvcFXsxZ1phKneUsawSi8HyH0soB0bbvAM9Ebaplt5xlnYkct1LKAYiFZhJwSQ19\n",
155 "GwxrMRaEGtBar1RKfRX4JxIzXortou3PN1mE+YgJsSwaeoLHOQCqUy3QSr9eqZ6G/gq2aYVMhqrY\n",
155 "GwxrMRaEGtBar1RKfRX4JxIzXortou3PN1mE+YgJsSwaeoLHOQCqUy3QSr9eqZ6G/gq2aYVMhqrY\n",
156 "OfF5FeJwvJZ8GM7JWdY/gC9HRS7wtyr7Pjrx+e6MqYC3KLbU7Qhck/h+FJIKvRRVjfSREXicU8EH\n",
156 "OfF5FeJwvJZ8GM7JWdY/gC9HRS7wtyr7Pjrx+e6MqYC3KLbU7Qhck/h+FJIKvRRVjfSREXicU8EH\n",
157 "pgAvIIqLBZwGfC7avl5Uf29KkLOsTZCMq8npj9sQx89no37HIlaAODplNPBIzrJ2z4dhNVlaT0HC\n",
157 "pgAvIIqLBZwGfC7avl5Uf29KkLOsTZCMq8npj9sQx89no37HIlaAODplNPBIzrJ2z4dhNVlaT0HC\n",
158 "XwFmIkrAC4if2PaIz8/3KCgn385Z1pX5MJxeRd8Gw1qMglAjWutlSqnTgUcqVP0SzVYQtP5mcMXE\n",
158 "XwFmIkrAC4if2PaIz8/3KCgn385Z1pX5MJxeRd8Gw1qMglAjWutlSqnTgUcqVP0SzVYQtP5mcMXE\n",
159 "SvvtUUy9YsK5QEWHy7EnTB6lOtSsFohkqEDOsgYAdqJoagkT9Z8pKAj75yzr4/kwnF2h748ho/GY\n",
159 "SvvtUUy9YsK5QEWHy7EnTB6lOtSsFohkqEDOsgYAdqJoagkT9Z8pKAj75yzr4/kwnF2h748ho/GY\n",
160 "q9J1oqiKLj4JOctKK8Yz8mH4Yrl9VcnHkXVYTsyHoZ8WJWdZNyPThbF5/3M5yzowH4alpi9+T0E5\n",
160 "q9J1oqiKLj4JOctKK8Yz8mH4Yrl9VcnHkXVYTsyHoZ8WJWdZNyPThbF5/3M5yzowH4alpi9+T0E5\n",
161 "WA18Nx+Gf0zVeRG4KmdZ90R9bwCMRKwyX69C5h2j91uA4/JhuCSxbTYwJWdZtwNPIFbifsAFSISZ\n",
161 "WA18Nx+Gf0zVeRG4KmdZ90R9bwCMRKwyX69C5h2j91uA4/JhuCSxbTYwJWdZtwNPIFbifsAFSISZ\n",
162 "wVA1ZoqhDrTWjyIjjXIc3ApZDIZu4ELgY4nvt5Wody8wJ/qsgBOr6HsihfvOfCRrY7v5dYZyAECk\n",
162 "wVA1ZoqhDrTWjyIjjXIc3ApZDIZu4ELgY4nvt5Wody8wJ/qsgBOr6HsihfvOfCRrY7v5dYZyAECk\n",
163 "GP0ISEZmZYZ55yxrB8SyEXNxhnKQ7Pt64H8TRUfmLGuXKmWeC4xPKQfJvp9CLCJlZTYYymEUhPq5\n",
163 "GP0ISEZmZYZ55yxrB8SyEXNxhnKQ7Pt64H8TRUfmLGuXKmWeC4xPKQfJvp9CLCJlZTYYymEUhPq5\n",
164 "tcL2XVsihcHQJHKWtU3Osi5GnAZj5iKWgiKitRouTxQdl7OscnPu0HV64dp8GLY7R8pyxEGxJPkw\n",
164 "tcL2XVsihcHQJHKWtU3Osi5GnAZj5iKWgiKitRouTxQdl7OscnPu0HV64dp8GLY7R8pyxEGxJPkw\n",
165 "fBcZ9ceUSvN8IoV76upK/UZcgawcG3NKqYopfleFU+gDic/b5SzLWIwNNWFOmPqp5CG9sVJqPa11\n",
165 "fBcZ9ceUSvN8IoV76upK/UZcgawcG3NKqYopfleFU+gDic/b5SzLWIwNNWFOmPqp5CG9sVJqPa11\n",
166 "VZ7dBkOL2D1nWcmcBkOR8MFtgM/QdTXJZcCR+TBcXqa/SYj5egAFZ8VMX4ScZe2FRPnEXF2z9M3n\n",
166 "VZ7dBkOL2D1nWcmcBkOR8MFtgM/QdTXJZcCR+TBcXqa/SYj5egAFZ8VMX4ScZe2FRPnEXF2z9M3n\n",
167 "3nwYVsrtAmK6/0z0uVR4ZXLtivvzYfhGpU7zYbgkZ1k3ACdHRQdWIQsUO3ZmkUzB3Q/xjaolLbeh\n",
167 "3nwYVsrtAmK6/0z0uVR4ZXLtivvzYfhGpU7zYbgkZ1k3ACdHRQdWIQsUO3ZmkUzB3Q/xjaolLbeh\n",
168 "j2MUhDrRWr+mlFpJ+eV5hyIxz4YWs98Fj/Rf8uZbozo0/ZYt7D8rf9ORK9stUw/hU9GrEnMAp1R+\n",
168 "j2MUhDrRWr+mlFpJ+eV5hyIxz4YWs98Fj/Rf8uZbozo0/ZYt7D8rf9ORK9stUw/hU9GrEnMAp1R+\n",
169 "gph8GL4bzdNPiIpOorSzYtJ68FS1IYPdTLWp3hcnPm+Q3pizrA7E+TCmFn+aZN0dcpY1LB+G5e4b\n",
169 "gph8GL4bzdNPiIpOorSzYtJ68FS1IYPdTLWp3hcnPm+Q3pizrA7E+TCmFn+aZN0dcpY1LB+G5e4b\n",
170 "y6rM8bA49X39GmQyGMwUQ4NUGnkMrbDd0A3sdeLk4z6cN+89pTtDTWd+gyErF+7pTv5eu+XqJbyK\n",
170 "y6rM8bA49X39GmQyGMwUQ4NUGnkMrbDd0A3sdeLk4z6cN+89pTtDTWd+gyErF+7pTv5eu+XqJbyK\n",
171 "TDHsmg/DJ6tsc2ni8+dzljUqXSGaevhmoqjIObFNVBzlV8kQug4W5tbQNl13WGatAv+poW+DoW6M\n",
171 "TDHsmg/DJ6tsc2ni8+dzljUqXSGaevhmoqjIObFNVBzlV8kQug4W5tbQNl13WGatAv+poW+DoW6M\n",
172 "BaExPgC2LrO9nHWhpSilDqI4NPMhrfXUJvS9M/DfqeJXtdY3N9p3rex50uQ9lFKT6BrTvoFCXbTX\n",
172 "BaExPgC2LrO9nHWhpSilDqI4NPMhrfXUJvS9M/DfqeJXtdY3N9p3rex50uQ9lFKT6BrTvoFCXbTX\n",
173 "yZNfmnrZxHtbLVMP4xng74nvK5DzeD7wfIWRayb5MHwiZ1kzgF0oOCuemar2ZQoK8zLgr7Xup5t4\n",
173 "yZNfmnrZxHtbLVMP4xng74nvK5DzeD7wfIWRayb5MHwiZ1kzgF0oOCuemar2ZQoK8zLgr7Xup5t4\n",
174 "s0n9DEl9b0RBSPeV5q0a+jYY6sYoCI1RacnZ91siRXUMAH6eKnsYicdulDOAY1NlpzWh35pRqG9R\n",
174 "s0n9DEl9b0RBSPeV5q0a+jYY6sYoCI1RacnZ91siRXUMAH6eKnsYicdulDOAY1NlpzWh35pRqG9R\n",
175 "IuGN7uw4AfG878s8nw/DX3RDv5dScGY8NmdZP86HYXJaJzm9cHMp7/s2UHdK9BTpKaxBNbRN163k\n",
175 "IuGN7uw4AfG878s8nw/DX3RDv5dScGY8NmdZP86HYXJaJzm9cHMp7/s2UHdK9BTpKaxBNbRN163k\n",
176 "t9Rux05DH8FMMTTGZhW2v9sSKarjbopNk/sqpUY30qlSahCSGS/JCuD6RvqtF6UpMm/HaHTJbYaG\n",
176 "t9Rux05DH8FMMTTGZhW2v9sSKarjbopNk/sqpUY30qlSahCSGS/JCuD6RvqtF6UpMm/HaHTJbYaG\n",
177 "mQzED/0umRVzlrUZhXwJ0HOmF5pJOlXyxzJrZbNt6rtZP8HQIzAKQp0opTZAlsItxTKtdTnv75YS\n",
177 "mQzED/0umRVzlrUZhXwJ0HOmF5pJOlXyxzJrZbNt6rtZP8HQIzAKQp0opTZAlsItxTKtdTnv75YS\n",
178 "LR7lpYqrjV0vx2EUH4fbtdZtucnpMqOrDjPy6jYii8DkRFHSYnAEhem22cBjrZKrVeTDcCldTf/p\n",
178 "LR7lpYqrjV0vx2EUH4fbtdZtucnpMqOrDjPy6jYii8DkRFHSYnAEhem22cBjrZKrVeTDcCldTf/p\n",
179 "h345ksrEGprnF2EwNIRREOrnMxW2z2uJFLVxJcXmy2OVUo34ShydUda+EaIq7T2u0SZTY/eSdFY8\n",
179 "h345ksrEGprnF2EwNIRREOrnMxW2z2uJFLVxJcXmy2OVUo34ShydUda+EaIq7T2u0SZTY/eSdFY8\n",
180 "MGdZm0efk86J6/LCQUnFp5pIkZjkcvQz8mH4YZPkMRgawigI9VNp7v7BlkhRA1rr+RQneNqC2hba\n",
180 "MGdZm0efk86J6/LCQUnFp5pIkZjkcvQz8mH4YZPkMRgawigI9VNp7v7BlkhRA1rr+RQneNqC2hba\n",
181 "WYtSajiS9z3JXLomaGktq/VllLIUdKqSWe0MjZMPwxlIel8Q/6Zv5CxrGIX8AJ10XU+hFtIRQ+UW\n",
181 "WYtSajiS9z3JXLomaGktq/VllLIUdKqSWe0MjZMPwxlIel8Q/6Zv5CxrGIX8AJ10XU+hFtIRQ+UW\n",
182 "KWoXyYyTu+Qsa79KDXKWNRpJyx5zZ9OlMhjqxCgIdaCU6g98o0K1npBCNotLM8rcOvuagCRgSXKN\n",
182 "KWoXyYyTu+Qsa79KDXKWNRpJyx5zZ9OlMhjqxCgIdaCU6g98o0K1npBCNotLM8rcOvuagCRgSXKN\n",
183 "1rozq3IrCCZNfFkrfRjotWsCaJinUBODK51/tkuuPkTy/DoYOIDCfeb+fBjW4t2/lqhdcmRdbUri\n",
183 "1rozq3IrCCZNfFkrfRjotWsCaJinUBODK51/tkuuPkTy/DoYOIDCfeb+fBjW4t2/lqhdcmRdbUri\n",
184 "VnILXS2HZ1WRvfAcCk61K4A/dYdgBkM9GAWhPr5F6XSrIBf6Qy2SpSaidSReShV/XilV7veUIj29\n",
184 "VnILXS2HZ1WRvfAcCk61K4A/dYdgBkM9GAWhPr5F6XSrIBf6Qy2SpSaidSReShV/XilV7veUIj29\n",
185 "oOkB2fGmXT7x7sCbOGpFf7VZx4A1m0/znG2nehMyc+0bms7NFJxzxwH7J7Y1OvWUPG9/mLOsLRvs\n",
185 "oOkB2fGmXT7x7sCbOGpFf7VZx4A1m0/znG2nehMyc+0bms7NFJxzxwH7J7Y1OvWUPG9/mLOsLRvs\n",
186 "r6lEaaOT0TtfBB5ITLWsJWdZg3KWdRNwTKL4wnwYzu9mMQ2GqjFhjjWilBqBpJYtx51a66UV6rST\n",
186 "r6lEaaOT0TtfBB5ITLWsJWdZg3KWdRNwTKL4wnwYzu9mMQ2GqjFhjjWilBqBpJYtx51a66UV6rST\n",
187 "S+maJz52VvxRdvVilFK7UbzexGNa67Kr+bWS6X+ekPYs79HkLGt34JOI+Xyz6D2d1vfMnGUdini6\n",
187 "S+maJz52VvxRdvVilFK7UbzexGNa67Kr+bWS6X+ekPYs79HkLGt34JOI+Xyz6D2d1vfMnGUdini6\n",
188 "L0C851/Oh2HD+SyaQT4MV+YsaxJyLm1Gwf9gAXBHg93/JNHHtsArOcuajCztPBDYCkkytBXg5sOw\n",
188 "L0C851/Oh2HD+SyaQT4MV+YsaxJyLm1Gwf9gAXBHg93/JNHHtsArOcuajCztPBDYCkkytBXg5sOw\n",
189 "5QmF8mF4W86yLgK+HxXtC8zKWVaALMm8CslHsicS7RFzL8VhyAZDWzEKQg0opbYE7qd8prPVdF2h\n",
189 "5QmF8mF4W86yLgK+HxXtC8zKWVaALMm8CslHsicS7RFzL8VhyAZDWzEKQg0opbYE7qd8prPVdF2h\n",
190 "rSdyLfALYMNE2XFKqR/XsHbEURll62L4Wiv5PuBUqPPF6JXkLuCQbpGoPi4HfohYKGMHWD9axrlu\n",
190 "rSdyLfALYMNE2XFKqR/XsHbEURll62L4Wiv5PuBUqPPF6JXkLuCQbpGoPi4HfohYKGMHWD9axrlu\n",
191 "8mF4Z7RuwfioaDBwaonqRemQW0U+DH+Qs6xFwHnIFNwQsv+3mMnA8dHiVwZDj8FMMVSJUuow4DkK\n",
191 "8mF4Z7RuwfioaDBwaonqRemQW0U+DH+Qs6xFwHnIFNwQsv+3mMnA8dHiVwZDj8FMMVSJUuow4DkK\n",
192 "a7GX4gqt9cstEKlutNaL6boULMho5tBq2iul+lH8IFuCmJcNfZx8GM6hOCFVU5THfBhOQHxfylkH\n",
192 "a7GX4gqt9cstEKlutNaL6boULMho5tBq2iul+lH8IFuCmJcNfZx8GM6hOCFVU5THfBhOQHxfylkH\n",
193 "3gY+asb+6iUfhhcCewC3l5BlFbJk/P75MDwqlVTKYOgRKK1rizhSSk2h67ximo1abV5XSi2n9EIk\n",
193 "3gY+asb+6iUfhhcCewC3l5BlFbJk/P75MDwqlVTKYOgRKK1rizhSSk2h67ximo1abV5XSi2n9EIk\n",
194 "z2itx5XYVqnfQcjI7DiqW2XtfeCTUbRA3ex50nWfUrqjeJEcrfcLrpj4SCN9xyilxgDPp4of0Fof\n",
194 "z2itx5XYVqnfQcjI7DiqW2XtfeCTUbRA3ex50nWfUrqjeJEcrfcLrpj4SCN9xyilxgDPp4of0Fof\n",
195 "UEXbg4B/pIqv1FrXnVNh7AmTR3V0qIwwRH1E4E28pd5+De0hZ1m/Bb4bfX0+H4Z7dMM+hgGjkDwC\n",
195 "UEXbg4B/pIqv1FrXnVNh7AmTR3V0qIwwRH1E4E28pd5+De0hZ1m/Bb4bfX0+H4Z7dMM+hgGjkDwC\n",
196 "S5FpjFk9bR4/Z1mDkGmF4VHR20g4Y3oxJYOhR9EXphg6lFLlVjFbH0mZvDGwCTAayCFe0ntTOZ1y\n",
196 "S5FpjFk9bR4/Z1mDkGmF4VHR20g4Y3oxJYOhR9EXphg6lFLlVjFbH0mZvDGwCTAayCFe0ntTOZ1y\n",
197 "zDLgkEaVg1ahtX5BKfUU8OlE8ReUUjtorSstCduzch8YehSR5/6ERFG3nBvRuhE9frXUfBguA6pd\n",
197 "zDLgkEaVg1ahtX5BKfUU8OlE8ReUUjtorSstCduzch8YehSR5/6ERFG3nBvRuhE9frXUfBguA6pd\n",
198 "+Mpg6DH0BQXBBro7o+Ea4Bta66e6eT/N5lK6KggKOAE4u1QDpdTGFOdNmNkLf7uh+zgYcRQEMa+3\n",
198 "+Mpg6DH0BQXBBro7o+Ea4Bta66e6eT/N5lK6KggKOAE4u1QDpdTGFOdNmNkLf7uh+zgYcRQEMa+3\n",
199 "Je22wWBoDOOD0DhLgYla67vaLUgd3ETxglLHRXkeSnEExQ5gbQ9tNPQokis5TsqHoVlbwGDohRgF\n",
199 "Je22wWBoDOOD0DhLgYla67vaLUgd3ETxglLHRXkeSnEExQ5gbQ9tNPQokis5TsqHoVlbwGDohRgF\n",
200 "oTECYHet9Y3tFqQetNYrKDb/DqN46eYk6emF1UhUhMFAzrImUEhDvgr4VRvFMRgMDWAUhPpYAvwf\n",
200 "oTECYHet9Y3tFqQetNYrKDb/DqN46eYk6emF1UhUhMFAzrImUEhDvgr4VRvFMRgMDWAUhPpYAvwf\n",
201 "8Bmte31+/8uQBEdJMjMrKqW2o5A2N+YfWusePw9s6F5yltWRs6zxwKRE8RXtyEVgMBiaQ1/wQWgm\n",
201 "8Bmte31+/8uQBEdJMjMrKqW2o5A2N+YfWusePw9s6F5yltWRs6zxwKRE8RXtyEVgMBiaQ1/wQWgm\n",
202 "eWTe/jqtdU9Zz74htNavKaXuAw5KFB+glBqptZ6Tqj6RQlrYGDO90AfJWdY5wNeQFQwHIAmetk5U\n",
202 "eWTe/jqtdU9Zz74htNavKaXuAw5KFB+glBqptZ6Tqj6RQlrYGDO90AfJWdY5wNeQFQwHIAmetk5U\n",
203 "eZFCsiCDwdALMQpCed5AphEC4NF12BHvUroqCAoJ7TwvVS+d++BdJEmPoe+xKRLnn0UeODwfhm3N\n",
203 "eZFCsiCDwdALMQpCed5AphEC4NF12BHvUroqCAoJ7TwvVS+d++BdJEmPoe+xKRLnn0UeODwfhm3N\n",
204 "RWAwGBqjLygIbwN/LbNdI1MGH6ReL/eWkMUmcDeSeGa7RNlRSqnzdZQoQym1C7Bzqt11NWReNKxb\n",
204 "RWAwGBqjLygIbwN/LbNdI1MGH6ReL/eWkMUmcDeSeGa7RNlRSqnzdZQoQym1C7Bzqt11NWReNKxb\n",
205 "zEMU6GHAesBiYCaSLOviaF0Cg8HQi+kLCsLrWuvT2y1ET0ZrvUYp5SG57mO2Bz4LPB59/2ZRQ5P7\n",
205 "zEMU6GHAesBiYCaSLOviaF0Cg8HQi+kLCsLrWuvT2y1ET0ZrvUYp5SG57mO2Bz4LPB59/2ZRQ5P7\n",
206 "oM+SD8OLgYvbLYfBYOg+jJOiIeZKxOs8STJiIb28daC1/lf3imQwGAyGdmEUBAMA0XTKraniI5VS\n",
206 "oM+SD8OLgYvbLYfBYOg+jJOiIeZKxOs8STJiIb28daC1/lf3imQwGAyGdmEUBAMA0XTKraniI5VS\n",
207 "A6O0zOnloI31wGAwGNZhjIJgSHJp6vtgJBNlehW65cANLZHIYDAYDG3BKAiGtWitHwVeShV/muLF\n",
207 "A6O0zOnloI31wGAwGNZhjIJgSHJp6vtgJBNlehW65cANLZHIYDAYDG3BKAiGtWitHwVeShV/muLF\n",
208 "uW7VWi9qjVQGg8FgaAd9wUnRUBuXAn9IfN8f+FyqTo/OfbDnSX8brDpXnqEUe2ropzQvdtDx66ev\n",
208 "uW7VWi9qjVQGg8FgaAd9wUnRUBuXAn9IfN8f+FyqTo/OfbDnSX8brDpXnqEUe2ropzQvdtDx66ev\n",
209 "GN9XolIMPQDb9T8LrBd4zsPtlsXQe7Bd/0BgQeA5QbtlMQqCIc21wC+ADaPv6WWu5wAPtVKgWtjt\n",
209 "GN9XolIMPQDb9T8LrBd4zsPtlsXQe7Bd/0BgQeA5QbtlMQqCIc21wC+ADaPv6WWu5wAPtVKgWtjt\n",
210 "6Os2XG/9jhdQjIzTQ2rFF9bQecy4E2/I9UQlwXb9LYDDK1R7K/Cc21shj6FxbNcfDjwGKNv1Rwae\n",
210 "6Os2XG/9jhdQjIzTQ2rFF9bQecy4E2/I9UQlwXb9LYDDK1R7K/Cc21shj6FxbNcfDjwGKNv1Rwae\n",
211 "83q7ZWo2tusPBb6ELGW9BbAICX99Gngs8Jx0hlZDBWzXHwvcC6ywXX9o4DlL2ymPURAMXdBaL1ZK\n",
211 "83q7ZWo2tusPBb6ELGW9BbAICX99Gngs8Jx0hlZDBWzXHwvcC6ywXX9o4DlL2ymPURAMXdBaL1ZK\n",
212 "+ZRItwz8Jc6N0BMZMFB9GxiZsWnzTjrPAH7QWomqYgTF/h9pngC6RUGwXf+XwC2B50ztjv57M7br\n",
212 "+ZRItwz8Jc6N0BMZMFB9GxiZsWnzTjrPAH7QWomqYgTF/h9pngC6RUGwXf+XwC2B50ztjv57M7br\n",
213 "XwJMCjxneo1NP0SWgAfJq7LOYLv+esAFwOkUL9wWM912/d0Dz+lsnWQ9A9v1BwEXAT8PPKfWVOML\n",
213 "XwJMCjxneo1NP0SWgAfJq7LOYLv+esAFwOkUL9wWM912/d0Dz+lsnWQ9A9v1BwEXAT8PPKfWVOML\n",
214 "kPVt3kNWQm0rxgfBkEWph5UG/tJCOWqnQ40ttUkrvWcrRamWwHOmAZsguSfGAi9Hmy5AUhgPAz7f\n",
214 "kPVt3kNWQm0rxgfBkEWph5UG/tJCOWqnQ40ttUkrvWcrRamWwHOmAZsguSfGAi9Hmy5AUhgPAz7f\n",
215 "Hfu2XX8k8ENgx+7ovzdju/4uwP9D/peaCDxnCbANsF3gOYubLVu7sF1/AHAHcBaiHDwI/C+ywNsE\n",
215 "Hfu2XX8k8ENgx+7ovzdju/4uwP9D/peaCDxnCbANsF3gOYubLVu7sF1/AHAHcBaiHDwI/C+ywNsE\n",
216 "4KfA68BdfVE5iNgbOBmxqtRE4Dn/BoYDnwg8Z02zBasVY0EwFKG1fkEp9RTioJjkIa11zzaVarYq\n",
216 "4KfA68BdfVE5iNgbOBmxqtRE4Dn/BoYDnwg8Z02zBasVY0EwFKG1fkEp9RTioJjkIa11zzaVarYq\n",
217 "vVFt2TpBaiN6oCwB5tiu/2FUPCvwnLTTaLM5oJv77800dGwCz1kXHXkvRNKydwI/Cjzn1+kKtuuf\n",
217 "vVFt2TpBaiN6oCwB5tiu/2FUPCvwnLTTaLM5oJv77800dGwCz1kXHXkvRNKydwI/Cjzn1+kKtuuf\n",
218 "i2TX7Ks0et681yxBGsUoCIZSBBQrCL0h98EbdW7rddiuPwoYFJu/bdffFNgL2BZ4DZgWKR5ZbRWS\n",
218 "i2TX7Ks0et681yxBGsUoCIZSBBQrCL0h98EbdW7rddiuPwoYFJu/bdffFNgL2BZ4DZgWKR5ZbRWS\n",
219 "2+KIqGiE7fpjUtXmlrtZRdaHscBAYDowM/CckimWbdffFfgw8JzXou/9kfUccojV5MXAcz4s0XYw\n",
219 "2+KIqGiE7fpjUtXmlrtZRdaHscBAYDowM/CckimWbdffFfgw8JzXou/9kfUccojV5MXAcz4s0XYw\n",
220 "sCsymu8PzAVmBJ7zVqn9pdoPRVKF7wSsAN4EgqzRve36HcAoZDEqgO0zjs3rged8kGo3gOJ05ADT\n",
220 "sCsymu8PzAVmBJ7zVqn9pdoPRVKF7wSsAN4EgqzRve36HcAoZDEqgO0zjs3rged8kGo3gOJ05ADT\n",
221 "s0bTkan+k9HXGaVGjNFxykVf81nH2Hb9Ich/MRJJeT291H9fL7brj6CwANfPspQDgOi3rijRx/rI\n",
221 "s0bTkan+k9HXGaVGjNFxykVf81nH2Hb9Ich/MRJJeT291H9fL7brj6CwANfPspQDgOi3rijRx/rI\n",
222 "b8kB7wPPBZ4zL6Ne/JvfCDzn/WhufhvgvsBzVkR1dgN2AR4JPGduom38P7wXeM7c6FzfCfgU4iMR\n",
222 "b8kB7wPPBZ4zL6Ne/JvfCDzn/WhufhvgvsBzVkR1dgN2AR4JPGduom38P7wXeM7c6FzfCfgU4iMR\n",
223 "lFLebNfPIefXzMBzikz8tusPQyx676bljmTeCfhyVLST7frp//TV9Dluu/6GwOhUvTWB58zIkjFq\n",
223 "lFLebNfPIefXzMBzikz8tusPQyx676bljmTeCfhyVLST7frp//TV9Dluu/6GwOhUvTWB58zIkjFq\n",
224 "sykyNfmfwHMW2K7fLzoWeyDTFPnAc14t1T7qYwNgT+Rc/wi5ZyT/N20UBEMRSqn+wNdTxQspTqTU\n",
224 "sykyNfmfwHMW2K7fLzoWeyDTFPnAc14t1T7qYwNgT+Rc/wi5ZyT/N20UBEMRSqn+wNdTxQspTqTU\n",
225 "41BaP6yVOipzGzzSYnG6m6uBz0YPv7OQm3dytc35tuuflHZutF3/BuArwEaJ4p/QNdU2wGnAH9M7\n",
225 "41BaP6yVOipzGzzSYnG6m6uBz0YPv7OQm3dytc35tuuflHZutF3/BuArwEaJ4p/QNdU2wGnAH9M7\n",
226 "jRSTG5CbS5LQdv2joymTLKYBzwHjbNc/DomW2TCxfbXt+sMCz3k/sa8RwM+Qh/X6qf5W2q4/CTit\n",
226 "jRSTG5CbS5LQdv2joymTLKYBzwHjbNc/DomW2TCxfbXt+sMCz3k/sa8RwM+Qh/X6qf5W2q4/CTit\n",
227 "zMN1OPB7CopQktW2658YeM5fEvXvRKZzBiXqZaWUPha4JlW2NfB8Rt0hiANfmjWIuf5jiLPfvVm/\n",
227 "zMN1OPB7CopQktW2658YeM5fEvXvRKZzBiXqZaWUPha4JlW2NfB8Rt0hiANfmjWIuf5jiLPfvVm/\n",
228 "AfmvbgNmB54zKrkheuD+Bjg11Wap7fpnBJ5TybelFk4E+iE+Fb+ptbHt+scg//nGqfJbgeMDz1mY\n",
228 "AfmvbgNmB54zKrkheuD+Bjg11Wap7fpnBJ5TybelFk4E+iE+Fb+ptbHt+scg//nGqfJbgeMDz1mY\n",
229 "KN4UOZYX2q7fSWHhuNdt198ZOBc4MypbbLv+5wPPeTb6PiJqe5ft+ichx3WXRN8rbdc/OfCcrGis\n",
229 "KN4UOZYX2q7fSWHhuNdt198ZOBc4MypbbLv+5wPPeTb6PiJqe5ft+ichx3WXRN8rbdc/OfCcrGis\n",
230 "R4ChiHKSlSn2f4BzkOvitMRvCKJ9DEzU9TPafwGZlkkyBvExSrKUrtdnmoOBycA5tus/iCyat3li\n",
230 "R4ChiHKSlSn2f4BzkOvitMRvCKJ9DEzU9TPafwGZlkkyBvExSrKUrtdnmoOBycA5tus/iCyat3li\n",
231 "u7Zd/0rk2ihS1mzXPwT4E3LulaLTKAiGLL6EaMlJbtBat91pphIjFw289t9DVh4N7Jva9EKnWnpJ\n",
231 "u7Zd/0rk2ihS1mzXPwT4E3LulaLTKAiGLL6EaMlJbtBat91pphIjFw289t9DVh4N7Jva9EKnWnpJ\n",
232 "G0RqBXcjCa08YCqy/PJE4L8A33b9HQPPeTNR/0bgvujzGchoywPSq5U+nd6R7fp7IDfRjYDrEE99\n",
232 "G0RqBXcjCa08YCqy/PJE4L8A33b9HQPPeTNR/0bgvujzGchoywPSq5U+nd6R7fp7IDfRjYDrEE99\n",
233 "DeyHrPb5lO364xI36zTb2q4/AUnt/SSyLHQHMvJZklQOIhYChyCLid2FWBoGIQrDfwGnAP8Gskzd\n",
233 "DeyHrPb5lO364xI36zTb2q4/AUnt/SSyLHQHMvJZklQOIhYChyCLid2FWBoGIQrDfwGnAP8Gskzd\n",
234 "VvSbBgPvIMdpJjLHuxdikXgg1ewa4Jbo84+BHRAFI/3gT9/QQZa+/iIy9zwccVQrSeA5nbbrX4s8\n",
234 "VvSbBgPvIMdpJjLHuxdikXgg1ewa4Jbo84+BHRAFI/3gT9/QQZa+/iIy9zwccVQrSeA5nbbrX4s8\n",
235 "cI6htIIQK7xdFJLIAvEEYjmYBlyP/E4LeXj92Xb94YHnnFtOjhrYJ3q/vtbpE9v1fwqcjYxUL0GO\n",
235 "cI6htIIQK7xdFJLIAvEEYjmYBlyP/E4LeXj92Xb94YHnnFtOjhrYJ3q/vtbpE9v1fwqcjYxUL0GO\n",
236 "51bI//g1YIzt+mNTSgJIivfNEIXgBOThfx0ySv8Nct7vgzgfj0+1HQf8E5iPKM/vI+vLHA9cZbs+\n",
236 "51bI//g1YIzt+mNTSgJIivfNEIXgBOThfx0ySv8Nct7vgzgfj0+1HQf8E5iPKM/vI+vLHA9cZbs+\n",
237 "JZSEevgDBZ++3yIKzgVI1FeSrCnD6ci0zebAJxCfjmoZjxzXPPBL5By0gW8jCt3sqHwtkYL1N0RB\n",
237 "JZSEevgDBZ++3yIKzgVI1FeSrCnD6ci0zebAJxCfjmoZjxzXPPBL5By0gW8jCt3sqHwtkYL1N0RB\n",
238 "/R2ymOG2yHE5CLFAHAu8ahQEQxbfyijrDdML3HTTkWvUBRfsb88bPb6TzjEK+oHKL184YHL+Jmdl\n",
238 "/R2ymOG2yHE5CLFAHAu8ahQEQxbfyijrDdML3HTTkWvUBRfsb88bPb6TzjEK+oHKL184YHL+Jmdl\n",
239 "u+XrJsYBhwaec0dcYLu+hzw0dkcu/AvjbUmLgu36DqIgPB54zuQq9nURMgI8LjnyBibZrj8z2s/l\n",
239 "u+XrJsYBhwaec0dcYLu+hzw0dkcu/AvjbUmLgu36DqIgPB54zuQq9nURMgI8LjnyBibZrj8z2s/l\n",
240 "tuvvVcJJbWvkXDoi8JzbKu0s8JxFtut/IqXgAPzOdv0/IiPnb5KhICAjpMGIEjAhPV1iu35HWsbA\n",
240 "tuvvVcJJbWvkXDoi8JzbKu0s8JxFtut/IqXgAPzOdv0/IiPnb5KhICAjpMGIEjAhPV1iu35HWsbA\n",
241 "c25ObD8ZURAeqibENBqpTYnark8FBSHiakRBOMx2/cHpB29kSv4KooSlLRYnIcrBHcBXk7/Fdv0b\n",
241 "c25ObD8ZURAeqibENBqpTYnark8FBSHiakRBOMx2/cHpB29kSv4KooSlLRYnIcrBHcBXk7/Fdv0b\n",
242 "gReAM23Xvz7wnJlVyFIJK3qfXUsj2/U/jiiiq4B9ktEytuv/Fhlpfx2xEnw31XxHYLfAc6bbrv8k\n",
242 "gReAM23Xvz7wnJlVyFIJK3qfXUsj2/U/jiiiq4B9ktEytuv/Fhlpfx2xEnw31XxHYLfAc6bbrv8k\n",
243 "cny/Bnwz8Jy/2q6/DTLd9F8Zu94ceXAeEHhOvM7MNbbrT0UU4vNs15+c2FY3gedcm/hNP0EUhDvL\n",
243 "cny/Bnwz8Jy/2q6/DTLd9F8Zu94ceXAeEHhOvM7MNbbrT0UU4vNs15+c2FY3gedcm/hNP0EUhDvL\n",
244 "KMrJtkuIFPboWNWiIOSAO4HDE7/Dj67FSxEn21+m2pyOWDpuCDxn7fG2Xf8e4F1EIVsceE5oohgM\n",
244 "KMrJtkuIFPboWNWiIOSAO4HDE7/Dj67FSxEn21+m2pyOWDpuCDxn7fG2Xf8e4F1EIVsceE5oohgM\n",
245 "XVBKjURuSEke11qXMhv3OPR553VO9Sb407yJZwTexO8FnnNV/qYj11XlAOCfSeUA1s4D/y36mp7f\n",
245 "XVBKjURuSEke11qXMhv3OPR553VO9Sb407yJZwTexO8FnnNV/qYj11XlAOCfSeUA1s4D/y36mp7f\n",
246 "rAvb9fdGLDMzU8pBzMXIg2wsMhLKQiFhgxWVg5gM5SDm+uh9VHqD7fr7IlaNFcAJWb4UPcHLPvCc\n",
246 "rAvb9fdGLDMzU8pBzMXIg2wsMhLKQiFhgxWVg5gM5SDm+uh9VHqD7fr7IlaNFcAJWb4UPcHLPvCc\n",
247 "2YgVZn3gyIwq30AsQg8lQ+aiefUfR1/PzlB08sD9Udusfmsi2t+Q6GutjspnIE6L16dDaSN/irMR\n",
247 "2YgVZn3gyIwq30AsQg8lQ+aiefUfR1/PzlB08sD9Udusfmsi2t+Q6GutjspnIE6L16dDaSN/irMR\n",
248 "p8dTbddPOxK/nwgxTZr8747e30SsEkNL7PvXGQrAVYgvwggK/gK9mXMyfuON0fvWkY9Dkp2i97uT\n",
248 "p8dTbddPOxK/nwgxTZr8747e30SsEkNL7PvXGQrAVYgvwggK/gK9mXMyfuON0fvWkY9Dkp2i97uT\n",
249 "hYHnLKNgURsDxknRUMz5FJ8XP22DHIbqSc9pxsSOW8ObtJ89ovdXbNcvpQC8j4zcdiTbnAoy4q2b\n",
249 "hYHnLKNgURsDxknRUMz5FJ8XP22DHIbqSc9pxsSOW8ObtJ89ovdXbNcvpQC8j4zcdiTbnAoy4q2b\n",
250 "6Ia3CYV5/Y0zqsXOf4/WEYveaq5GQuOOQaZekhydqJNkW2BLZF2UzhL/R+xE2XAIa+A52nb9lUho\n",
250 "6Ia3CYV5/Y0zqsXOf4/WEYveaq5GQuOOQaZekhydqJNkW2BLZF2UzhL/R+xE2XAIa+A52nb9lUho\n",
251 "Y63hd7GD5d1ZGwPPmW27/iuIUrkLXc/n9xP13rZd/yNgVezoF8n1NjAyyyKETGGl97fGdv1/IlaL\n",
251 "Y63hd7GD5d1ZGwPPmW27/iuIUrkLXc/n9xP13rZd/yNgVezoF8n1NjAyyyKETGGl97fGdv1/IlaL\n",
252 "3h7e+06WM2PgOQtt11+GTMcNo6vVJ1aWsyK+4nvFQjAKgiGBUmoshfnOmGe11vdl1Tf0GOaUKI9v\n",
252 "3h7e+06WM2PgOQtt11+GTMcNo6vVJ1aWsyK+4nvFQjAKgiGBUmoshfnOmGe11vdl1Tf0GOaUKI9v\n",
253 "lqrE9lqJb6b/Hb3KsU2Zba/VslPb9bdDfA0ORLz0N62iWWxVqMkc3iZuRuawP2u7/g6JKI9RSCTR\n",
253 "lqrE9lqJb6b/Hb3KsU2Zba/VslPb9bdDfA0ORLz0N62iWWxVqMkc3iZuRuawP2u7/g6JKI9RSCTR\n",
254 "YoodhOP/YgNKK2Ix2zZJzjnINMN2NbaL/4uiaIUE/0EUhB3pqiCkMwl2IscjXZZFJ/B2iW1xRtWR\n",
254 "YoodhOP/YgNKK2Ix2zZJzjnINMN2NbaL/4uiaIUE/0EUhB3pqiCkMwl2IscjXZZFJ/B2iW1xRtWR\n",
255 "ZWTqDcwps63U9f8Q0TSN7fp/iK0PtuvviPjmrCHyR1qrICilNkTmHjZDLsDke/JzOtwnzY1KqXcR\n",
255 "ZWTqDcwps63U9f8Q0TSN7fp/iK0PtuvviPjmrCHyR1qrICilNkTmHjZDLsDke/JzOtwnzY1KqXcR\n",
256 "R4cFiBab9XlRT87I19dQSo1GNPz0tJOxHvR8mhrOVobB0XuAOBiWo1zmwaqdXW3X3x+4BzGVv4SM\n",
256 "R4cFiBab9XlRT87I19dQSo1GNPz0tJOxHvR8mhrOVobB0XuAOBiWo1zmwaqdXW3X3x+4BzGVv4SM\n",
257 "pN9AnPEg21McxMIArTs2dRN4zoe26/8NOA6xGJwfbYqV9b8GnrM81Sz+Lz5A0qOXo2y4Ww3MoT4F\n",
257 "pN9AnPEg21McxMIArTs2dRN4zoe26/8NOA6xGJwfbYqV9b8GnrM81Sz+Lz5A0qOXo2y4Ww3MoT4F\n",
258 "IY4+KTfNF58TaXN4VthstVNDitLKcdxvOjKmEj0tv0M953fs87E3Eul0B2JliBflOzfwnFcA+iul\n",
258 "IY4+KTfNF58TaXN4VthstVNDitLKcdxvOjKmEj0tv0M953fs87E3Eul0B2JliBflOzfwnFcA+iul\n",
259 "5iEmwQFNEBaK569L0amUWggcqrXO8gg2FKHG2CdW4Uem9XvBlUflu7RUaiByU3lPa92ZKN8cSav8\n",
259 "5iEmwQFNEBaK569L0amUWggcqrXO8gg2FKHG2CdW4Uem9XvBlUflu7RUaiByU3lPa92ZKN8cSav8\n",
260 "fUQBTHKr1rrqueIsxp18/eg1azrLjSYB6NfRsY3G6Is9nDjDYxh4zundvbMotvtm5N50duA5P09t\n",
260 "fUQBTHKr1rrqueIsxp18/eg1azrLjSYB6NfRsY3G6Is9nDjDYxh4zundvbMotvtm5N50duA5P09t\n",
261 "T0faJIkfirU+zNrF1YiC4FBQECZE73/JqB//F+u14r+ImIVEOB1iu/6ZNfhwzEamp7YuU2e7RN1m\n",
261 "T0faJIkfirU+zNrF1YiC4FBQECZE73/JqB//F+u14r+ImIVEOB1iu/6ZNfhwzEamp7YuU2e7RN1m\n",
262 "oZBnW5YVIfZ1qNWfotw51yuIph++hET0bAkcikwpTAEuCjxnSly3PzIP0a8NcnYgD6SBlSoaIhQX\n",
262 "oZBnW5YVIfZ1qNWfotw51yuIph++hET0bAkcikwpTAEuCjxnSly3PzIP0a8NcnYgD6SBlSoaIhQX\n",
263 "V2UtVup24LBU6S7IyG+NUuodZP52awojrTSvIjeshlij9XdQKh2jXYRRDtpGfOCruQfEpmzbdn0V\n",
263 "V2UtVup24LBU6S7IyG+NUuodZP52awojrTSvIjeshlij9XdQKh2jXYRRDtpGfOCruQfEpmzbdn0V\n",
264 "dP9iPLsgjnEryI67Lzd/PCt6/5Tt+v3LJXAqQ/z7ut2ZO/Ccx23XfxUYZbt+7D8xCngl8Jwsa80s\n",
264 "dP9iPLsgjnEryI67Lzd/PCt6/5Tt+v3LJXAqQ/z7ut2ZO/Ccx23XfxUYZbt+7D8xCngl8Jwsa80s\n",
265 "ZBS8ke36O7cg4ybA5UgegJ0QE/XN5auvZRaiIMQRF12wXX8TCv9ls6eERpOtIMR+EXNS5YsRh8dS\n",
265 "ZBS8ke36O7cg4ybA5UgegJ0QE/XN5auvZRaiIMQRF12wXX8TCv9ls6eERpOtIMR+EXNS5YsRh8dS\n",
266 "To/V+CzUck21i6uR5++4wHNeKFXJRDH0PfoR5fqmtHKwDDhCa73O5JA3lCSeF04v6Z3FPRTMzBO7\n",
266 "To/V+CzUck21i6uR5++4wHNeKFXJRDH0PfoR5fqmtHKwDDhCa73O5JA3lCSeF04v6Z3FPRTMzBO7\n",
267 "S6AE8Q12PbomgYn5Xpm29yMPhu2RUK96iKMn9q6zfa38JXo/NHoly7oQeM5K4Iro60+jKINuJVJC\n",
267 "S6AE8Q12PbomgYn5Xpm29yMPhu2RUK96iKMn9q6zfa38JXo/NHoly7oQeM5K4Iro60+jKINuJVJC\n",
268 "Yu/439uuX805A4VkWyfbrp+V/MdFnOmeCmpfFKsSRYMc2/U/DeyG3OfSjpOx5WmfVHmcuXFcFfus\n",
268 "Yu/439uuX805A4VkWyfbrp+V/MdFnOmeCmpfFKsSRYMc2/U/DeyG3OfSjpOx5WmfVHmcuXFcFfus\n",
269 "5ZpqObbrb45EtswqpxyAcVI0FDMbOFxrXeT9a+heopvnEArzolvashT0wmbEapdgGpIU5XDb9R9F\n",
269 "5ZpqObbrb45EtswqpxyAcVI0FDMbOFxrXeT9a+heopvnEArzolvashT0wmbEapdgGpIU5XDb9R9F\n",
270 "YqrXQyyL8wPPeTeuGHjOMtv1T0VuqldH6W//jigNmyHOcAcBgwPPcZog20xkRLcJ8DPb9S9CRqM7\n",
270 "YqrXQyyL8wPPeTeuGHjOMtv1T0VuqldH6W//jigNmyHOcAcBgwPPcZog20xkRLcJ8DPb9S9CRqM7\n",
271 "I7kDvoDE1hfdxwLPWWy7/plI7oCLbNffHXm4zUQeRtsjGRP/EXhOKSfcABkpj49i5+9G/putgHmB\n",
271 "I7kDvoDE1hfdxwLPWWy7/plI7oCLbNffHXm4zUQeRtsjGRP/EXhOKSfcABkpj49i5+9G/putgHmB\n",
272 "5yxIN4iSF21C14V6Rtiu/yYSW15uHv4a4P8oKAedlPcvOAv4KmItfCTKKfAS8v8NR1ILHwnsl5GA\n",
272 "5yxIN4iSF21C14V6Rtiu/yYSW15uHv4a4P8oKAedlPcvOAv4KmItfCTKKfAS8v8NR1ILHwnsl5GA\n",
273 "qF7ORdYaGA48HGWyfBqYgViDRwCfQR72PkDgOU9E2TvHI4m0TgeeRczb30DyH2iKcyA0ymrgWNv1\n",
273 "qF7ORdYaGA48HGWyfBqYgViDRwCfQR72PkDgOU9E2TvHI4m0TgeeRczb30DyH2iKcyA0ymrgWNv1\n",
274 "FyDK1NvIQ3tStN3LCH+9HUl29UPb9echFo8BUbtLEKfJtJ9EmgA59ifbrj8bCR3cGDlvZqdTLcPa\n",
274 "FyDK1NvIQ3tStN3LCH+9HUl29UPb9echFo8BUbtLEKfJtJ9EmgA59ifbrj8bCR3cGDlvZqdTLcPa\n",
275 "9NCbUMhs2GFLKvPFSAKxZl7/CxEL8pgoA+QMxD+kE3HenAHcHnjOGmNB6Dt8iGjHWSFKK4HHkcQr\n",
275 "9NCbUMhs2GFLKvPFSAKxZl7/CxEL8pgoA+QMxD+kE3HenAHcHnjOGmNB6Dt8iGjHWSFKK4HHkcQr\n",
276 "OxvloLXYrr+77fqrEIejNyiE6P0WccZbabv+lFLtG+Ry5AY/BHkYfRDtR9M79QAAA3FJREFUcwYS\n",
276 "OxvloLXYrr+77fqrEIejNyiE6P0WccZbabv+lFLtG+Ry5AY/BHkYfRDtR9M79QAAA3FJREFUcwYS\n",
277 "NdCFwHPuQR6a7wHfAR5GMhk+i9xcT6G6KIOKBJ6zFBn9r0GUmBlIWN9ziHf/5yjO/phsfy2yqt4i\n",
277 "NdCFwHPuQR6a7wHfAR5GMhk+i9xcT6G6KIOKBJ6zFBn9r0GUmBlIWN9ziHf/5yjO/phsfy2yqt4i\n",
278 "xOJxF3INTI9k/Q7ZoV4xv0PC5LZCci4sQm6g08kYHdquvxy5lt4DwsSmF5EENCts1//Idv3M9LbR\n",
278 "xOJxF3INTI9k/Q7ZoV4xv0PC5LZCci4sQm6g08kYHdquvxy5lt4DwsSmF5EENCts1//Idv3M9LbR\n",
279 "egJTkEx4NvBA1joFifqLIjkeR6wcfwdeQfIFTEEcjHNU79RXkShvw95Ixs5+yOj/KuSh+ATiAHcq\n",
279 "egJTkEx4NvBA1joFifqLIjkeR6wcfwdeQfIFTEEcjHNU79RXkShvw95Ixs5+yOj/KuSh+ATiAHcq\n",
280 "xb4fxwOXRfJMQc6zlxGF6B3g4MBznmmWnBFzEUfP0xDFcCGiAG+JHKushESXIdanjRBF4l3EInAj\n",
280 "xb4fxwOXRfJMQc6zlxGF6B3g4MBznmmWnBFzEUfP0xDFcCGiAG+JHKushESXIdanjRBF4l3EInAj\n",
281 "8vuOqWK/5yNRGaOQFNkfIhkOX6CQgwAA2/W3jkI3V0T7ejjatAFyXb2PXP/LbVnroWGi6bbzo697\n",
281 "8vuOqWK/5yNRGaOQFNkfIhkOX6CQgwAA2/W3jkI3V0T7ejjatAFyXb2PXP/LbVnroWGi6bbzo697\n",
282 "IlaWk5Br93wkk+jztusP7o94Lna7eaoMZU0cVXIAped7eqGZfP2ZqmPFl+ptrVf3n19UpvVMYLRS\n",
282 "IlaWk5Br93wkk+jztusP7o94Lna7eaoMZU0cVXIAped7eqGZfP2ZqmPFl+ptrVf3n19UpvVMYLRS\n",
283 "agBywxuEjLwWAe9qrTMXV2mUzs7OP/Xrp+6qt33Hmn5Zue3XNeZTOVoky5nqKiQkrNT883Qk3WvJ\n",
283 "agBywxuEjLwWAe9qrTMXV2mUzs7OP/Xrp+6qt33Hmn5Zue3XNeZTOVoky5nqKiQkrNT883Qk3WvJ\n",
284 "sMLAc1bbrv9Z5AH6KWRkOB+5wRWlWo7a3Ga7/mOIomAho/GFyI30YeDREru7ELlOq07TG3jONbbr\n",
284 "sMLAc1bbrv9Z5AH6KWRkOB+5wRWlWo7a3Ga7/mOIomAho/GFyI30YeDREru7ELlOq07TG3jONbbr\n",
285 "T0Nu9KOQm+i/gFsDz3nTdv2fI2FbpdpfHnlpH4LcnHdAlIz5yLErqXgFnvOR7fo28lDYE7lu3kKO\n",
285 "T0Nu9KOQm+i/gFsDz3nTdv2fI2FbpdpfHnlpH4LcnHdAlIz5yLErqXgFnvOR7fo28lDYE7lu3kKO\n",
286 "TdZ9K52xrhTl7knnUVB6SqVeTsr4apQU6lDEbG4hCsFbROsRBE1ebjrwnNB2/XGIGf5gRBkYhPyv\n",
286 "TdZ9K52xrhTl7knnUVB6SqVeTsr4apQU6lDEbG4hCsFbROsRBE1ebjrwnNB2/XGIGf5gRBkYhPyv\n",
287 "7yDpjR9MtVkOnGK7/vWIgrFrVPcF4O8ZKbaXIuduWkH6KfL/JbkEsWClfWK2CDzHt10/jzhXjkGO\n",
287 "7yDpjR9MtVkOnGK7/vWIgrFrVPcF4O8ZKbaXIuduWkH6KfL/JbkEsWClfWK2CDzHt10/jzhXjkGO\n",
288 "yzNIZEiRD00ga3ocaLv+kUh2xo8hSuVURKmIUyiXVGYCWVzKQlJD7xrJNg85b9LX8RLgF6X6SpFU\n",
288 "yzNIZEiRD00ga3ocaLv+kUh2xo8hSuVURKmIUyiXVGYCWVzKQlJD7xrJNg85b9LX8RLgF6X6SpFU\n",
289 "9Cpe28gaJgORqEEAbNffDLlvHIQoAndR8NEYilwjExD/nwuUiTQ0GAwGw7qC7fqjEUvKqsBzmhWd\n",
289 "9Cpe28gaJgORqEEAbNffDLlvHIQoAndR8NEYilwjExD/nwuUiTQ0GAwGw7qC7fqjEUvKqsBzmhWd\n",
290 "t05gu/5pyNoifw48J9N5PForxQeeNFMMBoPBYDD0DWL/llvK1In9jt4zCoLBYDAYDH2DePo5MwrJ\n",
290 "t05gu/5pyNoifw48J9N5PForxQeeNFMMBoPBYDD0DWL/llvK1In9jt4zCoLBYDAYDH2DePo5MwrJ\n",
291 "dv0hFPwTnjBRDAaDwWAw9A3+hPgOHRPl25iK+FhsiuR4OARx0Lwf+J1REAwGg8Fg6AMEnvNklL78\n",
291 "dv0hFPwTnjBRDAaDwWAw9A3+hPgOHRPl25iK+FhsiuR4OARx0Lwf+J1REAwGg8Fg6AMEnvNklL78\n",
292 "HMRRca/E5hVINNIVwI2B56z6/3ExLRI31pXNAAAAAElFTkSuQmCC\n"
292 "HMRRca/E5hVINNIVwI2B56z6/3ExLRI31pXNAAAAAElFTkSuQmCC\n"
293 ],
293 ],
294 "extra": "yes",
294 "extra": "yes",
295 "text/plain": [
295 "text/plain": [
296 "<IPython.core.display.Image at 0x111275490>"
296 "<IPython.core.display.Image at 0x111275490>"
297 ]
297 ]
298 },
298 },
299 "execution_count": 6,
299 "execution_count": 6,
300 "metadata": {},
300 "metadata": {},
301 "extra": "yes",
301 "extra": "yes",
302 "output_type": "execute_result"
302 "output_type": "execute_result"
303 }
303 }
304 ],
304 ],
305 "source": [
305 "source": [
306 "from IPython.display import Image\n",
306 "from IPython.display import Image\n",
307 "Image(\"http://ipython.org/_static/IPy_header.png\")"
307 "Image(\"http://ipython.org/_static/IPy_header.png\")"
308 ]
308 ]
309 },
310 {
311 "cell_type": "future cell",
312 "metadata": {},
313 "key": "value"
314 },
315 {
316 "cell_type": "code",
317 "execution_count": 99,
318 "metadata": {},
319 "outputs": [
320 {
321 "name": "stdout",
322 "output_type": "stream",
323 "text": [
324 "hello\n"
325 ]
326 },
327 {
328 "output_type": "future output",
329 "some key": [
330 "some data"
331 ]
332 },
333 {
334 "name": "stdout",
335 "output_type": "stream",
336 "text": [
337 "hello again\n"
338 ]
339 }
340 ],
341 "source": [
342 "future_output()"
343 ]
309 }
344 }
310 ],
345 ],
311 "metadata": {},
346 "metadata": {},
312 "nbformat": 4,
347 "nbformat": 4,
313 "nbformat_minor": 99
348 "nbformat_minor": 99
314 } No newline at end of file
349 }
@@ -1,308 +1,349 b''
1 {
1 {
2 "$schema": "http://json-schema.org/draft-04/schema#",
2 "$schema": "http://json-schema.org/draft-04/schema#",
3 "description": "IPython Notebook v4.0 JSON schema.",
3 "description": "IPython Notebook v4.0 JSON schema.",
4 "type": "object",
4 "type": "object",
5 "additionalProperties": false,
5 "additionalProperties": false,
6 "required": ["metadata", "nbformat_minor", "nbformat", "cells"],
6 "required": ["metadata", "nbformat_minor", "nbformat", "cells"],
7 "properties": {
7 "properties": {
8 "metadata": {
8 "metadata": {
9 "description": "Notebook root-level metadata.",
9 "description": "Notebook root-level metadata.",
10 "type": "object",
10 "type": "object",
11 "additionalProperties": true,
11 "additionalProperties": true,
12 "properties": {
12 "properties": {
13 "kernel_info": {
13 "kernel_info": {
14 "description": "Kernel information.",
14 "description": "Kernel information.",
15 "type": "object",
15 "type": "object",
16 "required": ["name", "language"],
16 "required": ["name", "language"],
17 "properties": {
17 "properties": {
18 "name": {
18 "name": {
19 "description": "Name of the kernel specification.",
19 "description": "Name of the kernel specification.",
20 "type": "string"
20 "type": "string"
21 },
21 },
22 "language": {
22 "language": {
23 "description": "The programming language which this kernel runs.",
23 "description": "The programming language which this kernel runs.",
24 "type": "string"
24 "type": "string"
25 },
25 },
26 "codemirror_mode": {
26 "codemirror_mode": {
27 "description": "The codemirror mode to use for code in this language.",
27 "description": "The codemirror mode to use for code in this language.",
28 "type": "string"
28 "type": "string"
29 }
29 }
30 }
30 }
31 },
31 },
32 "signature": {
32 "signature": {
33 "description": "Hash of the notebook.",
33 "description": "Hash of the notebook.",
34 "type": "string"
34 "type": "string"
35 },
35 },
36 "orig_nbformat": {
36 "orig_nbformat": {
37 "description": "Original notebook format (major number) before converting the notebook between versions. This should never be written to a file.",
37 "description": "Original notebook format (major number) before converting the notebook between versions. This should never be written to a file.",
38 "type": "integer",
38 "type": "integer",
39 "minimum": 1
39 "minimum": 1
40 }
40 }
41 }
41 }
42 },
42 },
43 "nbformat_minor": {
43 "nbformat_minor": {
44 "description": "Notebook format (minor number). Incremented for backward compatible changes to the notebook format.",
44 "description": "Notebook format (minor number). Incremented for backward compatible changes to the notebook format.",
45 "type": "integer",
45 "type": "integer",
46 "minimum": 0
46 "minimum": 0
47 },
47 },
48 "nbformat": {
48 "nbformat": {
49 "description": "Notebook format (major number). Incremented between backwards incompatible changes to the notebook format.",
49 "description": "Notebook format (major number). Incremented between backwards incompatible changes to the notebook format.",
50 "type": "integer",
50 "type": "integer",
51 "minimum": 4,
51 "minimum": 4,
52 "maximum": 4
52 "maximum": 4
53 },
53 },
54 "cells": {
54 "cells": {
55 "description": "Array of cells of the current notebook.",
55 "description": "Array of cells of the current notebook.",
56 "type": "array",
56 "type": "array",
57 "items": {
57 "items": {"$ref": "#/definitions/cell"}
58 "type": "object",
59 "oneOf": [
60 {"$ref": "#/definitions/raw_cell"},
61 {"$ref": "#/definitions/markdown_cell"},
62 {"$ref": "#/definitions/code_cell"}
63 ]
64 }
65 }
58 }
66 },
59 },
67
60
68 "definitions": {
61 "definitions": {
62 "cell": {
63 "type": "object",
64 "oneOf": [
65 {"$ref": "#/definitions/raw_cell"},
66 {"$ref": "#/definitions/markdown_cell"},
67 {"$ref": "#/definitions/code_cell"}
68 ]
69 },
69
70
70 "raw_cell": {
71 "raw_cell": {
71 "description": "Notebook raw nbconvert cell.",
72 "description": "Notebook raw nbconvert cell.",
72 "type": "object",
73 "type": "object",
73 "additionalProperties": false,
74 "additionalProperties": false,
74 "required": ["cell_type", "metadata", "source"],
75 "required": ["cell_type", "metadata", "source"],
75 "properties": {
76 "properties": {
76 "cell_type": {
77 "cell_type": {
77 "description": "String identifying the type of cell.",
78 "description": "String identifying the type of cell.",
78 "enum": ["raw"]
79 "enum": ["raw"]
79 },
80 },
80 "metadata": {
81 "metadata": {
81 "description": "Cell-level metadata.",
82 "description": "Cell-level metadata.",
82 "type": "object",
83 "type": "object",
83 "additionalProperties": true,
84 "additionalProperties": true,
84 "properties": {
85 "properties": {
85 "format": {
86 "format": {
86 "description": "Raw cell metadata format for nbconvert.",
87 "description": "Raw cell metadata format for nbconvert.",
87 "type": "string"
88 "type": "string"
88 },
89 },
89 "name": {"$ref": "#/definitions/misc/metadata_name"},
90 "name": {"$ref": "#/definitions/misc/metadata_name"},
90 "tags": {"$ref": "#/definitions/misc/metadata_tags"}
91 "tags": {"$ref": "#/definitions/misc/metadata_tags"}
91 }
92 }
92 },
93 },
93 "source": {"$ref": "#/definitions/misc/source"}
94 "source": {"$ref": "#/definitions/misc/source"}
94 }
95 }
95 },
96 },
96
97
97 "markdown_cell": {
98 "markdown_cell": {
98 "description": "Notebook markdown cell.",
99 "description": "Notebook markdown cell.",
99 "type": "object",
100 "type": "object",
100 "additionalProperties": false,
101 "additionalProperties": false,
101 "required": ["cell_type", "metadata", "source"],
102 "required": ["cell_type", "metadata", "source"],
102 "properties": {
103 "properties": {
103 "cell_type": {
104 "cell_type": {
104 "description": "String identifying the type of cell.",
105 "description": "String identifying the type of cell.",
105 "enum": ["markdown"]
106 "enum": ["markdown"]
106 },
107 },
107 "metadata": {
108 "metadata": {
108 "description": "Cell-level metadata.",
109 "description": "Cell-level metadata.",
109 "type": "object",
110 "type": "object",
110 "properties": {
111 "properties": {
111 "name": {"$ref": "#/definitions/misc/metadata_name"},
112 "name": {"$ref": "#/definitions/misc/metadata_name"},
112 "tags": {"$ref": "#/definitions/misc/metadata_tags"}
113 "tags": {"$ref": "#/definitions/misc/metadata_tags"}
113 },
114 },
114 "additionalProperties": true
115 "additionalProperties": true
115 },
116 },
116 "source": {"$ref": "#/definitions/misc/source"}
117 "source": {"$ref": "#/definitions/misc/source"}
117 }
118 }
118 },
119 },
119
120
120 "code_cell": {
121 "code_cell": {
121 "description": "Notebook code cell.",
122 "description": "Notebook code cell.",
122 "type": "object",
123 "type": "object",
123 "additionalProperties": false,
124 "additionalProperties": false,
124 "required": ["cell_type", "metadata", "source", "outputs", "execution_count"],
125 "required": ["cell_type", "metadata", "source", "outputs", "execution_count"],
125 "properties": {
126 "properties": {
126 "cell_type": {
127 "cell_type": {
127 "description": "String identifying the type of cell.",
128 "description": "String identifying the type of cell.",
128 "enum": ["code"]
129 "enum": ["code"]
129 },
130 },
130 "metadata": {
131 "metadata": {
131 "description": "Cell-level metadata.",
132 "description": "Cell-level metadata.",
132 "type": "object",
133 "type": "object",
133 "additionalProperties": true,
134 "additionalProperties": true,
134 "properties": {
135 "properties": {
135 "collapsed": {
136 "collapsed": {
136 "description": "Whether the cell is collapsed/expanded.",
137 "description": "Whether the cell is collapsed/expanded.",
137 "type": "boolean"
138 "type": "boolean"
138 },
139 },
139 "autoscroll": {
140 "autoscroll": {
140 "description": "Whether the cell's output is scrolled, unscrolled, or autoscrolled.",
141 "description": "Whether the cell's output is scrolled, unscrolled, or autoscrolled.",
141 "enum": [true, false, "auto"]
142 "enum": [true, false, "auto"]
142 },
143 },
143 "name": {"$ref": "#/definitions/misc/metadata_name"},
144 "name": {"$ref": "#/definitions/misc/metadata_name"},
144 "tags": {"$ref": "#/definitions/misc/metadata_tags"}
145 "tags": {"$ref": "#/definitions/misc/metadata_tags"}
145 }
146 }
146 },
147 },
147 "source": {"$ref": "#/definitions/misc/source"},
148 "source": {"$ref": "#/definitions/misc/source"},
148 "outputs": {
149 "outputs": {
149 "description": "Execution, display, or stream outputs.",
150 "description": "Execution, display, or stream outputs.",
150 "type": "array",
151 "type": "array",
151 "items": {"$ref": "#/definitions/output"}
152 "items": {"$ref": "#/definitions/output"}
152 },
153 },
153 "execution_count": {
154 "execution_count": {
154 "description": "The code cell's prompt number. Will be null if the cell has not been run.",
155 "description": "The code cell's prompt number. Will be null if the cell has not been run.",
155 "type": ["integer", "null"],
156 "type": ["integer", "null"],
156 "minimum": 0
157 "minimum": 0
157 }
158 }
158 }
159 }
159 },
160 },
161
162 "unrecognized_cell": {
163 "description": "Unrecognized cell from a future minor-revision to the notebook format.",
164 "type": "object",
165 "additionalProperties": true,
166 "required": ["cell_type", "metadata"],
167 "properties": {
168 "cell_type": {
169 "description": "String identifying the type of cell.",
170 "not" : {
171 "enum": ["markdown", "code", "raw"]
172 }
173 },
174 "metadata": {
175 "description": "Cell-level metadata.",
176 "type": "object",
177 "properties": {
178 "name": {"$ref": "#/definitions/misc/metadata_name"},
179 "tags": {"$ref": "#/definitions/misc/metadata_tags"}
180 },
181 "additionalProperties": true
182 }
183 }
184 },
185
160 "output": {
186 "output": {
161 "type": "object",
187 "type": "object",
162 "oneOf": [
188 "oneOf": [
163 {"$ref": "#/definitions/execute_result"},
189 {"$ref": "#/definitions/execute_result"},
164 {"$ref": "#/definitions/display_data"},
190 {"$ref": "#/definitions/display_data"},
165 {"$ref": "#/definitions/stream"},
191 {"$ref": "#/definitions/stream"},
166 {"$ref": "#/definitions/error"}
192 {"$ref": "#/definitions/error"}
167 ]
193 ]
168 },
194 },
169
195
170 "execute_result": {
196 "execute_result": {
171 "description": "Result of executing a code cell.",
197 "description": "Result of executing a code cell.",
172 "type": "object",
198 "type": "object",
173 "additionalProperties": false,
199 "additionalProperties": false,
174 "required": ["output_type", "data", "metadata", "execution_count"],
200 "required": ["output_type", "data", "metadata", "execution_count"],
175 "properties": {
201 "properties": {
176 "output_type": {
202 "output_type": {
177 "description": "Type of cell output.",
203 "description": "Type of cell output.",
178 "enum": ["execute_result"]
204 "enum": ["execute_result"]
179 },
205 },
180 "execution_count": {
206 "execution_count": {
181 "description": "A result's prompt number.",
207 "description": "A result's prompt number.",
182 "type": ["integer", "null"],
208 "type": ["integer", "null"],
183 "minimum": 0
209 "minimum": 0
184 },
210 },
185 "data": {"$ref": "#/definitions/misc/mimebundle"},
211 "data": {"$ref": "#/definitions/misc/mimebundle"},
186 "metadata": {"$ref": "#/definitions/misc/output_metadata"}
212 "metadata": {"$ref": "#/definitions/misc/output_metadata"}
187 }
213 }
188 },
214 },
189
215
190 "display_data": {
216 "display_data": {
191 "description": "Data displayed as a result of code cell execution.",
217 "description": "Data displayed as a result of code cell execution.",
192 "type": "object",
218 "type": "object",
193 "additionalProperties": false,
219 "additionalProperties": false,
194 "required": ["output_type", "data", "metadata"],
220 "required": ["output_type", "data", "metadata"],
195 "properties": {
221 "properties": {
196 "output_type": {
222 "output_type": {
197 "description": "Type of cell output.",
223 "description": "Type of cell output.",
198 "enum": ["display_data"]
224 "enum": ["display_data"]
199 },
225 },
200 "data": {"$ref": "#/definitions/misc/mimebundle"},
226 "data": {"$ref": "#/definitions/misc/mimebundle"},
201 "metadata": {"$ref": "#/definitions/misc/output_metadata"}
227 "metadata": {"$ref": "#/definitions/misc/output_metadata"}
202 }
228 }
203 },
229 },
204
230
205 "stream": {
231 "stream": {
206 "description": "Stream output from a code cell.",
232 "description": "Stream output from a code cell.",
207 "type": "object",
233 "type": "object",
208 "additionalProperties": false,
234 "additionalProperties": false,
209 "required": ["output_type", "name", "text"],
235 "required": ["output_type", "name", "text"],
210 "properties": {
236 "properties": {
211 "output_type": {
237 "output_type": {
212 "description": "Type of cell output.",
238 "description": "Type of cell output.",
213 "enum": ["stream"]
239 "enum": ["stream"]
214 },
240 },
215 "name": {
241 "name": {
216 "description": "The name of the stream (stdout, stderr).",
242 "description": "The name of the stream (stdout, stderr).",
217 "type": "string"
243 "type": "string"
218 },
244 },
219 "text": {
245 "text": {
220 "description": "The stream's text output, represented as an array of strings.",
246 "description": "The stream's text output, represented as an array of strings.",
221 "$ref": "#/definitions/misc/multiline_string"
247 "$ref": "#/definitions/misc/multiline_string"
222 }
248 }
223 }
249 }
224 },
250 },
225
251
226 "error": {
252 "error": {
227 "description": "Output of an error that occurred during code cell execution.",
253 "description": "Output of an error that occurred during code cell execution.",
228 "type": "object",
254 "type": "object",
229 "additionalProperties": false,
255 "additionalProperties": false,
230 "required": ["output_type", "ename", "evalue", "traceback"],
256 "required": ["output_type", "ename", "evalue", "traceback"],
231 "properties": {
257 "properties": {
232 "output_type": {
258 "output_type": {
233 "description": "Type of cell output.",
259 "description": "Type of cell output.",
234 "enum": ["error"]
260 "enum": ["error"]
235 },
261 },
236 "ename": {
262 "ename": {
237 "description": "The name of the error.",
263 "description": "The name of the error.",
238 "type": "string"
264 "type": "string"
239 },
265 },
240 "evalue": {
266 "evalue": {
241 "description": "The value, or message, of the error.",
267 "description": "The value, or message, of the error.",
242 "type": "string"
268 "type": "string"
243 },
269 },
244 "traceback": {
270 "traceback": {
245 "description": "The error's traceback, represented as an array of strings.",
271 "description": "The error's traceback, represented as an array of strings.",
246 "type": "array",
272 "type": "array",
247 "items": {"type": "string"}
273 "items": {"type": "string"}
248 }
274 }
249 }
275 }
250 },
276 },
251
277
278 "unrecognized_output": {
279 "description": "Unrecognized output from a future minor-revision to the notebook format.",
280 "type": "object",
281 "additionalProperties": true,
282 "required": ["output_type"],
283 "properties": {
284 "output_type": {
285 "description": "Type of cell output.",
286 "not": {
287 "enum": ["execute_result", "display_data", "stream", "error"]
288 }
289 }
290 }
291 },
292
252 "misc": {
293 "misc": {
253 "metadata_name": {
294 "metadata_name": {
254 "description": "The cell's name. If present, must be a non-empty string.",
295 "description": "The cell's name. If present, must be a non-empty string.",
255 "type": "string",
296 "type": "string",
256 "pattern": "^.+$"
297 "pattern": "^.+$"
257 },
298 },
258 "metadata_tags": {
299 "metadata_tags": {
259 "description": "The cell's tags. Tags must be unique, and must not contain commas.",
300 "description": "The cell's tags. Tags must be unique, and must not contain commas.",
260 "type": "array",
301 "type": "array",
261 "uniqueItems": true,
302 "uniqueItems": true,
262 "items": {
303 "items": {
263 "type": "string",
304 "type": "string",
264 "pattern": "^[^,]+$"
305 "pattern": "^[^,]+$"
265 }
306 }
266 },
307 },
267 "source": {
308 "source": {
268 "description": "Contents of the cell, represented as an array of lines.",
309 "description": "Contents of the cell, represented as an array of lines.",
269 "$ref": "#/definitions/misc/multiline_string"
310 "$ref": "#/definitions/misc/multiline_string"
270 },
311 },
271 "execution_count": {
312 "execution_count": {
272 "description": "The code cell's prompt number. Will be null if the cell has not been run.",
313 "description": "The code cell's prompt number. Will be null if the cell has not been run.",
273 "type": ["integer", "null"],
314 "type": ["integer", "null"],
274 "minimum": 0
315 "minimum": 0
275 },
316 },
276 "mimebundle": {
317 "mimebundle": {
277 "description": "A mime-type keyed dictionary of data",
318 "description": "A mime-type keyed dictionary of data",
278 "type": "object",
319 "type": "object",
279 "additionalProperties": false,
320 "additionalProperties": false,
280 "properties": {
321 "properties": {
281 "application/json": {
322 "application/json": {
282 "type": "object"
323 "type": "object"
283 }
324 }
284 },
325 },
285 "patternProperties": {
326 "patternProperties": {
286 "^(?!application/json$)[a-zA-Z0-9]+/[a-zA-Z0-9\\-\\+\\.]+$": {
327 "^(?!application/json$)[a-zA-Z0-9]+/[a-zA-Z0-9\\-\\+\\.]+$": {
287 "description": "mimetype output (e.g. text/plain), represented as either an array of strings or a string.",
328 "description": "mimetype output (e.g. text/plain), represented as either an array of strings or a string.",
288 "$ref": "#/definitions/misc/multiline_string"
329 "$ref": "#/definitions/misc/multiline_string"
289 }
330 }
290 }
331 }
291 },
332 },
292 "output_metadata": {
333 "output_metadata": {
293 "description": "Cell output metadata.",
334 "description": "Cell output metadata.",
294 "type": "object",
335 "type": "object",
295 "additionalProperties": true
336 "additionalProperties": true
296 },
337 },
297 "multiline_string": {
338 "multiline_string": {
298 "oneOf" : [
339 "oneOf" : [
299 {"type": "string"},
340 {"type": "string"},
300 {
341 {
301 "type": "array",
342 "type": "array",
302 "items": {"type": "string"}
343 "items": {"type": "string"}
303 }
344 }
304 ]
345 ]
305 }
346 }
306 }
347 }
307 }
348 }
308 }
349 }
@@ -1,147 +1,157 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 from __future__ import print_function
4 from __future__ import print_function
5 import json
5 import json
6 import os
6 import os
7 import warnings
7 import warnings
8
8
9 try:
9 try:
10 from jsonschema import ValidationError
10 from jsonschema import ValidationError
11 from jsonschema import Draft4Validator as Validator
11 from jsonschema import Draft4Validator as Validator
12 except ImportError as e:
12 except ImportError as e:
13 verbose_msg = """
13 verbose_msg = """
14
14
15 IPython notebook format depends on the jsonschema package:
15 IPython notebook format depends on the jsonschema package:
16
16
17 https://pypi.python.org/pypi/jsonschema
17 https://pypi.python.org/pypi/jsonschema
18
18
19 Please install it first.
19 Please install it first.
20 """
20 """
21 raise ImportError(str(e) + verbose_msg)
21 raise ImportError(str(e) + verbose_msg)
22
22
23 from IPython.utils.importstring import import_item
23 from IPython.utils.importstring import import_item
24
24
25
25
26 validators = {}
26 validators = {}
27
27
28 def _relax_additional_properties(obj):
28 def _relax_additional_properties(obj):
29 """relax any `additionalProperties`"""
29 """relax any `additionalProperties`"""
30 if isinstance(obj, dict):
30 if isinstance(obj, dict):
31 for key, value in obj.items():
31 for key, value in obj.items():
32 if key == 'additionalProperties':
32 if key == 'additionalProperties':
33 print(obj)
34 value = True
33 value = True
35 else:
34 else:
36 value = _relax_additional_properties(value)
35 value = _relax_additional_properties(value)
37 obj[key] = value
36 obj[key] = value
38 elif isinstance(obj, list):
37 elif isinstance(obj, list):
39 for i, value in enumerate(obj):
38 for i, value in enumerate(obj):
40 obj[i] = _relax_additional_properties(value)
39 obj[i] = _relax_additional_properties(value)
41 return obj
40 return obj
42
41
42 def _allow_undefined(schema):
43 schema['definitions']['cell']['oneOf'].append(
44 {"$ref": "#/definitions/unrecognized_cell"}
45 )
46 schema['definitions']['output']['oneOf'].append(
47 {"$ref": "#/definitions/unrecognized_output"}
48 )
49 return schema
50
43 def get_validator(version=None, version_minor=None):
51 def get_validator(version=None, version_minor=None):
44 """Load the JSON schema into a Validator"""
52 """Load the JSON schema into a Validator"""
45 if version is None:
53 if version is None:
46 from .. import current_nbformat
54 from .. import current_nbformat
47 version = current_nbformat
55 version = current_nbformat
48
56
49 v = import_item("IPython.nbformat.v%s" % version)
57 v = import_item("IPython.nbformat.v%s" % version)
50 current_minor = v.nbformat_minor
58 current_minor = v.nbformat_minor
51 if version_minor is None:
59 if version_minor is None:
52 version_minor = current_minor
60 version_minor = current_minor
53
61
54 version_tuple = (version, version_minor)
62 version_tuple = (version, version_minor)
55
63
56 if version_tuple not in validators:
64 if version_tuple not in validators:
57 try:
65 try:
58 v.nbformat_schema
66 v.nbformat_schema
59 except AttributeError:
67 except AttributeError:
60 # no validator
68 # no validator
61 return None
69 return None
62 schema_path = os.path.join(os.path.dirname(v.__file__), v.nbformat_schema)
70 schema_path = os.path.join(os.path.dirname(v.__file__), v.nbformat_schema)
63 with open(schema_path) as f:
71 with open(schema_path) as f:
64 schema_json = json.load(f)
72 schema_json = json.load(f)
65
73
66 if current_minor < version_minor:
74 if current_minor < version_minor:
67 # notebook from the future, relax all `additionalProperties: False` requirements
75 # notebook from the future, relax all `additionalProperties: False` requirements
68 schema_json = _relax_additional_properties(schema_json)
76 schema_json = _relax_additional_properties(schema_json)
77 # and allow undefined cell types and outputs
78 schema_json = _allow_undefined(schema_json)
69
79
70 validators[version_tuple] = Validator(schema_json)
80 validators[version_tuple] = Validator(schema_json)
71 return validators[version_tuple]
81 return validators[version_tuple]
72
82
73 def isvalid(nbjson, ref=None, version=None, version_minor=None):
83 def isvalid(nbjson, ref=None, version=None, version_minor=None):
74 """Checks whether the given notebook JSON conforms to the current
84 """Checks whether the given notebook JSON conforms to the current
75 notebook format schema. Returns True if the JSON is valid, and
85 notebook format schema. Returns True if the JSON is valid, and
76 False otherwise.
86 False otherwise.
77
87
78 To see the individual errors that were encountered, please use the
88 To see the individual errors that were encountered, please use the
79 `validate` function instead.
89 `validate` function instead.
80 """
90 """
81 try:
91 try:
82 validate(nbjson, ref, version, version_minor)
92 validate(nbjson, ref, version, version_minor)
83 except ValidationError:
93 except ValidationError:
84 return False
94 return False
85 else:
95 else:
86 return True
96 return True
87
97
88
98
89 def better_validation_error(error, version, version_minor):
99 def better_validation_error(error, version, version_minor):
90 """Get better ValidationError on oneOf failures
100 """Get better ValidationError on oneOf failures
91
101
92 oneOf errors aren't informative.
102 oneOf errors aren't informative.
93 if it's a cell type or output_type error,
103 if it's a cell type or output_type error,
94 try validating directly based on the type for a better error message
104 try validating directly based on the type for a better error message
95 """
105 """
96 key = error.schema_path[-1]
106 key = error.schema_path[-1]
97 if key.endswith('Of'):
107 if key.endswith('Of'):
98
108
99 ref = None
109 ref = None
100 if isinstance(error.instance, dict):
110 if isinstance(error.instance, dict):
101 if 'cell_type' in error.instance:
111 if 'cell_type' in error.instance:
102 ref = error.instance['cell_type'] + "_cell"
112 ref = error.instance['cell_type'] + "_cell"
103 elif 'output_type' in error.instance:
113 elif 'output_type' in error.instance:
104 ref = error.instance['output_type']
114 ref = error.instance['output_type']
105
115
106 if ref:
116 if ref:
107 try:
117 try:
108 validate(error.instance,
118 validate(error.instance,
109 ref,
119 ref,
110 version=version,
120 version=version,
111 version_minor=version_minor,
121 version_minor=version_minor,
112 )
122 )
113 except ValidationError as e:
123 except ValidationError as e:
114 return better_validation_error(e, version, version_minor)
124 return better_validation_error(e, version, version_minor)
115 except:
125 except:
116 # if it fails for some reason,
126 # if it fails for some reason,
117 # let the original error through
127 # let the original error through
118 pass
128 pass
119
129
120 return error
130 return error
121
131
122
132
123 def validate(nbjson, ref=None, version=None, version_minor=None):
133 def validate(nbjson, ref=None, version=None, version_minor=None):
124 """Checks whether the given notebook JSON conforms to the current
134 """Checks whether the given notebook JSON conforms to the current
125 notebook format schema.
135 notebook format schema.
126
136
127 Raises ValidationError if not valid.
137 Raises ValidationError if not valid.
128 """
138 """
129 if version is None:
139 if version is None:
130 from .reader import get_version
140 from .reader import get_version
131 (version, version_minor) = get_version(nbjson)
141 (version, version_minor) = get_version(nbjson)
132
142
133 validator = get_validator(version, version_minor)
143 validator = get_validator(version, version_minor)
134
144
135 if validator is None:
145 if validator is None:
136 # no validator
146 # no validator
137 warnings.warn("No schema for validating v%s notebooks" % version, UserWarning)
147 warnings.warn("No schema for validating v%s notebooks" % version, UserWarning)
138 return
148 return
139
149
140 try:
150 try:
141 if ref:
151 if ref:
142 return validator.validate(nbjson, {'$ref' : '#/definitions/%s' % ref})
152 return validator.validate(nbjson, {'$ref' : '#/definitions/%s' % ref})
143 else:
153 else:
144 return validator.validate(nbjson)
154 return validator.validate(nbjson)
145 except ValidationError as e:
155 except ValidationError as e:
146 raise better_validation_error(e, version, version_minor)
156 raise better_validation_error(e, version, version_minor)
147
157
General Comments 0
You need to be logged in to leave comments. Login now