##// END OF EJS Templates
Merge pull request #5048 from ellisonbg/modal-indicator...
Brian E. Granger -
r15211:2cb7c38d merge
parent child Browse files
Show More
@@ -1,2301 +1,2303 b''
1 1 //----------------------------------------------------------------------------
2 2 // Copyright (C) 2011 The IPython Development Team
3 3 //
4 4 // Distributed under the terms of the BSD License. The full license is in
5 5 // the file COPYING, distributed as part of this software.
6 6 //----------------------------------------------------------------------------
7 7
8 8 //============================================================================
9 9 // Notebook
10 10 //============================================================================
11 11
12 12 var IPython = (function (IPython) {
13 13 "use strict";
14 14
15 15 var utils = IPython.utils;
16 16
17 17 /**
18 18 * A notebook contains and manages cells.
19 19 *
20 20 * @class Notebook
21 21 * @constructor
22 22 * @param {String} selector A jQuery selector for the notebook's DOM element
23 23 * @param {Object} [options] A config object
24 24 */
25 25 var Notebook = function (selector, options) {
26 26 var options = options || {};
27 27 this._baseProjectUrl = options.baseProjectUrl;
28 28 this.notebook_path = options.notebookPath;
29 29 this.notebook_name = options.notebookName;
30 30 this.element = $(selector);
31 31 this.element.scroll();
32 32 this.element.data("notebook", this);
33 33 this.next_prompt_number = 1;
34 34 this.session = null;
35 35 this.kernel = null;
36 36 this.clipboard = null;
37 37 this.undelete_backup = null;
38 38 this.undelete_index = null;
39 39 this.undelete_below = false;
40 40 this.paste_enabled = false;
41 41 // It is important to start out in command mode to match the intial mode
42 42 // of the KeyboardManager.
43 43 this.mode = 'command';
44 44 this.set_dirty(false);
45 45 this.metadata = {};
46 46 this._checkpoint_after_save = false;
47 47 this.last_checkpoint = null;
48 48 this.checkpoints = [];
49 49 this.autosave_interval = 0;
50 50 this.autosave_timer = null;
51 51 // autosave *at most* every two minutes
52 52 this.minimum_autosave_interval = 120000;
53 53 // single worksheet for now
54 54 this.worksheet_metadata = {};
55 55 this.notebook_name_blacklist_re = /[\/\\:]/;
56 56 this.nbformat = 3 // Increment this when changing the nbformat
57 57 this.nbformat_minor = 0 // Increment this when changing the nbformat
58 58 this.style();
59 59 this.create_elements();
60 60 this.bind_events();
61 61 };
62 62
63 63 /**
64 64 * Tweak the notebook's CSS style.
65 65 *
66 66 * @method style
67 67 */
68 68 Notebook.prototype.style = function () {
69 69 $('div#notebook').addClass('border-box-sizing');
70 70 };
71 71
72 72 /**
73 73 * Get the root URL of the notebook server.
74 74 *
75 75 * @method baseProjectUrl
76 76 * @return {String} The base project URL
77 77 */
78 78 Notebook.prototype.baseProjectUrl = function() {
79 79 return this._baseProjectUrl || $('body').data('baseProjectUrl');
80 80 };
81 81
82 82 Notebook.prototype.notebookName = function() {
83 83 return $('body').data('notebookName');
84 84 };
85 85
86 86 Notebook.prototype.notebookPath = function() {
87 87 return $('body').data('notebookPath');
88 88 };
89 89
90 90 /**
91 91 * Create an HTML and CSS representation of the notebook.
92 92 *
93 93 * @method create_elements
94 94 */
95 95 Notebook.prototype.create_elements = function () {
96 96 var that = this;
97 97 this.element.attr('tabindex','-1');
98 98 this.container = $("<div/>").addClass("container").attr("id", "notebook-container");
99 99 // We add this end_space div to the end of the notebook div to:
100 100 // i) provide a margin between the last cell and the end of the notebook
101 101 // ii) to prevent the div from scrolling up when the last cell is being
102 102 // edited, but is too low on the page, which browsers will do automatically.
103 103 var end_space = $('<div/>').addClass('end_space');
104 104 end_space.dblclick(function (e) {
105 105 var ncells = that.ncells();
106 106 that.insert_cell_below('code',ncells-1);
107 107 });
108 108 this.element.append(this.container);
109 109 this.container.append(end_space);
110 110 };
111 111
112 112 /**
113 113 * Bind JavaScript events: key presses and custom IPython events.
114 114 *
115 115 * @method bind_events
116 116 */
117 117 Notebook.prototype.bind_events = function () {
118 118 var that = this;
119 119
120 120 $([IPython.events]).on('set_next_input.Notebook', function (event, data) {
121 121 var index = that.find_cell_index(data.cell);
122 122 var new_cell = that.insert_cell_below('code',index);
123 123 new_cell.set_text(data.text);
124 124 that.dirty = true;
125 125 });
126 126
127 127 $([IPython.events]).on('set_dirty.Notebook', function (event, data) {
128 128 that.dirty = data.value;
129 129 });
130 130
131 131 $([IPython.events]).on('select.Cell', function (event, data) {
132 132 var index = that.find_cell_index(data.cell);
133 133 that.select(index);
134 134 });
135 135
136 136 $([IPython.events]).on('edit_mode.Cell', function (event, data) {
137 137 var index = that.find_cell_index(data.cell);
138 138 that.select(index);
139 139 that.edit_mode();
140 140 });
141 141
142 142 $([IPython.events]).on('command_mode.Cell', function (event, data) {
143 143 that.command_mode();
144 144 });
145 145
146 146 $([IPython.events]).on('status_autorestarting.Kernel', function () {
147 147 IPython.dialog.modal({
148 148 title: "Kernel Restarting",
149 149 body: "The kernel appears to have died. It will restart automatically.",
150 150 buttons: {
151 151 OK : {
152 152 class : "btn-primary"
153 153 }
154 154 }
155 155 });
156 156 });
157 157
158 158 var collapse_time = function (time) {
159 159 var app_height = $('#ipython-main-app').height(); // content height
160 160 var splitter_height = $('div#pager_splitter').outerHeight(true);
161 161 var new_height = app_height - splitter_height;
162 162 that.element.animate({height : new_height + 'px'}, time);
163 163 };
164 164
165 165 this.element.bind('collapse_pager', function (event, extrap) {
166 166 var time = (extrap != undefined) ? ((extrap.duration != undefined ) ? extrap.duration : 'fast') : 'fast';
167 167 collapse_time(time);
168 168 });
169 169
170 170 var expand_time = function (time) {
171 171 var app_height = $('#ipython-main-app').height(); // content height
172 172 var splitter_height = $('div#pager_splitter').outerHeight(true);
173 173 var pager_height = $('div#pager').outerHeight(true);
174 174 var new_height = app_height - pager_height - splitter_height;
175 175 that.element.animate({height : new_height + 'px'}, time);
176 176 };
177 177
178 178 this.element.bind('expand_pager', function (event, extrap) {
179 179 var time = (extrap != undefined) ? ((extrap.duration != undefined ) ? extrap.duration : 'fast') : 'fast';
180 180 expand_time(time);
181 181 });
182 182
183 183 // Firefox 22 broke $(window).on("beforeunload")
184 184 // I'm not sure why or how.
185 185 window.onbeforeunload = function (e) {
186 186 // TODO: Make killing the kernel configurable.
187 187 var kill_kernel = false;
188 188 if (kill_kernel) {
189 189 that.session.kill_kernel();
190 190 }
191 191 // if we are autosaving, trigger an autosave on nav-away.
192 192 // still warn, because if we don't the autosave may fail.
193 193 if (that.dirty) {
194 194 if ( that.autosave_interval ) {
195 195 // schedule autosave in a timeout
196 196 // this gives you a chance to forcefully discard changes
197 197 // by reloading the page if you *really* want to.
198 198 // the timer doesn't start until you *dismiss* the dialog.
199 199 setTimeout(function () {
200 200 if (that.dirty) {
201 201 that.save_notebook();
202 202 }
203 203 }, 1000);
204 204 return "Autosave in progress, latest changes may be lost.";
205 205 } else {
206 206 return "Unsaved changes will be lost.";
207 207 }
208 208 };
209 209 // Null is the *only* return value that will make the browser not
210 210 // pop up the "don't leave" dialog.
211 211 return null;
212 212 };
213 213 };
214 214
215 215 /**
216 216 * Set the dirty flag, and trigger the set_dirty.Notebook event
217 217 *
218 218 * @method set_dirty
219 219 */
220 220 Notebook.prototype.set_dirty = function (value) {
221 221 if (value === undefined) {
222 222 value = true;
223 223 }
224 224 if (this.dirty == value) {
225 225 return;
226 226 }
227 227 $([IPython.events]).trigger('set_dirty.Notebook', {value: value});
228 228 };
229 229
230 230 /**
231 231 * Scroll the top of the page to a given cell.
232 232 *
233 233 * @method scroll_to_cell
234 234 * @param {Number} cell_number An index of the cell to view
235 235 * @param {Number} time Animation time in milliseconds
236 236 * @return {Number} Pixel offset from the top of the container
237 237 */
238 238 Notebook.prototype.scroll_to_cell = function (cell_number, time) {
239 239 var cells = this.get_cells();
240 240 var time = time || 0;
241 241 cell_number = Math.min(cells.length-1,cell_number);
242 242 cell_number = Math.max(0 ,cell_number);
243 243 var scroll_value = cells[cell_number].element.position().top-cells[0].element.position().top ;
244 244 this.element.animate({scrollTop:scroll_value}, time);
245 245 return scroll_value;
246 246 };
247 247
248 248 /**
249 249 * Scroll to the bottom of the page.
250 250 *
251 251 * @method scroll_to_bottom
252 252 */
253 253 Notebook.prototype.scroll_to_bottom = function () {
254 254 this.element.animate({scrollTop:this.element.get(0).scrollHeight}, 0);
255 255 };
256 256
257 257 /**
258 258 * Scroll to the top of the page.
259 259 *
260 260 * @method scroll_to_top
261 261 */
262 262 Notebook.prototype.scroll_to_top = function () {
263 263 this.element.animate({scrollTop:0}, 0);
264 264 };
265 265
266 266 // Edit Notebook metadata
267 267
268 268 Notebook.prototype.edit_metadata = function () {
269 269 var that = this;
270 270 IPython.dialog.edit_metadata(this.metadata, function (md) {
271 271 that.metadata = md;
272 272 }, 'Notebook');
273 273 };
274 274
275 275 // Cell indexing, retrieval, etc.
276 276
277 277 /**
278 278 * Get all cell elements in the notebook.
279 279 *
280 280 * @method get_cell_elements
281 281 * @return {jQuery} A selector of all cell elements
282 282 */
283 283 Notebook.prototype.get_cell_elements = function () {
284 284 return this.container.children("div.cell");
285 285 };
286 286
287 287 /**
288 288 * Get a particular cell element.
289 289 *
290 290 * @method get_cell_element
291 291 * @param {Number} index An index of a cell to select
292 292 * @return {jQuery} A selector of the given cell.
293 293 */
294 294 Notebook.prototype.get_cell_element = function (index) {
295 295 var result = null;
296 296 var e = this.get_cell_elements().eq(index);
297 297 if (e.length !== 0) {
298 298 result = e;
299 299 }
300 300 return result;
301 301 };
302 302
303 303 /**
304 304 * Try to get a particular cell by msg_id.
305 305 *
306 306 * @method get_msg_cell
307 307 * @param {String} msg_id A message UUID
308 308 * @return {Cell} Cell or null if no cell was found.
309 309 */
310 310 Notebook.prototype.get_msg_cell = function (msg_id) {
311 311 return IPython.CodeCell.msg_cells[msg_id] || null;
312 312 };
313 313
314 314 /**
315 315 * Count the cells in this notebook.
316 316 *
317 317 * @method ncells
318 318 * @return {Number} The number of cells in this notebook
319 319 */
320 320 Notebook.prototype.ncells = function () {
321 321 return this.get_cell_elements().length;
322 322 };
323 323
324 324 /**
325 325 * Get all Cell objects in this notebook.
326 326 *
327 327 * @method get_cells
328 328 * @return {Array} This notebook's Cell objects
329 329 */
330 330 // TODO: we are often calling cells as cells()[i], which we should optimize
331 331 // to cells(i) or a new method.
332 332 Notebook.prototype.get_cells = function () {
333 333 return this.get_cell_elements().toArray().map(function (e) {
334 334 return $(e).data("cell");
335 335 });
336 336 };
337 337
338 338 /**
339 339 * Get a Cell object from this notebook.
340 340 *
341 341 * @method get_cell
342 342 * @param {Number} index An index of a cell to retrieve
343 343 * @return {Cell} A particular cell
344 344 */
345 345 Notebook.prototype.get_cell = function (index) {
346 346 var result = null;
347 347 var ce = this.get_cell_element(index);
348 348 if (ce !== null) {
349 349 result = ce.data('cell');
350 350 }
351 351 return result;
352 352 }
353 353
354 354 /**
355 355 * Get the cell below a given cell.
356 356 *
357 357 * @method get_next_cell
358 358 * @param {Cell} cell The provided cell
359 359 * @return {Cell} The next cell
360 360 */
361 361 Notebook.prototype.get_next_cell = function (cell) {
362 362 var result = null;
363 363 var index = this.find_cell_index(cell);
364 364 if (this.is_valid_cell_index(index+1)) {
365 365 result = this.get_cell(index+1);
366 366 }
367 367 return result;
368 368 }
369 369
370 370 /**
371 371 * Get the cell above a given cell.
372 372 *
373 373 * @method get_prev_cell
374 374 * @param {Cell} cell The provided cell
375 375 * @return {Cell} The previous cell
376 376 */
377 377 Notebook.prototype.get_prev_cell = function (cell) {
378 378 // TODO: off-by-one
379 379 // nb.get_prev_cell(nb.get_cell(1)) is null
380 380 var result = null;
381 381 var index = this.find_cell_index(cell);
382 382 if (index !== null && index > 1) {
383 383 result = this.get_cell(index-1);
384 384 }
385 385 return result;
386 386 }
387 387
388 388 /**
389 389 * Get the numeric index of a given cell.
390 390 *
391 391 * @method find_cell_index
392 392 * @param {Cell} cell The provided cell
393 393 * @return {Number} The cell's numeric index
394 394 */
395 395 Notebook.prototype.find_cell_index = function (cell) {
396 396 var result = null;
397 397 this.get_cell_elements().filter(function (index) {
398 398 if ($(this).data("cell") === cell) {
399 399 result = index;
400 400 };
401 401 });
402 402 return result;
403 403 };
404 404
405 405 /**
406 406 * Get a given index , or the selected index if none is provided.
407 407 *
408 408 * @method index_or_selected
409 409 * @param {Number} index A cell's index
410 410 * @return {Number} The given index, or selected index if none is provided.
411 411 */
412 412 Notebook.prototype.index_or_selected = function (index) {
413 413 var i;
414 414 if (index === undefined || index === null) {
415 415 i = this.get_selected_index();
416 416 if (i === null) {
417 417 i = 0;
418 418 }
419 419 } else {
420 420 i = index;
421 421 }
422 422 return i;
423 423 };
424 424
425 425 /**
426 426 * Get the currently selected cell.
427 427 * @method get_selected_cell
428 428 * @return {Cell} The selected cell
429 429 */
430 430 Notebook.prototype.get_selected_cell = function () {
431 431 var index = this.get_selected_index();
432 432 return this.get_cell(index);
433 433 };
434 434
435 435 /**
436 436 * Check whether a cell index is valid.
437 437 *
438 438 * @method is_valid_cell_index
439 439 * @param {Number} index A cell index
440 440 * @return True if the index is valid, false otherwise
441 441 */
442 442 Notebook.prototype.is_valid_cell_index = function (index) {
443 443 if (index !== null && index >= 0 && index < this.ncells()) {
444 444 return true;
445 445 } else {
446 446 return false;
447 447 };
448 448 }
449 449
450 450 /**
451 451 * Get the index of the currently selected cell.
452 452
453 453 * @method get_selected_index
454 454 * @return {Number} The selected cell's numeric index
455 455 */
456 456 Notebook.prototype.get_selected_index = function () {
457 457 var result = null;
458 458 this.get_cell_elements().filter(function (index) {
459 459 if ($(this).data("cell").selected === true) {
460 460 result = index;
461 461 };
462 462 });
463 463 return result;
464 464 };
465 465
466 466
467 467 // Cell selection.
468 468
469 469 /**
470 470 * Programmatically select a cell.
471 471 *
472 472 * @method select
473 473 * @param {Number} index A cell's index
474 474 * @return {Notebook} This notebook
475 475 */
476 476 Notebook.prototype.select = function (index) {
477 477 if (this.is_valid_cell_index(index)) {
478 478 var sindex = this.get_selected_index()
479 479 if (sindex !== null && index !== sindex) {
480 480 this.command_mode();
481 481 this.get_cell(sindex).unselect();
482 482 };
483 483 var cell = this.get_cell(index);
484 484 cell.select();
485 485 if (cell.cell_type === 'heading') {
486 486 $([IPython.events]).trigger('selected_cell_type_changed.Notebook',
487 487 {'cell_type':cell.cell_type,level:cell.level}
488 488 );
489 489 } else {
490 490 $([IPython.events]).trigger('selected_cell_type_changed.Notebook',
491 491 {'cell_type':cell.cell_type}
492 492 );
493 493 };
494 494 };
495 495 return this;
496 496 };
497 497
498 498 /**
499 499 * Programmatically select the next cell.
500 500 *
501 501 * @method select_next
502 502 * @return {Notebook} This notebook
503 503 */
504 504 Notebook.prototype.select_next = function () {
505 505 var index = this.get_selected_index();
506 506 this.select(index+1);
507 507 return this;
508 508 };
509 509
510 510 /**
511 511 * Programmatically select the previous cell.
512 512 *
513 513 * @method select_prev
514 514 * @return {Notebook} This notebook
515 515 */
516 516 Notebook.prototype.select_prev = function () {
517 517 var index = this.get_selected_index();
518 518 this.select(index-1);
519 519 return this;
520 520 };
521 521
522 522
523 523 // Edit/Command mode
524 524
525 525 Notebook.prototype.get_edit_index = function () {
526 526 var result = null;
527 527 this.get_cell_elements().filter(function (index) {
528 528 if ($(this).data("cell").mode === 'edit') {
529 529 result = index;
530 530 };
531 531 });
532 532 return result;
533 533 };
534 534
535 535 Notebook.prototype.command_mode = function () {
536 536 if (this.mode !== 'command') {
537 $([IPython.events]).trigger('command_mode.Notebook');
537 538 var index = this.get_edit_index();
538 539 var cell = this.get_cell(index);
539 540 if (cell) {
540 541 cell.command_mode();
541 542 };
542 543 this.mode = 'command';
543 544 IPython.keyboard_manager.command_mode();
544 545 };
545 546 };
546 547
547 548 Notebook.prototype.edit_mode = function () {
548 549 if (this.mode !== 'edit') {
550 $([IPython.events]).trigger('edit_mode.Notebook');
549 551 var cell = this.get_selected_cell();
550 552 if (cell === null) {return;} // No cell is selected
551 553 // We need to set the mode to edit to prevent reentering this method
552 554 // when cell.edit_mode() is called below.
553 555 this.mode = 'edit';
554 556 IPython.keyboard_manager.edit_mode();
555 557 cell.edit_mode();
556 558 };
557 559 };
558 560
559 561 Notebook.prototype.focus_cell = function () {
560 562 var cell = this.get_selected_cell();
561 563 if (cell === null) {return;} // No cell is selected
562 564 cell.focus_cell();
563 565 };
564 566
565 567 // Cell movement
566 568
567 569 /**
568 570 * Move given (or selected) cell up and select it.
569 571 *
570 572 * @method move_cell_up
571 573 * @param [index] {integer} cell index
572 574 * @return {Notebook} This notebook
573 575 **/
574 576 Notebook.prototype.move_cell_up = function (index) {
575 577 var i = this.index_or_selected(index);
576 578 if (this.is_valid_cell_index(i) && i > 0) {
577 579 var pivot = this.get_cell_element(i-1);
578 580 var tomove = this.get_cell_element(i);
579 581 if (pivot !== null && tomove !== null) {
580 582 tomove.detach();
581 583 pivot.before(tomove);
582 584 this.select(i-1);
583 585 var cell = this.get_selected_cell();
584 586 cell.focus_cell();
585 587 };
586 588 this.set_dirty(true);
587 589 };
588 590 return this;
589 591 };
590 592
591 593
592 594 /**
593 595 * Move given (or selected) cell down and select it
594 596 *
595 597 * @method move_cell_down
596 598 * @param [index] {integer} cell index
597 599 * @return {Notebook} This notebook
598 600 **/
599 601 Notebook.prototype.move_cell_down = function (index) {
600 602 var i = this.index_or_selected(index);
601 603 if (this.is_valid_cell_index(i) && this.is_valid_cell_index(i+1)) {
602 604 var pivot = this.get_cell_element(i+1);
603 605 var tomove = this.get_cell_element(i);
604 606 if (pivot !== null && tomove !== null) {
605 607 tomove.detach();
606 608 pivot.after(tomove);
607 609 this.select(i+1);
608 610 var cell = this.get_selected_cell();
609 611 cell.focus_cell();
610 612 };
611 613 };
612 614 this.set_dirty();
613 615 return this;
614 616 };
615 617
616 618
617 619 // Insertion, deletion.
618 620
619 621 /**
620 622 * Delete a cell from the notebook.
621 623 *
622 624 * @method delete_cell
623 625 * @param [index] A cell's numeric index
624 626 * @return {Notebook} This notebook
625 627 */
626 628 Notebook.prototype.delete_cell = function (index) {
627 629 var i = this.index_or_selected(index);
628 630 var cell = this.get_selected_cell();
629 631 this.undelete_backup = cell.toJSON();
630 632 $('#undelete_cell').removeClass('disabled');
631 633 if (this.is_valid_cell_index(i)) {
632 634 var old_ncells = this.ncells();
633 635 var ce = this.get_cell_element(i);
634 636 ce.remove();
635 637 if (i === 0) {
636 638 // Always make sure we have at least one cell.
637 639 if (old_ncells === 1) {
638 640 this.insert_cell_below('code');
639 641 }
640 642 this.select(0);
641 643 this.undelete_index = 0;
642 644 this.undelete_below = false;
643 645 } else if (i === old_ncells-1 && i !== 0) {
644 646 this.select(i-1);
645 647 this.undelete_index = i - 1;
646 648 this.undelete_below = true;
647 649 } else {
648 650 this.select(i);
649 651 this.undelete_index = i;
650 652 this.undelete_below = false;
651 653 };
652 654 $([IPython.events]).trigger('delete.Cell', {'cell': cell, 'index': i});
653 655 this.set_dirty(true);
654 656 };
655 657 return this;
656 658 };
657 659
658 660 /**
659 661 * Restore the most recently deleted cell.
660 662 *
661 663 * @method undelete
662 664 */
663 665 Notebook.prototype.undelete_cell = function() {
664 666 if (this.undelete_backup !== null && this.undelete_index !== null) {
665 667 var current_index = this.get_selected_index();
666 668 if (this.undelete_index < current_index) {
667 669 current_index = current_index + 1;
668 670 }
669 671 if (this.undelete_index >= this.ncells()) {
670 672 this.select(this.ncells() - 1);
671 673 }
672 674 else {
673 675 this.select(this.undelete_index);
674 676 }
675 677 var cell_data = this.undelete_backup;
676 678 var new_cell = null;
677 679 if (this.undelete_below) {
678 680 new_cell = this.insert_cell_below(cell_data.cell_type);
679 681 } else {
680 682 new_cell = this.insert_cell_above(cell_data.cell_type);
681 683 }
682 684 new_cell.fromJSON(cell_data);
683 685 if (this.undelete_below) {
684 686 this.select(current_index+1);
685 687 } else {
686 688 this.select(current_index);
687 689 }
688 690 this.undelete_backup = null;
689 691 this.undelete_index = null;
690 692 }
691 693 $('#undelete_cell').addClass('disabled');
692 694 }
693 695
694 696 /**
695 697 * Insert a cell so that after insertion the cell is at given index.
696 698 *
697 699 * Similar to insert_above, but index parameter is mandatory
698 700 *
699 701 * Index will be brought back into the accissible range [0,n]
700 702 *
701 703 * @method insert_cell_at_index
702 704 * @param type {string} in ['code','markdown','heading']
703 705 * @param [index] {int} a valid index where to inser cell
704 706 *
705 707 * @return cell {cell|null} created cell or null
706 708 **/
707 709 Notebook.prototype.insert_cell_at_index = function(type, index){
708 710
709 711 var ncells = this.ncells();
710 712 var index = Math.min(index,ncells);
711 713 index = Math.max(index,0);
712 714 var cell = null;
713 715
714 716 if (ncells === 0 || this.is_valid_cell_index(index) || index === ncells) {
715 717 if (type === 'code') {
716 718 cell = new IPython.CodeCell(this.kernel);
717 719 cell.set_input_prompt();
718 720 } else if (type === 'markdown') {
719 721 cell = new IPython.MarkdownCell();
720 722 } else if (type === 'raw') {
721 723 cell = new IPython.RawCell();
722 724 } else if (type === 'heading') {
723 725 cell = new IPython.HeadingCell();
724 726 }
725 727
726 728 if(this._insert_element_at_index(cell.element,index)) {
727 729 cell.render();
728 730 $([IPython.events]).trigger('create.Cell', {'cell': cell, 'index': index});
729 731 cell.refresh();
730 732 // We used to select the cell after we refresh it, but there
731 733 // are now cases were this method is called where select is
732 734 // not appropriate. The selection logic should be handled by the
733 735 // caller of the the top level insert_cell methods.
734 736 this.set_dirty(true);
735 737 }
736 738 }
737 739 return cell;
738 740
739 741 };
740 742
741 743 /**
742 744 * Insert an element at given cell index.
743 745 *
744 746 * @method _insert_element_at_index
745 747 * @param element {dom element} a cell element
746 748 * @param [index] {int} a valid index where to inser cell
747 749 * @private
748 750 *
749 751 * return true if everything whent fine.
750 752 **/
751 753 Notebook.prototype._insert_element_at_index = function(element, index){
752 754 if (element === undefined){
753 755 return false;
754 756 }
755 757
756 758 var ncells = this.ncells();
757 759
758 760 if (ncells === 0) {
759 761 // special case append if empty
760 762 this.element.find('div.end_space').before(element);
761 763 } else if ( ncells === index ) {
762 764 // special case append it the end, but not empty
763 765 this.get_cell_element(index-1).after(element);
764 766 } else if (this.is_valid_cell_index(index)) {
765 767 // otherwise always somewhere to append to
766 768 this.get_cell_element(index).before(element);
767 769 } else {
768 770 return false;
769 771 }
770 772
771 773 if (this.undelete_index !== null && index <= this.undelete_index) {
772 774 this.undelete_index = this.undelete_index + 1;
773 775 this.set_dirty(true);
774 776 }
775 777 return true;
776 778 };
777 779
778 780 /**
779 781 * Insert a cell of given type above given index, or at top
780 782 * of notebook if index smaller than 0.
781 783 *
782 784 * default index value is the one of currently selected cell
783 785 *
784 786 * @method insert_cell_above
785 787 * @param type {string} cell type
786 788 * @param [index] {integer}
787 789 *
788 790 * @return handle to created cell or null
789 791 **/
790 792 Notebook.prototype.insert_cell_above = function (type, index) {
791 793 index = this.index_or_selected(index);
792 794 return this.insert_cell_at_index(type, index);
793 795 };
794 796
795 797 /**
796 798 * Insert a cell of given type below given index, or at bottom
797 799 * of notebook if index greater thatn number of cell
798 800 *
799 801 * default index value is the one of currently selected cell
800 802 *
801 803 * @method insert_cell_below
802 804 * @param type {string} cell type
803 805 * @param [index] {integer}
804 806 *
805 807 * @return handle to created cell or null
806 808 *
807 809 **/
808 810 Notebook.prototype.insert_cell_below = function (type, index) {
809 811 index = this.index_or_selected(index);
810 812 return this.insert_cell_at_index(type, index+1);
811 813 };
812 814
813 815
814 816 /**
815 817 * Insert cell at end of notebook
816 818 *
817 819 * @method insert_cell_at_bottom
818 820 * @param {String} type cell type
819 821 *
820 822 * @return the added cell; or null
821 823 **/
822 824 Notebook.prototype.insert_cell_at_bottom = function (type){
823 825 var len = this.ncells();
824 826 return this.insert_cell_below(type,len-1);
825 827 };
826 828
827 829 /**
828 830 * Turn a cell into a code cell.
829 831 *
830 832 * @method to_code
831 833 * @param {Number} [index] A cell's index
832 834 */
833 835 Notebook.prototype.to_code = function (index) {
834 836 var i = this.index_or_selected(index);
835 837 if (this.is_valid_cell_index(i)) {
836 838 var source_element = this.get_cell_element(i);
837 839 var source_cell = source_element.data("cell");
838 840 if (!(source_cell instanceof IPython.CodeCell)) {
839 841 var target_cell = this.insert_cell_below('code',i);
840 842 var text = source_cell.get_text();
841 843 if (text === source_cell.placeholder) {
842 844 text = '';
843 845 }
844 846 target_cell.set_text(text);
845 847 // make this value the starting point, so that we can only undo
846 848 // to this state, instead of a blank cell
847 849 target_cell.code_mirror.clearHistory();
848 850 source_element.remove();
849 851 this.select(i);
850 852 this.set_dirty(true);
851 853 };
852 854 };
853 855 };
854 856
855 857 /**
856 858 * Turn a cell into a Markdown cell.
857 859 *
858 860 * @method to_markdown
859 861 * @param {Number} [index] A cell's index
860 862 */
861 863 Notebook.prototype.to_markdown = function (index) {
862 864 var i = this.index_or_selected(index);
863 865 if (this.is_valid_cell_index(i)) {
864 866 var source_element = this.get_cell_element(i);
865 867 var source_cell = source_element.data("cell");
866 868 if (!(source_cell instanceof IPython.MarkdownCell)) {
867 869 var target_cell = this.insert_cell_below('markdown',i);
868 870 var text = source_cell.get_text();
869 871 if (text === source_cell.placeholder) {
870 872 text = '';
871 873 };
872 874 // We must show the editor before setting its contents
873 875 target_cell.unrender();
874 876 target_cell.set_text(text);
875 877 // make this value the starting point, so that we can only undo
876 878 // to this state, instead of a blank cell
877 879 target_cell.code_mirror.clearHistory();
878 880 source_element.remove();
879 881 this.select(i);
880 882 if ((source_cell instanceof IPython.TextCell) && source_cell.rendered) {
881 883 target_cell.render();
882 884 }
883 885 this.set_dirty(true);
884 886 };
885 887 };
886 888 };
887 889
888 890 /**
889 891 * Turn a cell into a raw text cell.
890 892 *
891 893 * @method to_raw
892 894 * @param {Number} [index] A cell's index
893 895 */
894 896 Notebook.prototype.to_raw = function (index) {
895 897 var i = this.index_or_selected(index);
896 898 if (this.is_valid_cell_index(i)) {
897 899 var source_element = this.get_cell_element(i);
898 900 var source_cell = source_element.data("cell");
899 901 var target_cell = null;
900 902 if (!(source_cell instanceof IPython.RawCell)) {
901 903 target_cell = this.insert_cell_below('raw',i);
902 904 var text = source_cell.get_text();
903 905 if (text === source_cell.placeholder) {
904 906 text = '';
905 907 };
906 908 // We must show the editor before setting its contents
907 909 target_cell.unrender();
908 910 target_cell.set_text(text);
909 911 // make this value the starting point, so that we can only undo
910 912 // to this state, instead of a blank cell
911 913 target_cell.code_mirror.clearHistory();
912 914 source_element.remove();
913 915 this.select(i);
914 916 this.set_dirty(true);
915 917 };
916 918 };
917 919 };
918 920
919 921 /**
920 922 * Turn a cell into a heading cell.
921 923 *
922 924 * @method to_heading
923 925 * @param {Number} [index] A cell's index
924 926 * @param {Number} [level] A heading level (e.g., 1 becomes &lt;h1&gt;)
925 927 */
926 928 Notebook.prototype.to_heading = function (index, level) {
927 929 level = level || 1;
928 930 var i = this.index_or_selected(index);
929 931 if (this.is_valid_cell_index(i)) {
930 932 var source_element = this.get_cell_element(i);
931 933 var source_cell = source_element.data("cell");
932 934 var target_cell = null;
933 935 if (source_cell instanceof IPython.HeadingCell) {
934 936 source_cell.set_level(level);
935 937 } else {
936 938 target_cell = this.insert_cell_below('heading',i);
937 939 var text = source_cell.get_text();
938 940 if (text === source_cell.placeholder) {
939 941 text = '';
940 942 };
941 943 // We must show the editor before setting its contents
942 944 target_cell.set_level(level);
943 945 target_cell.unrender();
944 946 target_cell.set_text(text);
945 947 // make this value the starting point, so that we can only undo
946 948 // to this state, instead of a blank cell
947 949 target_cell.code_mirror.clearHistory();
948 950 source_element.remove();
949 951 this.select(i);
950 952 if ((source_cell instanceof IPython.TextCell) && source_cell.rendered) {
951 953 target_cell.render();
952 954 }
953 955 };
954 956 this.set_dirty(true);
955 957 $([IPython.events]).trigger('selected_cell_type_changed.Notebook',
956 958 {'cell_type':'heading',level:level}
957 959 );
958 960 };
959 961 };
960 962
961 963
962 964 // Cut/Copy/Paste
963 965
964 966 /**
965 967 * Enable UI elements for pasting cells.
966 968 *
967 969 * @method enable_paste
968 970 */
969 971 Notebook.prototype.enable_paste = function () {
970 972 var that = this;
971 973 if (!this.paste_enabled) {
972 974 $('#paste_cell_replace').removeClass('disabled')
973 975 .on('click', function () {that.paste_cell_replace();});
974 976 $('#paste_cell_above').removeClass('disabled')
975 977 .on('click', function () {that.paste_cell_above();});
976 978 $('#paste_cell_below').removeClass('disabled')
977 979 .on('click', function () {that.paste_cell_below();});
978 980 this.paste_enabled = true;
979 981 };
980 982 };
981 983
982 984 /**
983 985 * Disable UI elements for pasting cells.
984 986 *
985 987 * @method disable_paste
986 988 */
987 989 Notebook.prototype.disable_paste = function () {
988 990 if (this.paste_enabled) {
989 991 $('#paste_cell_replace').addClass('disabled').off('click');
990 992 $('#paste_cell_above').addClass('disabled').off('click');
991 993 $('#paste_cell_below').addClass('disabled').off('click');
992 994 this.paste_enabled = false;
993 995 };
994 996 };
995 997
996 998 /**
997 999 * Cut a cell.
998 1000 *
999 1001 * @method cut_cell
1000 1002 */
1001 1003 Notebook.prototype.cut_cell = function () {
1002 1004 this.copy_cell();
1003 1005 this.delete_cell();
1004 1006 }
1005 1007
1006 1008 /**
1007 1009 * Copy a cell.
1008 1010 *
1009 1011 * @method copy_cell
1010 1012 */
1011 1013 Notebook.prototype.copy_cell = function () {
1012 1014 var cell = this.get_selected_cell();
1013 1015 this.clipboard = cell.toJSON();
1014 1016 this.enable_paste();
1015 1017 };
1016 1018
1017 1019 /**
1018 1020 * Replace the selected cell with a cell in the clipboard.
1019 1021 *
1020 1022 * @method paste_cell_replace
1021 1023 */
1022 1024 Notebook.prototype.paste_cell_replace = function () {
1023 1025 if (this.clipboard !== null && this.paste_enabled) {
1024 1026 var cell_data = this.clipboard;
1025 1027 var new_cell = this.insert_cell_above(cell_data.cell_type);
1026 1028 new_cell.fromJSON(cell_data);
1027 1029 var old_cell = this.get_next_cell(new_cell);
1028 1030 this.delete_cell(this.find_cell_index(old_cell));
1029 1031 this.select(this.find_cell_index(new_cell));
1030 1032 };
1031 1033 };
1032 1034
1033 1035 /**
1034 1036 * Paste a cell from the clipboard above the selected cell.
1035 1037 *
1036 1038 * @method paste_cell_above
1037 1039 */
1038 1040 Notebook.prototype.paste_cell_above = function () {
1039 1041 if (this.clipboard !== null && this.paste_enabled) {
1040 1042 var cell_data = this.clipboard;
1041 1043 var new_cell = this.insert_cell_above(cell_data.cell_type);
1042 1044 new_cell.fromJSON(cell_data);
1043 1045 new_cell.focus_cell();
1044 1046 };
1045 1047 };
1046 1048
1047 1049 /**
1048 1050 * Paste a cell from the clipboard below the selected cell.
1049 1051 *
1050 1052 * @method paste_cell_below
1051 1053 */
1052 1054 Notebook.prototype.paste_cell_below = function () {
1053 1055 if (this.clipboard !== null && this.paste_enabled) {
1054 1056 var cell_data = this.clipboard;
1055 1057 var new_cell = this.insert_cell_below(cell_data.cell_type);
1056 1058 new_cell.fromJSON(cell_data);
1057 1059 new_cell.focus_cell();
1058 1060 };
1059 1061 };
1060 1062
1061 1063 // Split/merge
1062 1064
1063 1065 /**
1064 1066 * Split the selected cell into two, at the cursor.
1065 1067 *
1066 1068 * @method split_cell
1067 1069 */
1068 1070 Notebook.prototype.split_cell = function () {
1069 1071 var mdc = IPython.MarkdownCell;
1070 1072 var rc = IPython.RawCell;
1071 1073 var cell = this.get_selected_cell();
1072 1074 if (cell.is_splittable()) {
1073 1075 var texta = cell.get_pre_cursor();
1074 1076 var textb = cell.get_post_cursor();
1075 1077 if (cell instanceof IPython.CodeCell) {
1076 1078 // In this case the operations keep the notebook in its existing mode
1077 1079 // so we don't need to do any post-op mode changes.
1078 1080 cell.set_text(textb);
1079 1081 var new_cell = this.insert_cell_above('code');
1080 1082 new_cell.set_text(texta);
1081 1083 } else if ((cell instanceof mdc && !cell.rendered) || (cell instanceof rc)) {
1082 1084 // We know cell is !rendered so we can use set_text.
1083 1085 cell.set_text(textb);
1084 1086 var new_cell = this.insert_cell_above(cell.cell_type);
1085 1087 // Unrender the new cell so we can call set_text.
1086 1088 new_cell.unrender();
1087 1089 new_cell.set_text(texta);
1088 1090 }
1089 1091 };
1090 1092 };
1091 1093
1092 1094 /**
1093 1095 * Combine the selected cell into the cell above it.
1094 1096 *
1095 1097 * @method merge_cell_above
1096 1098 */
1097 1099 Notebook.prototype.merge_cell_above = function () {
1098 1100 var mdc = IPython.MarkdownCell;
1099 1101 var rc = IPython.RawCell;
1100 1102 var index = this.get_selected_index();
1101 1103 var cell = this.get_cell(index);
1102 1104 var render = cell.rendered;
1103 1105 if (!cell.is_mergeable()) {
1104 1106 return;
1105 1107 }
1106 1108 if (index > 0) {
1107 1109 var upper_cell = this.get_cell(index-1);
1108 1110 if (!upper_cell.is_mergeable()) {
1109 1111 return;
1110 1112 }
1111 1113 var upper_text = upper_cell.get_text();
1112 1114 var text = cell.get_text();
1113 1115 if (cell instanceof IPython.CodeCell) {
1114 1116 cell.set_text(upper_text+'\n'+text);
1115 1117 } else if ((cell instanceof mdc) || (cell instanceof rc)) {
1116 1118 cell.unrender(); // Must unrender before we set_text.
1117 1119 cell.set_text(upper_text+'\n\n'+text);
1118 1120 if (render) {
1119 1121 // The rendered state of the final cell should match
1120 1122 // that of the original selected cell;
1121 1123 cell.render();
1122 1124 }
1123 1125 };
1124 1126 this.delete_cell(index-1);
1125 1127 this.select(this.find_cell_index(cell));
1126 1128 };
1127 1129 };
1128 1130
1129 1131 /**
1130 1132 * Combine the selected cell into the cell below it.
1131 1133 *
1132 1134 * @method merge_cell_below
1133 1135 */
1134 1136 Notebook.prototype.merge_cell_below = function () {
1135 1137 var mdc = IPython.MarkdownCell;
1136 1138 var rc = IPython.RawCell;
1137 1139 var index = this.get_selected_index();
1138 1140 var cell = this.get_cell(index);
1139 1141 var render = cell.rendered;
1140 1142 if (!cell.is_mergeable()) {
1141 1143 return;
1142 1144 }
1143 1145 if (index < this.ncells()-1) {
1144 1146 var lower_cell = this.get_cell(index+1);
1145 1147 if (!lower_cell.is_mergeable()) {
1146 1148 return;
1147 1149 }
1148 1150 var lower_text = lower_cell.get_text();
1149 1151 var text = cell.get_text();
1150 1152 if (cell instanceof IPython.CodeCell) {
1151 1153 cell.set_text(text+'\n'+lower_text);
1152 1154 } else if ((cell instanceof mdc) || (cell instanceof rc)) {
1153 1155 cell.unrender(); // Must unrender before we set_text.
1154 1156 cell.set_text(text+'\n\n'+lower_text);
1155 1157 if (render) {
1156 1158 // The rendered state of the final cell should match
1157 1159 // that of the original selected cell;
1158 1160 cell.render();
1159 1161 }
1160 1162 };
1161 1163 this.delete_cell(index+1);
1162 1164 this.select(this.find_cell_index(cell));
1163 1165 };
1164 1166 };
1165 1167
1166 1168
1167 1169 // Cell collapsing and output clearing
1168 1170
1169 1171 /**
1170 1172 * Hide a cell's output.
1171 1173 *
1172 1174 * @method collapse_output
1173 1175 * @param {Number} index A cell's numeric index
1174 1176 */
1175 1177 Notebook.prototype.collapse_output = function (index) {
1176 1178 var i = this.index_or_selected(index);
1177 1179 var cell = this.get_cell(i);
1178 1180 if (cell !== null && (cell instanceof IPython.CodeCell)) {
1179 1181 cell.collapse_output();
1180 1182 this.set_dirty(true);
1181 1183 }
1182 1184 };
1183 1185
1184 1186 /**
1185 1187 * Hide each code cell's output area.
1186 1188 *
1187 1189 * @method collapse_all_output
1188 1190 */
1189 1191 Notebook.prototype.collapse_all_output = function () {
1190 1192 $.map(this.get_cells(), function (cell, i) {
1191 1193 if (cell instanceof IPython.CodeCell) {
1192 1194 cell.collapse_output();
1193 1195 }
1194 1196 });
1195 1197 // this should not be set if the `collapse` key is removed from nbformat
1196 1198 this.set_dirty(true);
1197 1199 };
1198 1200
1199 1201 /**
1200 1202 * Show a cell's output.
1201 1203 *
1202 1204 * @method expand_output
1203 1205 * @param {Number} index A cell's numeric index
1204 1206 */
1205 1207 Notebook.prototype.expand_output = function (index) {
1206 1208 var i = this.index_or_selected(index);
1207 1209 var cell = this.get_cell(i);
1208 1210 if (cell !== null && (cell instanceof IPython.CodeCell)) {
1209 1211 cell.expand_output();
1210 1212 this.set_dirty(true);
1211 1213 }
1212 1214 };
1213 1215
1214 1216 /**
1215 1217 * Expand each code cell's output area, and remove scrollbars.
1216 1218 *
1217 1219 * @method expand_all_output
1218 1220 */
1219 1221 Notebook.prototype.expand_all_output = function () {
1220 1222 $.map(this.get_cells(), function (cell, i) {
1221 1223 if (cell instanceof IPython.CodeCell) {
1222 1224 cell.expand_output();
1223 1225 }
1224 1226 });
1225 1227 // this should not be set if the `collapse` key is removed from nbformat
1226 1228 this.set_dirty(true);
1227 1229 };
1228 1230
1229 1231 /**
1230 1232 * Clear the selected CodeCell's output area.
1231 1233 *
1232 1234 * @method clear_output
1233 1235 * @param {Number} index A cell's numeric index
1234 1236 */
1235 1237 Notebook.prototype.clear_output = function (index) {
1236 1238 var i = this.index_or_selected(index);
1237 1239 var cell = this.get_cell(i);
1238 1240 if (cell !== null && (cell instanceof IPython.CodeCell)) {
1239 1241 cell.clear_output();
1240 1242 this.set_dirty(true);
1241 1243 }
1242 1244 };
1243 1245
1244 1246 /**
1245 1247 * Clear each code cell's output area.
1246 1248 *
1247 1249 * @method clear_all_output
1248 1250 */
1249 1251 Notebook.prototype.clear_all_output = function () {
1250 1252 $.map(this.get_cells(), function (cell, i) {
1251 1253 if (cell instanceof IPython.CodeCell) {
1252 1254 cell.clear_output();
1253 1255 }
1254 1256 });
1255 1257 this.set_dirty(true);
1256 1258 };
1257 1259
1258 1260 /**
1259 1261 * Scroll the selected CodeCell's output area.
1260 1262 *
1261 1263 * @method scroll_output
1262 1264 * @param {Number} index A cell's numeric index
1263 1265 */
1264 1266 Notebook.prototype.scroll_output = function (index) {
1265 1267 var i = this.index_or_selected(index);
1266 1268 var cell = this.get_cell(i);
1267 1269 if (cell !== null && (cell instanceof IPython.CodeCell)) {
1268 1270 cell.scroll_output();
1269 1271 this.set_dirty(true);
1270 1272 }
1271 1273 };
1272 1274
1273 1275 /**
1274 1276 * Expand each code cell's output area, and add a scrollbar for long output.
1275 1277 *
1276 1278 * @method scroll_all_output
1277 1279 */
1278 1280 Notebook.prototype.scroll_all_output = function () {
1279 1281 $.map(this.get_cells(), function (cell, i) {
1280 1282 if (cell instanceof IPython.CodeCell) {
1281 1283 cell.scroll_output();
1282 1284 }
1283 1285 });
1284 1286 // this should not be set if the `collapse` key is removed from nbformat
1285 1287 this.set_dirty(true);
1286 1288 };
1287 1289
1288 1290 /** Toggle whether a cell's output is collapsed or expanded.
1289 1291 *
1290 1292 * @method toggle_output
1291 1293 * @param {Number} index A cell's numeric index
1292 1294 */
1293 1295 Notebook.prototype.toggle_output = function (index) {
1294 1296 var i = this.index_or_selected(index);
1295 1297 var cell = this.get_cell(i);
1296 1298 if (cell !== null && (cell instanceof IPython.CodeCell)) {
1297 1299 cell.toggle_output();
1298 1300 this.set_dirty(true);
1299 1301 }
1300 1302 };
1301 1303
1302 1304 /**
1303 1305 * Hide/show the output of all cells.
1304 1306 *
1305 1307 * @method toggle_all_output
1306 1308 */
1307 1309 Notebook.prototype.toggle_all_output = function () {
1308 1310 $.map(this.get_cells(), function (cell, i) {
1309 1311 if (cell instanceof IPython.CodeCell) {
1310 1312 cell.toggle_output();
1311 1313 }
1312 1314 });
1313 1315 // this should not be set if the `collapse` key is removed from nbformat
1314 1316 this.set_dirty(true);
1315 1317 };
1316 1318
1317 1319 /**
1318 1320 * Toggle a scrollbar for long cell outputs.
1319 1321 *
1320 1322 * @method toggle_output_scroll
1321 1323 * @param {Number} index A cell's numeric index
1322 1324 */
1323 1325 Notebook.prototype.toggle_output_scroll = function (index) {
1324 1326 var i = this.index_or_selected(index);
1325 1327 var cell = this.get_cell(i);
1326 1328 if (cell !== null && (cell instanceof IPython.CodeCell)) {
1327 1329 cell.toggle_output_scroll();
1328 1330 this.set_dirty(true);
1329 1331 }
1330 1332 };
1331 1333
1332 1334 /**
1333 1335 * Toggle the scrolling of long output on all cells.
1334 1336 *
1335 1337 * @method toggle_all_output_scrolling
1336 1338 */
1337 1339 Notebook.prototype.toggle_all_output_scroll = function () {
1338 1340 $.map(this.get_cells(), function (cell, i) {
1339 1341 if (cell instanceof IPython.CodeCell) {
1340 1342 cell.toggle_output_scroll();
1341 1343 }
1342 1344 });
1343 1345 // this should not be set if the `collapse` key is removed from nbformat
1344 1346 this.set_dirty(true);
1345 1347 };
1346 1348
1347 1349 // Other cell functions: line numbers, ...
1348 1350
1349 1351 /**
1350 1352 * Toggle line numbers in the selected cell's input area.
1351 1353 *
1352 1354 * @method cell_toggle_line_numbers
1353 1355 */
1354 1356 Notebook.prototype.cell_toggle_line_numbers = function() {
1355 1357 this.get_selected_cell().toggle_line_numbers();
1356 1358 };
1357 1359
1358 1360 // Session related things
1359 1361
1360 1362 /**
1361 1363 * Start a new session and set it on each code cell.
1362 1364 *
1363 1365 * @method start_session
1364 1366 */
1365 1367 Notebook.prototype.start_session = function () {
1366 1368 this.session = new IPython.Session(this.notebook_name, this.notebook_path, this);
1367 1369 this.session.start($.proxy(this._session_started, this));
1368 1370 };
1369 1371
1370 1372
1371 1373 /**
1372 1374 * Once a session is started, link the code cells to the kernel and pass the
1373 1375 * comm manager to the widget manager
1374 1376 *
1375 1377 */
1376 1378 Notebook.prototype._session_started = function(){
1377 1379 this.kernel = this.session.kernel;
1378 1380 var ncells = this.ncells();
1379 1381 for (var i=0; i<ncells; i++) {
1380 1382 var cell = this.get_cell(i);
1381 1383 if (cell instanceof IPython.CodeCell) {
1382 1384 cell.set_kernel(this.session.kernel);
1383 1385 };
1384 1386 };
1385 1387 };
1386 1388
1387 1389 /**
1388 1390 * Prompt the user to restart the IPython kernel.
1389 1391 *
1390 1392 * @method restart_kernel
1391 1393 */
1392 1394 Notebook.prototype.restart_kernel = function () {
1393 1395 var that = this;
1394 1396 IPython.dialog.modal({
1395 1397 title : "Restart kernel or continue running?",
1396 1398 body : $("<p/>").text(
1397 1399 'Do you want to restart the current kernel? You will lose all variables defined in it.'
1398 1400 ),
1399 1401 buttons : {
1400 1402 "Continue running" : {},
1401 1403 "Restart" : {
1402 1404 "class" : "btn-danger",
1403 1405 "click" : function() {
1404 1406 that.session.restart_kernel();
1405 1407 }
1406 1408 }
1407 1409 }
1408 1410 });
1409 1411 };
1410 1412
1411 1413 /**
1412 1414 * Execute or render cell outputs and go into command mode.
1413 1415 *
1414 1416 * @method execute_cell
1415 1417 */
1416 1418 Notebook.prototype.execute_cell = function () {
1417 1419 // mode = shift, ctrl, alt
1418 1420 var cell = this.get_selected_cell();
1419 1421 var cell_index = this.find_cell_index(cell);
1420 1422
1421 1423 cell.execute();
1422 1424 this.command_mode();
1423 1425 cell.focus_cell();
1424 1426 this.set_dirty(true);
1425 1427 }
1426 1428
1427 1429 /**
1428 1430 * Execute or render cell outputs and insert a new cell below.
1429 1431 *
1430 1432 * @method execute_cell_and_insert_below
1431 1433 */
1432 1434 Notebook.prototype.execute_cell_and_insert_below = function () {
1433 1435 var cell = this.get_selected_cell();
1434 1436 var cell_index = this.find_cell_index(cell);
1435 1437
1436 1438 cell.execute();
1437 1439
1438 1440 // If we are at the end always insert a new cell and return
1439 1441 if (cell_index === (this.ncells()-1)) {
1440 1442 this.insert_cell_below('code');
1441 1443 this.select(cell_index+1);
1442 1444 this.edit_mode();
1443 1445 this.scroll_to_bottom();
1444 1446 this.set_dirty(true);
1445 1447 return;
1446 1448 }
1447 1449
1448 1450 this.insert_cell_below('code');
1449 1451 this.select(cell_index+1);
1450 1452 this.edit_mode();
1451 1453 this.set_dirty(true);
1452 1454 };
1453 1455
1454 1456 /**
1455 1457 * Execute or render cell outputs and select the next cell.
1456 1458 *
1457 1459 * @method execute_cell_and_select_below
1458 1460 */
1459 1461 Notebook.prototype.execute_cell_and_select_below = function () {
1460 1462
1461 1463 var cell = this.get_selected_cell();
1462 1464 var cell_index = this.find_cell_index(cell);
1463 1465
1464 1466 cell.execute();
1465 1467
1466 1468 // If we are at the end always insert a new cell and return
1467 1469 if (cell_index === (this.ncells()-1)) {
1468 1470 this.insert_cell_below('code');
1469 1471 this.select(cell_index+1);
1470 1472 this.edit_mode();
1471 1473 this.scroll_to_bottom();
1472 1474 this.set_dirty(true);
1473 1475 return;
1474 1476 }
1475 1477
1476 1478 this.select(cell_index+1);
1477 1479 this.get_cell(cell_index+1).focus_cell();
1478 1480 this.set_dirty(true);
1479 1481 };
1480 1482
1481 1483 /**
1482 1484 * Execute all cells below the selected cell.
1483 1485 *
1484 1486 * @method execute_cells_below
1485 1487 */
1486 1488 Notebook.prototype.execute_cells_below = function () {
1487 1489 this.execute_cell_range(this.get_selected_index(), this.ncells());
1488 1490 this.scroll_to_bottom();
1489 1491 };
1490 1492
1491 1493 /**
1492 1494 * Execute all cells above the selected cell.
1493 1495 *
1494 1496 * @method execute_cells_above
1495 1497 */
1496 1498 Notebook.prototype.execute_cells_above = function () {
1497 1499 this.execute_cell_range(0, this.get_selected_index());
1498 1500 };
1499 1501
1500 1502 /**
1501 1503 * Execute all cells.
1502 1504 *
1503 1505 * @method execute_all_cells
1504 1506 */
1505 1507 Notebook.prototype.execute_all_cells = function () {
1506 1508 this.execute_cell_range(0, this.ncells());
1507 1509 this.scroll_to_bottom();
1508 1510 };
1509 1511
1510 1512 /**
1511 1513 * Execute a contiguous range of cells.
1512 1514 *
1513 1515 * @method execute_cell_range
1514 1516 * @param {Number} start Index of the first cell to execute (inclusive)
1515 1517 * @param {Number} end Index of the last cell to execute (exclusive)
1516 1518 */
1517 1519 Notebook.prototype.execute_cell_range = function (start, end) {
1518 1520 for (var i=start; i<end; i++) {
1519 1521 this.select(i);
1520 1522 this.execute_cell();
1521 1523 };
1522 1524 };
1523 1525
1524 1526 // Persistance and loading
1525 1527
1526 1528 /**
1527 1529 * Getter method for this notebook's name.
1528 1530 *
1529 1531 * @method get_notebook_name
1530 1532 * @return {String} This notebook's name
1531 1533 */
1532 1534 Notebook.prototype.get_notebook_name = function () {
1533 1535 var nbname = this.notebook_name.substring(0,this.notebook_name.length-6);
1534 1536 return nbname;
1535 1537 };
1536 1538
1537 1539 /**
1538 1540 * Setter method for this notebook's name.
1539 1541 *
1540 1542 * @method set_notebook_name
1541 1543 * @param {String} name A new name for this notebook
1542 1544 */
1543 1545 Notebook.prototype.set_notebook_name = function (name) {
1544 1546 this.notebook_name = name;
1545 1547 };
1546 1548
1547 1549 /**
1548 1550 * Check that a notebook's name is valid.
1549 1551 *
1550 1552 * @method test_notebook_name
1551 1553 * @param {String} nbname A name for this notebook
1552 1554 * @return {Boolean} True if the name is valid, false if invalid
1553 1555 */
1554 1556 Notebook.prototype.test_notebook_name = function (nbname) {
1555 1557 nbname = nbname || '';
1556 1558 if (this.notebook_name_blacklist_re.test(nbname) == false && nbname.length>0) {
1557 1559 return true;
1558 1560 } else {
1559 1561 return false;
1560 1562 };
1561 1563 };
1562 1564
1563 1565 /**
1564 1566 * Load a notebook from JSON (.ipynb).
1565 1567 *
1566 1568 * This currently handles one worksheet: others are deleted.
1567 1569 *
1568 1570 * @method fromJSON
1569 1571 * @param {Object} data JSON representation of a notebook
1570 1572 */
1571 1573 Notebook.prototype.fromJSON = function (data) {
1572 1574 var content = data.content;
1573 1575 var ncells = this.ncells();
1574 1576 var i;
1575 1577 for (i=0; i<ncells; i++) {
1576 1578 // Always delete cell 0 as they get renumbered as they are deleted.
1577 1579 this.delete_cell(0);
1578 1580 };
1579 1581 // Save the metadata and name.
1580 1582 this.metadata = content.metadata;
1581 1583 this.notebook_name = data.name;
1582 1584 // Only handle 1 worksheet for now.
1583 1585 var worksheet = content.worksheets[0];
1584 1586 if (worksheet !== undefined) {
1585 1587 if (worksheet.metadata) {
1586 1588 this.worksheet_metadata = worksheet.metadata;
1587 1589 }
1588 1590 var new_cells = worksheet.cells;
1589 1591 ncells = new_cells.length;
1590 1592 var cell_data = null;
1591 1593 var new_cell = null;
1592 1594 for (i=0; i<ncells; i++) {
1593 1595 cell_data = new_cells[i];
1594 1596 // VERSIONHACK: plaintext -> raw
1595 1597 // handle never-released plaintext name for raw cells
1596 1598 if (cell_data.cell_type === 'plaintext'){
1597 1599 cell_data.cell_type = 'raw';
1598 1600 }
1599 1601
1600 1602 new_cell = this.insert_cell_at_index(cell_data.cell_type, i);
1601 1603 new_cell.fromJSON(cell_data);
1602 1604 };
1603 1605 };
1604 1606 if (content.worksheets.length > 1) {
1605 1607 IPython.dialog.modal({
1606 1608 title : "Multiple worksheets",
1607 1609 body : "This notebook has " + data.worksheets.length + " worksheets, " +
1608 1610 "but this version of IPython can only handle the first. " +
1609 1611 "If you save this notebook, worksheets after the first will be lost.",
1610 1612 buttons : {
1611 1613 OK : {
1612 1614 class : "btn-danger"
1613 1615 }
1614 1616 }
1615 1617 });
1616 1618 }
1617 1619 };
1618 1620
1619 1621 /**
1620 1622 * Dump this notebook into a JSON-friendly object.
1621 1623 *
1622 1624 * @method toJSON
1623 1625 * @return {Object} A JSON-friendly representation of this notebook.
1624 1626 */
1625 1627 Notebook.prototype.toJSON = function () {
1626 1628 var cells = this.get_cells();
1627 1629 var ncells = cells.length;
1628 1630 var cell_array = new Array(ncells);
1629 1631 for (var i=0; i<ncells; i++) {
1630 1632 cell_array[i] = cells[i].toJSON();
1631 1633 };
1632 1634 var data = {
1633 1635 // Only handle 1 worksheet for now.
1634 1636 worksheets : [{
1635 1637 cells: cell_array,
1636 1638 metadata: this.worksheet_metadata
1637 1639 }],
1638 1640 metadata : this.metadata
1639 1641 };
1640 1642 return data;
1641 1643 };
1642 1644
1643 1645 /**
1644 1646 * Start an autosave timer, for periodically saving the notebook.
1645 1647 *
1646 1648 * @method set_autosave_interval
1647 1649 * @param {Integer} interval the autosave interval in milliseconds
1648 1650 */
1649 1651 Notebook.prototype.set_autosave_interval = function (interval) {
1650 1652 var that = this;
1651 1653 // clear previous interval, so we don't get simultaneous timers
1652 1654 if (this.autosave_timer) {
1653 1655 clearInterval(this.autosave_timer);
1654 1656 }
1655 1657
1656 1658 this.autosave_interval = this.minimum_autosave_interval = interval;
1657 1659 if (interval) {
1658 1660 this.autosave_timer = setInterval(function() {
1659 1661 if (that.dirty) {
1660 1662 that.save_notebook();
1661 1663 }
1662 1664 }, interval);
1663 1665 $([IPython.events]).trigger("autosave_enabled.Notebook", interval);
1664 1666 } else {
1665 1667 this.autosave_timer = null;
1666 1668 $([IPython.events]).trigger("autosave_disabled.Notebook");
1667 1669 };
1668 1670 };
1669 1671
1670 1672 /**
1671 1673 * Save this notebook on the server.
1672 1674 *
1673 1675 * @method save_notebook
1674 1676 */
1675 1677 Notebook.prototype.save_notebook = function (extra_settings) {
1676 1678 // Create a JSON model to be sent to the server.
1677 1679 var model = {};
1678 1680 model.name = this.notebook_name;
1679 1681 model.path = this.notebook_path;
1680 1682 model.content = this.toJSON();
1681 1683 model.content.nbformat = this.nbformat;
1682 1684 model.content.nbformat_minor = this.nbformat_minor;
1683 1685 // time the ajax call for autosave tuning purposes.
1684 1686 var start = new Date().getTime();
1685 1687 // We do the call with settings so we can set cache to false.
1686 1688 var settings = {
1687 1689 processData : false,
1688 1690 cache : false,
1689 1691 type : "PUT",
1690 1692 data : JSON.stringify(model),
1691 1693 headers : {'Content-Type': 'application/json'},
1692 1694 success : $.proxy(this.save_notebook_success, this, start),
1693 1695 error : $.proxy(this.save_notebook_error, this)
1694 1696 };
1695 1697 if (extra_settings) {
1696 1698 for (var key in extra_settings) {
1697 1699 settings[key] = extra_settings[key];
1698 1700 }
1699 1701 }
1700 1702 $([IPython.events]).trigger('notebook_saving.Notebook');
1701 1703 var url = utils.url_join_encode(
1702 1704 this._baseProjectUrl,
1703 1705 'api/notebooks',
1704 1706 this.notebook_path,
1705 1707 this.notebook_name
1706 1708 );
1707 1709 $.ajax(url, settings);
1708 1710 };
1709 1711
1710 1712 /**
1711 1713 * Success callback for saving a notebook.
1712 1714 *
1713 1715 * @method save_notebook_success
1714 1716 * @param {Integer} start the time when the save request started
1715 1717 * @param {Object} data JSON representation of a notebook
1716 1718 * @param {String} status Description of response status
1717 1719 * @param {jqXHR} xhr jQuery Ajax object
1718 1720 */
1719 1721 Notebook.prototype.save_notebook_success = function (start, data, status, xhr) {
1720 1722 this.set_dirty(false);
1721 1723 $([IPython.events]).trigger('notebook_saved.Notebook');
1722 1724 this._update_autosave_interval(start);
1723 1725 if (this._checkpoint_after_save) {
1724 1726 this.create_checkpoint();
1725 1727 this._checkpoint_after_save = false;
1726 1728 };
1727 1729 };
1728 1730
1729 1731 /**
1730 1732 * update the autosave interval based on how long the last save took
1731 1733 *
1732 1734 * @method _update_autosave_interval
1733 1735 * @param {Integer} timestamp when the save request started
1734 1736 */
1735 1737 Notebook.prototype._update_autosave_interval = function (start) {
1736 1738 var duration = (new Date().getTime() - start);
1737 1739 if (this.autosave_interval) {
1738 1740 // new save interval: higher of 10x save duration or parameter (default 30 seconds)
1739 1741 var interval = Math.max(10 * duration, this.minimum_autosave_interval);
1740 1742 // round to 10 seconds, otherwise we will be setting a new interval too often
1741 1743 interval = 10000 * Math.round(interval / 10000);
1742 1744 // set new interval, if it's changed
1743 1745 if (interval != this.autosave_interval) {
1744 1746 this.set_autosave_interval(interval);
1745 1747 }
1746 1748 }
1747 1749 };
1748 1750
1749 1751 /**
1750 1752 * Failure callback for saving a notebook.
1751 1753 *
1752 1754 * @method save_notebook_error
1753 1755 * @param {jqXHR} xhr jQuery Ajax object
1754 1756 * @param {String} status Description of response status
1755 1757 * @param {String} error HTTP error message
1756 1758 */
1757 1759 Notebook.prototype.save_notebook_error = function (xhr, status, error) {
1758 1760 $([IPython.events]).trigger('notebook_save_failed.Notebook', [xhr, status, error]);
1759 1761 };
1760 1762
1761 1763 Notebook.prototype.new_notebook = function(){
1762 1764 var path = this.notebook_path;
1763 1765 var base_project_url = this._baseProjectUrl;
1764 1766 var settings = {
1765 1767 processData : false,
1766 1768 cache : false,
1767 1769 type : "POST",
1768 1770 dataType : "json",
1769 1771 async : false,
1770 1772 success : function (data, status, xhr){
1771 1773 var notebook_name = data.name;
1772 1774 window.open(
1773 1775 utils.url_join_encode(
1774 1776 base_project_url,
1775 1777 'notebooks',
1776 1778 path,
1777 1779 notebook_name
1778 1780 ),
1779 1781 '_blank'
1780 1782 );
1781 1783 }
1782 1784 };
1783 1785 var url = utils.url_join_encode(
1784 1786 base_project_url,
1785 1787 'api/notebooks',
1786 1788 path
1787 1789 );
1788 1790 $.ajax(url,settings);
1789 1791 };
1790 1792
1791 1793
1792 1794 Notebook.prototype.copy_notebook = function(){
1793 1795 var path = this.notebook_path;
1794 1796 var base_project_url = this._baseProjectUrl;
1795 1797 var settings = {
1796 1798 processData : false,
1797 1799 cache : false,
1798 1800 type : "POST",
1799 1801 dataType : "json",
1800 1802 data : JSON.stringify({copy_from : this.notebook_name}),
1801 1803 async : false,
1802 1804 success : function (data, status, xhr) {
1803 1805 window.open(utils.url_join_encode(
1804 1806 base_project_url,
1805 1807 'notebooks',
1806 1808 data.path,
1807 1809 data.name
1808 1810 ), '_blank');
1809 1811 }
1810 1812 };
1811 1813 var url = utils.url_join_encode(
1812 1814 base_project_url,
1813 1815 'api/notebooks',
1814 1816 path
1815 1817 );
1816 1818 $.ajax(url,settings);
1817 1819 };
1818 1820
1819 1821 Notebook.prototype.rename = function (nbname) {
1820 1822 var that = this;
1821 1823 var data = {name: nbname + '.ipynb'};
1822 1824 var settings = {
1823 1825 processData : false,
1824 1826 cache : false,
1825 1827 type : "PATCH",
1826 1828 data : JSON.stringify(data),
1827 1829 dataType: "json",
1828 1830 headers : {'Content-Type': 'application/json'},
1829 1831 success : $.proxy(that.rename_success, this),
1830 1832 error : $.proxy(that.rename_error, this)
1831 1833 };
1832 1834 $([IPython.events]).trigger('rename_notebook.Notebook', data);
1833 1835 var url = utils.url_join_encode(
1834 1836 this._baseProjectUrl,
1835 1837 'api/notebooks',
1836 1838 this.notebook_path,
1837 1839 this.notebook_name
1838 1840 );
1839 1841 $.ajax(url, settings);
1840 1842 };
1841 1843
1842 1844 Notebook.prototype.delete = function () {
1843 1845 var that = this;
1844 1846 var settings = {
1845 1847 processData : false,
1846 1848 cache : false,
1847 1849 type : "DELETE",
1848 1850 dataType: "json",
1849 1851 };
1850 1852 var url = utils.url_join_encode(
1851 1853 this._baseProjectUrl,
1852 1854 'api/notebooks',
1853 1855 this.notebook_path,
1854 1856 this.notebook_name
1855 1857 );
1856 1858 $.ajax(url, settings);
1857 1859 };
1858 1860
1859 1861
1860 1862 Notebook.prototype.rename_success = function (json, status, xhr) {
1861 1863 this.notebook_name = json.name;
1862 1864 var name = this.notebook_name;
1863 1865 var path = json.path;
1864 1866 this.session.rename_notebook(name, path);
1865 1867 $([IPython.events]).trigger('notebook_renamed.Notebook', json);
1866 1868 }
1867 1869
1868 1870 Notebook.prototype.rename_error = function (xhr, status, error) {
1869 1871 var that = this;
1870 1872 var dialog = $('<div/>').append(
1871 1873 $("<p/>").addClass("rename-message")
1872 1874 .text('This notebook name already exists.')
1873 1875 )
1874 1876 $([IPython.events]).trigger('notebook_rename_failed.Notebook', [xhr, status, error]);
1875 1877 IPython.dialog.modal({
1876 1878 title: "Notebook Rename Error!",
1877 1879 body: dialog,
1878 1880 buttons : {
1879 1881 "Cancel": {},
1880 1882 "OK": {
1881 1883 class: "btn-primary",
1882 1884 click: function () {
1883 1885 IPython.save_widget.rename_notebook();
1884 1886 }}
1885 1887 },
1886 1888 open : function (event, ui) {
1887 1889 var that = $(this);
1888 1890 // Upon ENTER, click the OK button.
1889 1891 that.find('input[type="text"]').keydown(function (event, ui) {
1890 1892 if (event.which === utils.keycodes.ENTER) {
1891 1893 that.find('.btn-primary').first().click();
1892 1894 }
1893 1895 });
1894 1896 that.find('input[type="text"]').focus();
1895 1897 }
1896 1898 });
1897 1899 }
1898 1900
1899 1901 /**
1900 1902 * Request a notebook's data from the server.
1901 1903 *
1902 1904 * @method load_notebook
1903 1905 * @param {String} notebook_name and path A notebook to load
1904 1906 */
1905 1907 Notebook.prototype.load_notebook = function (notebook_name, notebook_path) {
1906 1908 var that = this;
1907 1909 this.notebook_name = notebook_name;
1908 1910 this.notebook_path = notebook_path;
1909 1911 // We do the call with settings so we can set cache to false.
1910 1912 var settings = {
1911 1913 processData : false,
1912 1914 cache : false,
1913 1915 type : "GET",
1914 1916 dataType : "json",
1915 1917 success : $.proxy(this.load_notebook_success,this),
1916 1918 error : $.proxy(this.load_notebook_error,this),
1917 1919 };
1918 1920 $([IPython.events]).trigger('notebook_loading.Notebook');
1919 1921 var url = utils.url_join_encode(
1920 1922 this._baseProjectUrl,
1921 1923 'api/notebooks',
1922 1924 this.notebook_path,
1923 1925 this.notebook_name
1924 1926 );
1925 1927 $.ajax(url, settings);
1926 1928 };
1927 1929
1928 1930 /**
1929 1931 * Success callback for loading a notebook from the server.
1930 1932 *
1931 1933 * Load notebook data from the JSON response.
1932 1934 *
1933 1935 * @method load_notebook_success
1934 1936 * @param {Object} data JSON representation of a notebook
1935 1937 * @param {String} status Description of response status
1936 1938 * @param {jqXHR} xhr jQuery Ajax object
1937 1939 */
1938 1940 Notebook.prototype.load_notebook_success = function (data, status, xhr) {
1939 1941 this.fromJSON(data);
1940 1942 if (this.ncells() === 0) {
1941 1943 this.insert_cell_below('code');
1942 1944 this.select(0);
1943 1945 this.edit_mode();
1944 1946 } else {
1945 1947 this.select(0);
1946 1948 this.command_mode();
1947 1949 };
1948 1950 this.set_dirty(false);
1949 1951 this.scroll_to_top();
1950 1952 if (data.orig_nbformat !== undefined && data.nbformat !== data.orig_nbformat) {
1951 1953 var msg = "This notebook has been converted from an older " +
1952 1954 "notebook format (v"+data.orig_nbformat+") to the current notebook " +
1953 1955 "format (v"+data.nbformat+"). The next time you save this notebook, the " +
1954 1956 "newer notebook format will be used and older versions of IPython " +
1955 1957 "may not be able to read it. To keep the older version, close the " +
1956 1958 "notebook without saving it.";
1957 1959 IPython.dialog.modal({
1958 1960 title : "Notebook converted",
1959 1961 body : msg,
1960 1962 buttons : {
1961 1963 OK : {
1962 1964 class : "btn-primary"
1963 1965 }
1964 1966 }
1965 1967 });
1966 1968 } else if (data.orig_nbformat_minor !== undefined && data.nbformat_minor !== data.orig_nbformat_minor) {
1967 1969 var that = this;
1968 1970 var orig_vs = 'v' + data.nbformat + '.' + data.orig_nbformat_minor;
1969 1971 var this_vs = 'v' + data.nbformat + '.' + this.nbformat_minor;
1970 1972 var msg = "This notebook is version " + orig_vs + ", but we only fully support up to " +
1971 1973 this_vs + ". You can still work with this notebook, but some features " +
1972 1974 "introduced in later notebook versions may not be available."
1973 1975
1974 1976 IPython.dialog.modal({
1975 1977 title : "Newer Notebook",
1976 1978 body : msg,
1977 1979 buttons : {
1978 1980 OK : {
1979 1981 class : "btn-danger"
1980 1982 }
1981 1983 }
1982 1984 });
1983 1985
1984 1986 }
1985 1987
1986 1988 // Create the session after the notebook is completely loaded to prevent
1987 1989 // code execution upon loading, which is a security risk.
1988 1990 if (this.session == null) {
1989 1991 this.start_session();
1990 1992 }
1991 1993 // load our checkpoint list
1992 1994 this.list_checkpoints();
1993 1995
1994 1996 // load toolbar state
1995 1997 if (this.metadata.celltoolbar) {
1996 1998 IPython.CellToolbar.global_show();
1997 1999 IPython.CellToolbar.activate_preset(this.metadata.celltoolbar);
1998 2000 }
1999 2001
2000 2002 $([IPython.events]).trigger('notebook_loaded.Notebook');
2001 2003 };
2002 2004
2003 2005 /**
2004 2006 * Failure callback for loading a notebook from the server.
2005 2007 *
2006 2008 * @method load_notebook_error
2007 2009 * @param {jqXHR} xhr jQuery Ajax object
2008 2010 * @param {String} status Description of response status
2009 2011 * @param {String} error HTTP error message
2010 2012 */
2011 2013 Notebook.prototype.load_notebook_error = function (xhr, status, error) {
2012 2014 $([IPython.events]).trigger('notebook_load_failed.Notebook', [xhr, status, error]);
2013 2015 if (xhr.status === 400) {
2014 2016 var msg = error;
2015 2017 } else if (xhr.status === 500) {
2016 2018 var msg = "An unknown error occurred while loading this notebook. " +
2017 2019 "This version can load notebook formats " +
2018 2020 "v" + this.nbformat + " or earlier.";
2019 2021 }
2020 2022 IPython.dialog.modal({
2021 2023 title: "Error loading notebook",
2022 2024 body : msg,
2023 2025 buttons : {
2024 2026 "OK": {}
2025 2027 }
2026 2028 });
2027 2029 }
2028 2030
2029 2031 /********************* checkpoint-related *********************/
2030 2032
2031 2033 /**
2032 2034 * Save the notebook then immediately create a checkpoint.
2033 2035 *
2034 2036 * @method save_checkpoint
2035 2037 */
2036 2038 Notebook.prototype.save_checkpoint = function () {
2037 2039 this._checkpoint_after_save = true;
2038 2040 this.save_notebook();
2039 2041 };
2040 2042
2041 2043 /**
2042 2044 * Add a checkpoint for this notebook.
2043 2045 * for use as a callback from checkpoint creation.
2044 2046 *
2045 2047 * @method add_checkpoint
2046 2048 */
2047 2049 Notebook.prototype.add_checkpoint = function (checkpoint) {
2048 2050 var found = false;
2049 2051 for (var i = 0; i < this.checkpoints.length; i++) {
2050 2052 var existing = this.checkpoints[i];
2051 2053 if (existing.id == checkpoint.id) {
2052 2054 found = true;
2053 2055 this.checkpoints[i] = checkpoint;
2054 2056 break;
2055 2057 }
2056 2058 }
2057 2059 if (!found) {
2058 2060 this.checkpoints.push(checkpoint);
2059 2061 }
2060 2062 this.last_checkpoint = this.checkpoints[this.checkpoints.length - 1];
2061 2063 };
2062 2064
2063 2065 /**
2064 2066 * List checkpoints for this notebook.
2065 2067 *
2066 2068 * @method list_checkpoints
2067 2069 */
2068 2070 Notebook.prototype.list_checkpoints = function () {
2069 2071 var url = utils.url_join_encode(
2070 2072 this._baseProjectUrl,
2071 2073 'api/notebooks',
2072 2074 this.notebook_path,
2073 2075 this.notebook_name,
2074 2076 'checkpoints'
2075 2077 );
2076 2078 $.get(url).done(
2077 2079 $.proxy(this.list_checkpoints_success, this)
2078 2080 ).fail(
2079 2081 $.proxy(this.list_checkpoints_error, this)
2080 2082 );
2081 2083 };
2082 2084
2083 2085 /**
2084 2086 * Success callback for listing checkpoints.
2085 2087 *
2086 2088 * @method list_checkpoint_success
2087 2089 * @param {Object} data JSON representation of a checkpoint
2088 2090 * @param {String} status Description of response status
2089 2091 * @param {jqXHR} xhr jQuery Ajax object
2090 2092 */
2091 2093 Notebook.prototype.list_checkpoints_success = function (data, status, xhr) {
2092 2094 var data = $.parseJSON(data);
2093 2095 this.checkpoints = data;
2094 2096 if (data.length) {
2095 2097 this.last_checkpoint = data[data.length - 1];
2096 2098 } else {
2097 2099 this.last_checkpoint = null;
2098 2100 }
2099 2101 $([IPython.events]).trigger('checkpoints_listed.Notebook', [data]);
2100 2102 };
2101 2103
2102 2104 /**
2103 2105 * Failure callback for listing a checkpoint.
2104 2106 *
2105 2107 * @method list_checkpoint_error
2106 2108 * @param {jqXHR} xhr jQuery Ajax object
2107 2109 * @param {String} status Description of response status
2108 2110 * @param {String} error_msg HTTP error message
2109 2111 */
2110 2112 Notebook.prototype.list_checkpoints_error = function (xhr, status, error_msg) {
2111 2113 $([IPython.events]).trigger('list_checkpoints_failed.Notebook');
2112 2114 };
2113 2115
2114 2116 /**
2115 2117 * Create a checkpoint of this notebook on the server from the most recent save.
2116 2118 *
2117 2119 * @method create_checkpoint
2118 2120 */
2119 2121 Notebook.prototype.create_checkpoint = function () {
2120 2122 var url = utils.url_join_encode(
2121 2123 this._baseProjectUrl,
2122 2124 'api/notebooks',
2123 2125 this.notebookPath(),
2124 2126 this.notebook_name,
2125 2127 'checkpoints'
2126 2128 );
2127 2129 $.post(url).done(
2128 2130 $.proxy(this.create_checkpoint_success, this)
2129 2131 ).fail(
2130 2132 $.proxy(this.create_checkpoint_error, this)
2131 2133 );
2132 2134 };
2133 2135
2134 2136 /**
2135 2137 * Success callback for creating a checkpoint.
2136 2138 *
2137 2139 * @method create_checkpoint_success
2138 2140 * @param {Object} data JSON representation of a checkpoint
2139 2141 * @param {String} status Description of response status
2140 2142 * @param {jqXHR} xhr jQuery Ajax object
2141 2143 */
2142 2144 Notebook.prototype.create_checkpoint_success = function (data, status, xhr) {
2143 2145 var data = $.parseJSON(data);
2144 2146 this.add_checkpoint(data);
2145 2147 $([IPython.events]).trigger('checkpoint_created.Notebook', data);
2146 2148 };
2147 2149
2148 2150 /**
2149 2151 * Failure callback for creating a checkpoint.
2150 2152 *
2151 2153 * @method create_checkpoint_error
2152 2154 * @param {jqXHR} xhr jQuery Ajax object
2153 2155 * @param {String} status Description of response status
2154 2156 * @param {String} error_msg HTTP error message
2155 2157 */
2156 2158 Notebook.prototype.create_checkpoint_error = function (xhr, status, error_msg) {
2157 2159 $([IPython.events]).trigger('checkpoint_failed.Notebook');
2158 2160 };
2159 2161
2160 2162 Notebook.prototype.restore_checkpoint_dialog = function (checkpoint) {
2161 2163 var that = this;
2162 2164 var checkpoint = checkpoint || this.last_checkpoint;
2163 2165 if ( ! checkpoint ) {
2164 2166 console.log("restore dialog, but no checkpoint to restore to!");
2165 2167 return;
2166 2168 }
2167 2169 var body = $('<div/>').append(
2168 2170 $('<p/>').addClass("p-space").text(
2169 2171 "Are you sure you want to revert the notebook to " +
2170 2172 "the latest checkpoint?"
2171 2173 ).append(
2172 2174 $("<strong/>").text(
2173 2175 " This cannot be undone."
2174 2176 )
2175 2177 )
2176 2178 ).append(
2177 2179 $('<p/>').addClass("p-space").text("The checkpoint was last updated at:")
2178 2180 ).append(
2179 2181 $('<p/>').addClass("p-space").text(
2180 2182 Date(checkpoint.last_modified)
2181 2183 ).css("text-align", "center")
2182 2184 );
2183 2185
2184 2186 IPython.dialog.modal({
2185 2187 title : "Revert notebook to checkpoint",
2186 2188 body : body,
2187 2189 buttons : {
2188 2190 Revert : {
2189 2191 class : "btn-danger",
2190 2192 click : function () {
2191 2193 that.restore_checkpoint(checkpoint.id);
2192 2194 }
2193 2195 },
2194 2196 Cancel : {}
2195 2197 }
2196 2198 });
2197 2199 }
2198 2200
2199 2201 /**
2200 2202 * Restore the notebook to a checkpoint state.
2201 2203 *
2202 2204 * @method restore_checkpoint
2203 2205 * @param {String} checkpoint ID
2204 2206 */
2205 2207 Notebook.prototype.restore_checkpoint = function (checkpoint) {
2206 2208 $([IPython.events]).trigger('notebook_restoring.Notebook', checkpoint);
2207 2209 var url = utils.url_join_encode(
2208 2210 this._baseProjectUrl,
2209 2211 'api/notebooks',
2210 2212 this.notebookPath(),
2211 2213 this.notebook_name,
2212 2214 'checkpoints',
2213 2215 checkpoint
2214 2216 );
2215 2217 $.post(url).done(
2216 2218 $.proxy(this.restore_checkpoint_success, this)
2217 2219 ).fail(
2218 2220 $.proxy(this.restore_checkpoint_error, this)
2219 2221 );
2220 2222 };
2221 2223
2222 2224 /**
2223 2225 * Success callback for restoring a notebook to a checkpoint.
2224 2226 *
2225 2227 * @method restore_checkpoint_success
2226 2228 * @param {Object} data (ignored, should be empty)
2227 2229 * @param {String} status Description of response status
2228 2230 * @param {jqXHR} xhr jQuery Ajax object
2229 2231 */
2230 2232 Notebook.prototype.restore_checkpoint_success = function (data, status, xhr) {
2231 2233 $([IPython.events]).trigger('checkpoint_restored.Notebook');
2232 2234 this.load_notebook(this.notebook_name, this.notebook_path);
2233 2235 };
2234 2236
2235 2237 /**
2236 2238 * Failure callback for restoring a notebook to a checkpoint.
2237 2239 *
2238 2240 * @method restore_checkpoint_error
2239 2241 * @param {jqXHR} xhr jQuery Ajax object
2240 2242 * @param {String} status Description of response status
2241 2243 * @param {String} error_msg HTTP error message
2242 2244 */
2243 2245 Notebook.prototype.restore_checkpoint_error = function (xhr, status, error_msg) {
2244 2246 $([IPython.events]).trigger('checkpoint_restore_failed.Notebook');
2245 2247 };
2246 2248
2247 2249 /**
2248 2250 * Delete a notebook checkpoint.
2249 2251 *
2250 2252 * @method delete_checkpoint
2251 2253 * @param {String} checkpoint ID
2252 2254 */
2253 2255 Notebook.prototype.delete_checkpoint = function (checkpoint) {
2254 2256 $([IPython.events]).trigger('notebook_restoring.Notebook', checkpoint);
2255 2257 var url = utils.url_join_encode(
2256 2258 this._baseProjectUrl,
2257 2259 'api/notebooks',
2258 2260 this.notebookPath(),
2259 2261 this.notebook_name,
2260 2262 'checkpoints',
2261 2263 checkpoint
2262 2264 );
2263 2265 $.ajax(url, {
2264 2266 type: 'DELETE',
2265 2267 success: $.proxy(this.delete_checkpoint_success, this),
2266 2268 error: $.proxy(this.delete_notebook_error,this)
2267 2269 });
2268 2270 };
2269 2271
2270 2272 /**
2271 2273 * Success callback for deleting a notebook checkpoint
2272 2274 *
2273 2275 * @method delete_checkpoint_success
2274 2276 * @param {Object} data (ignored, should be empty)
2275 2277 * @param {String} status Description of response status
2276 2278 * @param {jqXHR} xhr jQuery Ajax object
2277 2279 */
2278 2280 Notebook.prototype.delete_checkpoint_success = function (data, status, xhr) {
2279 2281 $([IPython.events]).trigger('checkpoint_deleted.Notebook', data);
2280 2282 this.load_notebook(this.notebook_name, this.notebook_path);
2281 2283 };
2282 2284
2283 2285 /**
2284 2286 * Failure callback for deleting a notebook checkpoint.
2285 2287 *
2286 2288 * @method delete_checkpoint_error
2287 2289 * @param {jqXHR} xhr jQuery Ajax object
2288 2290 * @param {String} status Description of response status
2289 2291 * @param {String} error_msg HTTP error message
2290 2292 */
2291 2293 Notebook.prototype.delete_checkpoint_error = function (xhr, status, error_msg) {
2292 2294 $([IPython.events]).trigger('checkpoint_delete_failed.Notebook');
2293 2295 };
2294 2296
2295 2297
2296 2298 IPython.Notebook = Notebook;
2297 2299
2298 2300
2299 2301 return IPython;
2300 2302
2301 2303 }(IPython));
@@ -1,210 +1,222 b''
1 1 //----------------------------------------------------------------------------
2 2 // Copyright (C) 2012 The IPython Development Team
3 3 //
4 4 // Distributed under the terms of the BSD License. The full license is in
5 5 // the file COPYING, distributed as part of this software.
6 6 //----------------------------------------------------------------------------
7 7
8 8 //============================================================================
9 9 // Notification widget
10 10 //============================================================================
11 11
12 12 var IPython = (function (IPython) {
13 13 "use strict";
14 14 var utils = IPython.utils;
15 15
16 16
17 17 var NotificationArea = function (selector) {
18 18 this.selector = selector;
19 19 if (this.selector !== undefined) {
20 20 this.element = $(selector);
21 21 }
22 22 this.widget_dict = {};
23 23 };
24 24
25 25 NotificationArea.prototype.temp_message = function (msg, timeout, css_class) {
26 26 var uuid = utils.uuid();
27 27 if( css_class == 'danger') {css_class = 'ui-state-error';}
28 28 if( css_class == 'warning') {css_class = 'ui-state-highlight';}
29 29 var tdiv = $('<div>')
30 30 .attr('id',uuid)
31 31 .addClass('notification_widget ui-widget ui-widget-content ui-corner-all')
32 32 .addClass('border-box-sizing')
33 33 .addClass(css_class)
34 34 .hide()
35 35 .text(msg);
36 36
37 37 $(this.selector).append(tdiv);
38 38 var tmout = Math.max(1500,(timeout||1500));
39 39 tdiv.fadeIn(100);
40 40
41 41 setTimeout(function () {
42 42 tdiv.fadeOut(100, function () {tdiv.remove();});
43 43 }, tmout);
44 44 };
45 45
46 46 NotificationArea.prototype.widget = function(name) {
47 47 if(this.widget_dict[name] == undefined) {
48 48 return this.new_notification_widget(name);
49 49 }
50 50 return this.get_widget(name);
51 51 };
52 52
53 53 NotificationArea.prototype.get_widget = function(name) {
54 54 if(this.widget_dict[name] == undefined) {
55 55 throw('no widgets with this name');
56 56 }
57 57 return this.widget_dict[name];
58 58 };
59 59
60 60 NotificationArea.prototype.new_notification_widget = function(name) {
61 61 if(this.widget_dict[name] != undefined) {
62 62 throw('widget with that name already exists ! ');
63 63 }
64 64 var div = $('<div/>').attr('id','notification_'+name);
65 65 $(this.selector).append(div);
66 66 this.widget_dict[name] = new IPython.NotificationWidget('#notification_'+name);
67 67 return this.widget_dict[name];
68 68 };
69 69
70 70 NotificationArea.prototype.init_notification_widgets = function() {
71 71 var knw = this.new_notification_widget('kernel');
72 var $kernel_indic = $("#kernel_indicator");
72 var $kernel_ind_icon = $("#kernel_indicator_icon");
73 var $modal_ind_icon = $("#modal_indicator_icon");
74
75 // Command/Edit mode
76 $([IPython.events]).on('edit_mode.Notebook',function () {
77 IPython.save_widget.update_document_title();
78 $modal_ind_icon.attr('class','icon-pencil').attr('title','Edit Mode');
79 });
80
81 $([IPython.events]).on('command_mode.Notebook',function () {
82 IPython.save_widget.update_document_title();
83 $modal_ind_icon.attr('class','').attr('title','Command Mode');
84 });
73 85
74 86 // Kernel events
75 87 $([IPython.events]).on('status_idle.Kernel',function () {
76 88 IPython.save_widget.update_document_title();
77 $kernel_indic.attr('class','icon-circle-blank').attr('title','Kernel Idle');
89 $kernel_ind_icon.attr('class','icon-circle-blank').attr('title','Kernel Idle');
78 90 });
79 91
80 92 $([IPython.events]).on('status_busy.Kernel',function () {
81 93 window.document.title='(Busy) '+window.document.title;
82 $kernel_indic.attr('class','icon-circle').attr('title','Kernel Busy');
94 $kernel_ind_icon.attr('class','icon-circle').attr('title','Kernel Busy');
83 95 });
84 96
85 97 $([IPython.events]).on('status_restarting.Kernel',function () {
86 98 IPython.save_widget.update_document_title();
87 99 knw.set_message("Restarting kernel", 2000);
88 100 });
89 101
90 102 $([IPython.events]).on('status_interrupting.Kernel',function () {
91 103 knw.set_message("Interrupting kernel", 2000);
92 104 });
93 105
94 106 $([IPython.events]).on('status_dead.Kernel',function () {
95 107 var msg = 'The kernel has died, and the automatic restart has failed.' +
96 108 ' It is possible the kernel cannot be restarted.' +
97 109 ' If you are not able to restart the kernel, you will still be able to save' +
98 110 ' the notebook, but running code will no longer work until the notebook' +
99 111 ' is reopened.';
100 112
101 113 IPython.dialog.modal({
102 114 title: "Dead kernel",
103 115 body : msg,
104 116 buttons : {
105 117 "Manual Restart": {
106 118 class: "btn-danger",
107 119 click: function () {
108 120 $([IPython.events]).trigger('status_restarting.Kernel');
109 121 IPython.notebook.start_kernel();
110 122 }
111 123 },
112 124 "Don't restart": {}
113 125 }
114 126 });
115 127 });
116 128
117 129 $([IPython.events]).on('websocket_closed.Kernel', function (event, data) {
118 130 var kernel = data.kernel;
119 131 var ws_url = data.ws_url;
120 132 var early = data.early;
121 133 var msg;
122 134 if (!early) {
123 135 knw.set_message('Reconnecting WebSockets', 1000);
124 136 setTimeout(function () {
125 137 kernel.start_channels();
126 138 }, 5000);
127 139 return;
128 140 }
129 141 console.log('WebSocket connection failed: ', ws_url)
130 142 msg = "A WebSocket connection could not be established." +
131 143 " You will NOT be able to run code. Check your" +
132 144 " network connection or notebook server configuration.";
133 145 IPython.dialog.modal({
134 146 title: "WebSocket connection failed",
135 147 body: msg,
136 148 buttons : {
137 149 "OK": {},
138 150 "Reconnect": {
139 151 click: function () {
140 152 knw.set_message('Reconnecting WebSockets', 1000);
141 153 setTimeout(function () {
142 154 kernel.start_channels();
143 155 }, 5000);
144 156 }
145 157 }
146 158 }
147 159 });
148 160 });
149 161
150 162
151 163 var nnw = this.new_notification_widget('notebook');
152 164
153 165 // Notebook events
154 166 $([IPython.events]).on('notebook_loading.Notebook', function () {
155 167 nnw.set_message("Loading notebook",500);
156 168 });
157 169 $([IPython.events]).on('notebook_loaded.Notebook', function () {
158 170 nnw.set_message("Notebook loaded",500);
159 171 });
160 172 $([IPython.events]).on('notebook_saving.Notebook', function () {
161 173 nnw.set_message("Saving notebook",500);
162 174 });
163 175 $([IPython.events]).on('notebook_saved.Notebook', function () {
164 176 nnw.set_message("Notebook saved",2000);
165 177 });
166 178 $([IPython.events]).on('notebook_save_failed.Notebook', function () {
167 179 nnw.set_message("Notebook save failed");
168 180 });
169 181
170 182 // Checkpoint events
171 183 $([IPython.events]).on('checkpoint_created.Notebook', function (evt, data) {
172 184 var msg = "Checkpoint created";
173 185 if (data.last_modified) {
174 186 var d = new Date(data.last_modified);
175 187 msg = msg + ": " + d.format("HH:MM:ss");
176 188 }
177 189 nnw.set_message(msg, 2000);
178 190 });
179 191 $([IPython.events]).on('checkpoint_failed.Notebook', function () {
180 192 nnw.set_message("Checkpoint failed");
181 193 });
182 194 $([IPython.events]).on('checkpoint_deleted.Notebook', function () {
183 195 nnw.set_message("Checkpoint deleted", 500);
184 196 });
185 197 $([IPython.events]).on('checkpoint_delete_failed.Notebook', function () {
186 198 nnw.set_message("Checkpoint delete failed");
187 199 });
188 200 $([IPython.events]).on('checkpoint_restoring.Notebook', function () {
189 201 nnw.set_message("Restoring to checkpoint...", 500);
190 202 });
191 203 $([IPython.events]).on('checkpoint_restore_failed.Notebook', function () {
192 204 nnw.set_message("Checkpoint restore failed");
193 205 });
194 206
195 207 // Autosave events
196 208 $([IPython.events]).on('autosave_disabled.Notebook', function () {
197 209 nnw.set_message("Autosave disabled", 2000);
198 210 });
199 211 $([IPython.events]).on('autosave_enabled.Notebook', function (evt, interval) {
200 212 nnw.set_message("Saving every " + interval / 1000 + "s", 1000);
201 213 });
202 214
203 215 };
204 216
205 217 IPython.NotificationArea = NotificationArea;
206 218
207 219 return IPython;
208 220
209 221 }(IPython));
210 222
@@ -1,3 +1,18 b''
1 1 #notification_area {
2 2 z-index: 10;
3 3 }
4
5 .indicator_area {
6 color: @navbarLinkColor;
7 padding: 4px 3px;
8 margin: 0px;
9 width: 11px;
10 z-index: 10;
11 text-align: center;
12 }
13
14 #kernel_indicator {
15 // Pull it to the right, outside the container boundary
16 margin-right: -16px;
17 }
18
@@ -1,22 +1,13 b''
1 .notification_widget{
1 .notification_widget {
2 2 color: @navbarLinkColor;
3 3 padding: 1px 12px;
4 4 margin: 2px 4px;
5 5 z-index: 10;
6 6 border: 1px solid #ccc;
7 7 border-radius: @baseBorderRadius;
8 8 background: rgba(240, 240, 240, 0.5);
9 9
10 10 &.span {
11 11 padding-right:2px;
12 12 }
13
14 }
15
16 #indicator_area{
17 color: @navbarLinkColor;
18 padding: 2px 2px;
19 margin: 2px -9px 2px 4px;
20 z-index: 10;
21
22 13 }
@@ -1,1526 +1,1527 b''
1 1 article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}
2 2 audio,canvas,video{display:inline-block;*display:inline;*zoom:1}
3 3 audio:not([controls]){display:none}
4 4 html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}
5 5 a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}
6 6 a:hover,a:active{outline:0}
7 7 sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}
8 8 sup{top:-0.5em}
9 9 sub{bottom:-0.25em}
10 10 img{max-width:100%;width:auto\9;height:auto;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}
11 11 #map_canvas img,.google-maps img{max-width:none}
12 12 button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}
13 13 button,input{*overflow:visible;line-height:normal}
14 14 button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}
15 15 button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
16 16 label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}
17 17 input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}
18 18 input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}
19 19 textarea{overflow:auto;vertical-align:top}
20 20 @media print{*{text-shadow:none !important;color:#000 !important;background:transparent !important;box-shadow:none !important} a,a:visited{text-decoration:underline} a[href]:after{content:" (" attr(href) ")"} abbr[title]:after{content:" (" attr(title) ")"} .ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""} pre,blockquote{border:1px solid #999;page-break-inside:avoid} thead{display:table-header-group} tr,img{page-break-inside:avoid} img{max-width:100% !important} @page {margin:.5cm}p,h2,h3{orphans:3;widows:3} h2,h3{page-break-after:avoid}}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:20px;color:#000;background-color:#fff}
21 21 a{color:#08c;text-decoration:none}
22 22 a:hover,a:focus{color:#005580;text-decoration:underline}
23 23 .img-rounded{border-radius:6px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}
24 24 .img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}
25 25 .img-circle{border-radius:500px;-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}
26 26 .row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;content:"";line-height:0}
27 27 .row:after{clear:both}
28 28 [class*="span"]{float:left;min-height:1px;margin-left:20px}
29 29 .container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}
30 30 .span12{width:940px}
31 31 .span11{width:860px}
32 32 .span10{width:780px}
33 33 .span9{width:700px}
34 34 .span8{width:620px}
35 35 .span7{width:540px}
36 36 .span6{width:460px}
37 37 .span5{width:380px}
38 38 .span4{width:300px}
39 39 .span3{width:220px}
40 40 .span2{width:140px}
41 41 .span1{width:60px}
42 42 .offset12{margin-left:980px}
43 43 .offset11{margin-left:900px}
44 44 .offset10{margin-left:820px}
45 45 .offset9{margin-left:740px}
46 46 .offset8{margin-left:660px}
47 47 .offset7{margin-left:580px}
48 48 .offset6{margin-left:500px}
49 49 .offset5{margin-left:420px}
50 50 .offset4{margin-left:340px}
51 51 .offset3{margin-left:260px}
52 52 .offset2{margin-left:180px}
53 53 .offset1{margin-left:100px}
54 54 .row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;content:"";line-height:0}
55 55 .row-fluid:after{clear:both}
56 56 .row-fluid [class*="span"]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.127659574468085%;*margin-left:2.074468085106383%}
57 57 .row-fluid [class*="span"]:first-child{margin-left:0}
58 58 .row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}
59 59 .row-fluid .span12{width:100%;*width:99.94680851063829%}
60 60 .row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}
61 61 .row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}
62 62 .row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}
63 63 .row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}
64 64 .row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}
65 65 .row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}
66 66 .row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}
67 67 .row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}
68 68 .row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}
69 69 .row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}
70 70 .row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}
71 71 .row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}
72 72 .row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}
73 73 .row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}
74 74 .row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}
75 75 .row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}
76 76 .row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}
77 77 .row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}
78 78 .row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}
79 79 .row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}
80 80 .row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}
81 81 .row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}
82 82 .row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}
83 83 .row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}
84 84 .row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}
85 85 .row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}
86 86 .row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}
87 87 .row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}
88 88 .row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}
89 89 .row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}
90 90 .row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}
91 91 .row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}
92 92 .row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}
93 93 .row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}
94 94 .row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}
95 95 [class*="span"].hide,.row-fluid [class*="span"].hide{display:none}
96 96 [class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}
97 97 .container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;content:"";line-height:0}
98 98 .container:after{clear:both}
99 99 .container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;content:"";line-height:0}
100 100 .container-fluid:after{clear:both}
101 101 p{margin:0 0 10px}
102 102 .lead{margin-bottom:20px;font-size:19.5px;font-weight:200;line-height:30px}
103 103 small{font-size:85%}
104 104 strong{font-weight:bold}
105 105 em{font-style:italic}
106 106 cite{font-style:normal}
107 107 .muted{color:#999}
108 108 a.muted:hover,a.muted:focus{color:#808080}
109 109 .text-warning{color:#c09853}
110 110 a.text-warning:hover,a.text-warning:focus{color:#a47e3c}
111 111 .text-error{color:#b94a48}
112 112 a.text-error:hover,a.text-error:focus{color:#953b39}
113 113 .text-info{color:#3a87ad}
114 114 a.text-info:hover,a.text-info:focus{color:#2d6987}
115 115 .text-success{color:#468847}
116 116 a.text-success:hover,a.text-success:focus{color:#356635}
117 117 .text-left{text-align:left}
118 118 .text-right{text-align:right}
119 119 .text-center{text-align:center}
120 120 h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999}
121 121 h1,h2,h3{line-height:40px}
122 122 h1{font-size:35.75px}
123 123 h2{font-size:29.25px}
124 124 h3{font-size:22.75px}
125 125 h4{font-size:16.25px}
126 126 h5{font-size:13px}
127 127 h6{font-size:11.049999999999999px}
128 128 h1 small{font-size:22.75px}
129 129 h2 small{font-size:16.25px}
130 130 h3 small{font-size:13px}
131 131 h4 small{font-size:13px}
132 132 .page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}
133 133 ul,ol{padding:0;margin:0 0 10px 25px}
134 134 ul ul,ul ol,ol ol,ol ul{margin-bottom:0}
135 135 li{line-height:20px}
136 136 ul.unstyled,ol.unstyled{margin-left:0;list-style:none}
137 137 ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;*zoom:1;padding-left:5px;padding-right:5px}
138 138 dl{margin-bottom:20px}
139 139 dt,dd{line-height:20px}
140 140 dt{font-weight:bold}
141 141 dd{margin-left:10px}
142 142 .dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;content:"";line-height:0}
143 143 .dl-horizontal:after{clear:both}
144 144 .dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
145 145 .dl-horizontal dd{margin-left:180px}
146 146 hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}
147 147 abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}
148 148 abbr.initialism{font-size:90%;text-transform:uppercase}
149 149 blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:16.25px;font-weight:300;line-height:1.25}
150 150 blockquote small{display:block;line-height:20px;color:#999}blockquote small:before{content:'\2014 \00A0'}
151 151 blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}
152 152 blockquote.pull-right small:before{content:''}
153 153 blockquote.pull-right small:after{content:'\00A0 \2014'}
154 154 q:before,q:after,blockquote:before,blockquote:after{content:""}
155 155 address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}
156 156 code,pre{padding:0 3px 2px;font-family:monospace;font-size:11px;color:#333;border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}
157 157 code{padding:2px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8;white-space:nowrap}
158 158 pre{display:block;padding:9.5px;margin:0 0 10px;font-size:12px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}pre.prettyprint{margin-bottom:20px}
159 159 pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}
160 160 .pre-scrollable{max-height:340px;overflow-y:scroll}
161 161 form{margin:0 0 20px}
162 162 fieldset{padding:0;margin:0;border:0}
163 163 legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:19.5px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}
164 164 label,input,button,select,textarea{font-size:13px;font-weight:normal;line-height:20px}
165 165 input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}
166 166 label{display:block;margin-bottom:5px}
167 167 select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:13px;line-height:20px;color:#555;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;vertical-align:middle}
168 168 input,textarea,.uneditable-input{width:206px}
169 169 textarea{height:auto}
170 170 textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s, box-shadow linear .2s;-moz-transition:border linear .2s, box-shadow linear .2s;-o-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6)}
171 171 input[type="radio"],input[type="checkbox"]{margin:4px 0 0;*margin-top:0;margin-top:1px \9;line-height:normal}
172 172 input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}
173 173 select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}
174 174 select{width:220px;border:1px solid #ccc;background-color:#fff}
175 175 select[multiple],select[size]{height:auto}
176 176 select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}
177 177 .uneditable-input,.uneditable-textarea{color:#999;background-color:#fcfcfc;border-color:#ccc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);cursor:not-allowed}
178 178 .uneditable-input{overflow:hidden;white-space:nowrap}
179 179 .uneditable-textarea{width:auto;height:auto}
180 180 input:-moz-placeholder,textarea:-moz-placeholder{color:#999}
181 181 input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}
182 182 input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}
183 183 .radio,.checkbox{min-height:20px;padding-left:20px}
184 184 .radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}
185 185 .controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}
186 186 .radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}
187 187 .radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}
188 188 .input-mini{width:60px}
189 189 .input-small{width:90px}
190 190 .input-medium{width:150px}
191 191 .input-large{width:210px}
192 192 .input-xlarge{width:270px}
193 193 .input-xxlarge{width:530px}
194 194 input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}
195 195 .input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}
196 196 input,textarea,.uneditable-input{margin-left:0}
197 197 .controls-row [class*="span"]+[class*="span"]{margin-left:20px}
198 198 input.span12,textarea.span12,.uneditable-input.span12{width:926px}
199 199 input.span11,textarea.span11,.uneditable-input.span11{width:846px}
200 200 input.span10,textarea.span10,.uneditable-input.span10{width:766px}
201 201 input.span9,textarea.span9,.uneditable-input.span9{width:686px}
202 202 input.span8,textarea.span8,.uneditable-input.span8{width:606px}
203 203 input.span7,textarea.span7,.uneditable-input.span7{width:526px}
204 204 input.span6,textarea.span6,.uneditable-input.span6{width:446px}
205 205 input.span5,textarea.span5,.uneditable-input.span5{width:366px}
206 206 input.span4,textarea.span4,.uneditable-input.span4{width:286px}
207 207 input.span3,textarea.span3,.uneditable-input.span3{width:206px}
208 208 input.span2,textarea.span2,.uneditable-input.span2{width:126px}
209 209 input.span1,textarea.span1,.uneditable-input.span1{width:46px}
210 210 .controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;content:"";line-height:0}
211 211 .controls-row:after{clear:both}
212 212 .controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}
213 213 .controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}
214 214 input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}
215 215 input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}
216 216 .control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853}
217 217 .control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853}
218 218 .control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}
219 219 .control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853}
220 220 .control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}
221 221 .control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48}
222 222 .control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}
223 223 .control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48}
224 224 .control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}
225 225 .control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847}
226 226 .control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}
227 227 .control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847}
228 228 .control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad}
229 229 .control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad}
230 230 .control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3}
231 231 .control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad}
232 232 input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}
233 233 .form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;content:"";line-height:0}
234 234 .form-actions:after{clear:both}
235 235 .help-block,.help-inline{color:#262626}
236 236 .help-block{display:block;margin-bottom:10px}
237 237 .help-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding-left:5px}
238 238 .input-append,.input-prepend{display:inline-block;margin-bottom:10px;vertical-align:middle;font-size:0;white-space:nowrap}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:13px}
239 239 .input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;border-radius:0 4px 4px 0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}
240 240 .input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:13px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}
241 241 .input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}
242 242 .input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546}
243 243 .input-prepend .add-on,.input-prepend .btn{margin-right:-1px}
244 244 .input-prepend .add-on:first-child,.input-prepend .btn:first-child{border-radius:4px 0 0 4px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}
245 245 .input-append input,.input-append select,.input-append .uneditable-input{border-radius:4px 0 0 4px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{border-radius:0 4px 4px 0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}
246 246 .input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}
247 247 .input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{border-radius:0 4px 4px 0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}
248 248 .input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{border-radius:0 4px 4px 0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}
249 249 .input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;border-radius:4px 0 0 4px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}
250 250 .input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;border-radius:0 4px 4px 0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}
251 251 .input-prepend.input-append .btn-group:first-child{margin-left:0}
252 252 input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;border-radius:15px;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}
253 253 .form-search .input-append .search-query,.form-search .input-prepend .search-query{border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}
254 254 .form-search .input-append .search-query{border-radius:14px 0 0 14px;-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}
255 255 .form-search .input-append .btn{border-radius:0 14px 14px 0;-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}
256 256 .form-search .input-prepend .search-query{border-radius:0 14px 14px 0;-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}
257 257 .form-search .input-prepend .btn{border-radius:14px 0 0 14px;-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}
258 258 .form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;*zoom:1;margin-bottom:0;vertical-align:middle}
259 259 .form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}
260 260 .form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}
261 261 .form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}
262 262 .form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}
263 263 .form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}
264 264 .control-group{margin-bottom:10px}
265 265 legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}
266 266 .form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;content:"";line-height:0}
267 267 .form-horizontal .control-group:after{clear:both}
268 268 .form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}
269 269 .form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}
270 270 .form-horizontal .help-block{margin-bottom:0}
271 271 .form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}
272 272 .form-horizontal .form-actions{padding-left:180px}
273 273 table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}
274 274 .table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}
275 275 .table th{font-weight:bold}
276 276 .table thead th{vertical-align:bottom}
277 277 .table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}
278 278 .table tbody+tbody{border-top:2px solid #ddd}
279 279 .table .table{background-color:#fff}
280 280 .table-condensed th,.table-condensed td{padding:4px 5px}
281 281 .table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}
282 282 .table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}
283 283 .table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px}
284 284 .table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px}
285 285 .table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px}
286 286 .table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px}
287 287 .table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0}
288 288 .table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;-moz-border-radius-bottomright:0;border-bottom-right-radius:0}
289 289 .table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px}
290 290 .table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px}
291 291 .table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}
292 292 .table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#f5f5f5}
293 293 table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}
294 294 .table td.span1,.table th.span1{float:none;width:44px;margin-left:0}
295 295 .table td.span2,.table th.span2{float:none;width:124px;margin-left:0}
296 296 .table td.span3,.table th.span3{float:none;width:204px;margin-left:0}
297 297 .table td.span4,.table th.span4{float:none;width:284px;margin-left:0}
298 298 .table td.span5,.table th.span5{float:none;width:364px;margin-left:0}
299 299 .table td.span6,.table th.span6{float:none;width:444px;margin-left:0}
300 300 .table td.span7,.table th.span7{float:none;width:524px;margin-left:0}
301 301 .table td.span8,.table th.span8{float:none;width:604px;margin-left:0}
302 302 .table td.span9,.table th.span9{float:none;width:684px;margin-left:0}
303 303 .table td.span10,.table th.span10{float:none;width:764px;margin-left:0}
304 304 .table td.span11,.table th.span11{float:none;width:844px;margin-left:0}
305 305 .table td.span12,.table th.span12{float:none;width:924px;margin-left:0}
306 306 .table tbody tr.success>td{background-color:#dff0d8}
307 307 .table tbody tr.error>td{background-color:#f2dede}
308 308 .table tbody tr.warning>td{background-color:#fcf8e3}
309 309 .table tbody tr.info>td{background-color:#d9edf7}
310 310 .table-hover tbody tr.success:hover>td{background-color:#d0e9c6}
311 311 .table-hover tbody tr.error:hover>td{background-color:#ebcccc}
312 312 .table-hover tbody tr.warning:hover>td{background-color:#faf2cc}
313 313 .table-hover tbody tr.info:hover>td{background-color:#c4e3f3}
314 314 [class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat;margin-top:1px}
315 315 .icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}
316 316 .icon-glass{background-position:0 0}
317 317 .icon-music{background-position:-24px 0}
318 318 .icon-search{background-position:-48px 0}
319 319 .icon-envelope{background-position:-72px 0}
320 320 .icon-heart{background-position:-96px 0}
321 321 .icon-star{background-position:-120px 0}
322 322 .icon-star-empty{background-position:-144px 0}
323 323 .icon-user{background-position:-168px 0}
324 324 .icon-film{background-position:-192px 0}
325 325 .icon-th-large{background-position:-216px 0}
326 326 .icon-th{background-position:-240px 0}
327 327 .icon-th-list{background-position:-264px 0}
328 328 .icon-ok{background-position:-288px 0}
329 329 .icon-remove{background-position:-312px 0}
330 330 .icon-zoom-in{background-position:-336px 0}
331 331 .icon-zoom-out{background-position:-360px 0}
332 332 .icon-off{background-position:-384px 0}
333 333 .icon-signal{background-position:-408px 0}
334 334 .icon-cog{background-position:-432px 0}
335 335 .icon-trash{background-position:-456px 0}
336 336 .icon-home{background-position:0 -24px}
337 337 .icon-file{background-position:-24px -24px}
338 338 .icon-time{background-position:-48px -24px}
339 339 .icon-road{background-position:-72px -24px}
340 340 .icon-download-alt{background-position:-96px -24px}
341 341 .icon-download{background-position:-120px -24px}
342 342 .icon-upload{background-position:-144px -24px}
343 343 .icon-inbox{background-position:-168px -24px}
344 344 .icon-play-circle{background-position:-192px -24px}
345 345 .icon-repeat{background-position:-216px -24px}
346 346 .icon-refresh{background-position:-240px -24px}
347 347 .icon-list-alt{background-position:-264px -24px}
348 348 .icon-lock{background-position:-287px -24px}
349 349 .icon-flag{background-position:-312px -24px}
350 350 .icon-headphones{background-position:-336px -24px}
351 351 .icon-volume-off{background-position:-360px -24px}
352 352 .icon-volume-down{background-position:-384px -24px}
353 353 .icon-volume-up{background-position:-408px -24px}
354 354 .icon-qrcode{background-position:-432px -24px}
355 355 .icon-barcode{background-position:-456px -24px}
356 356 .icon-tag{background-position:0 -48px}
357 357 .icon-tags{background-position:-25px -48px}
358 358 .icon-book{background-position:-48px -48px}
359 359 .icon-bookmark{background-position:-72px -48px}
360 360 .icon-print{background-position:-96px -48px}
361 361 .icon-camera{background-position:-120px -48px}
362 362 .icon-font{background-position:-144px -48px}
363 363 .icon-bold{background-position:-167px -48px}
364 364 .icon-italic{background-position:-192px -48px}
365 365 .icon-text-height{background-position:-216px -48px}
366 366 .icon-text-width{background-position:-240px -48px}
367 367 .icon-align-left{background-position:-264px -48px}
368 368 .icon-align-center{background-position:-288px -48px}
369 369 .icon-align-right{background-position:-312px -48px}
370 370 .icon-align-justify{background-position:-336px -48px}
371 371 .icon-list{background-position:-360px -48px}
372 372 .icon-indent-left{background-position:-384px -48px}
373 373 .icon-indent-right{background-position:-408px -48px}
374 374 .icon-facetime-video{background-position:-432px -48px}
375 375 .icon-picture{background-position:-456px -48px}
376 376 .icon-pencil{background-position:0 -72px}
377 377 .icon-map-marker{background-position:-24px -72px}
378 378 .icon-adjust{background-position:-48px -72px}
379 379 .icon-tint{background-position:-72px -72px}
380 380 .icon-edit{background-position:-96px -72px}
381 381 .icon-share{background-position:-120px -72px}
382 382 .icon-check{background-position:-144px -72px}
383 383 .icon-move{background-position:-168px -72px}
384 384 .icon-step-backward{background-position:-192px -72px}
385 385 .icon-fast-backward{background-position:-216px -72px}
386 386 .icon-backward{background-position:-240px -72px}
387 387 .icon-play{background-position:-264px -72px}
388 388 .icon-pause{background-position:-288px -72px}
389 389 .icon-stop{background-position:-312px -72px}
390 390 .icon-forward{background-position:-336px -72px}
391 391 .icon-fast-forward{background-position:-360px -72px}
392 392 .icon-step-forward{background-position:-384px -72px}
393 393 .icon-eject{background-position:-408px -72px}
394 394 .icon-chevron-left{background-position:-432px -72px}
395 395 .icon-chevron-right{background-position:-456px -72px}
396 396 .icon-plus-sign{background-position:0 -96px}
397 397 .icon-minus-sign{background-position:-24px -96px}
398 398 .icon-remove-sign{background-position:-48px -96px}
399 399 .icon-ok-sign{background-position:-72px -96px}
400 400 .icon-question-sign{background-position:-96px -96px}
401 401 .icon-info-sign{background-position:-120px -96px}
402 402 .icon-screenshot{background-position:-144px -96px}
403 403 .icon-remove-circle{background-position:-168px -96px}
404 404 .icon-ok-circle{background-position:-192px -96px}
405 405 .icon-ban-circle{background-position:-216px -96px}
406 406 .icon-arrow-left{background-position:-240px -96px}
407 407 .icon-arrow-right{background-position:-264px -96px}
408 408 .icon-arrow-up{background-position:-289px -96px}
409 409 .icon-arrow-down{background-position:-312px -96px}
410 410 .icon-share-alt{background-position:-336px -96px}
411 411 .icon-resize-full{background-position:-360px -96px}
412 412 .icon-resize-small{background-position:-384px -96px}
413 413 .icon-plus{background-position:-408px -96px}
414 414 .icon-minus{background-position:-433px -96px}
415 415 .icon-asterisk{background-position:-456px -96px}
416 416 .icon-exclamation-sign{background-position:0 -120px}
417 417 .icon-gift{background-position:-24px -120px}
418 418 .icon-leaf{background-position:-48px -120px}
419 419 .icon-fire{background-position:-72px -120px}
420 420 .icon-eye-open{background-position:-96px -120px}
421 421 .icon-eye-close{background-position:-120px -120px}
422 422 .icon-warning-sign{background-position:-144px -120px}
423 423 .icon-plane{background-position:-168px -120px}
424 424 .icon-calendar{background-position:-192px -120px}
425 425 .icon-random{background-position:-216px -120px;width:16px}
426 426 .icon-comment{background-position:-240px -120px}
427 427 .icon-magnet{background-position:-264px -120px}
428 428 .icon-chevron-up{background-position:-288px -120px}
429 429 .icon-chevron-down{background-position:-313px -119px}
430 430 .icon-retweet{background-position:-336px -120px}
431 431 .icon-shopping-cart{background-position:-360px -120px}
432 432 .icon-folder-close{background-position:-384px -120px;width:16px}
433 433 .icon-folder-open{background-position:-408px -120px;width:16px}
434 434 .icon-resize-vertical{background-position:-432px -119px}
435 435 .icon-resize-horizontal{background-position:-456px -118px}
436 436 .icon-hdd{background-position:0 -144px}
437 437 .icon-bullhorn{background-position:-24px -144px}
438 438 .icon-bell{background-position:-48px -144px}
439 439 .icon-certificate{background-position:-72px -144px}
440 440 .icon-thumbs-up{background-position:-96px -144px}
441 441 .icon-thumbs-down{background-position:-120px -144px}
442 442 .icon-hand-right{background-position:-144px -144px}
443 443 .icon-hand-left{background-position:-168px -144px}
444 444 .icon-hand-up{background-position:-192px -144px}
445 445 .icon-hand-down{background-position:-216px -144px}
446 446 .icon-circle-arrow-right{background-position:-240px -144px}
447 447 .icon-circle-arrow-left{background-position:-264px -144px}
448 448 .icon-circle-arrow-up{background-position:-288px -144px}
449 449 .icon-circle-arrow-down{background-position:-312px -144px}
450 450 .icon-globe{background-position:-336px -144px}
451 451 .icon-wrench{background-position:-360px -144px}
452 452 .icon-tasks{background-position:-384px -144px}
453 453 .icon-filter{background-position:-408px -144px}
454 454 .icon-briefcase{background-position:-432px -144px}
455 455 .icon-fullscreen{background-position:-456px -144px}
456 456 .dropup,.dropdown{position:relative}
457 457 .dropdown-toggle{*margin-bottom:-3px}
458 458 .dropdown-toggle:active,.open .dropdown-toggle{outline:0}
459 459 .caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}
460 460 .dropdown .caret{margin-top:8px;margin-left:2px}
461 461 .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}
462 462 .dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}
463 463 .dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap}
464 464 .dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{text-decoration:none;color:#fff;background-color:#0081c2;background-image:-moz-linear-gradient(top, #08c, #0077b3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#0077b3));background-image:-webkit-linear-gradient(top, #08c, #0077b3);background-image:-o-linear-gradient(top, #08c, #0077b3);background-image:linear-gradient(to bottom, #08c, #0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0)}
465 465 .dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#0081c2;background-image:-moz-linear-gradient(top, #08c, #0077b3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#0077b3));background-image:-webkit-linear-gradient(top, #08c, #0077b3);background-image:-o-linear-gradient(top, #08c, #0077b3);background-image:linear-gradient(to bottom, #08c, #0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0)}
466 466 .dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}
467 467 .dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:default}
468 468 .open{*z-index:1000}.open>.dropdown-menu{display:block}
469 469 .dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}
470 470 .pull-right>.dropdown-menu{right:0;left:auto}
471 471 .dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}
472 472 .dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}
473 473 .dropdown-submenu{position:relative}
474 474 .dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;border-radius:0 6px 6px 6px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}
475 475 .dropdown-submenu:hover>.dropdown-menu{display:block}
476 476 .dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;border-radius:5px 5px 5px 0;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}
477 477 .dropdown-submenu>a:after{display:block;content:" ";float:right;width:0;height:0;border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#ccc;margin-top:5px;margin-right:-10px}
478 478 .dropdown-submenu:hover>a:after{border-left-color:#fff}
479 479 .dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;border-radius:6px 0 6px 6px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}
480 480 .dropdown .dropdown-menu .nav-header{padding-left:20px;padding-right:20px}
481 481 .typeahead{z-index:1051;margin-top:2px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}
482 482 .well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}
483 483 .well-large{padding:24px;border-radius:6px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}
484 484 .well-small{padding:9px;border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}
485 485 .fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}
486 486 .collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}
487 487 .close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}
488 488 button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}
489 489 .btn{display:inline-block;*display:inline;*zoom:1;padding:4px 12px;margin-bottom:0;font-size:13px;line-height:20px;text-align:center;vertical-align:middle;cursor:pointer;color:#333;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #fff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #fff, #e6e6e6);background-image:-o-linear-gradient(top, #fff, #e6e6e6);background-image:linear-gradient(to bottom, #fff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#e6e6e6;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border:1px solid #ccc;*border:0;border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}
490 490 .btn:active,.btn.active{background-color:#ccc \9}
491 491 .btn:first-child{*margin-left:0}
492 492 .btn:hover,.btn:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}
493 493 .btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}
494 494 .btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05)}
495 495 .btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}
496 496 .btn-large{padding:11px 19px;font-size:16.25px;border-radius:6px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}
497 497 .btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}
498 498 .btn-small{padding:2px 10px;font-size:11.049999999999999px;border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}
499 499 .btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}
500 500 .btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}
501 501 .btn-mini{padding:0 6px;font-size:9.75px;border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}
502 502 .btn-block{display:block;width:100%;padding-left:0;padding-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}
503 503 .btn-block+.btn-block{margin-top:5px}
504 504 input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}
505 505 .btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}
506 506 .btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#006dcc;background-image:-moz-linear-gradient(top, #08c, #04c);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#04c));background-image:-webkit-linear-gradient(top, #08c, #04c);background-image:-o-linear-gradient(top, #08c, #04c);background-image:linear-gradient(to bottom, #08c, #04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#04c;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}
507 507 .btn-primary:active,.btn-primary.active{background-color:#039 \9}
508 508 .btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(to bottom, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#f89406;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}
509 509 .btn-warning:active,.btn-warning.active{background-color:#c67605 \9}
510 510 .btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(to bottom, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#bd362f;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}
511 511 .btn-danger:active,.btn-danger.active{background-color:#942a25 \9}
512 512 .btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(to bottom, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0);border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#51a351;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}
513 513 .btn-success:active,.btn-success.active{background-color:#408140 \9}
514 514 .btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(to bottom, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0);border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#2f96b4;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}
515 515 .btn-info:active,.btn-info.active{background-color:#24748c \9}
516 516 .btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#363636;background-image:-moz-linear-gradient(top, #444, #222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#444), to(#222));background-image:-webkit-linear-gradient(top, #444, #222);background-image:-o-linear-gradient(top, #444, #222);background-image:linear-gradient(to bottom, #444, #222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0);border-color:#222 #222 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#222;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}
517 517 .btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}
518 518 button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}
519 519 button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}
520 520 button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}
521 521 button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}
522 522 .btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}
523 523 .btn-link{border-color:transparent;cursor:pointer;color:#08c;border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}
524 524 .btn-link:hover,.btn-link:focus{color:#005580;text-decoration:underline;background-color:transparent}
525 525 .btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#333;text-decoration:none}
526 526 .btn-group{position:relative;display:inline-block;*display:inline;*zoom:1;font-size:0;vertical-align:middle;white-space:nowrap;*margin-left:.3em}.btn-group:first-child{*margin-left:0}
527 527 .btn-group+.btn-group{margin-left:5px}
528 528 .btn-toolbar{font-size:0;margin-top:10px;margin-bottom:10px}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}
529 529 .btn-group>.btn{position:relative;border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}
530 530 .btn-group>.btn+.btn{margin-left:-1px}
531 531 .btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:13px}
532 532 .btn-group>.btn-mini{font-size:9.75px}
533 533 .btn-group>.btn-small{font-size:11.049999999999999px}
534 534 .btn-group>.btn-large{font-size:16.25px}
535 535 .btn-group>.btn:first-child{margin-left:0;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px}
536 536 .btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px}
537 537 .btn-group>.btn.large:first-child{margin-left:0;-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px}
538 538 .btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius:6px}
539 539 .btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}
540 540 .btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}
541 541 .btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);*padding-top:5px;*padding-bottom:5px}
542 542 .btn-group>.btn-mini+.dropdown-toggle{padding-left:5px;padding-right:5px;*padding-top:2px;*padding-bottom:2px}
543 543 .btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}
544 544 .btn-group>.btn-large+.dropdown-toggle{padding-left:12px;padding-right:12px;*padding-top:7px;*padding-bottom:7px}
545 545 .btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05)}
546 546 .btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}
547 547 .btn-group.open .btn-primary.dropdown-toggle{background-color:#04c}
548 548 .btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406}
549 549 .btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}
550 550 .btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}
551 551 .btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}
552 552 .btn-group.open .btn-inverse.dropdown-toggle{background-color:#222}
553 553 .btn .caret{margin-top:8px;margin-left:0}
554 554 .btn-large .caret{margin-top:6px}
555 555 .btn-large .caret{border-left-width:5px;border-right-width:5px;border-top-width:5px}
556 556 .btn-mini .caret,.btn-small .caret{margin-top:8px}
557 557 .dropup .btn-large .caret{border-bottom-width:5px}
558 558 .btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}
559 559 .btn-group-vertical{display:inline-block;*display:inline;*zoom:1}
560 560 .btn-group-vertical>.btn{display:block;float:none;max-width:100%;border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}
561 561 .btn-group-vertical>.btn+.btn{margin-left:0;margin-top:-1px}
562 562 .btn-group-vertical>.btn:first-child{border-radius:4px 4px 0 0;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}
563 563 .btn-group-vertical>.btn:last-child{border-radius:0 0 4px 4px;-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}
564 564 .btn-group-vertical>.btn-large:first-child{border-radius:6px 6px 0 0;-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}
565 565 .btn-group-vertical>.btn-large:last-child{border-radius:0 0 6px 6px;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}
566 566 .alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#fcf8e3;border:1px solid #fbeed5;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}
567 567 .alert,.alert h4{color:#c09853}
568 568 .alert h4{margin:0}
569 569 .alert .close{position:relative;top:-2px;right:-21px;line-height:20px}
570 570 .alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#468847}
571 571 .alert-success h4{color:#468847}
572 572 .alert-danger,.alert-error{background-color:#f2dede;border-color:#eed3d7;color:#b94a48}
573 573 .alert-danger h4,.alert-error h4{color:#b94a48}
574 574 .alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#3a87ad}
575 575 .alert-info h4{color:#3a87ad}
576 576 .alert-block{padding-top:14px;padding-bottom:14px}
577 577 .alert-block>p,.alert-block>ul{margin-bottom:0}
578 578 .alert-block p+p{margin-top:5px}
579 579 .nav{margin-left:0;margin-bottom:20px;list-style:none}
580 580 .nav>li>a{display:block}
581 581 .nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}
582 582 .nav>li>a>img{max-width:none}
583 583 .nav>.pull-right{float:right}
584 584 .nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}
585 585 .nav li+.nav-header{margin-top:9px}
586 586 .nav-list{padding-left:15px;padding-right:15px;margin-bottom:0}
587 587 .nav-list>li>a,.nav-list .nav-header{margin-left:-15px;margin-right:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}
588 588 .nav-list>li>a{padding:3px 15px}
589 589 .nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#08c}
590 590 .nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}
591 591 .nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}
592 592 .nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;content:"";line-height:0}
593 593 .nav-tabs:after,.nav-pills:after{clear:both}
594 594 .nav-tabs>li,.nav-pills>li{float:left}
595 595 .nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}
596 596 .nav-tabs{border-bottom:1px solid #ddd}
597 597 .nav-tabs>li{margin-bottom:-1px}
598 598 .nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;border-radius:4px 4px 0 0;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#eee #eee #ddd}
599 599 .nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}
600 600 .nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}
601 601 .nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#fff;background-color:#08c}
602 602 .nav-stacked>li{float:none}
603 603 .nav-stacked>li>a{margin-right:0}
604 604 .nav-tabs.nav-stacked{border-bottom:0}
605 605 .nav-tabs.nav-stacked>li>a{border:1px solid #ddd;border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}
606 606 .nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px}
607 607 .nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px}
608 608 .nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{border-color:#ddd;z-index:2}
609 609 .nav-pills.nav-stacked>li>a{margin-bottom:3px}
610 610 .nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}
611 611 .nav-tabs .dropdown-menu{border-radius:0 0 6px 6px;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}
612 612 .nav-pills .dropdown-menu{border-radius:6px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}
613 613 .nav .dropdown-toggle .caret{border-top-color:#08c;border-bottom-color:#08c;margin-top:6px}
614 614 .nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#005580;border-bottom-color:#005580}
615 615 .nav-tabs .dropdown-toggle .caret{margin-top:8px}
616 616 .nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}
617 617 .nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}
618 618 .nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}
619 619 .nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#999;border-color:#999}
620 620 .nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}
621 621 .tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#999}
622 622 .tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;content:"";line-height:0}
623 623 .tabbable:after{clear:both}
624 624 .tab-content{overflow:auto}
625 625 .tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}
626 626 .tab-content>.tab-pane,.pill-content>.pill-pane{display:none}
627 627 .tab-content>.active,.pill-content>.active{display:block}
628 628 .tabs-below>.nav-tabs{border-top:1px solid #ddd}
629 629 .tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}
630 630 .tabs-below>.nav-tabs>li>a{border-radius:0 0 4px 4px;-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-bottom-color:transparent;border-top-color:#ddd}
631 631 .tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd}
632 632 .tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}
633 633 .tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}
634 634 .tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}
635 635 .tabs-left>.nav-tabs>li>a{margin-right:-1px;border-radius:4px 0 0 4px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}
636 636 .tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#eee #ddd #eee #eee}
637 637 .tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}
638 638 .tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}
639 639 .tabs-right>.nav-tabs>li>a{margin-left:-1px;border-radius:0 4px 4px 0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}
640 640 .tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#eee #eee #eee #ddd}
641 641 .tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}
642 642 .nav>.disabled>a{color:#999}
643 643 .nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;background-color:transparent;cursor:default}
644 644 .navbar{overflow:visible;margin-bottom:20px;*position:relative;*z-index:2}
645 645 .navbar-inner{min-height:36px;padding-left:20px;padding-right:20px;background-color:#fafafa;background-image:-moz-linear-gradient(top, #fff, #f2f2f2);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#f2f2f2));background-image:-webkit-linear-gradient(top, #fff, #f2f2f2);background-image:-o-linear-gradient(top, #fff, #f2f2f2);background-image:linear-gradient(to bottom, #fff, #f2f2f2);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0);border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065);*zoom:1}.navbar-inner:before,.navbar-inner:after{display:table;content:"";line-height:0}
646 646 .navbar-inner:after{clear:both}
647 647 .navbar .container{width:auto}
648 648 .nav-collapse.collapse{height:auto;overflow:visible}
649 649 .navbar .brand{float:left;display:block;padding:8px 20px 8px;margin-left:-20px;font-size:20px;font-weight:200;color:#777;text-shadow:0 1px 0 #fff}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}
650 650 .navbar-text{margin-bottom:0;line-height:36px;color:#777}
651 651 .navbar-link{color:#777}.navbar-link:hover,.navbar-link:focus{color:#333}
652 652 .navbar .divider-vertical{height:36px;margin:0 9px;border-left:1px solid #f2f2f2;border-right:1px solid #fff}
653 653 .navbar .btn,.navbar .btn-group{margin-top:3px}
654 654 .navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}
655 655 .navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;content:"";line-height:0}
656 656 .navbar-form:after{clear:both}
657 657 .navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:3px}
658 658 .navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}
659 659 .navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}
660 660 .navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}
661 661 .navbar-search{position:relative;float:left;margin-top:3px;margin-bottom:0}.navbar-search .search-query{margin-bottom:0;padding:4px 14px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;border-radius:15px;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}
662 662 .navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}
663 663 .navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}
664 664 .navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}
665 665 .navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}
666 666 .navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-left:0;padding-right:0;border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}
667 667 .navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}
668 668 .navbar-fixed-top{top:0}
669 669 .navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,.1);box-shadow:0 1px 10px rgba(0,0,0,.1)}
670 670 .navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,.1);box-shadow:0 -1px 10px rgba(0,0,0,.1)}
671 671 .navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}
672 672 .navbar .nav.pull-right{float:right;margin-right:0}
673 673 .navbar .nav>li{float:left}
674 674 .navbar .nav>li>a{float:none;padding:8px 15px 8px;color:#777;text-decoration:none;text-shadow:0 1px 0 #fff}
675 675 .navbar .nav .dropdown-toggle .caret{margin-top:8px}
676 676 .navbar .nav>li>a:focus,.navbar .nav>li>a:hover{background-color:transparent;color:#333;text-decoration:none}
677 677 .navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555;text-decoration:none;background-color:#e5e5e5;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}
678 678 .navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-left:5px;margin-right:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ededed;background-image:-moz-linear-gradient(top, #f2f2f2, #e5e5e5);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5));background-image:-webkit-linear-gradient(top, #f2f2f2, #e5e5e5);background-image:-o-linear-gradient(top, #f2f2f2, #e5e5e5);background-image:linear-gradient(to bottom, #f2f2f2, #e5e5e5);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0);border-color:#e5e5e5 #e5e5e5 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#e5e5e5;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#e5e5e5;*background-color:#d9d9d9}
679 679 .navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#ccc \9}
680 680 .navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}
681 681 .btn-navbar .icon-bar+.icon-bar{margin-top:3px}
682 682 .navbar .nav>li>.dropdown-menu:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,0.2);position:absolute;top:-7px;left:9px}
683 683 .navbar .nav>li>.dropdown-menu:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute;top:-6px;left:10px}
684 684 .navbar-fixed-bottom .nav>li>.dropdown-menu:before{border-top:7px solid #ccc;border-top-color:rgba(0,0,0,0.2);border-bottom:0;bottom:-7px;top:auto}
685 685 .navbar-fixed-bottom .nav>li>.dropdown-menu:after{border-top:6px solid #fff;border-bottom:0;bottom:-6px;top:auto}
686 686 .navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}
687 687 .navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{background-color:#e5e5e5;color:#555}
688 688 .navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#777;border-bottom-color:#777}
689 689 .navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}
690 690 .navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{left:auto;right:0}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{left:auto;right:12px}
691 691 .navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{left:auto;right:13px}
692 692 .navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{left:auto;right:100%;margin-left:0;margin-right:-1px;border-radius:6px 0 6px 6px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}
693 693 .navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top, #222, #111);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#222), to(#111));background-image:-webkit-linear-gradient(top, #222, #111);background-image:-o-linear-gradient(top, #222, #111);background-image:linear-gradient(to bottom, #222, #111);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0);border-color:#252525}
694 694 .navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}
695 695 .navbar-inverse .brand{color:#999}
696 696 .navbar-inverse .navbar-text{color:#999}
697 697 .navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{background-color:transparent;color:#fff}
698 698 .navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#111}
699 699 .navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}
700 700 .navbar-inverse .divider-vertical{border-left-color:#111;border-right-color:#222}
701 701 .navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{background-color:#111;color:#fff}
702 702 .navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}
703 703 .navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999;border-bottom-color:#999}
704 704 .navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}
705 705 .navbar-inverse .navbar-search .search-query{color:#fff;background-color:#515151;border-color:#111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#ccc}
706 706 .navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#ccc}
707 707 .navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#ccc}
708 708 .navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15);outline:0}
709 709 .navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e0e0e;background-image:-moz-linear-gradient(top, #151515, #040404);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404));background-image:-webkit-linear-gradient(top, #151515, #040404);background-image:-o-linear-gradient(top, #151515, #040404);background-image:linear-gradient(to bottom, #151515, #040404);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0);border-color:#040404 #040404 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#040404;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#040404;*background-color:#000}
710 710 .navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000 \9}
711 711 .breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb>li{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 0 #fff}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}
712 712 .breadcrumb>.active{color:#999}
713 713 .pagination{margin:20px 0}
714 714 .pagination ul{display:inline-block;*display:inline;*zoom:1;margin-left:0;margin-bottom:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}
715 715 .pagination ul>li{display:inline}
716 716 .pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}
717 717 .pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5}
718 718 .pagination ul>.active>a,.pagination ul>.active>span{color:#999;cursor:default}
719 719 .pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#999;background-color:transparent;cursor:default}
720 720 .pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px}
721 721 .pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px}
722 722 .pagination-centered{text-align:center}
723 723 .pagination-right{text-align:right}
724 724 .pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:16.25px}
725 725 .pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px}
726 726 .pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius:6px}
727 727 .pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-top-left-radius:3px;-moz-border-radius-topleft:3px;border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;-moz-border-radius-bottomleft:3px;border-bottom-left-radius:3px}
728 728 .pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;-moz-border-radius-topright:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;-moz-border-radius-bottomright:3px;border-bottom-right-radius:3px}
729 729 .pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.049999999999999px}
730 730 .pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:9.75px}
731 731 .pager{margin:20px 0;list-style:none;text-align:center;*zoom:1}.pager:before,.pager:after{display:table;content:"";line-height:0}
732 732 .pager:after{clear:both}
733 733 .pager li{display:inline}
734 734 .pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}
735 735 .pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}
736 736 .pager .next>a,.pager .next>span{float:right}
737 737 .pager .previous>a,.pager .previous>span{float:left}
738 738 .pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;background-color:#fff;cursor:default}
739 739 .modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}
740 740 .modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}
741 741 .modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;outline:none}.modal.fade{-webkit-transition:opacity .3s linear, top .3s ease-out;-moz-transition:opacity .3s linear, top .3s ease-out;-o-transition:opacity .3s linear, top .3s ease-out;transition:opacity .3s linear, top .3s ease-out;top:-25%}
742 742 .modal.fade.in{top:10%}
743 743 .modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}
744 744 .modal-header h3{margin:0;line-height:30px}
745 745 .modal-body{position:relative;overflow-y:auto;max-height:400px;padding:15px}
746 746 .modal-form{margin-bottom:0}
747 747 .modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;*zoom:1}.modal-footer:before,.modal-footer:after{display:table;content:"";line-height:0}
748 748 .modal-footer:after{clear:both}
749 749 .modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}
750 750 .modal-footer .btn-group .btn+.btn{margin-left:-1px}
751 751 .modal-footer .btn-block+.btn-block{margin-left:0}
752 752 .tooltip{position:absolute;z-index:1030;display:block;visibility:visible;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}
753 753 .tooltip.top{margin-top:-3px;padding:5px 0}
754 754 .tooltip.right{margin-left:3px;padding:0 5px}
755 755 .tooltip.bottom{margin-top:3px;padding:5px 0}
756 756 .tooltip.left{margin-left:-3px;padding:0 5px}
757 757 .tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}
758 758 .tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}
759 759 .tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}
760 760 .tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}
761 761 .tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}
762 762 .tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}
763 763 .popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;background-color:#fff;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);white-space:normal}.popover.top{margin-top:-10px}
764 764 .popover.right{margin-left:10px}
765 765 .popover.bottom{margin-top:10px}
766 766 .popover.left{margin-left:-10px}
767 767 .popover-title{margin:0;padding:8px 14px;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}
768 768 .popover-content{padding:9px 14px}
769 769 .popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}
770 770 .popover .arrow{border-width:11px}
771 771 .popover .arrow:after{border-width:10px;content:""}
772 772 .popover.top .arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}
773 773 .popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.right .arrow:after{left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}
774 774 .popover.bottom .arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}
775 775 .popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.left .arrow:after{right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}
776 776 .thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;content:"";line-height:0}
777 777 .thumbnails:after{clear:both}
778 778 .row-fluid .thumbnails{margin-left:0}
779 779 .thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}
780 780 .thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}
781 781 a.thumbnail:hover,a.thumbnail:focus{border-color:#08c;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}
782 782 .thumbnail>img{display:block;max-width:100%;margin-left:auto;margin-right:auto}
783 783 .thumbnail .caption{padding:9px;color:#555}
784 784 .media,.media-body{overflow:hidden;*overflow:visible;zoom:1}
785 785 .media,.media .media{margin-top:15px}
786 786 .media:first-child{margin-top:0}
787 787 .media-object{display:block}
788 788 .media-heading{margin:0 0 5px}
789 789 .media>.pull-left{margin-right:10px}
790 790 .media>.pull-right{margin-left:10px}
791 791 .media-list{margin-left:0;list-style:none}
792 792 .label,.badge{display:inline-block;padding:2px 4px;font-size:10.998px;font-weight:bold;line-height:14px;color:#fff;vertical-align:baseline;white-space:nowrap;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#999}
793 793 .label{border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}
794 794 .badge{padding-left:9px;padding-right:9px;border-radius:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}
795 795 .label:empty,.badge:empty{display:none}
796 796 a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}
797 797 .label-important,.badge-important{background-color:#b94a48}
798 798 .label-important[href],.badge-important[href]{background-color:#953b39}
799 799 .label-warning,.badge-warning{background-color:#f89406}
800 800 .label-warning[href],.badge-warning[href]{background-color:#c67605}
801 801 .label-success,.badge-success{background-color:#468847}
802 802 .label-success[href],.badge-success[href]{background-color:#356635}
803 803 .label-info,.badge-info{background-color:#3a87ad}
804 804 .label-info[href],.badge-info[href]{background-color:#2d6987}
805 805 .label-inverse,.badge-inverse{background-color:#333}
806 806 .label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}
807 807 .btn .label,.btn .badge{position:relative;top:-1px}
808 808 .btn-mini .label,.btn-mini .badge{top:0}
809 809 @-webkit-keyframes progress-bar-stripes{from{background-position:40px 0} to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0} to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0} to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0} to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0} to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f7f7f7;background-image:-moz-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));background-image:-webkit-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-o-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:linear-gradient(to bottom, #f5f5f5, #f9f9f9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}
810 810 .progress .bar{width:0;height:100%;color:#fff;float:left;font-size:12px;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top, #149bdf, #0480be);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));background-image:-webkit-linear-gradient(top, #149bdf, #0480be);background-image:-o-linear-gradient(top, #149bdf, #0480be);background-image:linear-gradient(to bottom, #149bdf, #0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}
811 811 .progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15)}
812 812 .progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255,255,255,0.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,0.15)), color-stop(.75, rgba(255,255,255,0.15)), color-stop(.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}
813 813 .progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}
814 814 .progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top, #ee5f5b, #c43c35);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));background-image:-webkit-linear-gradient(top, #ee5f5b, #c43c35);background-image:-o-linear-gradient(top, #ee5f5b, #c43c35);background-image:linear-gradient(to bottom, #ee5f5b, #c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0)}
815 815 .progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255,255,255,0.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,0.15)), color-stop(.75, rgba(255,255,255,0.15)), color-stop(.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}
816 816 .progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top, #62c462, #57a957);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));background-image:-webkit-linear-gradient(top, #62c462, #57a957);background-image:-o-linear-gradient(top, #62c462, #57a957);background-image:linear-gradient(to bottom, #62c462, #57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0)}
817 817 .progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255,255,255,0.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,0.15)), color-stop(.75, rgba(255,255,255,0.15)), color-stop(.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}
818 818 .progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top, #5bc0de, #339bb9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));background-image:-webkit-linear-gradient(top, #5bc0de, #339bb9);background-image:-o-linear-gradient(top, #5bc0de, #339bb9);background-image:linear-gradient(to bottom, #5bc0de, #339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0)}
819 819 .progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255,255,255,0.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,0.15)), color-stop(.75, rgba(255,255,255,0.15)), color-stop(.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}
820 820 .progress-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(to bottom, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0)}
821 821 .progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255,255,255,0.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,0.15)), color-stop(.75, rgba(255,255,255,0.15)), color-stop(.75, transparent), to(transparent));background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}
822 822 .accordion{margin-bottom:20px}
823 823 .accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}
824 824 .accordion-heading{border-bottom:0}
825 825 .accordion-heading .accordion-toggle{display:block;padding:8px 15px}
826 826 .accordion-toggle{cursor:pointer}
827 827 .accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}
828 828 .carousel{position:relative;margin-bottom:20px;line-height:1}
829 829 .carousel-inner{overflow:hidden;width:100%;position:relative}
830 830 .carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}
831 831 .carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}
832 832 .carousel-inner>.active{left:0}
833 833 .carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}
834 834 .carousel-inner>.next{left:100%}
835 835 .carousel-inner>.prev{left:-100%}
836 836 .carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}
837 837 .carousel-inner>.active.left{left:-100%}
838 838 .carousel-inner>.active.right{left:100%}
839 839 .carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{left:auto;right:15px}
840 840 .carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}
841 841 .carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}
842 842 .carousel-indicators .active{background-color:#fff}
843 843 .carousel-caption{position:absolute;left:0;right:0;bottom:0;padding:15px;background:#333;background:rgba(0,0,0,0.75)}
844 844 .carousel-caption h4,.carousel-caption p{color:#fff;line-height:20px}
845 845 .carousel-caption h4{margin:0 0 5px}
846 846 .carousel-caption p{margin-bottom:0}
847 847 .hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eee;border-radius:6px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;color:inherit;letter-spacing:-1px}
848 848 .hero-unit li{line-height:30px}
849 849 .pull-right{float:right}
850 850 .pull-left{float:left}
851 851 .hide{display:none}
852 852 .show{display:block}
853 853 .invisible{visibility:hidden}
854 854 .affix{position:fixed}
855 855 .clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:"";line-height:0}
856 856 .clearfix:after{clear:both}
857 857 .hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}
858 858 .input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}
859 859 @-ms-viewport{width:device-width}.hidden{display:none;visibility:hidden}
860 860 .visible-phone{display:none !important}
861 861 .visible-tablet{display:none !important}
862 862 .hidden-desktop{display:none !important}
863 863 .visible-desktop{display:inherit !important}
864 864 @media (min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit !important} .visible-desktop{display:none !important} .visible-tablet{display:inherit !important} .hidden-tablet{display:none !important}}@media (max-width:767px){.hidden-desktop{display:inherit !important} .visible-desktop{display:none !important} .visible-phone{display:inherit !important} .hidden-phone{display:none !important}}.visible-print{display:none !important}
865 865 @media print{.visible-print{display:inherit !important} .hidden-print{display:none !important}}@media (min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;content:"";line-height:0} .row:after{clear:both} [class*="span"]{float:left;min-height:1px;margin-left:30px} .container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px} .span12{width:1170px} .span11{width:1070px} .span10{width:970px} .span9{width:870px} .span8{width:770px} .span7{width:670px} .span6{width:570px} .span5{width:470px} .span4{width:370px} .span3{width:270px} .span2{width:170px} .span1{width:70px} .offset12{margin-left:1230px} .offset11{margin-left:1130px} .offset10{margin-left:1030px} .offset9{margin-left:930px} .offset8{margin-left:830px} .offset7{margin-left:730px} .offset6{margin-left:630px} .offset5{margin-left:530px} .offset4{margin-left:430px} .offset3{margin-left:330px} .offset2{margin-left:230px} .offset1{margin-left:130px} .row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;content:"";line-height:0} .row-fluid:after{clear:both} .row-fluid [class*="span"]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%} .row-fluid [class*="span"]:first-child{margin-left:0} .row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.564102564102564%} .row-fluid .span12{width:100%;*width:99.94680851063829%} .row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%} .row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%} .row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%} .row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%} .row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%} .row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%} .row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%} .row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%} .row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%} .row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%} .row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%} .row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%} .row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%} .row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%} .row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%} .row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%} .row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%} .row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%} .row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%} .row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%} .row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%} .row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%} .row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%} .row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%} .row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%} .row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%} .row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%} .row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%} .row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%} .row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%} .row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%} .row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%} .row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%} .row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%} .row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%} input,textarea,.uneditable-input{margin-left:0} .controls-row [class*="span"]+[class*="span"]{margin-left:30px} input.span12,textarea.span12,.uneditable-input.span12{width:1156px} input.span11,textarea.span11,.uneditable-input.span11{width:1056px} input.span10,textarea.span10,.uneditable-input.span10{width:956px} input.span9,textarea.span9,.uneditable-input.span9{width:856px} input.span8,textarea.span8,.uneditable-input.span8{width:756px} input.span7,textarea.span7,.uneditable-input.span7{width:656px} input.span6,textarea.span6,.uneditable-input.span6{width:556px} input.span5,textarea.span5,.uneditable-input.span5{width:456px} input.span4,textarea.span4,.uneditable-input.span4{width:356px} input.span3,textarea.span3,.uneditable-input.span3{width:256px} input.span2,textarea.span2,.uneditable-input.span2{width:156px} input.span1,textarea.span1,.uneditable-input.span1{width:56px} .thumbnails{margin-left:-30px} .thumbnails>li{margin-left:30px} .row-fluid .thumbnails{margin-left:0}}@media (min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;content:"";line-height:0} .row:after{clear:both} [class*="span"]{float:left;min-height:1px;margin-left:20px} .container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px} .span12{width:724px} .span11{width:662px} .span10{width:600px} .span9{width:538px} .span8{width:476px} .span7{width:414px} .span6{width:352px} .span5{width:290px} .span4{width:228px} .span3{width:166px} .span2{width:104px} .span1{width:42px} .offset12{margin-left:764px} .offset11{margin-left:702px} .offset10{margin-left:640px} .offset9{margin-left:578px} .offset8{margin-left:516px} .offset7{margin-left:454px} .offset6{margin-left:392px} .offset5{margin-left:330px} .offset4{margin-left:268px} .offset3{margin-left:206px} .offset2{margin-left:144px} .offset1{margin-left:82px} .row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;content:"";line-height:0} .row-fluid:after{clear:both} .row-fluid [class*="span"]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%} .row-fluid [class*="span"]:first-child{margin-left:0} .row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.7624309392265194%} .row-fluid .span12{width:100%;*width:99.94680851063829%} .row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%} .row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%} .row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%} .row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%} .row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%} .row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%} .row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%} .row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%} .row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%} .row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%} .row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%} .row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%} .row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%} .row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%} .row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%} .row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%} .row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%} .row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%} .row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%} .row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%} .row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%} .row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%} .row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%} .row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%} .row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%} .row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%} .row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%} .row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%} .row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%} .row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%} .row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%} .row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%} .row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%} .row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%} .row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%} input,textarea,.uneditable-input{margin-left:0} .controls-row [class*="span"]+[class*="span"]{margin-left:20px} input.span12,textarea.span12,.uneditable-input.span12{width:710px} input.span11,textarea.span11,.uneditable-input.span11{width:648px} input.span10,textarea.span10,.uneditable-input.span10{width:586px} input.span9,textarea.span9,.uneditable-input.span9{width:524px} input.span8,textarea.span8,.uneditable-input.span8{width:462px} input.span7,textarea.span7,.uneditable-input.span7{width:400px} input.span6,textarea.span6,.uneditable-input.span6{width:338px} input.span5,textarea.span5,.uneditable-input.span5{width:276px} input.span4,textarea.span4,.uneditable-input.span4{width:214px} input.span3,textarea.span3,.uneditable-input.span3{width:152px} input.span2,textarea.span2,.uneditable-input.span2{width:90px} input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media (max-width:767px){body{padding-left:20px;padding-right:20px} .navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-left:-20px;margin-right:-20px} .container-fluid{padding:0} .dl-horizontal dt{float:none;clear:none;width:auto;text-align:left} .dl-horizontal dd{margin-left:0} .container{width:auto} .row-fluid{width:100%} .row,.thumbnails{margin-left:0} .thumbnails>li{float:none;margin-left:0} [class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{float:none;display:block;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box} .span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box} .row-fluid [class*="offset"]:first-child{margin-left:0} .input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box} .input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto} .controls-row [class*="span"]+[class*="span"]{margin-left:0} .modal{position:fixed;top:20px;left:20px;right:20px;width:auto;margin:0}.modal.fade{top:-100px} .modal.fade.in{top:20px}}@media (max-width:480px){.nav-collapse{-webkit-transform:translate3d(0, 0, 0)} .page-header h1 small{display:block;line-height:20px} input[type="checkbox"],input[type="radio"]{border:1px solid #ccc} .form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left} .form-horizontal .controls{margin-left:0} .form-horizontal .control-list{padding-top:0} .form-horizontal .form-actions{padding-left:10px;padding-right:10px} .media .pull-left,.media .pull-right{float:none;display:block;margin-bottom:10px} .media-object{margin-right:0;margin-left:0} .modal{top:10px;left:10px;right:10px} .modal-header .close{padding:10px;margin:-10px} .carousel-caption{position:static}}@media (max-width:979px){body{padding-top:0} .navbar-fixed-top,.navbar-fixed-bottom{position:static} .navbar-fixed-top{margin-bottom:20px} .navbar-fixed-bottom{margin-top:20px} .navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px} .navbar .container{width:auto;padding:0} .navbar .brand{padding-left:10px;padding-right:10px;margin:0 0 0 -5px} .nav-collapse{clear:both} .nav-collapse .nav{float:none;margin:0 0 10px} .nav-collapse .nav>li{float:none} .nav-collapse .nav>li>a{margin-bottom:2px} .nav-collapse .nav>.divider-vertical{display:none} .nav-collapse .nav .nav-header{color:#777;text-shadow:none} .nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px} .nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px} .nav-collapse .dropdown-menu li+li a{margin-bottom:2px} .nav-collapse .nav>li>a:hover,.nav-collapse .nav>li>a:focus,.nav-collapse .dropdown-menu a:hover,.nav-collapse .dropdown-menu a:focus{background-color:#f2f2f2} .navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999} .navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .nav>li>a:focus,.navbar-inverse .nav-collapse .dropdown-menu a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:focus{background-color:#111} .nav-collapse.in .btn-group{margin-top:5px;padding:0} .nav-collapse .dropdown-menu{position:static;top:auto;left:auto;float:none;display:none;max-width:none;margin:0 15px;padding:0;background-color:transparent;border:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none} .nav-collapse .open>.dropdown-menu{display:block} .nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none} .nav-collapse .dropdown-menu .divider{display:none} .nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none} .nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1)} .navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111} .navbar .nav-collapse .nav.pull-right{float:none;margin-left:0} .nav-collapse,.nav-collapse.collapse{overflow:hidden;height:0} .navbar .btn-navbar{display:block} .navbar-static .navbar-inner{padding-left:10px;padding-right:10px}}@media (min-width:979px + 1){.nav-collapse.collapse{height:auto !important;overflow:visible !important}}@font-face{font-family:'FontAwesome';src:url('../components/font-awesome/font/fontawesome-webfont.eot?v=3.2.1');src:url('../components/font-awesome/font/fontawesome-webfont.eot?#iefix&v=3.2.1') format('embedded-opentype'),url('../components/font-awesome/font/fontawesome-webfont.woff?v=3.2.1') format('woff'),url('../components/font-awesome/font/fontawesome-webfont.ttf?v=3.2.1') format('truetype'),url('../components/font-awesome/font/fontawesome-webfont.svg#fontawesomeregular?v=3.2.1') format('svg');font-weight:normal;font-style:normal}[class^="icon-"],[class*=" icon-"]{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em}
866 866 [class^="icon-"]:before,[class*=" icon-"]:before{text-decoration:inherit;display:inline-block;speak:none}
867 867 .icon-large:before{vertical-align:-10%;font-size:1.3333333333333333em}
868 868 a [class^="icon-"],a [class*=" icon-"]{display:inline}
869 869 [class^="icon-"].icon-fixed-width,[class*=" icon-"].icon-fixed-width{display:inline-block;width:1.1428571428571428em;text-align:right;padding-right:.2857142857142857em}[class^="icon-"].icon-fixed-width.icon-large,[class*=" icon-"].icon-fixed-width.icon-large{width:1.4285714285714286em}
870 870 .icons-ul{margin-left:2.142857142857143em;list-style-type:none}.icons-ul>li{position:relative}
871 871 .icons-ul .icon-li{position:absolute;left:-2.142857142857143em;width:2.142857142857143em;text-align:center;line-height:inherit}
872 872 [class^="icon-"].hide,[class*=" icon-"].hide{display:none}
873 873 .icon-muted{color:#eee}
874 874 .icon-light{color:#fff}
875 875 .icon-dark{color:#333}
876 876 .icon-border{border:solid 1px #eee;padding:.2em .25em .15em;border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}
877 877 .icon-2x{font-size:2em}.icon-2x.icon-border{border-width:2px;border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}
878 878 .icon-3x{font-size:3em}.icon-3x.icon-border{border-width:3px;border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}
879 879 .icon-4x{font-size:4em}.icon-4x.icon-border{border-width:4px;border-radius:6px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}
880 880 .icon-5x{font-size:5em}.icon-5x.icon-border{border-width:5px;border-radius:7px;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}
881 881 .pull-right{float:right}
882 882 .pull-left{float:left}
883 883 [class^="icon-"].pull-left,[class*=" icon-"].pull-left{margin-right:.3em}
884 884 [class^="icon-"].pull-right,[class*=" icon-"].pull-right{margin-left:.3em}
885 885 [class^="icon-"],[class*=" icon-"]{display:inline;width:auto;height:auto;line-height:normal;vertical-align:baseline;background-image:none;background-position:0 0;background-repeat:repeat;margin-top:0}
886 886 .icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"]{background-image:none}
887 887 .btn [class^="icon-"].icon-large,.nav [class^="icon-"].icon-large,.btn [class*=" icon-"].icon-large,.nav [class*=" icon-"].icon-large{line-height:.9em}
888 888 .btn [class^="icon-"].icon-spin,.nav [class^="icon-"].icon-spin,.btn [class*=" icon-"].icon-spin,.nav [class*=" icon-"].icon-spin{display:inline-block}
889 889 .nav-tabs [class^="icon-"],.nav-pills [class^="icon-"],.nav-tabs [class*=" icon-"],.nav-pills [class*=" icon-"],.nav-tabs [class^="icon-"].icon-large,.nav-pills [class^="icon-"].icon-large,.nav-tabs [class*=" icon-"].icon-large,.nav-pills [class*=" icon-"].icon-large{line-height:.9em}
890 890 .btn [class^="icon-"].pull-left.icon-2x,.btn [class*=" icon-"].pull-left.icon-2x,.btn [class^="icon-"].pull-right.icon-2x,.btn [class*=" icon-"].pull-right.icon-2x{margin-top:.18em}
891 891 .btn [class^="icon-"].icon-spin.icon-large,.btn [class*=" icon-"].icon-spin.icon-large{line-height:.8em}
892 892 .btn.btn-small [class^="icon-"].pull-left.icon-2x,.btn.btn-small [class*=" icon-"].pull-left.icon-2x,.btn.btn-small [class^="icon-"].pull-right.icon-2x,.btn.btn-small [class*=" icon-"].pull-right.icon-2x{margin-top:.25em}
893 893 .btn.btn-large [class^="icon-"],.btn.btn-large [class*=" icon-"]{margin-top:0}.btn.btn-large [class^="icon-"].pull-left.icon-2x,.btn.btn-large [class*=" icon-"].pull-left.icon-2x,.btn.btn-large [class^="icon-"].pull-right.icon-2x,.btn.btn-large [class*=" icon-"].pull-right.icon-2x{margin-top:.05em}
894 894 .btn.btn-large [class^="icon-"].pull-left.icon-2x,.btn.btn-large [class*=" icon-"].pull-left.icon-2x{margin-right:.2em}
895 895 .btn.btn-large [class^="icon-"].pull-right.icon-2x,.btn.btn-large [class*=" icon-"].pull-right.icon-2x{margin-left:.2em}
896 896 .nav-list [class^="icon-"],.nav-list [class*=" icon-"]{line-height:inherit}
897 897 .icon-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:-35%}.icon-stack [class^="icon-"],.icon-stack [class*=" icon-"]{display:block;text-align:center;position:absolute;width:100%;height:100%;font-size:1em;line-height:inherit;*line-height:2em}
898 898 .icon-stack .icon-stack-base{font-size:2em;*line-height:1em}
899 899 .icon-spin{display:inline-block;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear}
900 900 a .icon-stack,a .icon-spin{display:inline-block;text-decoration:none}
901 901 @-moz-keyframes spin{0%{-moz-transform:rotate(0deg)} 100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)} 100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)} 100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)} 100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)} 100%{transform:rotate(359deg)}}.icon-rotate-90:before{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1)}
902 902 .icon-rotate-180:before{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2)}
903 903 .icon-rotate-270:before{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3)}
904 904 .icon-flip-horizontal:before{-webkit-transform:scale(-1, 1);-moz-transform:scale(-1, 1);-ms-transform:scale(-1, 1);-o-transform:scale(-1, 1);transform:scale(-1, 1)}
905 905 .icon-flip-vertical:before{-webkit-transform:scale(1, -1);-moz-transform:scale(1, -1);-ms-transform:scale(1, -1);-o-transform:scale(1, -1);transform:scale(1, -1)}
906 906 a .icon-rotate-90:before,a .icon-rotate-180:before,a .icon-rotate-270:before,a .icon-flip-horizontal:before,a .icon-flip-vertical:before{display:inline-block}
907 907 .icon-glass:before{content:"\f000"}
908 908 .icon-music:before{content:"\f001"}
909 909 .icon-search:before{content:"\f002"}
910 910 .icon-envelope-alt:before{content:"\f003"}
911 911 .icon-heart:before{content:"\f004"}
912 912 .icon-star:before{content:"\f005"}
913 913 .icon-star-empty:before{content:"\f006"}
914 914 .icon-user:before{content:"\f007"}
915 915 .icon-film:before{content:"\f008"}
916 916 .icon-th-large:before{content:"\f009"}
917 917 .icon-th:before{content:"\f00a"}
918 918 .icon-th-list:before{content:"\f00b"}
919 919 .icon-ok:before{content:"\f00c"}
920 920 .icon-remove:before{content:"\f00d"}
921 921 .icon-zoom-in:before{content:"\f00e"}
922 922 .icon-zoom-out:before{content:"\f010"}
923 923 .icon-power-off:before,.icon-off:before{content:"\f011"}
924 924 .icon-signal:before{content:"\f012"}
925 925 .icon-gear:before,.icon-cog:before{content:"\f013"}
926 926 .icon-trash:before{content:"\f014"}
927 927 .icon-home:before{content:"\f015"}
928 928 .icon-file-alt:before{content:"\f016"}
929 929 .icon-time:before{content:"\f017"}
930 930 .icon-road:before{content:"\f018"}
931 931 .icon-download-alt:before{content:"\f019"}
932 932 .icon-download:before{content:"\f01a"}
933 933 .icon-upload:before{content:"\f01b"}
934 934 .icon-inbox:before{content:"\f01c"}
935 935 .icon-play-circle:before{content:"\f01d"}
936 936 .icon-rotate-right:before,.icon-repeat:before{content:"\f01e"}
937 937 .icon-refresh:before{content:"\f021"}
938 938 .icon-list-alt:before{content:"\f022"}
939 939 .icon-lock:before{content:"\f023"}
940 940 .icon-flag:before{content:"\f024"}
941 941 .icon-headphones:before{content:"\f025"}
942 942 .icon-volume-off:before{content:"\f026"}
943 943 .icon-volume-down:before{content:"\f027"}
944 944 .icon-volume-up:before{content:"\f028"}
945 945 .icon-qrcode:before{content:"\f029"}
946 946 .icon-barcode:before{content:"\f02a"}
947 947 .icon-tag:before{content:"\f02b"}
948 948 .icon-tags:before{content:"\f02c"}
949 949 .icon-book:before{content:"\f02d"}
950 950 .icon-bookmark:before{content:"\f02e"}
951 951 .icon-print:before{content:"\f02f"}
952 952 .icon-camera:before{content:"\f030"}
953 953 .icon-font:before{content:"\f031"}
954 954 .icon-bold:before{content:"\f032"}
955 955 .icon-italic:before{content:"\f033"}
956 956 .icon-text-height:before{content:"\f034"}
957 957 .icon-text-width:before{content:"\f035"}
958 958 .icon-align-left:before{content:"\f036"}
959 959 .icon-align-center:before{content:"\f037"}
960 960 .icon-align-right:before{content:"\f038"}
961 961 .icon-align-justify:before{content:"\f039"}
962 962 .icon-list:before{content:"\f03a"}
963 963 .icon-indent-left:before{content:"\f03b"}
964 964 .icon-indent-right:before{content:"\f03c"}
965 965 .icon-facetime-video:before{content:"\f03d"}
966 966 .icon-picture:before{content:"\f03e"}
967 967 .icon-pencil:before{content:"\f040"}
968 968 .icon-map-marker:before{content:"\f041"}
969 969 .icon-adjust:before{content:"\f042"}
970 970 .icon-tint:before{content:"\f043"}
971 971 .icon-edit:before{content:"\f044"}
972 972 .icon-share:before{content:"\f045"}
973 973 .icon-check:before{content:"\f046"}
974 974 .icon-move:before{content:"\f047"}
975 975 .icon-step-backward:before{content:"\f048"}
976 976 .icon-fast-backward:before{content:"\f049"}
977 977 .icon-backward:before{content:"\f04a"}
978 978 .icon-play:before{content:"\f04b"}
979 979 .icon-pause:before{content:"\f04c"}
980 980 .icon-stop:before{content:"\f04d"}
981 981 .icon-forward:before{content:"\f04e"}
982 982 .icon-fast-forward:before{content:"\f050"}
983 983 .icon-step-forward:before{content:"\f051"}
984 984 .icon-eject:before{content:"\f052"}
985 985 .icon-chevron-left:before{content:"\f053"}
986 986 .icon-chevron-right:before{content:"\f054"}
987 987 .icon-plus-sign:before{content:"\f055"}
988 988 .icon-minus-sign:before{content:"\f056"}
989 989 .icon-remove-sign:before{content:"\f057"}
990 990 .icon-ok-sign:before{content:"\f058"}
991 991 .icon-question-sign:before{content:"\f059"}
992 992 .icon-info-sign:before{content:"\f05a"}
993 993 .icon-screenshot:before{content:"\f05b"}
994 994 .icon-remove-circle:before{content:"\f05c"}
995 995 .icon-ok-circle:before{content:"\f05d"}
996 996 .icon-ban-circle:before{content:"\f05e"}
997 997 .icon-arrow-left:before{content:"\f060"}
998 998 .icon-arrow-right:before{content:"\f061"}
999 999 .icon-arrow-up:before{content:"\f062"}
1000 1000 .icon-arrow-down:before{content:"\f063"}
1001 1001 .icon-mail-forward:before,.icon-share-alt:before{content:"\f064"}
1002 1002 .icon-resize-full:before{content:"\f065"}
1003 1003 .icon-resize-small:before{content:"\f066"}
1004 1004 .icon-plus:before{content:"\f067"}
1005 1005 .icon-minus:before{content:"\f068"}
1006 1006 .icon-asterisk:before{content:"\f069"}
1007 1007 .icon-exclamation-sign:before{content:"\f06a"}
1008 1008 .icon-gift:before{content:"\f06b"}
1009 1009 .icon-leaf:before{content:"\f06c"}
1010 1010 .icon-fire:before{content:"\f06d"}
1011 1011 .icon-eye-open:before{content:"\f06e"}
1012 1012 .icon-eye-close:before{content:"\f070"}
1013 1013 .icon-warning-sign:before{content:"\f071"}
1014 1014 .icon-plane:before{content:"\f072"}
1015 1015 .icon-calendar:before{content:"\f073"}
1016 1016 .icon-random:before{content:"\f074"}
1017 1017 .icon-comment:before{content:"\f075"}
1018 1018 .icon-magnet:before{content:"\f076"}
1019 1019 .icon-chevron-up:before{content:"\f077"}
1020 1020 .icon-chevron-down:before{content:"\f078"}
1021 1021 .icon-retweet:before{content:"\f079"}
1022 1022 .icon-shopping-cart:before{content:"\f07a"}
1023 1023 .icon-folder-close:before{content:"\f07b"}
1024 1024 .icon-folder-open:before{content:"\f07c"}
1025 1025 .icon-resize-vertical:before{content:"\f07d"}
1026 1026 .icon-resize-horizontal:before{content:"\f07e"}
1027 1027 .icon-bar-chart:before{content:"\f080"}
1028 1028 .icon-twitter-sign:before{content:"\f081"}
1029 1029 .icon-facebook-sign:before{content:"\f082"}
1030 1030 .icon-camera-retro:before{content:"\f083"}
1031 1031 .icon-key:before{content:"\f084"}
1032 1032 .icon-gears:before,.icon-cogs:before{content:"\f085"}
1033 1033 .icon-comments:before{content:"\f086"}
1034 1034 .icon-thumbs-up-alt:before{content:"\f087"}
1035 1035 .icon-thumbs-down-alt:before{content:"\f088"}
1036 1036 .icon-star-half:before{content:"\f089"}
1037 1037 .icon-heart-empty:before{content:"\f08a"}
1038 1038 .icon-signout:before{content:"\f08b"}
1039 1039 .icon-linkedin-sign:before{content:"\f08c"}
1040 1040 .icon-pushpin:before{content:"\f08d"}
1041 1041 .icon-external-link:before{content:"\f08e"}
1042 1042 .icon-signin:before{content:"\f090"}
1043 1043 .icon-trophy:before{content:"\f091"}
1044 1044 .icon-github-sign:before{content:"\f092"}
1045 1045 .icon-upload-alt:before{content:"\f093"}
1046 1046 .icon-lemon:before{content:"\f094"}
1047 1047 .icon-phone:before{content:"\f095"}
1048 1048 .icon-unchecked:before,.icon-check-empty:before{content:"\f096"}
1049 1049 .icon-bookmark-empty:before{content:"\f097"}
1050 1050 .icon-phone-sign:before{content:"\f098"}
1051 1051 .icon-twitter:before{content:"\f099"}
1052 1052 .icon-facebook:before{content:"\f09a"}
1053 1053 .icon-github:before{content:"\f09b"}
1054 1054 .icon-unlock:before{content:"\f09c"}
1055 1055 .icon-credit-card:before{content:"\f09d"}
1056 1056 .icon-rss:before{content:"\f09e"}
1057 1057 .icon-hdd:before{content:"\f0a0"}
1058 1058 .icon-bullhorn:before{content:"\f0a1"}
1059 1059 .icon-bell:before{content:"\f0a2"}
1060 1060 .icon-certificate:before{content:"\f0a3"}
1061 1061 .icon-hand-right:before{content:"\f0a4"}
1062 1062 .icon-hand-left:before{content:"\f0a5"}
1063 1063 .icon-hand-up:before{content:"\f0a6"}
1064 1064 .icon-hand-down:before{content:"\f0a7"}
1065 1065 .icon-circle-arrow-left:before{content:"\f0a8"}
1066 1066 .icon-circle-arrow-right:before{content:"\f0a9"}
1067 1067 .icon-circle-arrow-up:before{content:"\f0aa"}
1068 1068 .icon-circle-arrow-down:before{content:"\f0ab"}
1069 1069 .icon-globe:before{content:"\f0ac"}
1070 1070 .icon-wrench:before{content:"\f0ad"}
1071 1071 .icon-tasks:before{content:"\f0ae"}
1072 1072 .icon-filter:before{content:"\f0b0"}
1073 1073 .icon-briefcase:before{content:"\f0b1"}
1074 1074 .icon-fullscreen:before{content:"\f0b2"}
1075 1075 .icon-group:before{content:"\f0c0"}
1076 1076 .icon-link:before{content:"\f0c1"}
1077 1077 .icon-cloud:before{content:"\f0c2"}
1078 1078 .icon-beaker:before{content:"\f0c3"}
1079 1079 .icon-cut:before{content:"\f0c4"}
1080 1080 .icon-copy:before{content:"\f0c5"}
1081 1081 .icon-paperclip:before,.icon-paper-clip:before{content:"\f0c6"}
1082 1082 .icon-save:before{content:"\f0c7"}
1083 1083 .icon-sign-blank:before{content:"\f0c8"}
1084 1084 .icon-reorder:before{content:"\f0c9"}
1085 1085 .icon-list-ul:before{content:"\f0ca"}
1086 1086 .icon-list-ol:before{content:"\f0cb"}
1087 1087 .icon-strikethrough:before{content:"\f0cc"}
1088 1088 .icon-underline:before{content:"\f0cd"}
1089 1089 .icon-table:before{content:"\f0ce"}
1090 1090 .icon-magic:before{content:"\f0d0"}
1091 1091 .icon-truck:before{content:"\f0d1"}
1092 1092 .icon-pinterest:before{content:"\f0d2"}
1093 1093 .icon-pinterest-sign:before{content:"\f0d3"}
1094 1094 .icon-google-plus-sign:before{content:"\f0d4"}
1095 1095 .icon-google-plus:before{content:"\f0d5"}
1096 1096 .icon-money:before{content:"\f0d6"}
1097 1097 .icon-caret-down:before{content:"\f0d7"}
1098 1098 .icon-caret-up:before{content:"\f0d8"}
1099 1099 .icon-caret-left:before{content:"\f0d9"}
1100 1100 .icon-caret-right:before{content:"\f0da"}
1101 1101 .icon-columns:before{content:"\f0db"}
1102 1102 .icon-sort:before{content:"\f0dc"}
1103 1103 .icon-sort-down:before{content:"\f0dd"}
1104 1104 .icon-sort-up:before{content:"\f0de"}
1105 1105 .icon-envelope:before{content:"\f0e0"}
1106 1106 .icon-linkedin:before{content:"\f0e1"}
1107 1107 .icon-rotate-left:before,.icon-undo:before{content:"\f0e2"}
1108 1108 .icon-legal:before{content:"\f0e3"}
1109 1109 .icon-dashboard:before{content:"\f0e4"}
1110 1110 .icon-comment-alt:before{content:"\f0e5"}
1111 1111 .icon-comments-alt:before{content:"\f0e6"}
1112 1112 .icon-bolt:before{content:"\f0e7"}
1113 1113 .icon-sitemap:before{content:"\f0e8"}
1114 1114 .icon-umbrella:before{content:"\f0e9"}
1115 1115 .icon-paste:before{content:"\f0ea"}
1116 1116 .icon-lightbulb:before{content:"\f0eb"}
1117 1117 .icon-exchange:before{content:"\f0ec"}
1118 1118 .icon-cloud-download:before{content:"\f0ed"}
1119 1119 .icon-cloud-upload:before{content:"\f0ee"}
1120 1120 .icon-user-md:before{content:"\f0f0"}
1121 1121 .icon-stethoscope:before{content:"\f0f1"}
1122 1122 .icon-suitcase:before{content:"\f0f2"}
1123 1123 .icon-bell-alt:before{content:"\f0f3"}
1124 1124 .icon-coffee:before{content:"\f0f4"}
1125 1125 .icon-food:before{content:"\f0f5"}
1126 1126 .icon-file-text-alt:before{content:"\f0f6"}
1127 1127 .icon-building:before{content:"\f0f7"}
1128 1128 .icon-hospital:before{content:"\f0f8"}
1129 1129 .icon-ambulance:before{content:"\f0f9"}
1130 1130 .icon-medkit:before{content:"\f0fa"}
1131 1131 .icon-fighter-jet:before{content:"\f0fb"}
1132 1132 .icon-beer:before{content:"\f0fc"}
1133 1133 .icon-h-sign:before{content:"\f0fd"}
1134 1134 .icon-plus-sign-alt:before{content:"\f0fe"}
1135 1135 .icon-double-angle-left:before{content:"\f100"}
1136 1136 .icon-double-angle-right:before{content:"\f101"}
1137 1137 .icon-double-angle-up:before{content:"\f102"}
1138 1138 .icon-double-angle-down:before{content:"\f103"}
1139 1139 .icon-angle-left:before{content:"\f104"}
1140 1140 .icon-angle-right:before{content:"\f105"}
1141 1141 .icon-angle-up:before{content:"\f106"}
1142 1142 .icon-angle-down:before{content:"\f107"}
1143 1143 .icon-desktop:before{content:"\f108"}
1144 1144 .icon-laptop:before{content:"\f109"}
1145 1145 .icon-tablet:before{content:"\f10a"}
1146 1146 .icon-mobile-phone:before{content:"\f10b"}
1147 1147 .icon-circle-blank:before{content:"\f10c"}
1148 1148 .icon-quote-left:before{content:"\f10d"}
1149 1149 .icon-quote-right:before{content:"\f10e"}
1150 1150 .icon-spinner:before{content:"\f110"}
1151 1151 .icon-circle:before{content:"\f111"}
1152 1152 .icon-mail-reply:before,.icon-reply:before{content:"\f112"}
1153 1153 .icon-github-alt:before{content:"\f113"}
1154 1154 .icon-folder-close-alt:before{content:"\f114"}
1155 1155 .icon-folder-open-alt:before{content:"\f115"}
1156 1156 .icon-expand-alt:before{content:"\f116"}
1157 1157 .icon-collapse-alt:before{content:"\f117"}
1158 1158 .icon-smile:before{content:"\f118"}
1159 1159 .icon-frown:before{content:"\f119"}
1160 1160 .icon-meh:before{content:"\f11a"}
1161 1161 .icon-gamepad:before{content:"\f11b"}
1162 1162 .icon-keyboard:before{content:"\f11c"}
1163 1163 .icon-flag-alt:before{content:"\f11d"}
1164 1164 .icon-flag-checkered:before{content:"\f11e"}
1165 1165 .icon-terminal:before{content:"\f120"}
1166 1166 .icon-code:before{content:"\f121"}
1167 1167 .icon-reply-all:before{content:"\f122"}
1168 1168 .icon-mail-reply-all:before{content:"\f122"}
1169 1169 .icon-star-half-full:before,.icon-star-half-empty:before{content:"\f123"}
1170 1170 .icon-location-arrow:before{content:"\f124"}
1171 1171 .icon-crop:before{content:"\f125"}
1172 1172 .icon-code-fork:before{content:"\f126"}
1173 1173 .icon-unlink:before{content:"\f127"}
1174 1174 .icon-question:before{content:"\f128"}
1175 1175 .icon-info:before{content:"\f129"}
1176 1176 .icon-exclamation:before{content:"\f12a"}
1177 1177 .icon-superscript:before{content:"\f12b"}
1178 1178 .icon-subscript:before{content:"\f12c"}
1179 1179 .icon-eraser:before{content:"\f12d"}
1180 1180 .icon-puzzle-piece:before{content:"\f12e"}
1181 1181 .icon-microphone:before{content:"\f130"}
1182 1182 .icon-microphone-off:before{content:"\f131"}
1183 1183 .icon-shield:before{content:"\f132"}
1184 1184 .icon-calendar-empty:before{content:"\f133"}
1185 1185 .icon-fire-extinguisher:before{content:"\f134"}
1186 1186 .icon-rocket:before{content:"\f135"}
1187 1187 .icon-maxcdn:before{content:"\f136"}
1188 1188 .icon-chevron-sign-left:before{content:"\f137"}
1189 1189 .icon-chevron-sign-right:before{content:"\f138"}
1190 1190 .icon-chevron-sign-up:before{content:"\f139"}
1191 1191 .icon-chevron-sign-down:before{content:"\f13a"}
1192 1192 .icon-html5:before{content:"\f13b"}
1193 1193 .icon-css3:before{content:"\f13c"}
1194 1194 .icon-anchor:before{content:"\f13d"}
1195 1195 .icon-unlock-alt:before{content:"\f13e"}
1196 1196 .icon-bullseye:before{content:"\f140"}
1197 1197 .icon-ellipsis-horizontal:before{content:"\f141"}
1198 1198 .icon-ellipsis-vertical:before{content:"\f142"}
1199 1199 .icon-rss-sign:before{content:"\f143"}
1200 1200 .icon-play-sign:before{content:"\f144"}
1201 1201 .icon-ticket:before{content:"\f145"}
1202 1202 .icon-minus-sign-alt:before{content:"\f146"}
1203 1203 .icon-check-minus:before{content:"\f147"}
1204 1204 .icon-level-up:before{content:"\f148"}
1205 1205 .icon-level-down:before{content:"\f149"}
1206 1206 .icon-check-sign:before{content:"\f14a"}
1207 1207 .icon-edit-sign:before{content:"\f14b"}
1208 1208 .icon-external-link-sign:before{content:"\f14c"}
1209 1209 .icon-share-sign:before{content:"\f14d"}
1210 1210 .icon-compass:before{content:"\f14e"}
1211 1211 .icon-collapse:before{content:"\f150"}
1212 1212 .icon-collapse-top:before{content:"\f151"}
1213 1213 .icon-expand:before{content:"\f152"}
1214 1214 .icon-euro:before,.icon-eur:before{content:"\f153"}
1215 1215 .icon-gbp:before{content:"\f154"}
1216 1216 .icon-dollar:before,.icon-usd:before{content:"\f155"}
1217 1217 .icon-rupee:before,.icon-inr:before{content:"\f156"}
1218 1218 .icon-yen:before,.icon-jpy:before{content:"\f157"}
1219 1219 .icon-renminbi:before,.icon-cny:before{content:"\f158"}
1220 1220 .icon-won:before,.icon-krw:before{content:"\f159"}
1221 1221 .icon-bitcoin:before,.icon-btc:before{content:"\f15a"}
1222 1222 .icon-file:before{content:"\f15b"}
1223 1223 .icon-file-text:before{content:"\f15c"}
1224 1224 .icon-sort-by-alphabet:before{content:"\f15d"}
1225 1225 .icon-sort-by-alphabet-alt:before{content:"\f15e"}
1226 1226 .icon-sort-by-attributes:before{content:"\f160"}
1227 1227 .icon-sort-by-attributes-alt:before{content:"\f161"}
1228 1228 .icon-sort-by-order:before{content:"\f162"}
1229 1229 .icon-sort-by-order-alt:before{content:"\f163"}
1230 1230 .icon-thumbs-up:before{content:"\f164"}
1231 1231 .icon-thumbs-down:before{content:"\f165"}
1232 1232 .icon-youtube-sign:before{content:"\f166"}
1233 1233 .icon-youtube:before{content:"\f167"}
1234 1234 .icon-xing:before{content:"\f168"}
1235 1235 .icon-xing-sign:before{content:"\f169"}
1236 1236 .icon-youtube-play:before{content:"\f16a"}
1237 1237 .icon-dropbox:before{content:"\f16b"}
1238 1238 .icon-stackexchange:before{content:"\f16c"}
1239 1239 .icon-instagram:before{content:"\f16d"}
1240 1240 .icon-flickr:before{content:"\f16e"}
1241 1241 .icon-adn:before{content:"\f170"}
1242 1242 .icon-bitbucket:before{content:"\f171"}
1243 1243 .icon-bitbucket-sign:before{content:"\f172"}
1244 1244 .icon-tumblr:before{content:"\f173"}
1245 1245 .icon-tumblr-sign:before{content:"\f174"}
1246 1246 .icon-long-arrow-down:before{content:"\f175"}
1247 1247 .icon-long-arrow-up:before{content:"\f176"}
1248 1248 .icon-long-arrow-left:before{content:"\f177"}
1249 1249 .icon-long-arrow-right:before{content:"\f178"}
1250 1250 .icon-apple:before{content:"\f179"}
1251 1251 .icon-windows:before{content:"\f17a"}
1252 1252 .icon-android:before{content:"\f17b"}
1253 1253 .icon-linux:before{content:"\f17c"}
1254 1254 .icon-dribbble:before{content:"\f17d"}
1255 1255 .icon-skype:before{content:"\f17e"}
1256 1256 .icon-foursquare:before{content:"\f180"}
1257 1257 .icon-trello:before{content:"\f181"}
1258 1258 .icon-female:before{content:"\f182"}
1259 1259 .icon-male:before{content:"\f183"}
1260 1260 .icon-gittip:before{content:"\f184"}
1261 1261 .icon-sun:before{content:"\f185"}
1262 1262 .icon-moon:before{content:"\f186"}
1263 1263 .icon-archive:before{content:"\f187"}
1264 1264 .icon-bug:before{content:"\f188"}
1265 1265 .icon-vk:before{content:"\f189"}
1266 1266 .icon-weibo:before{content:"\f18a"}
1267 1267 .icon-renren:before{content:"\f18b"}
1268 1268 .border-box-sizing{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}
1269 1269 .corner-all{border-radius:4px}
1270 1270 .hbox{display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch}
1271 1271 .hbox>*{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;flex:auto}
1272 1272 .vbox{display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;width:100%;display:flex;flex-direction:column;align-items:stretch}
1273 1273 .vbox>*{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;flex:auto}
1274 1274 .reverse{-webkit-box-direction:reverse;-moz-box-direction:reverse;box-direction:reverse;flex-direction:column-reverse}
1275 1275 .box-flex0{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;flex:auto}
1276 1276 .box-flex1{-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;flex:1}
1277 1277 .box-flex{-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;flex:1}
1278 1278 .box-flex2{-webkit-box-flex:2;-moz-box-flex:2;box-flex:2;flex:2}
1279 1279 .box-group1{-webkit-box-flex-group:1;-moz-box-flex-group:1;box-flex-group:1}
1280 1280 .box-group2{-webkit-box-flex-group:2;-moz-box-flex-group:2;box-flex-group:2}
1281 1281 .start{-webkit-box-pack:start;-moz-box-pack:start;box-pack:start;justify-content:flex-start}
1282 1282 .end{-webkit-box-pack:end;-moz-box-pack:end;box-pack:end;justify-content:flex-end}
1283 1283 .center{-webkit-box-pack:center;-moz-box-pack:center;box-pack:center;justify-content:center}
1284 1284 .align-start{-webkit-box-align:start;-moz-box-align:start;box-align:start;align-content:flex-start}
1285 1285 .align-end{-webkit-box-align:end;-moz-box-align:end;box-align:end;align-content:flex-end}
1286 1286 .align-center{-webkit-box-align:center;-moz-box-align:center;box-align:center;align-content:center}
1287 1287 div.error{margin:2em;text-align:center}
1288 1288 div.error>h1{font-size:500%;line-height:normal}
1289 1289 div.error>p{font-size:200%;line-height:normal}
1290 1290 div.traceback-wrapper{text-align:left;max-width:800px;margin:auto}
1291 1291 body{background-color:#fff;position:absolute;left:0;right:0;top:0;bottom:0;overflow:visible}
1292 1292 div#header{display:none}
1293 1293 #ipython_notebook{padding-left:16px}
1294 1294 #noscript{width:auto;padding-top:16px;padding-bottom:16px;text-align:center;font-size:22px;color:#f00;font-weight:bold}
1295 1295 #ipython_notebook img{font-family:Verdana,"Helvetica Neue",Arial,Helvetica,Geneva,sans-serif;height:24px;text-decoration:none;color:#000}
1296 1296 #site{width:100%;display:none}
1297 1297 .ui-button .ui-button-text{padding:.2em .8em;font-size:77%}
1298 1298 input.ui-button{padding:.3em .9em}
1299 1299 .navbar span{margin-top:3px}
1300 1300 span#login_widget{float:right}
1301 1301 .nav-header{text-transform:none}
1302 1302 .navbar-nobg{background-color:transparent;background-image:none}
1303 1303 #header>span{margin-top:10px}
1304 1304 .modal-body{max-height:500px}
1305 1305 .center-nav{display:inline-block;margin-bottom:-4px}
1306 1306 .alternate_upload{background-color:none;display:inline}
1307 1307 .alternate_upload.form{padding:0;margin:0}
1308 1308 .alternate_upload input.fileinput{background-color:#f00;position:relative;opacity:0;z-index:2;width:295px;margin-left:163px;cursor:pointer;height:26px}
1309 1309 ul#tabs{margin-bottom:4px}
1310 1310 ul#tabs a{padding-top:4px;padding-bottom:4px}
1311 1311 ul.breadcrumb a:focus,ul.breadcrumb a:hover{text-decoration:none}
1312 1312 ul.breadcrumb i.icon-home{font-size:16px;margin-right:4px}
1313 1313 ul.breadcrumb span{color:#5e5e5e}
1314 1314 .list_toolbar{padding:4px 0 4px 0}
1315 1315 .list_toolbar [class*="span"]{min-height:26px}
1316 1316 .list_header{font-weight:bold}
1317 1317 .list_container{margin-top:4px;margin-bottom:20px;border:1px solid #ababab;border-radius:4px}
1318 1318 .list_container>div{border-bottom:1px solid #ababab}.list_container>div:hover .list-item{background-color:#f00}
1319 1319 .list_container>div:last-child{border:none}
1320 1320 .list_item:hover .list_item{background-color:#ddd}
1321 1321 .list_item a{text-decoration:none}
1322 1322 .list_header>div,.list_item>div{padding-top:4px;padding-bottom:4px;padding-left:7px;padding-right:7px;height:22px;line-height:22px}
1323 1323 .item_name{line-height:22px;height:26px}
1324 1324 .item_icon{font-size:14px;color:#5e5e5e;margin-right:7px}
1325 1325 .item_buttons{line-height:1em}
1326 1326 .toolbar_info{height:26px;line-height:26px}
1327 1327 input.nbname_input,input.engine_num_input{padding-top:3px;padding-bottom:3px;height:14px;line-height:14px;margin:0}
1328 1328 input.engine_num_input{width:60px}
1329 1329 .highlight_text{color:#00f}
1330 1330 #project_name>.breadcrumb{padding:0;margin-bottom:0;background-color:transparent;font-weight:bold}
1331 1331 .ansibold{font-weight:bold}
1332 1332 .ansiblack{color:#000}
1333 1333 .ansired{color:#8b0000}
1334 1334 .ansigreen{color:#006400}
1335 1335 .ansiyellow{color:#a52a2a}
1336 1336 .ansiblue{color:#00008b}
1337 1337 .ansipurple{color:#9400d3}
1338 1338 .ansicyan{color:#4682b4}
1339 1339 .ansigray{color:#808080}
1340 1340 .ansibgblack{background-color:#000}
1341 1341 .ansibgred{background-color:#f00}
1342 1342 .ansibggreen{background-color:#008000}
1343 1343 .ansibgyellow{background-color:#ff0}
1344 1344 .ansibgblue{background-color:#00f}
1345 1345 .ansibgpurple{background-color:#f0f}
1346 1346 .ansibgcyan{background-color:#0ff}
1347 1347 .ansibggray{background-color:#808080}
1348 1348 div.cell{border:1px solid transparent;display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;width:100%;display:flex;flex-direction:column;align-items:stretch}div.cell.selected{border-radius:4px;border:thin #ababab solid}
1349 1349 div.cell.edit_mode{border-radius:4px;border:thin #008000 solid}
1350 1350 div.cell{width:100%;padding:5px 5px 5px 0;margin:0;outline:none}
1351 1351 div.prompt{min-width:11ex;padding:.4em;margin:0;font-family:monospace;text-align:right;line-height:1.231em}
1352 1352 div.inner_cell{display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;width:100%;display:flex;flex-direction:column;align-items:stretch;-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;flex:1}
1353 1353 div.prompt:empty{padding-top:0;padding-bottom:0}
1354 1354 div.input{page-break-inside:avoid;display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch}
1355 1355 div.input_area{border:1px solid #cfcfcf;border-radius:4px;background:#f7f7f7}
1356 1356 div.input_prompt{color:#000080;border-top:1px solid transparent}
1357 1357 .CodeMirror{line-height:1.231em;height:auto;background:none;}
1358 1358 .CodeMirror-scroll{overflow-y:hidden;overflow-x:auto}
1359 1359 @-moz-document {.CodeMirror-scroll{overflow-x:hidden}}.CodeMirror-lines{padding:.4em}
1360 1360 .CodeMirror-linenumber{padding:0 8px 0 4px}
1361 1361 .CodeMirror-gutters{border-bottom-left-radius:4px;border-top-left-radius:4px}
1362 1362 .CodeMirror pre{padding:0;border:0;border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}
1363 1363 pre code{display:block;padding:.5em}
1364 1364 .highlight-base,pre code,pre .subst,pre .tag .title,pre .lisp .title,pre .clojure .built_in,pre .nginx .title{color:#000}
1365 1365 .highlight-string,pre .string,pre .constant,pre .parent,pre .tag .value,pre .rules .value,pre .rules .value .number,pre .preprocessor,pre .ruby .symbol,pre .ruby .symbol .string,pre .aggregate,pre .template_tag,pre .django .variable,pre .smalltalk .class,pre .addition,pre .flow,pre .stream,pre .bash .variable,pre .apache .tag,pre .apache .cbracket,pre .tex .command,pre .tex .special,pre .erlang_repl .function_or_atom,pre .markdown .header{color:#ba2121}
1366 1366 .highlight-comment,pre .comment,pre .annotation,pre .template_comment,pre .diff .header,pre .chunk,pre .markdown .blockquote{color:#408080;font-style:italic}
1367 1367 .highlight-number,pre .number,pre .date,pre .regexp,pre .literal,pre .smalltalk .symbol,pre .smalltalk .char,pre .go .constant,pre .change,pre .markdown .bullet,pre .markdown .link_url{color:#080}
1368 1368 pre .label,pre .javadoc,pre .ruby .string,pre .decorator,pre .filter .argument,pre .localvars,pre .array,pre .attr_selector,pre .important,pre .pseudo,pre .pi,pre .doctype,pre .deletion,pre .envvar,pre .shebang,pre .apache .sqbracket,pre .nginx .built_in,pre .tex .formula,pre .erlang_repl .reserved,pre .prompt,pre .markdown .link_label,pre .vhdl .attribute,pre .clojure .attribute,pre .coffeescript .property{color:#88f}
1369 1369 .highlight-keyword,pre .keyword,pre .id,pre .phpdoc,pre .aggregate,pre .css .tag,pre .javadoctag,pre .phpdoc,pre .yardoctag,pre .smalltalk .class,pre .winutils,pre .bash .variable,pre .apache .tag,pre .go .typename,pre .tex .command,pre .markdown .strong,pre .request,pre .status{color:#008000;font-weight:bold}
1370 1370 .highlight-builtin,pre .built_in{color:#008000}
1371 1371 pre .markdown .emphasis{font-style:italic}
1372 1372 pre .nginx .built_in{font-weight:normal}
1373 1373 pre .coffeescript .javascript,pre .javascript .xml,pre .tex .formula,pre .xml .javascript,pre .xml .vbscript,pre .xml .css,pre .xml .cdata{opacity:.5}
1374 1374 .cm-s-ipython span.cm-variable{color:#000}
1375 1375 .cm-s-ipython span.cm-keyword{color:#008000;font-weight:bold}
1376 1376 .cm-s-ipython span.cm-number{color:#080}
1377 1377 .cm-s-ipython span.cm-comment{color:#408080;font-style:italic}
1378 1378 .cm-s-ipython span.cm-string{color:#ba2121}
1379 1379 .cm-s-ipython span.cm-builtin{color:#008000}
1380 1380 .cm-s-ipython span.cm-error{color:#f00}
1381 1381 .cm-s-ipython span.cm-operator{color:#a2f;font-weight:bold}
1382 1382 .cm-s-ipython span.cm-meta{color:#a2f}
1383 1383 .cm-s-ipython span.cm-tab{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);background-position:right;background-repeat:no-repeat}
1384 1384 div.output_wrapper{position:relative;display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;width:100%;display:flex;flex-direction:column;align-items:stretch}
1385 1385 div.output_scroll{height:24em;width:100%;overflow:auto;border-radius:4px;-webkit-box-shadow:inset 0 2px 8px rgba(0,0,0,0.8);-moz-box-shadow:inset 0 2px 8px rgba(0,0,0,0.8);box-shadow:inset 0 2px 8px rgba(0,0,0,0.8)}
1386 1386 div.output_collapsed{margin:0;padding:0;display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;width:100%;display:flex;flex-direction:column;align-items:stretch}
1387 1387 div.out_prompt_overlay{height:100%;padding:0 .4em;position:absolute;border-radius:4px}
1388 1388 div.out_prompt_overlay:hover{-webkit-box-shadow:inset 0 0 1px #000;-moz-box-shadow:inset 0 0 1px #000;box-shadow:inset 0 0 1px #000;background:rgba(240,240,240,0.5)}
1389 1389 div.output_prompt{color:#8b0000}
1390 1390 div.output_area{padding:0;page-break-inside:avoid;display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch}div.output_area .MathJax_Display{text-align:left !important}
1391 1391 div.output_area .rendered_html table{margin-left:0;margin-right:0}
1392 1392 div.output_area .rendered_html img{margin-left:0;margin-right:0}
1393 1393 .output{display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;width:100%;display:flex;flex-direction:column;align-items:stretch}
1394 1394 div.output_area pre{font-family:monospace;margin:0;padding:0;border:0;font-size:100%;vertical-align:baseline;color:#000;background-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;line-height:inherit}
1395 1395 div.output_subarea{padding:.4em .4em 0 .4em;-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;flex:1}
1396 1396 div.output_text{text-align:left;color:#000;font-family:monospace;line-height:1.231em}
1397 1397 div.output_stderr{background:#fdd;}
1398 1398 div.output_latex{text-align:left}
1399 1399 div.output_javascript:empty{padding:0}
1400 1400 .js-error{color:#8b0000}
1401 1401 div.raw_input{padding-top:0;padding-bottom:0;height:1em;line-height:1em;font-family:monospace}
1402 1402 span.input_prompt{font-family:inherit}
1403 1403 input.raw_input{font-family:inherit;font-size:inherit;color:inherit;width:auto;margin:-2px 0 0 1px;padding-left:1px;padding-top:2px;height:1em}
1404 1404 p.p-space{margin-bottom:10px}
1405 1405 .rendered_html{color:#000;}.rendered_html em{font-style:italic}
1406 1406 .rendered_html strong{font-weight:bold}
1407 1407 .rendered_html u{text-decoration:underline}
1408 1408 .rendered_html :link{text-decoration:underline}
1409 1409 .rendered_html :visited{text-decoration:underline}
1410 1410 .rendered_html h1{font-size:185.7%;margin:1.08em 0 0 0;font-weight:bold;line-height:1}
1411 1411 .rendered_html h2{font-size:157.1%;margin:1.27em 0 0 0;font-weight:bold;line-height:1}
1412 1412 .rendered_html h3{font-size:128.6%;margin:1.55em 0 0 0;font-weight:bold;line-height:1}
1413 1413 .rendered_html h4{font-size:100%;margin:2em 0 0 0;font-weight:bold;line-height:1}
1414 1414 .rendered_html h5{font-size:100%;margin:2em 0 0 0;font-weight:bold;line-height:1;font-style:italic}
1415 1415 .rendered_html h6{font-size:100%;margin:2em 0 0 0;font-weight:bold;line-height:1;font-style:italic}
1416 1416 .rendered_html h1:first-child{margin-top:.538em}
1417 1417 .rendered_html h2:first-child{margin-top:.636em}
1418 1418 .rendered_html h3:first-child{margin-top:.777em}
1419 1419 .rendered_html h4:first-child{margin-top:1em}
1420 1420 .rendered_html h5:first-child{margin-top:1em}
1421 1421 .rendered_html h6:first-child{margin-top:1em}
1422 1422 .rendered_html ul{list-style:disc;margin:0 2em}
1423 1423 .rendered_html ul ul{list-style:square;margin:0 2em}
1424 1424 .rendered_html ul ul ul{list-style:circle;margin:0 2em}
1425 1425 .rendered_html ol{list-style:decimal;margin:0 2em}
1426 1426 .rendered_html ol ol{list-style:upper-alpha;margin:0 2em}
1427 1427 .rendered_html ol ol ol{list-style:lower-alpha;margin:0 2em}
1428 1428 .rendered_html ol ol ol ol{list-style:lower-roman;margin:0 2em}
1429 1429 .rendered_html ol ol ol ol ol{list-style:decimal;margin:0 2em}
1430 1430 .rendered_html *+ul{margin-top:1em}
1431 1431 .rendered_html *+ol{margin-top:1em}
1432 1432 .rendered_html hr{color:#000;background-color:#000}
1433 1433 .rendered_html pre{margin:1em 2em}
1434 1434 .rendered_html pre,.rendered_html code{border:0;background-color:#fff;color:#000;font-size:100%;padding:0}
1435 1435 .rendered_html blockquote{margin:1em 2em}
1436 1436 .rendered_html table{margin-left:auto;margin-right:auto;border:1px solid #000;border-collapse:collapse}
1437 1437 .rendered_html tr,.rendered_html th,.rendered_html td{border:1px solid #000;border-collapse:collapse;margin:1em 2em}
1438 1438 .rendered_html td,.rendered_html th{text-align:left;vertical-align:middle;padding:4px}
1439 1439 .rendered_html th{font-weight:bold}
1440 1440 .rendered_html *+table{margin-top:1em}
1441 1441 .rendered_html p{text-align:justify}
1442 1442 .rendered_html *+p{margin-top:1em}
1443 1443 .rendered_html img{display:block;margin-left:auto;margin-right:auto}
1444 1444 .rendered_html *+img{margin-top:1em}
1445 1445 div.text_cell{padding:5px 5px 5px 0;display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch}
1446 1446 div.text_cell_input{color:#000;border:1px solid #cfcfcf;border-radius:4px;background:#f7f7f7}
1447 1447 div.text_cell_render{outline:none;resize:none;width:inherit;border-style:none;padding:.5em .5em .5em .4em;color:#000}
1448 1448 a.anchor-link:link{text-decoration:none;padding:0 20px;visibility:hidden}
1449 1449 h1:hover .anchor-link,h2:hover .anchor-link,h3:hover .anchor-link,h4:hover .anchor-link,h5:hover .anchor-link,h6:hover .anchor-link{visibility:visible}
1450 1450 div.cell.text_cell.rendered{padding:0}
1451 1451 .widget-area{page-break-inside:avoid;display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch}.widget-area .widget-subarea{padding:.44em .4em .4em 1px;margin-left:6px;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;width:100%;display:flex;flex-direction:column;align-items:stretch;-webkit-box-flex:2;-moz-box-flex:2;box-flex:2;flex:2}
1452 1452 .widget-hlabel{min-width:10ex;padding-right:8px;padding-top:3px;text-align:right;vertical-align:text-top}
1453 1453 .widget-vlabel{padding-bottom:5px;text-align:center;vertical-align:text-bottom}
1454 1454 .widget-hreadout{padding-left:8px;padding-top:3px;text-align:left;vertical-align:text-top}
1455 1455 .widget-vreadout{padding-top:5px;text-align:center;vertical-align:text-top}
1456 1456 .slide-track{border:1px solid #ccc;background:#fff;border-radius:4px;}
1457 1457 .widget-hslider{padding-left:8px;padding-right:5px;overflow:visible;width:348px;height:5px;max-height:5px;margin-top:11px;border:1px solid #ccc;background:#fff;border-radius:4px;display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch}.widget-hslider .ui-slider{border:0 !important;background:none !important;display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;flex:1}.widget-hslider .ui-slider .ui-slider-handle{width:14px !important;height:28px !important;margin-top:-8px !important}
1458 1458 .widget-vslider{padding-bottom:8px;overflow:visible;width:5px;max-width:5px;height:250px;margin-left:12px;border:1px solid #ccc;background:#fff;border-radius:4px;display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;width:100%;display:flex;flex-direction:column;align-items:stretch}.widget-vslider .ui-slider{border:0 !important;background:none !important;margin-left:-4px;margin-top:5px;display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;width:100%;display:flex;flex-direction:column;align-items:stretch;-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;flex:1}.widget-vslider .ui-slider .ui-slider-handle{width:28px !important;height:14px !important;margin-left:-9px}
1459 1459 .widget-text{width:350px;margin-bottom:0}
1460 1460 .widget-listbox{width:364px;margin-bottom:0}
1461 1461 .widget-numeric-text{width:150px}
1462 1462 .widget-progress{width:363px}.widget-progress .bar{-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none}
1463 1463 .widget-combo-btn{min-width:138px;}
1464 1464 .widget-box{margin:5px;-webkit-box-pack:start;-moz-box-pack:start;box-pack:start;justify-content:flex-start;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}
1465 1465 .widget-hbox{margin:5px;-webkit-box-pack:start;-moz-box-pack:start;box-pack:start;justify-content:flex-start;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch}
1466 1466 .widget-hbox-single{margin:5px;-webkit-box-pack:start;-moz-box-pack:start;box-pack:start;justify-content:flex-start;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;height:30px}
1467 1467 .widget-vbox{margin:5px;-webkit-box-pack:start;-moz-box-pack:start;box-pack:start;justify-content:flex-start;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;width:100%;display:flex;flex-direction:column;align-items:stretch}
1468 1468 .widget-vbox-single{margin:5px;-webkit-box-pack:start;-moz-box-pack:start;box-pack:start;justify-content:flex-start;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;display:-webkit-box;-webkit-box-orient:vertical;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:vertical;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;width:100%;display:flex;flex-direction:column;align-items:stretch;width:30px}
1469 1469 .widget-modal{overflow:hidden;position:absolute !important;top:0;left:0;margin-left:0 !important}
1470 1470 .widget-modal-body{max-height:none !important}
1471 1471 .widget-container{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}
1472 1472 .docked-widget-modal{overflow:hidden;position:relative !important;top:0 !important;left:0 !important;margin-left:0 !important}
1473 1473 body{background-color:#fff}
1474 1474 body.notebook_app{overflow:hidden}
1475 1475 span#notebook_name{height:1em;line-height:1em;padding:3px;border:none;font-size:146.5%}
1476 1476 div#notebook_panel{margin:0 0 0 0;padding:0;-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}
1477 1477 div#notebook{overflow-y:scroll;overflow-x:auto;width:100%;padding:1em 0 1em 0;margin:0;border-top:1px solid #ababab;outline:none;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}
1478 1478 div.ui-widget-content{border:1px solid #ababab;outline:none}
1479 1479 pre.dialog{background-color:#f7f7f7;border:1px solid #ddd;border-radius:4px;padding:.4em;padding-left:2em}
1480 1480 p.dialog{padding:.2em}
1481 1481 pre,code,kbd,samp{white-space:pre-wrap}
1482 1482 #fonttest{font-family:monospace}
1483 1483 p{margin-bottom:0}
1484 1484 .end_space{height:200px}
1485 1485 .celltoolbar{border:thin solid #cfcfcf;border-bottom:none;background:#eee;border-radius:3px 3px 0 0;width:100%;-webkit-box-pack:end;height:22px;display:-webkit-box;-webkit-box-orient:horizontal;-webkit-box-align:stretch;display:-moz-box;-moz-box-orient:horizontal;-moz-box-align:stretch;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;-webkit-box-direction:reverse;-moz-box-direction:reverse;box-direction:reverse;flex-direction:column-reverse}
1486 1486 .ctb_hideshow{display:none;vertical-align:bottom;padding-right:2px}
1487 1487 .celltoolbar>div{padding-top:0}
1488 1488 .ctb_global_show .ctb_show.ctb_hideshow{display:block}
1489 1489 .ctb_global_show .ctb_show+.input_area,.ctb_global_show .ctb_show+div.text_cell_input{border-top-right-radius:0;border-top-left-radius:0}
1490 1490 .celltoolbar .button_container select{margin:10px;margin-top:1px;margin-bottom:0;padding:0;font-size:87%;width:auto;display:inline-block;height:18px;line-height:18px;vertical-align:top}
1491 1491 .celltoolbar label{display:inline-block;height:15px;line-height:15px;vertical-align:top}
1492 1492 .celltoolbar label span{font-size:85%}
1493 1493 .celltoolbar input[type=checkbox]{margin:0;margin-left:4px;margin-right:4px}
1494 1494 .celltoolbar .ui-button{border:none;vertical-align:top;height:20px;min-width:30px}
1495 1495 .completions{position:absolute;z-index:10;overflow:hidden;border:1px solid #ababab;border-radius:4px;-webkit-box-shadow:0 6px 10px -1px #adadad;-moz-box-shadow:0 6px 10px -1px #adadad;box-shadow:0 6px 10px -1px #adadad}
1496 1496 .completions select{background:#fff;outline:none;border:none;padding:0;margin:0;overflow:auto;font-family:monospace;font-size:110%;color:#000}
1497 1497 .completions select option.context{color:#0064cd}
1498 1498 #menubar .navbar-inner{min-height:28px;border-top:1px;border-radius:0 0 4px 4px}
1499 1499 #menubar .navbar{margin-bottom:8px}
1500 1500 .nav-wrapper{border-bottom:1px solid #d4d4d4}
1501 1501 #menubar li.dropdown{line-height:12px}
1502 1502 i.menu-icon{padding-top:4px}
1503 1503 ul#help_menu li a{overflow:hidden;padding-right:2.2em}ul#help_menu li a i{margin-right:-1.2em}
1504 1504 #notification_area{z-index:10}
1505 .indicator_area{color:#777;padding:4px 3px;margin:0;width:11px;z-index:10;text-align:center}
1506 #kernel_indicator{margin-right:-16px}
1505 1507 .notification_widget{color:#777;padding:1px 12px;margin:2px 4px;z-index:10;border:1px solid #ccc;border-radius:4px;background:rgba(240,240,240,0.5)}.notification_widget.span{padding-right:2px}
1506 #indicator_area{color:#777;padding:2px 2px;margin:2px -9px 2px 4px;z-index:10}
1507 1508 div#pager_splitter{height:8px}
1508 1509 #pager-container{position:relative;padding:15px 0}
1509 1510 div#pager{overflow:auto;display:none}div#pager pre{font-size:13px;line-height:1.231em;color:#000;background-color:#f7f7f7;padding:.4em}
1510 1511 .shortcut_key{display:inline-block;width:15ex;text-align:right;font-family:monospace}
1511 1512 .shortcut_descr{display:inline-block}
1512 1513 span#save_widget{padding:0 5px;margin-top:12px}
1513 1514 span#checkpoint_status,span#autosave_status{font-size:small}
1514 1515 @media (max-width:767px){span#save_widget{font-size:small} span#checkpoint_status,span#autosave_status{font-size:x-small}}@media (max-width:767px){span#checkpoint_status,span#autosave_status{display:none}}@media (min-width:768px) and (max-width:979px){span#checkpoint_status{display:none} span#autosave_status{font-size:x-small}}.toolbar{padding:0 10px;margin-top:-5px}.toolbar select,.toolbar label{width:auto;height:26px;vertical-align:middle;margin-right:2px;margin-bottom:0;display:inline;font-size:92%;margin-left:.3em;margin-right:.3em;padding:0;padding-top:3px}
1515 1516 .toolbar .btn{padding:2px 8px}
1516 1517 .toolbar .btn-group{margin-top:0}
1517 1518 .toolbar-inner{border:none !important;-webkit-box-shadow:none !important;-moz-box-shadow:none !important;box-shadow:none !important}
1518 1519 #maintoolbar{margin-bottom:0}
1519 1520 @-moz-keyframes fadeOut{from{opacity:1} to{opacity:0}}@-webkit-keyframes fadeOut{from{opacity:1} to{opacity:0}}@-moz-keyframes fadeIn{from{opacity:0} to{opacity:1}}@-webkit-keyframes fadeIn{from{opacity:0} to{opacity:1}}.bigtooltip{overflow:auto;height:200px;-webkit-transition-property:height;-webkit-transition-duration:500ms;-moz-transition-property:height;-moz-transition-duration:500ms;transition-property:height;transition-duration:500ms}
1520 1521 .smalltooltip{-webkit-transition-property:height;-webkit-transition-duration:500ms;-moz-transition-property:height;-moz-transition-duration:500ms;transition-property:height;transition-duration:500ms;text-overflow:ellipsis;overflow:hidden;height:80px}
1521 1522 .tooltipbuttons{position:absolute;padding-right:15px;top:0;right:0}
1522 1523 .tooltiptext{padding-right:30px}
1523 1524 .ipython_tooltip{max-width:700px;-webkit-animation:fadeOut 400ms;-moz-animation:fadeOut 400ms;animation:fadeOut 400ms;-webkit-animation:fadeIn 400ms;-moz-animation:fadeIn 400ms;animation:fadeIn 400ms;vertical-align:middle;background-color:#f7f7f7;overflow:visible;border:#ababab 1px solid;outline:none;padding:3px;margin:0;padding-left:7px;font-family:monospace;min-height:50px;-moz-box-shadow:0 6px 10px -1px #adadad;-webkit-box-shadow:0 6px 10px -1px #adadad;box-shadow:0 6px 10px -1px #adadad;border-radius:4px;position:absolute;z-index:2}.ipython_tooltip a{float:right}
1524 1525 .ipython_tooltip .tooltiptext pre{border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;font-size:100%;background-color:#f7f7f7}
1525 1526 .pretooltiparrow{left:0;margin:0;top:-16px;width:40px;height:16px;overflow:hidden;position:absolute}
1526 1527 .pretooltiparrow:before{background-color:#f7f7f7;border:1px #ababab solid;z-index:11;content:"";position:absolute;left:15px;top:10px;width:25px;height:25px;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg)}
@@ -1,349 +1,352 b''
1 1 {% extends "page.html" %}
2 2
3 3 {% block stylesheet %}
4 4
5 5 {% if mathjax_url %}
6 6 <script type="text/javascript" src="{{mathjax_url}}?config=TeX-AMS_HTML-full&delayStartupUntil=configured" charset="utf-8"></script>
7 7 {% endif %}
8 8 <script type="text/javascript">
9 9 // MathJax disabled, set as null to distingish from *missing* MathJax,
10 10 // where it will be undefined, and should prompt a dialog later.
11 11 window.mathjax_url = "{{mathjax_url}}";
12 12 </script>
13 13
14 14 <link rel="stylesheet" href="{{ static_url("components/codemirror/lib/codemirror.css") }}">
15 15
16 16 {{super()}}
17 17
18 18 <link rel="stylesheet" href="{{ static_url("notebook/css/override.css") }}" type="text/css" />
19 19
20 20 {% endblock %}
21 21
22 22 {% block params %}
23 23
24 24 data-project="{{project}}"
25 25 data-base-project-url="{{base_project_url}}"
26 26 data-base-kernel-url="{{base_kernel_url}}"
27 27 data-notebook-name="{{notebook_name}}"
28 28 data-notebook-path="{{notebook_path}}"
29 29 class="notebook_app"
30 30
31 31 {% endblock %}
32 32
33 33
34 34 {% block header %}
35 35
36 36 <span id="save_widget" class="nav pull-left">
37 37 <span id="notebook_name"></span>
38 38 <span id="checkpoint_status"></span>
39 39 <span id="autosave_status"></span>
40 40 </span>
41 41
42 42 {% endblock %}
43 43
44 44
45 45 {% block site %}
46 46
47 47 <div id="menubar-container" class="container">
48 48 <div id="menubar">
49 49 <div class="navbar">
50 50 <div class="navbar-inner">
51 51 <div class="container">
52 52 <ul id="menus" class="nav">
53 53 <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">File</a>
54 54 <ul id="file_menu" class="dropdown-menu">
55 55 <li id="new_notebook"
56 56 title="Make a new notebook (Opens a new window)">
57 57 <a href="#">New</a></li>
58 58 <li id="open_notebook"
59 59 title="Opens a new window with the Dashboard view">
60 60 <a href="#">Open...</a></li>
61 61 <!-- <hr/> -->
62 62 <li class="divider"></li>
63 63 <li id="copy_notebook"
64 64 title="Open a copy of this notebook's contents and start a new kernel">
65 65 <a href="#">Make a Copy...</a></li>
66 66 <li id="rename_notebook"><a href="#">Rename...</a></li>
67 67 <li id="save_checkpoint"><a href="#">Save and Checkpoint</a></li>
68 68 <!-- <hr/> -->
69 69 <li class="divider"></li>
70 70 <li id="restore_checkpoint" class="dropdown-submenu"><a href="#">Revert to Checkpoint</a>
71 71 <ul class="dropdown-menu">
72 72 <li><a href="#"></a></li>
73 73 <li><a href="#"></a></li>
74 74 <li><a href="#"></a></li>
75 75 <li><a href="#"></a></li>
76 76 <li><a href="#"></a></li>
77 77 </ul>
78 78 </li>
79 79 <li class="divider"></li>
80 80 <li id="print_preview"><a href="#">Print Preview</a></li>
81 81 <li class="dropdown-submenu"><a href="#">Download as</a>
82 82 <ul class="dropdown-menu">
83 83 <li id="download_ipynb"><a href="#">IPython Notebook (.ipynb)</a></li>
84 84 <li id="download_py"><a href="#">Python (.py)</a></li>
85 85 <li id="download_html"><a href="#">HTML (.html)</a></li>
86 86 <li id="download_rst"><a href="#">reST (.rst)</a></li>
87 87 </ul>
88 88 </li>
89 89 <li class="divider"></li>
90 90
91 91 <li id="kill_and_exit"
92 92 title="Shutdown this notebook's kernel, and close this window">
93 93 <a href="#" >Close and halt</a></li>
94 94 </ul>
95 95 </li>
96 96 <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">Edit</a>
97 97 <ul id="edit_menu" class="dropdown-menu">
98 98 <li id="cut_cell"><a href="#">Cut Cell</a></li>
99 99 <li id="copy_cell"><a href="#">Copy Cell</a></li>
100 100 <li id="paste_cell_above" class="disabled"><a href="#">Paste Cell Above</a></li>
101 101 <li id="paste_cell_below" class="disabled"><a href="#">Paste Cell Below</a></li>
102 102 <li id="paste_cell_replace" class="disabled"><a href="#">Paste Cell &amp; Replace</a></li>
103 103 <li id="delete_cell"><a href="#">Delete Cell</a></li>
104 104 <li id="undelete_cell" class="disabled"><a href="#">Undo Delete Cell</a></li>
105 105 <li class="divider"></li>
106 106 <li id="split_cell"><a href="#">Split Cell</a></li>
107 107 <li id="merge_cell_above"><a href="#">Merge Cell Above</a></li>
108 108 <li id="merge_cell_below"><a href="#">Merge Cell Below</a></li>
109 109 <li class="divider"></li>
110 110 <li id="move_cell_up"><a href="#">Move Cell Up</a></li>
111 111 <li id="move_cell_down"><a href="#">Move Cell Down</a></li>
112 112 <li class="divider"></li>
113 113 <li id="edit_nb_metadata"><a href="#">Edit Notebook Metadata</a></li>
114 114 </ul>
115 115 </li>
116 116 <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">View</a>
117 117 <ul id="view_menu" class="dropdown-menu">
118 118 <li id="toggle_header"
119 119 title="Show/Hide the IPython Notebook logo and notebook title (above menu bar)">
120 120 <a href="#">Toggle Header</a></li>
121 121 <li id="toggle_toolbar"
122 122 title="Show/Hide the action icons (below menu bar)">
123 123 <a href="#">Toggle Toolbar</a></li>
124 124 </ul>
125 125 </li>
126 126 <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">Insert</a>
127 127 <ul id="insert_menu" class="dropdown-menu">
128 128 <li id="insert_cell_above"
129 129 title="Insert an empty Code cell above the currently active cell">
130 130 <a href="#">Insert Cell Above</a></li>
131 131 <li id="insert_cell_below"
132 132 title="Insert an empty Code cell below the currently active cell">
133 133 <a href="#">Insert Cell Below</a></li>
134 134 </ul>
135 135 </li>
136 136 <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">Cell</a>
137 137 <ul id="cell_menu" class="dropdown-menu">
138 138 <li id="run_cell" title="Run this cell, and move cursor to the next one">
139 139 <a href="#">Run</a></li>
140 140 <li id="run_cell_select_below" title="Run this cell, select below">
141 141 <a href="#">Run and Select Below</a></li>
142 142 <li id="run_cell_insert_below" title="Run this cell, insert below">
143 143 <a href="#">Run and Insert Below</a></li>
144 144 <li id="run_all_cells" title="Run all cells in the notebook">
145 145 <a href="#">Run All</a></li>
146 146 <li id="run_all_cells_above" title="Run all cells above (but not including) this cell">
147 147 <a href="#">Run All Above</a></li>
148 148 <li id="run_all_cells_below" title="Run this cell and all cells below it">
149 149 <a href="#">Run All Below</a></li>
150 150 <li class="divider"></li>
151 151 <li id="change_cell_type" class="dropdown-submenu"
152 152 title="All cells in the notebook have a cell type. By default, new cells are created as 'Code' cells">
153 153 <a href="#">Cell Type</a>
154 154 <ul class="dropdown-menu">
155 155 <li id="to_code"
156 156 title="Contents will be sent to the kernel for execution, and output will display in the footer of cell">
157 157 <a href="#">Code</a></li>
158 158 <li id="to_markdown"
159 159 title="Contents will be rendered as HTML and serve as explanatory text">
160 160 <a href="#">Markdown</a></li>
161 161 <li id="to_raw"
162 162 title="Contents will pass through nbconvert unmodified">
163 163 <a href="#">Raw NBConvert</a></li>
164 164 <li id="to_heading1"><a href="#">Heading 1</a></li>
165 165 <li id="to_heading2"><a href="#">Heading 2</a></li>
166 166 <li id="to_heading3"><a href="#">Heading 3</a></li>
167 167 <li id="to_heading4"><a href="#">Heading 4</a></li>
168 168 <li id="to_heading5"><a href="#">Heading 5</a></li>
169 169 <li id="to_heading6"><a href="#">Heading 6</a></li>
170 170 </ul>
171 171 </li>
172 172 <li class="divider"></li>
173 173 <li id="current_outputs" class="dropdown-submenu"><a href="#">Current Output</a>
174 174 <ul class="dropdown-menu">
175 175 <li id="toggle_current_output"
176 176 title="Hide/Show the output of the current cell">
177 177 <a href="#">Toggle</a>
178 178 </li>
179 179 <li id="toggle_current_output_scroll"
180 180 title="Scroll the output of the current cell">
181 181 <a href="#">Toggle Scrolling</a>
182 182 </li>
183 183 <li id="clear_current_output"
184 184 title="Clear the output of the current cell">
185 185 <a href="#">Clear</a>
186 186 </li>
187 187 </ul>
188 188 </li>
189 189 <li id="all_outputs" class="dropdown-submenu"><a href="#">All Output</a>
190 190 <ul class="dropdown-menu">
191 191 <li id="toggle_all_output"
192 192 title="Hide/Show the output of all cells">
193 193 <a href="#">Toggle</a>
194 194 </li>
195 195 <li id="toggle_all_output_scroll"
196 196 title="Scroll the output of all cells">
197 197 <a href="#">Toggle Scrolling</a>
198 198 </li>
199 199 <li id="clear_all_output"
200 200 title="Clear the output of all cells">
201 201 <a href="#">Clear</a>
202 202 </li>
203 203 </ul>
204 204 </li>
205 205 </ul>
206 206 </li>
207 207 <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">Kernel</a>
208 208 <ul id="kernel_menu" class="dropdown-menu">
209 209 <li id="int_kernel"
210 210 title="Send KeyboardInterrupt (CTRL-C) to the Kernel">
211 211 <a href="#">Interrupt</a></li>
212 212 <li id="restart_kernel"
213 213 title="Restart the Kernel">
214 214 <a href="#">Restart</a></li>
215 215 </ul>
216 216 </li>
217 217 <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">Help</a>
218 218 <ul id="help_menu" class="dropdown-menu">
219 219 <li id="keyboard_shortcuts" title="Opens a tooltip with all keyboard shortcuts"><a href="#">Keyboard Shortcuts</a></li>
220 220 <li class="divider"></li>
221 221 {% set
222 222 sections = (
223 223 (
224 224 ("http://ipython.org/documentation.html","IPython Help",True),
225 225 ("http://nbviewer.ipython.org/github/ipython/ipython/tree/master/examples/notebooks/", "Notebook Examples", True),
226 226 ("http://ipython.org/ipython-doc/stable/interactive/notebook.html","Notebook Help",True),
227 227 ("http://ipython.org/ipython-doc/dev/interactive/cm_keyboard.html","Editor Shortcuts",True),
228 228 ),(
229 229 ("http://docs.python.org","Python",True),
230 230 ("http://docs.scipy.org/doc/numpy/reference/","NumPy",True),
231 231 ("http://docs.scipy.org/doc/scipy/reference/","SciPy",True),
232 232 ("http://matplotlib.org/contents.html","Matplotlib",True),
233 233 ("http://docs.sympy.org/dev/index.html","SymPy",True),
234 234 ("http://pandas.pydata.org/pandas-docs/stable/","pandas", True)
235 235 )
236 236 )
237 237 %}
238 238
239 239 {% for helplinks in sections %}
240 240 {% for link in helplinks %}
241 241 <li><a href="{{link[0]}}" {{'target="_blank" title="Opens in a new window"' if link[2]}}>
242 242 {{'<i class="icon-external-link menu-icon pull-right"></i>' if link[2]}}
243 243 {{link[1]}}
244 244 </a></li>
245 245 {% endfor %}
246 246 {% if not loop.last %}
247 247 <li class="divider"></li>
248 248 {% endif %}
249 249 {% endfor %}
250 250 </li>
251 251 </ul>
252 252 </li>
253 253 </ul>
254 <div class='pull-right' id="indicator_area">
255 <div id="kernel_indicator"></div>
254 <div id="kernel_indicator" class="indicator_area pull-right">
255 <i id="kernel_indicator_icon"></i>
256 </div>
257 <div id="modal_indicator" class="indicator_area pull-right">
258 <i id="modal_indicator_icon"></i>
256 259 </div>
257 260 <div id="notification_area"></div>
258 261 </div>
259 262 </div>
260 263 </div>
261 264 </div>
262 265 <div id="maintoolbar" class="navbar">
263 266 <div class="toolbar-inner navbar-inner navbar-nobg">
264 267 <div id="maintoolbar-container" class="container"></div>
265 268 </div>
266 269 </div>
267 270 </div>
268 271
269 272 <div id="ipython-main-app">
270 273
271 274 <div id="notebook_panel">
272 275 <div id="notebook"></div>
273 276 <div id="pager_splitter"></div>
274 277 <div id="pager">
275 278 <div id='pager_button_area'>
276 279 </div>
277 280 <div id="pager-container" class="container"></div>
278 281 </div>
279 282 </div>
280 283
281 284 </div>
282 285 <div id='tooltip' class='ipython_tooltip' style='display:none'></div>
283 286
284 287
285 288 {% endblock %}
286 289
287 290
288 291 {% block script %}
289 292
290 293 {{super()}}
291 294
292 295 <script src="{{ static_url("components/codemirror/lib/codemirror.js") }}" charset="utf-8"></script>
293 296 <script type="text/javascript">
294 297 CodeMirror.modeURL = "{{ static_url("components/codemirror/mode/%N/%N.js") }}";
295 298 </script>
296 299 <script src="{{ static_url("components/codemirror/addon/mode/loadmode.js") }}" charset="utf-8"></script>
297 300 <script src="{{ static_url("components/codemirror/addon/mode/multiplex.js") }}" charset="utf-8"></script>
298 301 <script src="{{ static_url("components/codemirror/addon/mode/overlay.js") }}" charset="utf-8"></script>
299 302 <script src="{{ static_url("components/codemirror/addon/edit/matchbrackets.js") }}" charset="utf-8"></script>
300 303 <script src="{{ static_url("components/codemirror/addon/comment/comment.js") }}" charset="utf-8"></script>
301 304 <script src="{{ static_url("components/codemirror/mode/htmlmixed/htmlmixed.js") }}" charset="utf-8"></script>
302 305 <script src="{{ static_url("components/codemirror/mode/xml/xml.js") }}" charset="utf-8"></script>
303 306 <script src="{{ static_url("components/codemirror/mode/javascript/javascript.js") }}" charset="utf-8"></script>
304 307 <script src="{{ static_url("components/codemirror/mode/css/css.js") }}" charset="utf-8"></script>
305 308 <script src="{{ static_url("components/codemirror/mode/rst/rst.js") }}" charset="utf-8"></script>
306 309 <script src="{{ static_url("components/codemirror/mode/markdown/markdown.js") }}" charset="utf-8"></script>
307 310 <script src="{{ static_url("components/codemirror/mode/gfm/gfm.js") }}" charset="utf-8"></script>
308 311 <script src="{{ static_url("components/codemirror/mode/python/python.js") }}" charset="utf-8"></script>
309 312 <script src="{{ static_url("notebook/js/codemirror-ipython.js") }}" charset="utf-8"></script>
310 313
311 314 <script src="{{ static_url("components/highlight.js/build/highlight.pack.js") }}" charset="utf-8"></script>
312 315
313 316 <script src="{{ static_url("dateformat/date.format.js") }}" charset="utf-8"></script>
314 317
315 318 <script src="{{ static_url("base/js/events.js") }}" type="text/javascript" charset="utf-8"></script>
316 319 <script src="{{ static_url("base/js/utils.js") }}" type="text/javascript" charset="utf-8"></script>
317 320 <script src="{{ static_url("base/js/dialog.js") }}" type="text/javascript" charset="utf-8"></script>
318 321 <script src="{{ static_url("services/kernels/js/kernel.js") }}" type="text/javascript" charset="utf-8"></script>
319 322 <script src="{{ static_url("services/kernels/js/comm.js") }}" type="text/javascript" charset="utf-8"></script>
320 323 <script src="{{ static_url("services/sessions/js/session.js") }}" type="text/javascript" charset="utf-8"></script>
321 324 <script src="{{ static_url("notebook/js/layoutmanager.js") }}" type="text/javascript" charset="utf-8"></script>
322 325 <script src="{{ static_url("notebook/js/mathjaxutils.js") }}" type="text/javascript" charset="utf-8"></script>
323 326 <script src="{{ static_url("notebook/js/outputarea.js") }}" type="text/javascript" charset="utf-8"></script>
324 327 <script src="{{ static_url("notebook/js/cell.js") }}" type="text/javascript" charset="utf-8"></script>
325 328 <script src="{{ static_url("notebook/js/celltoolbar.js") }}" type="text/javascript" charset="utf-8"></script>
326 329 <script src="{{ static_url("notebook/js/codecell.js") }}" type="text/javascript" charset="utf-8"></script>
327 330 <script src="{{ static_url("notebook/js/completer.js") }}" type="text/javascript" charset="utf-8"></script>
328 331 <script src="{{ static_url("notebook/js/textcell.js") }}" type="text/javascript" charset="utf-8"></script>
329 332 <script src="{{ static_url("notebook/js/savewidget.js") }}" type="text/javascript" charset="utf-8"></script>
330 333 <script src="{{ static_url("notebook/js/quickhelp.js") }}" type="text/javascript" charset="utf-8"></script>
331 334 <script src="{{ static_url("notebook/js/pager.js") }}" type="text/javascript" charset="utf-8"></script>
332 335 <script src="{{ static_url("notebook/js/menubar.js") }}" type="text/javascript" charset="utf-8"></script>
333 336 <script src="{{ static_url("notebook/js/toolbar.js") }}" type="text/javascript" charset="utf-8"></script>
334 337 <script src="{{ static_url("notebook/js/maintoolbar.js") }}" type="text/javascript" charset="utf-8"></script>
335 338 <script src="{{ static_url("notebook/js/notebook.js") }}" type="text/javascript" charset="utf-8"></script>
336 339 <script src="{{ static_url("notebook/js/keyboardmanager.js") }}" type="text/javascript" charset="utf-8"></script>
337 340 <script src="{{ static_url("notebook/js/notificationwidget.js") }}" type="text/javascript" charset="utf-8"></script>
338 341 <script src="{{ static_url("notebook/js/notificationarea.js") }}" type="text/javascript" charset="utf-8"></script>
339 342 <script src="{{ static_url("notebook/js/tooltip.js") }}" type="text/javascript" charset="utf-8"></script>
340 343 <script src="{{ static_url("notebook/js/config.js") }}" type="text/javascript" charset="utf-8"></script>
341 344 <script src="{{ static_url("notebook/js/main.js") }}" type="text/javascript" charset="utf-8"></script>
342 345
343 346 <script src="{{ static_url("notebook/js/contexthint.js") }}" charset="utf-8"></script>
344 347
345 348 <script src="{{ static_url("notebook/js/celltoolbarpresets/default.js") }}" type="text/javascript" charset="utf-8"></script>
346 349 <script src="{{ static_url("notebook/js/celltoolbarpresets/rawcell.js") }}" type="text/javascript" charset="utf-8"></script>
347 350 <script src="{{ static_url("notebook/js/celltoolbarpresets/slideshow.js") }}" type="text/javascript" charset="utf-8"></script>
348 351
349 352 {% endblock %}
General Comments 0
You need to be logged in to leave comments. Login now